【Verilog】記述言語で論理設計 Project5【VHDL】
つ デザインコンパイラ
コンパイラの一種のような気もする。
合成ツールて言うとマヌケに聞こえるし
シンセサイザて言うと別分野の用語に聞こえてしまう。
ロジックシンセサイザ…長い。
>>951はなんと呼ぶのがええと思う?
おいらは違和感ないよ。
だって、HDLで書いた論理を圧縮してさらにそのロジックをデバイスの内部ロジックに置き換えてくれる。
ここまで複雑な変換をしてくれるのをコンパイラーと呼ぶ以外考えられない。
ソフトウェアをやる人には一緒にして欲しくないのかもしれんが、そんなのかんけぇねぇ!
シンセサイザがいいと思う。
「変換」という意味的にはコンパイラでもおかしくないんだろうけど
一緒にして欲しくないとかでなく、違和感はある
合成ツールじゃだめなの?
ついでに言うと、「最適化」ってのも、最適になるわけじゃないから気持ち悪い。
HDLで書かれたソースコードをシミュレータで動かすために
中間コードまたはバイナリコードに変換する処理がコンパイル
RTL形式で書かれたHDLソースコードをネットリストに変換する処理が論理合成
全然違う
組み合わせ回路をalwaysで書くとき、case文にdefaultは必須ですが、
順序回路でcase文を使ったときにdefaultは必要なんでしょうか?
というか、順序回路で、どの値にも当てはまらないときは何も処理したくないので、
defaultを書かなくていいならそれだけでいいのですが。
何も処理しないってことを書いときゃいいじゃん。
別に必須じゃないだろ。
全部の条件が書いてあれば無問題。なければラッチw
defaultでX入れとけ
>>958 何もしたくないときは"何もしない"ということを明示しな。
記述に絶対の自信があって検証もちゃんとできるなら X 入れて ktkr
X入れるのは、シミュレーションで分かりやすくするのと、回路削減へのわずかな期待。
964 :
958:2008/03/06(木) 18:28:23 ID:upXGD61x
レスありがとうございます。
どうやらFF使う順序回路ではdefault書かなくてもいいみたいですね。
今書いてるのは制御部分で、caseに当てはまらない値が不具合だけでなく
普通に存在するので、不定にするのはまずいのです。
verilogで何もしないことを明示するにはどうするんでしょう?
空のbegin endを書いとけばいいんでしょうか。
出力を入力に突っ込めばいいんじゃないの?>何もしないことを明示
;
967 :
958:2008/03/06(木) 21:38:00 ID:upXGD61x
>>965 それが一般的のようですが、一部のコンパイラなどのツールでは使えないことがあるそうです。
>>966 やっぱそれですかね。
968 :
948:2008/03/06(木) 22:59:01 ID:fp2TyyYK
>>951 回答ありがとうごさいます。
確かにassignを除いて、"="を"<="に変更したら期待通りの動作をしました。
ただ原因が分からないのが相変わらず。
6回試行してみたのですが、結果は4/6(○×○○×○: ×読み込み不可)
なんでこんな中途半端に動作が変わるのか。
まだ論理合成もかけてないので、ゲート遅延でタイミングが間に合わない
という事態は起きないはずなのですが。
>>968 “=”と“<=”で、代入がどのタイミングで行われるのか(文法の)違いを調べてみよう
>>968 いいこと教えてあげよう。僕も君と同じくらいの初学者なんだけど、
<=と=の違いは、以下のように理解している。
<= は、次回の予定を表している。a <= a + 1; だとしたら、
次回のaは、今回のaに+1したものにしてね、ということ。
= は、今すぐの動作を表している。a = a + 1; だとしたら、
その行(正確には、そのかたまりの中)にであったら、スグに
a+1になる。
で、次回というのは何かというと、ズバリclockの変化したときね。
always@( posedge clock )から、対応するendまでの世界。
そう考えると、<=は、その世界の中にしか置けないし、=は、
その外側に置くことがわかる。
で、この「次回の予定」って、どういうことかも考えた。
これすなわち、D-FFのD端子のこと(だと思う)。
そのFFのD端子の1/0がQに伝わるのは、clockの↑の一瞬だけだから。
例えば、Qを反転して自分自身のDにつないだときは
現在の値Qは1だけど、「次回の予定」は0。で、clock↑になると、
現在の値Qが0になるけど、「次回の予定」は1。これで分周器のできあがり。
すごく親切で丁寧でほめてあげたいんだけど、
ちょっと違う
え゛ーっ? 何か違ってますか? ぜひ教えてください。
=は配線の接続を表しているだけ
はい、そうだと思っています。74HC00のNANDなどのように、
clockの関係ないものの出力を表しているのだと思います。
なので、assign Q = ~( A & B )のように書くのだと....。
これらは、常時接続というか、D-FFのように次回のclockの↑まで堰き止めておく制御が
できないので、alwyas@()〜endの中には書けない(書かない?)のだと思います。
「=」:普通のプログラムで言うところの代入文ぽいヤツ(代入してから次の行を実行)
「<=」:同じ時刻だったら(右辺を評価した後に)同時に代入が行われる
ハードの特徴である「並列性」を表現するにはどうすれば良いか、
どんな記述が必要となるかを考えていくと、ノンブロッキング代入文「<=」の
必要性や「=」との違いが認識し易いんじゃないかなぁ。
初学者には「次回」=「次のクロックエッジ」と理解した方が混乱は少ないだろうし、
今の例やその他ほとんどのケースでそれは成り立つので、今はそのように
理解していても良いのだけど正確には違う。
多分今説明しても混乱するだけだし、ここで説明できるほど簡単でもないので
説明しないけど、テストベンチを書く時になって、alwaysの順番を変えたら
シミュレーションの結果が変わったとか、シミュレータによって結果が違う
といった事におそらく一回は嵌る事になると思うので、その時に「デルタ遅延」
というキーワードを勉強して欲しい。
>>974 alwyas@()〜endの中でも、=を使うよ。
<=と混在はさせないが。
A,B,Cそれぞれ0でスタート
B=A+1
C=B+1
A=C+1
普通に計算してみると
B=1
C=2
A=3
でもコンパイルすると
“ループしてますエラー”
B = Aは
#define B ((A)+1)
って理解しとくとOK?
>B = A
B = A+1
のつもりでした。。。orz
微妙に分かりやすく書かれていて
初心者には受けが良い説明なんだろうけど
決定的な間違いがあるから
初心者が誤解したまま覚えてしまうとかなり危険
> = は、今すぐの動作を表している。a = a + 1; だとしたら、
> その行(正確には、そのかたまりの中)にであったら、スグに
> a+1になる。
違う
>次回のclockの↑まで堰き止めておく
違う
否定厨キター
正解の解説をかけよ
レジスタ代入に、ブロッキングとノンブロッキングの両方でできるようになっている言語仕様が悪い。ついでに、レジスタにならないものをreg宣言させるのもいくない。
>>981 どのように違うか、教えてください。
確かに、a = a + 1 はヤバイと思います。
a = b + 1 なら、まだいいんですが。
次回のclockの↑まで堰き止めておくというのは、その1つのD-FFについての説明で
その出力Qが、レベル動作素子(andとかorとかの組み合わせ回路)につながっていれば
それらは動いてしまいます。
a = a + 1
とか書いてる人はちゃんと頭の中で回路図も描いてるの?
単に記述動作だけでデザインやってるってものすごく怖い
>>981 > > = は、今すぐの動作を表している。a = a + 1; だとしたら、
> > その行(正確には、そのかたまりの中)にであったら、スグに
> > a+1になる。
> 違う
漏れもどこが違うのか知りたい。ちなみに以下は遅延制御なしのブロッキング代入文を
どのように処理するかという定義をVerilogのLRMからコピーしたもの。
if it returns immediately if no delay is specified, the process performs the assignment
to the left-hand side
これ以外の遅延なしブロッキング代入文の動作があるのならば知りたい。
>>977 のように分かってやってるならいいと思うよ
すまんけど、VHDL的に言うところの、:= と <= の違いかね?
>>988 それ、シミュレータ動作から見た説明になってるんで、回路作りたい人用には分かりづらくね?
なんつーか、抽象度上げっていうか。
Veritak ユーザーのオレは勝ち組
VHDLに関し、お勧めの書籍はありますか?
初心者用の本は読んだのですが、なかなか地元の本屋に中級者用の書籍がなくて困っています。
>992
森岡澄夫 『HDLによる高性能ディジタル回路設計』
とか…というか、その初心者用の本て何よ。
>989
そういうこと。
シミュレーション用は別として
回路で = は使うなってことだ。
ちなみに、ブロッキング代入とノンブロッキング代入というのがありますよね。
なんで「ブロッキング」と言うのでしょうか。
しかも、「=は、ブロッキング代入」「<=は、ノンブロッキング代入」って、
何かイメージと違う気がする。
>>990 だから、初心者は今知る必要はないし上級コースだよと断っているでしょう。
でも、racing問題にはそのうち必ずはまるので、その時には結局はシミュレータの
動作が分かっていないと根本的対策は打てない。
問題を起こした信号に#1のユニット遅延を付加することで直ることは直るけど
それではいつまでたってもモグラ叩きでしょう。
>>994 >回路で = は使うな
?
普通に使うよ。
>997
中間変数使って速く処理したい場合とか便利ですよね。
あなたは使っても無問題。
新人にはレイアウトを経験させてから使わせてる。
基本的に、頭の悪い俺は自分の作った回路が
あとで見て、わけわからなくなるからつかわん。
うめ
うめ
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。