【always】Verilog & VHDLスレ【process】
788 :
名無しさん@3周年 :
03/04/10 13:27 ID:XEEV8xiz
>>788 消える運命なのは仕方が無いとして、VHDLのイベントの概念を
取り入れて貰えないかとはよく思う。
色々と書いていると、どうやってもVerilogでは書きづらい記述が
出てきてしまうからね。
両方使ってるとどうしても互いの悪いところが見えてしまうからなー。
790 :
名無しさん@3周年 :03/04/11 01:08 ID:NG2Ndlhi
HDLでBCD1桁同士の加算器をなるべく小さく作りたいのですが、 普通に input [3:0] a, b; wire [3:0] sum = a + b; wire cout = (a + b) > 10; とかくと4bit binaryの加算器が合成されます。 それでも機能的に問題ないのですが、 もっと加算部分の回路を小さくする方法って有るのでしょうか? 単純に考えると - 4bit binary 加算 : 入力が16*16通りの組み合わせ。 - BCD1桁の加算 : 入力が10*10通りの組み合わせ。 でBCDの方が小さくなっても良いんじゃないかと思ったのですが...
791 :
名無しさん@3周年 :03/04/11 01:27 ID:jyHAztiQ
頭の中で仕様書はできていて、波形も手書 きで完璧に書いているんですが、何も指示 されないので他人が理解できるような仕様 書を書いていません。それでもいいですか。
>>790 >普通に
とか書いているがデバッグしてないな。
sumの値が間違っている
ゲートで書いたらCLA使ってくれない。
>>790 よく見たらcoutの値も間違っている。 a+b=10のとき。
もっとよく考えろ!
796 :
790 :03/04/11 03:45 ID:txURKFp5
>>792 すんません。デバッグしてないです。
自分の欲しい回路が、実は
『1桁BCD加算器ではなく入力にa<10, b<10の制約がある場合の4bit binary加算器』
だったので、間違えました。
carryのとこは、マジバグです
直しました。
input [3:0] a, b;// operand
output [3:0] out;// BCD sum
output cout;// carry
wire [4:0] sum = a + b;
assign cout = (sum >= 10);
assign out = cout ? (sum - 10) : sum;
>>792 HDLスレなのに...
ゲートで考えてもいいのですが、知りたいのは
上記のVerilog記述中の sum=a+b を構成する回路で、
入力a,bのとり得る値が0〜9の範囲であるとき、
半加算器1ヶ+全加算器x3ヶ で構成するよりも回路を小さくできるか?
です。
797 :
名無しさん@3周年 :03/04/11 05:40 ID:NwsbmW4a
今月のトランジスタ技術ではVerilogですね。 今まではVHDLの方の記事が多かったと思うのですが、どでしょ?
つっか、どうせ両方やるハメになるんなら、 Verilogから覚えたほうが早いか?、VHDLから覚えたほうが早いか? なんとなくVerilogの方が、Cに似てない事もないから、とっつきやすい?
>>799 Cから入るなら、Verilogかな。
どっちも使ったが一長一短。個人的にはVHDLが好きだが
将来はないだろうね。
研究室の院生がpalasm以外使わせてくれません
>>801 そんな研究室は潰れた方が良いよ。
只でももっとましなのがある。(w
>>802 確かに一生に一度くらい、方眼紙を使って
16V8用のRS-FFのJEDECヒューズ・マップを手作業で書いてみる
くらいのことをやっても無駄にはならない様な気もする。
>>804 いや、だから「一生に一度くらいは」ということで。
プロのエンジニアとして、こんなことやる暇はないだろうが、
学生のうちに1回やっておくのは無駄とは思えない。
(確かに2回目からは無駄なんだが)
きっとエンジニアだって、理屈わからずにVerilog書いている輩は絶対いるぞ
PLDのアーキテクチャを理解するって勉強は必要かもしれんが だからと言ってヒューズマップを作らなければならないという事には ならないよ。 てか現状作ってもそれで終わりだろ? そんなカビが生えたような システムを持ってる所の方が少ないよ。 やっても良いかも知れないが、使えないなら教科書を読んでるのと 大きく変わらない。 それより、CPLDの評価回路を作ってそれにどんどん回路をインプリ、 デバッグして開発とデバッグの全体像を掴む方が重要。 その過程で、どんな回路が生成されているのか、それで良いのか、 設計者の意図する回路を生成させるために必要な要素は、と言った 事を学べるんだから。 ヒューズマップ書いてる時間で随分色んな事が出来るんだからさ。
う〜ん、難しいなぁ Cコンパイラを使わずアセンブラ(もしくは機械語)でプログラム書け っていうのに近いか? 確かにやっておいたほうがいいかもしれない経験ではあるが。 暇で暇で、しかも回りにPCすらない、例えば法事で田舎の家に1晩泊まった時なんかには やってもいいかな、っていう程度。
トランジスタ技術を買った高専生なんですが Cは中学生の頃から使っていました。 Cを知っているならVerilogを学習するほうがいいでしょうか? トランジスタ技術もVerilogを解説している様なので。
>>808 言語その物の文法が殆ど同じだからね。
今後、Cベースに移行していくと考えるとVerilogが良いでしょう。
ただどうせ勉強するならどちらもやっておくと良い、VHDLには、
VHDLの良さもあるから。
>>807 Cプログラマでってあっても
アセンブラ書くことは必要だよ。
多分、意図してるのはハンドアセンブラだな。
>>809 VerilogさんもどうせCライクにするんだったら、なんで
if文を if () { } ってな文法にしてくれなかったんかなぁ。
覚えにくくてしょうがない。
モジュールインスタンスをループで複数個増やすことはできんのか with Verilog
>>811 俺もそう思う。
覚えにくいというよりbegin〜endなんかより{}がずっと短くて、見やすいよ。
ついでに`define `ifも#define #ifにしてくれればSystemCなんて要らないってか?
ケラケラ
Verilogも嫌いではないのだけど、信号を変化で捉えると言う概念が無いのが どうも使いにくいな。 ラッチとワイヤーってのはどうも慣れないわ。
815 :
名無しさん@3周年 :03/04/15 00:58 ID:TwiRnd6i
816 :
名無しさん@3周年 :03/04/16 22:30 ID:oaowVRuf
>>796 全てをコントロールしようと思うな.
詳細な実装はツールに任せるのが論理合成との正しい付き合い方だ.
どうしても,と言うのであればDesignWareのコンポーネントを構造記述しろ.
以上.
817 :
名無しさん@3周年 :03/04/17 00:57 ID:olcZCCQw
使いやすいほうを選べばいい? VHDL Verilog
818 :
790 :03/04/17 01:44 ID:jSv6MQf9
>>816 ご助言ありがとうございます。
仰られるような事には普段気をつけているつもりです。
『a[3:0]<10, b[3:0]<10の入力値制約の元でsum[3:0]=a+bを計算する』
という処理を、HDLで + operator を使って合成すると
DesignWareのbinary adderが合成されました。
今回、携わっている回路で上記処理が多かった(面積的にクリティカルだった)
ので、回路的に本当にBESTなのかと疑問に思ったのです。
ゲートの組み合わせによる構造記述も考えたのですが半加算器x1+全加算器x3の他に
思いつかず、またcase文での総当りを試しても(もちろん)小さくなりませんでした。
819 :
山崎渉 :03/04/17 08:43 ID:lBh9QBwB
(^^)
modelsim の examples/mixedHDLのcompare.doを実行すると いったん立ち上がった直後アボートしちゃうんです。コマンド入力すると vsim -wlf gold.wlf wotk.top で死ぬことがわかって、エラーメッセージとして # Attempting stack trace sig 11 # Signal caught: signo [11] # vsim_stacktrace.vstf written # Current time Thu Apr 17 14:04:52 2003 # ModelSim Stack Trace # Program = vsim # Id = "5.7c" # Version = "2003.03" # Date = "Mar 13 2003" # Platform = win32 # 0 0x00576082: '<unknown (@0x576082)> + 0xcfd12' # 1 0x00576242: '<unknown (@0x576242)> + 0xcfed2' # Corrupt Call Stack ** Fatal: (SIGSEGV) Bad pointer access. Closing vsim. ** Fatal: vsim is exiting with code 211. (Exit codes are defined in the ModelSim messages appendix of the ModelSim User's Manual.) が出ます。同じ症状になった人います?他のPCでは出ないので、ハードウェア のエラーなんでしょうかね? memtestでもエラーは出ないんですけどね?
821 :
学生さん :03/04/19 00:23 ID:foe2bAun
このスレのみなさんはご自身のキャリアパスをどのように考えておられますか?
822 :
名無しさん@3周年 :03/04/19 14:24 ID:NqQARzRp
>>818 >『a[3:0]<10, b[3:0]<10の入力値制約の元でsum[3:0]=a+bを計算する』
>という処理を、HDLで + operator を使って合成すると
>DesignWareのbinary adderが合成されました。
「入力値制約」ってどうやって指示したの?
とっても疑問
823 :
720 :03/04/19 22:13 ID:+rNS31AP
>>822 誤解を与えてすいません。
目的の処理内容には入力値に制約(というか条件?)があるのですが、
HDLや合成制約として、有効な指示を与えることはできませんでした。
一応 sum[3:0] = (a < 10 && b < 10) ? (a + b) : 4'bxxxx;
も試してみましたが、効果ありません。
case文で10*10条件書き下し、full_caseディレクティブを与えれば、
a>=10||b>=10にたいしdon't careという制約が表現できますが
binary加算器を使うよりも小さくはなりませんでした。
824 :
山崎渉 :03/04/20 03:54 ID:62iGJiyF
∧_∧ ( ^^ )< ぬるぽ(^^)
825 :
名無しさん@3周年 :03/04/20 14:53 ID:ihr8XSu0
条件付き代入文は単にマルチプレクサを推定する記述に過ぎないよ. だから加算器の構成に(a<10 && b<10)という条件は全く関与しない. 単に入力を選択する論理に接続されるだけ. Design Compilerがやることは単に+という算術演算子をDesignWareの ライブラリ中のDW01_addに置き換えるだけ.DW01_addの実装はいくつか 準備されてるが,それはタイミングやエリアの制約条件で最適なものが 選択できるようになっているだけ. 823が望んでいるような”カスタムな”加算器を合成することは初めから 想定されてないよ.どうしても a<10 && b<10 という制約条件下で最適化 された加算器が欲しいなら,論理ゲートレベルで書き下すしかないな.
826 :
名無しさん@3周年 :03/04/20 22:37 ID:OdrcH+qX
あげっと VHDLの記述方法で教えてください。 a <= ( others => '0' ) & b( WIDTH-1 downto 0 ); Aは固定長レジスタ BはAよりも短い可変長レジスタです。 BをAに代入する時に、上位を「0」で埋めたいのですが、 上記方法ではエラーがでてしまいます。 どのように記述されば良いのでしょうか?
>>826 >821は「このスレのみなさん」に対する質問だから、スレ違いではないYo
質問内容はともかく...
先日Verilogというものの存在を知ったばかりのソフト屋です。 ちょっとお聞きしたいのですが module test3v(a1,a2,a3,b1,b2,b3,q1,q2,q3); input a1,a2,a3; input b1,b2,b3; output q1,q2,q3; function fand3; input i1,i2,i3; fand3 = i1 & i2 & i3; endfunction assign q1 = fand3(a1,a2,a3); assign q2 = fand3(b1,b2,b1); assign q3 = q1 & q2; endmodule という記述(Cみたいにfnad3のinputの中身をローカル変数っぽく記述する) っていうのは正しい記法でしょうか?
>829 正しいというのが良くワカランが、文法としては合っているのでは?
831 :
829 :03/04/23 09:59 ID:Yxm6OwG1
>>830 あれでいいんですか?
チラっと見た本では、こういう場合
function fand3;
input a1,a2,a3;
fand3 = a1 & a2 & a3;
endfunction
と、assignするポートと同じポートを書いている例ばかりだったので。
Verilogのfunctionって所謂Cでいうところの、 引数−仮引数の関係では無いんじゃないかと
思ったもんで。
>>831 ちょっと違うが(functionを呼んでもソフトウェアみたいにメモリの節約にはならない。
どっちかというとマクロっぽい)
まぁ、そういう事ですね。
833 :
名無しさん@3周年 :03/04/24 00:59 ID:eUMl++KE
>>831 いや、引数−仮引数の関係(値渡し)で正しくて、
Cのマクロよりは関数に近いでしょ。
のようにfunction内でaに代入しても、aの値は変わらない。
moduleのaが、functionローカルなスコープのaに隠されるから。
834 :
833 :03/04/24 01:00 ID:eUMl++KE
|module test3(a, b, q); | input [2:0] a; | input [2:0] b; | output [2:0] q; | function fand3; |input [2:0] a; |begin | fand3 = a[0] & a[1] & a[2]; | a = 3'bxxx; |end | endfunction | assign q[0] = fand3(a); | assign q[1] = fand3(b); | assign q[2] = q[0] & q[1]; |endmodule |module top; | reg [2:0] a, b; | wire [2:0] q; | test3 U0(.q(q), .a(a), .b(b)); | initial begin | $monitor("%t: %b %b -> %b", $time, a, b, q); | a = 0; b = 0; | #10;b = 7; | #10;a = 7; | #10;a = 0; | #10; | $finish; | end |endmodule
835 :
833 :03/04/24 01:05 ID:eUMl++KE
スコープ的には - Verilogのfunction引数 <-> Cの関数の引数 - Verilogのmodule内変数 <-> Cで関数外宣言したstatic変数 のように対比すると考えやすいと思います。 Cのマクロに相当するものは、Verilog200xで導入されたけど、イラネ。
>>833 その「マクロみたい」っていうのは「function使ったってレジスタの節約にはならない」
と言いたかったんじゃないすか?
837 :
833 :03/04/25 01:04 ID:O0Ar8rQX
確かに論理合成を考えると、
Verilogをパースして内部表現(GTECHとか)に落とした時点で
functionの構造は破壊されてるから、inline展開されるCのマクロにイメージが近いのかも
# 合成ツールは複数のfunction呼び出しを演算器共有のヒントに使わないのか?
わたしの場合は、シミュレーター実行状態をイメージしていて、
functionはスタックに積んで引数を渡すのに近い(最適化していない場合)
と思ったので、Cの関数に近いと言ってしまいますた
喩え話は誤解を招きやすいっす(
>>835 も変な喩えだ)
838 :
動画直リン :03/04/25 01:13 ID:4J1jbtGy
functionはマクロっぽいけど。それより大事なのは組み合わせ回路ができるってこと。 alwaysでもできるけど、よりはっきりしてる罠
この辺りを見てると、VHDLに戻りたくなるなぁ。 ま好みの問題だけど。
組み合わせ回路をfunctionで書くか、alwaysで書くか、の問題は Verilogに仕掛けられた最大の罠だねー。 どっち派の派閥の言い分も一理あって、一度抗争が起こると果てし無く発展する。 一見論理的な論争になるが、結局は趣味の問題、適材適所としないと収束しない。
842 :
名無しさん@3周年 :03/04/26 15:11 ID:1iyVLQow
843 :
bloom :03/04/26 15:13 ID:BvlXMLH5
844 :
名無しさん@3周年 :03/04/26 21:24 ID:UvmM4LR2
>>841 趣味の問題といっても、Verilogを作った人間の意図としては
functionが組み合わせ、alwaysがラッチだろ。
結果は同じだからと、意図を無視する人間は、大概何らかしらの欠陥があるな。
VHDLのパラメタライズ化で悩んでいます。 例えばN進カウンタのNをパラメータで渡すとします。 Nが100だった場合に必要なカウンタのビット幅は7ビットですが、 この7を求めるにはどうしたら良いのでしょうか?
846 :
名無しさん@3周年 :03/04/27 00:56 ID:0e9DocbI
>>841 >組み合わせ回路をfunctionで書くか、alwaysで書くか、の問題は
>Verilogに仕掛けられた最大の罠だねー。
通常はalways。 こっちのほうがlint関連とかのトラブルが少ない。
あと、デバッグが楽。
同じ組み合わせ論理を引数替えて複数使うときはfunction。
>>845 そこまで便利ではないよ。
そもそも変数のビット幅とカウンタのビット幅の関係をよく考えてみれば解るはず。
どこをどう取り出すかを先に決めないでどう回路が出来るのだ?
>>この7を求めるにはどうしたら良いのでしょうか? それに対して >>そこまで便利ではないよ。 >>そもそも変数のビット幅とカウンタのビット幅の関係をよく考えてみれば解るはず。 >>どこをどう取り出すかを先に決めないでどう回路が出来るのだ? 何言ってるんだか? 論理としては、 [log2(100)]、[]ガウス記号 Cでやるなら (int)(log2(100)) VHDLではコンパイルオプションでは無理だな。 Verilogなら`defineでlogをテーラ展開すればなんとかなるかもしれない。
すまん大訂正・・・カッコ悪 [log2(100)]+1 (int)(log2(100))+1 だった。
850 :
845 :03/04/27 15:55 ID:MHTUXFA6
>>848 アドバイス有り難うございます。
>VHDLではコンパイルオプションでは無理だな。
やっぱり無理ですが・・・
最終手段はCかなんかで変換プログラムを作るしか無いのですね。
>>最終手段はCかなんかで変換プログラムを作るしか無いのですね。 これならperlあたりが便利だよ。 でもなぁ・・・そんなことすると統合環境上からだと使いにくいんだよな。 無理やりできても結局開発効率が低下すればHDLなんて使う意味がないんだよね。 Cと同じコンパイルオプションを採用してくれてたら何も問題なかったんだけどね。
852 :
名無しさん@3周年 :03/04/30 01:19 ID:nIVrPJAa
>>851 いや、最終手段というのは泥臭くてもなんでもインプレメンテーションすりゃあ良いと
開き直れば、手はいくらでもあるわけでして。
例えば100という数だって2進パラレルで入力されるのが普通だろうから、その並びをMSB側から見ていって
初めて1が表れた所より下のビット数が必要なわけだわな。
仕様が決まって10本入力用意してあるとして、MSBが1なら10bit、MSBが0でその下が1なら9bit必要と、
>>827 aが31Bit以下なら(32Bitは不可)
a<=conv_std_logic_vector(conv_integer(b(WIDTH-1 downto 0)),***);
>32Bitは不可 「32Bitは危険」に訂正
>>855 書き込みを見てると、下らない事書いてる方が
恥ずかしくなる内容だと・・・。
なんて言うか、本当に頭の悪さが滲み出てますね。
>>850 変換プログラム作るぐらいなら、
log2の関数を自分で作るのはだめなの?
えと、XilinXのWeb Pack ISE (5.2.01i)を使っているのですが module xx(a,b,y1,y2); input a,b; output y1,y2; assign y1 = a & a ; assign y2 = a & b ; endmodule ってな、ちょっと意味無し論理を合成すると、 出力された回路図を View RTL Schematic で見ると なんか変 ( y2の入力がbだけになっていて、y1が見当たらない) なんですが。 assign y1 = a & !a ; ってやると、ちゃんと(?) y1が常0になる回路図が出ます。 どでしょか?
859 :
858 :03/05/02 11:32 ID:1wOhIMuV
ちなみにImplementDesignは通るし、 ModelSimもちゃんと動作してますので、 ビュアだけの問題かもしれませんが
>>858 最適化されただけではないかと。
入力と同じ出力は不要と判断したのかな。
合成ツールのマニュアルを読んでみることを薦めちゃうわ。
861 :
858 :03/05/02 12:38 ID:DfBFrWiG
>>850 そもそも range 付きの integer で記述するのはだめなのか?
とか聞いてみたり。
>>861 あんた、「最適化」の意味わかってるか?
865 :
名無しさん@3周年 :03/05/07 07:43 ID:VM00j003
スタンダードセルとHDLの相性はどうなんでしょうか? いまいちスタンダードセルというのがよくわからないです。
>>865 分かっていることを書いてみてよ。
でないとアドバイスのしようがないし。
867 :
名無しさん@3周年 :03/05/07 20:54 ID:VM00j003
>>866 今まで経験してきたのは、FPGAだけです。
FPGAだと、RTLでゲートレベルまで突っ込んだ設計はほとんどしないけど、
ASICだと、HDLでも、かなり細かいところまで手を加えると聞いてます。
で、スタンダードセルの場合は、どんな感じなのかなと思って。。。
そもそもスタセルとHDLの相性云々て話を持ち出す事自体 どうかしてると思うな。 DCが生成した回路がまずいと思ったら、少し掘り下げて生成 される回路を意識して書くとかって位ではないか? その辺りは実際経験してみたらいい。
869 :
名無しさん@3周年 :03/05/07 21:46 ID:gSdqqiRL
>867 RTLでゲートレベルまで突っ込んだ設計ってのは矛盾してないかい?その時点でRTLでは無 くなって単なるネットリストになっていると思うが。 合成結果を気にするのなら、俺の経験の範囲内だとVerilogだけで申し訳ないが、FPGAで 動作する記述が書けてればASICで動く記述は書ける。ASICのみの経験で合成結果を考え ないような設計をしていた連中が、FPGAではまってたのを見たことがある。 ASICはFPGAより制約が無くて楽だと思っていいと思う。
>>869 ま、ネットリストもHDLで書けるからな。
>>869 > ASICはFPGAより制約が無くて楽だと思っていいと思う。
周波数が低いならそれでいいが、
数十MHz以上あって、プロセス0.25以下とかだと、それなりに大変だぞ。
RTLのファンクションを実現するための仕掛けをいろいろとやらないといけない。
FPGAの方が楽だと痛感する。
#失敗しても安いし。
>>869 >ASICはFPGAより制約が無くて楽だと思っていいと思う。
そりゃちょっと言いすぎかもね。まあいろいろある。
873 :
名無しさん@3周年 :03/05/08 00:22 ID:mRfmT30d
>871 >数十MHz以上あって、プロセス0.25以下とかだと、それなりに大変だぞ。 逆だろ?100MHz程度、0.13までやったことあるが、全然楽だったぞ。 ま、製品や規模にもよるとは思うけど、経験積んでてどこに注意すればよいか判って れば、ルーチンワークみたいな感覚だけど。 あくまでHDLの話なんで、コンパイルしてから後のレイアウト等はおいといて。
874 :
bloom :03/05/08 00:25 ID:HviAazGX
>>873 > 逆だろ?100MHz程度、0.13までやったことあるが、全然楽だったぞ。
> ま、製品や規模にもよるとは思うけど、経験積んでてどこに注意すればよいか判って
> れば、ルーチンワークみたいな感覚だけど。
経験でホールドエラーなどを予測できるとは、たいしたもんだよ。
是非とも君に仕事を頼みたい。
876 :
名無しさん@3周年 :03/05/08 12:19 ID:QrZzXqmG
>>873 は集中定数分布定数使ったレイアウトを100MHzのバスで組んだことあるんかね・・・?
100MHzとなりゃ、空を飛んでるFMとおなじくらいだから、レイアウト悪いと隣接配線にも乗りまくるわけで・・・
877 :
bloom :03/05/08 12:25 ID:HviAazGX
878 :
名無しさん@3周年 :03/05/08 13:23 ID:QrZzXqmG
そういや、PENは基本的にパイプラインを引き継いでるからアドレスラインとデータラインはPIN一個飛びずつ動作してるの利用して 2PINか3PINおきにVCCまたはGNDもうけてコプレーナライン形成し、さらにその上に多層基盤でマイクロストリップライン形成して 最大限にスピードを出せるようLSIも基盤も設計されてるが、単なるLSI屋じゃそこまで考えず整然とバカ正直にA線D線が順番に並んでるからスピードだそうとすれば 基盤屋にしてみれば相互緩衝がどうしても苦悩の種で、LSI屋にしてみればチップだけ作ってあと知らんて感じだからイタイ罠。
>>878 200M程度ならそこまでしなくても動くぞ。
経験済みっす。
880 :
名無しさん@3周年 :03/05/08 16:20 ID:QrZzXqmG
>>879 200Mてチップの?バスだとチップは800Mにもなるからそうだろうな。
バスクロックは50Mか・・・。それでもかなりFMに近い罠。
基盤屋さんが動くように基盤を作ってくれたのだよ。
ところで100M、200Mって、どんな製品?
881 :
名無しさん@3周年 :03/05/08 16:22 ID:97IS2YuU
882 :
bloom :03/05/08 16:25 ID:HviAazGX
883 :
名無しさん@3周年 :03/05/08 16:46 ID:QrZzXqmG
そういやよくあるよな。チップ屋がバカみたいに綺麗に順番に並べたバスラインのPINで 並んだまんまのバス配線じゃ動作しないから、PIN一本おきに、ベア作って中間層に持っていて、表層と中間層の間はべたアースのマイクロストリップかましてある手が混んだ基盤が・・・ バカチップ屋のためにそんな基盤設計させられたら基盤コストもかかってしょうがない罠。チップ屋は動く実装基盤見てただ喜ぶだけだろう。配線の実装が実物のようになっている理由なんて考えもしないし、そんな能力ないしな。 で、悪い方に転がって、ジッタがすごくて動きませんとなったときに、どうすればいいか分からなくて慌てふためくんだよな・・・
>>880 いや、DDRSDRAMのI/Fだから、データバスに限って言えば400Mだったが。
で、基板上で色々と工夫をした物のコプレーナ云々は意識せずに出来たぞ。
当然、Simで伝送路の特性や波形も見たりするわけね。
必要ない部分に無駄な技術を投入することもないって事だよ。
あとさ、基板屋に任せっきりで動いたって思ってる君は甘過ぎだな。
基板を基盤と書く奴も信用出来んがな。(w
886 :
名無しさん@3周年 :03/05/08 17:04 ID:QrZzXqmG
↑バスクロック400Mでそれでよく動いたなぁ。 少なくともライン2,3本に一本はGND入れないと動きそうにないんだが。 当然2層目はベタアースでしょ?
>>886 まーな、特性インピーダンス50[Ω]保証の基板だし。
IBISやらPSpiceを使ったSimをするから実際には余り
凝った事をしなくてもきちんとマージンまで見越した
設計が出来る所まで来てるんだよ。
もっともっと高周波になると難しいだろうね。
ただ、RAMBUSでも実績があるがあれもそれ程難しい
物で無かったと記憶してるよ。
888 :
素人 :03/05/08 18:33 ID:dCnHSWTA
質問なんですけど、32×8のDDR400の石って、どうしてスポットで65ドルもしているのですか?高すぎませんか? 作るのが難しいのですか?ごめんなさい。おばかな質問です。
889 :
名無しさん@3周年 :03/05/08 19:52 ID:obrjHHKh
>>887 けっきょくあなたが偉いのではなく、設計ノウハウを持っている基板屋さんが
とっても偉いだけでないの?
どうもこの書かれている内容は、俺の知っている某PCB屋の技術者のような
気がするのだが・・・。
>>888 そんなもんだろう、、、、、うちも、、、
>>889 基板屋さんが偉いんですか。(w
少なくとも君がよく解ってない奴だって事だけは理解出来た。
インピーダンス管理と、Simを一緒にしてるんか?
>>890 いや、悪いがかなり良く知っている。ここで書いてもあなたの文章同様信憑性はないが。
>まーな、特性インピーダンス50[Ω]保証の基板だし。
こんなのは回路設計者は指定するだけで、公差+/-5%などに収めることができる基板屋さんが偉いと
書いたんだ。
まぁ890さん。
よくがんばったよ。これからも日本の技術の更新のために
次のレポートをよろしく
スレにそった事を書くけれど FSM(ステートマシン)オプティマイザって必要あるかい? 俺はVerilog-HDLでコードを書いた瞬間に、合成後のステートマシンの形式は 決まってしまうと思うんだけれど 究極のステートマシンはシフトレジスタです、と聞いたことがあるんだけれどね。 最近の高位合成ツールの説明にFSMオプティマイズがだいたい乗っているから もし、これが効果的ならこれらサポートのツールを次期導入に進言しようかと。
てか君の書いてる事って全然たいしたこと無いんだけど。 アホもそこまで行ったら立派だわ。
的外れな事を大いばりで書くのが最近の流行のようで。(w
896 :
名無しさん@3周年 :03/05/09 00:23 ID:8xbjMy4O
うちの会社の別の部署なんだが、過去にASICもCPLDも殆ど経験無いのに いきなりFPGAを製品に使うことにして 開発は何を考えたか、Cだと。 VerilogもVHDLも分かる人いないからだと。 で、思ったような結果が得られなくて苦しんでるらしい。まあ、マネージャがヴァカなんだな。 高い金額のツールを買えば便利だろうぐらいに思ってCで書いてるようだ、救いがたい。
897 :
bloom :03/05/09 00:25 ID:qyXUH2Id
>>894 それ、自分の書きこみを落ち着いてみてみなよ.
あなたのことじゃないかな?
俺以外の人もそれで反応しているんじゃないかい?
バスクロック200Mhzの設計、本当によくがんばったね。
ごくろうさま
>>896 EDA営業の糞な嘘宣伝にはめられただけだよね。またちょいちょい聞くんだ、そういう話(w
>>896 結局、現状は、CからHDLを吐き出すための中間ツールだからね。
それ以前に、ハードの事をある程度解っていないと、HDLを使う
事はかなり無理があるのを解ってなかったのだろう。
それを導入するなら、シンプリファイかアンプリファイを買った方が
ずっと役に立ったのではないかな。
901 :
892 :03/05/09 00:57 ID:cWZVblFE
横レスすみません それってフィジカルシンセサイザ(Amplifyのほう)の導入のほうがよかったということですか。 さきのFSMもそうですが、フィジカルシンセサイザは非常に有効なツールだとは 聞いているので、ご存知であれば教えてください
>>901 いや、漏れもそこまでは知らないですよ。
ただ、使ってる人にはよく勧められます。
五百万がなかなか出せないから導入はすぐってわけに
いかないのが悩み所ですね。
あと、シーケンサに関しては、ワンホットを自前で書いてれば
それ以上高速な回路にはなりようがないのではないかなって
思いますよ。
903 :
892 :03/05/09 01:48 ID:cWZVblFE
横レスで回答ありがとうございます うちも営業が来てフィジカルは薦められているので興味はあるんです 価格はまさにそのとおりであり、たしかに手出しづらいです(汗 シーケンサのほうもそうですよね、、、 ステートマシン系ってオプティマイズさせるようなコードを書くほうが 難しいような気もしてくるのですが、これは設計になれているからカモ
904 :
名無しさん@3周年 :03/05/09 02:54 ID:yVpHUubK
>871 >数十MHz以上あって、プロセス0.25以下とかだと、それなりに大変だぞ。 そのクラスだと、ここらに出たような手設計オプティマイズはしない(しても プロセス&EDAのおかげでするだけの効果/労力が無いし、無理な手設計の結果バグを 誘発するようなことになっては恐いし、そんなオプティマイズする暇あるなら ほかの検証でもやってな、ってことになる) から、かえって楽かも。 マネージメントにかかる労力は桁違いだが。
ホントのところ200MHzバスクロックのASICって簡単なのかそうじゃないのかどっちなのよ。 最新のFPGAだと何MHzぐらいで動くと世間の相場なのよ?例えば16ビットx16ビットの乗算回路では? もっと具体例としていいのがあればそれを使ってくれてもいいけど。
FSMのオプティマイズって、面積・スピード方向だと殆ど効果ないと思う。 コンパイラが静的な方法でオプティマイズした結果と、人間がHDLで適当にアサインした結果で 大幅に変わった例を知らない。 けど、消費電力にシビアなシステムでは、オプティマイズにsimのプロファイル結果を反映できると 結構変わりそうな気がする。
907 :
堕天使 :03/05/10 21:25 ID:oARjlPaY
908 :
名無しさん@3周年 :03/05/10 22:22 ID:qkI9dU/Y
909 :
動画直リン :03/05/10 22:25 ID:NuXhkOeV
910 :
名無しさん@3周年 :03/05/11 18:02 ID:6MQrf2Zh
>最新のFPGAだと何MHzぐらいで動くと世間の相場なのよ?例えば16ビットx16ビットの乗算回路では? よく知らん。ヒマだったらFPGA会社からツールやライブラリを ダウンロードして試してちょうだい。 でもこうゆうのってあんまり意味ないよ。 たとえ500MHzで動いても、周りがついていけない。 たとえ20MHzでしか動かなくても、CPUコアやDDR使うなら それに合わせてバスは50、66、100、133MHzとかに するだろうから、133MHz7サイクル乗算器とかになるでしょ。
911 :
名無しさん@3周年 :03/05/12 01:18 ID:pgzDguhR
>905 今時、200MHz程度ならRTLから合成できる組み込みCPUもある。 ま、俺は200MHzはまだやったことないからちょっとは悩むと思うが、ASIC内なら そう難しくないと思う。 外に出す場合は最近盛り上がっているように大変だけど、基板屋とちゃんと相談 すれば良いこと。仕事が細分化されてるから、自分のとこだけできれば良いとい うことでは最終的に良いものはできない。 ただ、これはHDLとは関係無い話だけど。 だんだんスレ違いになってるような・・・
>133MHz7サイクル乗算器とかになるでしょ。 なんで7サイクル? どうせなら1サイクルを目指してもいいじゃん。 何もPCのペリフェラルに使うことを前提にすることもないと思うんだけどね。
>>911 相談だけでは基板上で、200Mは難しいぞ。
実際現場に乗り込んでSimの結果をどう反映させるか等の
努力が必要。
この辺りが解ってない奴は自分の無能を基板屋の所為に
したりするんだろうが。
914 :
名無しさん@3周年 :03/05/12 07:25 ID:PfExja+C
>913 そこら辺の細かいニュアンスは察してくれ。一々細かいことまで書く気はしない。 でも、補足してくれてありがd。 ASICのロジックしか経験してない奴って、そこら辺のこと全然知らないことがある から、そんな奴がリーダーになって石作るとえらいことになる。一度、「俺は動か ない石を1年かけて作るのか?」と真剣に悩んだことがあるw
915 :
名無しさん@3周年 :03/05/13 23:09 ID:YDkUdJsD
非常に初歩的な質問で申し訳ありませんが入出力端子inoutを持ったmoduleの テストフィクスチャを書こうとしているのですが、なんと定義したらよいのかわかりません。 regでもないし、wireにしたら文法チェックは通るのですが…。
917 :
名無しさん@3周年 :03/05/14 00:03 ID:8mmAjebp
>>912 910はPCペリフェラルとは言ってないぞ。PCコアだからFPGAの上にPCを乗せる話だね。
それで外部にDDR使うならそことのI/Fは133MHzになると言ってる。
まあ乗算器つきのPCシステムオンチップということになるのだろうけど、500MHzで乗算器
動かしても、PCコアが500MHzで走ってない限り意味無いのかも。500MHzはFPGAではまだきつそうだよね?
もし走るとしたら、PCコアの命令拡張という意味では有意義かと。まあ、DSPに近いかね。
コアがI/Fの倍数クロックで動くCPUなんてあたりまえの世界だよね。
あ、結局912と同じ結論か?すまんね。
918 :
915 :03/05/14 14:56 ID:Ev2pde1q
>>916 すみません。verilogで書いているのですがsignal宣言はVHDLだけのものなんですよね?(自信なし)
>>918 おまいさんのやりたいことがわからん。
質問を的確に書くのも、技術者に必要な素養だぞ。
>>915 wireでとおるのなら、テストフィクスチャはそのwireをドライブすれば良いじゃん。
inout使うのなら普通は渡来ステートバスを表現しているのだろうから、
例えばbusifを使ったら?
このスレさぁ。盛り上がるときは ワッとくるけど、すぐ沈静化しちゃうんだよなぁ。 ネタ振りだけど・・・ ISE5.2i だけど。サービスパックどころかIPアップデータってのが出てるけど・・・ これ大バグバージョンってことなのけ?
922 :
名無しさん@3周年 :03/05/19 12:19 ID:NxBMA/cv
HDLでなくて申し訳ないんですが、2つのアナログ値(電圧)を大小比較して 1bitの出力を出す(コンパレータ?)回路で有名どころがあったら名前とか ご教授いただけないでしょうか・・・。
>>922 つっか、コンパレータだよな。
オペアンプでもOK? LM358とか?
PICマイコンのアナログコンパレータ搭載機でもOKだっ!
>>922 有名どころのコンパレータのデータシートを読めば回路図載ってるよ
CQ出版からでてる規格表しらべてごらん
925 :
名無しさん@3周年 :03/05/19 21:10 ID:NxBMA/cv
>>923-924 ありがとうございます。
CMOSでこのような回路を組むにはと色々さがしたのですが。
とりあえず、お二方から頂いた情報を調べてみます。
FPGAの場合、Vrefを使う事も出来るよ。>コンパレータ
量産品に載せるならそれこそ値段考えてちゃんと設計する必要があるけど。
試作やジグでいいなら
>>923 がいうようにPICでやるのがてっとりばやいんじゃないの?
でだんだんアナログ回路例なんてのを忘れていく・・・
>>927 PICの方がいいか?どう考えてもコンパレータの方がてっとりばやいが。
PICだったらプログラム(というか、設定だけだけど)せにゃならんし。
(後で、やっぱり2ビットパラレルで出したいという変更をせにゃならん
なんて事にならないかぎり)
やっぱりオペアンでしょ。暇ならディスクリートで組んでみるってのはど?
そろそろ新スレたててくれ
931 :
山崎渉 :03/05/28 15:01 ID:/6YB7YdC
∧_∧ ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。 =〔~∪ ̄ ̄〕 = ◎――◎ 山崎渉
932 :
名無しさん@3周年 :03/05/30 20:46 ID:OlxqXjk/
VHDLで書いたのを回路図にできるフリーのソフトってないですか?
933 :
932 :03/05/30 21:58 ID:OlxqXjk/
ごめんなさい Xilinxでできました。 けど、CADで読み込めない…
934 :
名無しさん@3周年 :03/05/31 00:46 ID:qQl6bioW
>933 フリーなの?
936 :
名無しさん@3周年 :03/05/31 02:19 ID:gWanLwnO
937 :
名無しさん@3周年 :03/06/06 21:56 ID:NAaMqylW
signal INPUT : std_logic_vector(3 downto 0); signal TMP : std_logic; begin INPUT <= J & K & CK & R; process ( INPUT ) begin case INPUT is when "0111" => TMP <= '0'; when "1011" => TMP <= '1'; when "1111" => TMP <= not TMP; when "0110" => TMP <= '0'; when "1010" => TMP <= '0'; when "1110" => TMP <= '0'; when "0010" => TMP <= '0'; when others => null; end case; end process; がインプリメントデザインできません。 文法エラーは出ないのですが。 どこを帰ればいいのでしょうか?
>937 VHDLは久しく見てないので、違ったらスマソ。 > when "1111" => TMP <= not TMP; これ、アリなの? processの条件が、 > INPUT <= J & K & CK & R; > process ( INPUT ) begin だと、単なるセレクタイメージなんですが…
939 :
938 :03/06/07 02:56 ID:39z6mARB
というか、もしかして、F/Fを書こうとしている? だったら、そこで、caseを使う事自体が間違い… >937の場合 > どこを帰ればいいのでしょうか? という答えに、「教科書に帰れ」となってしまうかも。 とりあえず、どんな回路を書きたいの?
>937 意図する動作になるかはわからないけど、とりあえず process ( INPUT,TMP ) begin としてみたら。
>>937 さんへ
CK=Clockの事だと思うのですが、FFであればCKのエッジを取り込みタイミングにするような
回路を記述するのではないでしょうか?
>>940 基本的に動作のためのキーだから入力だけで回路を
動かす意図なら、TMPをセンシティビティーリストに
入れる必要は無いと思うが。
なんか知らない間に質が落ちてるな。
>>937 は、もう一度教科書を読み直したほうがいい。
>942[ この行があったので、、 when "1111" => TMP <= not TMP; センシビティリストは合成時無視されるので(デザインコンパイラだけの話なのかな?)、 RTLでの動作と合成後の動作が異ならないよう、クロック同期以外のプロセス文の場合 すべての入力があったほうがいいのでは?
補足。 RTLと合成後で結果が違う例。 process(C)begin A<=C; B<=A end; RTLと合成後で結果が同じ例。 process(A,C)begin A<=C; B<=A end;
946 :
938 :03/06/07 22:13 ID:39z6mARB
>944 言っている事は、正しいが > RTLでの動作と合成後の動作が異ならないよう コレは異なる時点でダメでしょう。 (説明が自分でできるレベルならいいけど) で、>937 セレクタを書きたいのなら、リストにTMPを加えれば良いのではないかと。 どんな回路を作りたいのか、それの動作の「きっかけ」となる信号は何じゃ? というんを意識すれば宜しいのではないかと… #これ学生なら許すけど社会人ならステだな。調べ方が間違っているから(w
>>946 セレクタを書きたいのなら
>when "1111" => TMP <= not TMP;
が全然駄目だよね。組み合わせ回路がループになるんですが。
948 :
938 :03/06/08 00:01 ID:QpYSQEdS
>947 あ、そらそうだ…TMPiとか入力を変えて(ry というように、文法はOKでも合成できないケースは多々あります。 >937 #そら、テストベンチを書くためには合成の制約は関係ないですから。 ですので「どんな回路を書きたいか?」を意識して書く事が大切です。 #合成ツールは四次元ポケットではありません。そうなら嬉しいけど(w
949 :
名無しさん@3周年 :03/06/11 16:41 ID:7yXHKlNP
あの、ちょっとお聞きしたいのですが・・・、 PCのマザーボード等に乗っているCPU,ブリッジLSIなどは、 (フルカスタムLSIというのでしょうか。間違ってたらすいません) HDLで書いてそれを合成して、レイアウトして、Mebesフォーマットに変換してマスク製造するのですか? (大事なSIMを省いてしまいましたがスマソデス)
Verilogでシフトレジスタをすっきり&格好良く記述するにはどうすれば良いでしょうか? いつもは↓なんですが、なんかスッキリこない・・・ ループで書いても記述しても良いのですが、 ひと目みてシフトレジスタだと解らないし。 dbuf[0] <= in; dbuf[1] <= dbuf[0]; dbuf[2]<= dbuf[1]; dbuf[3]<= dbuf[2]; dbuf[4]<= dbuf[3]; dbuf[5]<= dbuf[4]; dbuf[6]<= dbuf[5]; dbuf[7]<= dbuf[6];
951 :
名無しさん@3周年 :03/06/12 20:05 ID:MLPr7DDV
シフトレジスタはこう書くと一番シンプルでは dbuf[0] <= in; dbuf[7:1] <= dbuf[6:0];
>>951 いや、ループで書いても「ひとめで分からない」人だから、却下。
ひとめでわかるように、
dbuf[0] <= in;
dbuf[1] <= dbuf[0];
dbuf[2]<= dbuf[1];
dbuf[3]<= dbuf[2];
dbuf[4]<= dbuf[3];
dbuf[5]<= dbuf[4];
dbuf[6]<= dbuf[5];
dbuf[7]<= dbuf[6];
と、これくらいにしないとだめ。
953 :
938 :03/06/13 00:45 ID:2fx1PNlr
他人のソースとかって探したりしないの > 950 dbuf[7:0] <= {dbuf[6,0],in} とかって、普通に見るような気がするが… #dbuf7,dbuf6とかって名前でreg宣言されるとアレですが。
954 :
名無しさん@3周年 :03/06/13 20:07 ID:ciGk+xL9
Peak VHDLお試し版使ってみたのですが、compileで Simulation has not been enable.Please verify that you have registered your software. とでてできません。ガイドで指定されたように1ファイル50セミコロン以内に抑えて、階層も上位側をテストベンチにしたのですが・・・ ちなみに添付されてるexampleフォルダの中のファイルもコンパイルしても同じように出ます。 本によると、添付されてる例はシミュレーションできるようなことが書いてあったのですが。どうなっちゃてるんでしょう。 おねがいしますゥ(´Д`;;)
>953 ダメですよ。FFを介していれば別ですが、、 FFを介さない下記がどんな回路になるか考えてください。 A <= not A;
956 :
938 :03/06/14 01:37 ID:dfySxD4N
>955 ん? wire A で、宣言していて、これって書けるの? 暗黙でreg [7:0] dbufと思っていたが。 あ、釣られたか(;_;)
957 :
954 :03/06/15 11:54 ID:tMHHtGq9
他のHDL関係のスレで「MEなんか無かったことにしておけ」
というのを見たんですが、も;..、もしかしてMEだと
>>954 のPeak VHDLお試し版は動かなかったりしますか?
あぁ、全然進まない・・・。よろしくです。(´Д`;;)
>>957 お試し版の説明に何か書いていないか?
ちなみにMeは色々ごちゃごちゃシステムにくっつけているせいでリソースがうんこ少ない
959 :
名無しさん@3周年 :
03/06/15 21:09 ID:tMHHtGq9 >>958 当方、メモリ128MBite、OSはMEなのですが、
Peak VHDLのプロジェクトFileと.hdlファイル(RTLとテストベンチ)立ち上げたときの
システムリソース見てみたのですが、
システムリソース 残り 57%
Userリソース 残り 57%
GDIリソース 残り 85%
でした。足りないですか?