FC2カウンター FPGAの部屋 入門Verilog HDL記述の回路の検証
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

入門Verilog HDL記述の回路の検証

入門Verilog HDL記述の回路を検証してみた。122ページのシリアル・パラレル変換について、納得できない記述だったので、やってみた。
記述は、
module Seri_Par(ck, res, en, si, q);
 input ck;
 input res;
 input en;
 input si;
 output [3:0] q;
 reg [3:0] q;
 always @(posedge ck) begin
  if (res)
   q <= 4'h0;
  else if (en) begin

   q <= q << 1;
   q[0] <= si;

  end
 end
endmodule

というもの。どうもq[0]に2回代入されているのが気になる。シミュレーションしてみた。動作はOK。
Seri_Par_Sim_OK_051124.jpg

XSTで論理合成後のRTL回路図を表示してみた。
Seri_Par_OK_Cur_051124.jpg

いたって正常。

これで青の部分を下のように変更するとだめだということだ。
   q[0] <= si;
   q <= q << 1;

つまり記述の順番を変えるとだめ。これでシミュレーションしてみると
Seri_Par_Sim_NG_051124.jpg

確かにだめだ。出力が出ない。
次にXSTで論理合成後のRTL回路図は、
Seri_Par_Cur_NG_051124.jpg

なんだこれは? q[0]がGNDに接続されているだけだ。

125ページの正解例では、
   q <= {q, si};
だったが、これも式の左辺と右辺のビット幅が合わないので、気持ち悪い。
VHDL好きな私ならば、こう書きたい。
   q[3:1] <= q[2:0];
   q[0] <= si;

もしくは1行で書くならばこうか?
   q <= {q[2:0], si};
Verilog書く時は本の記述で良いのかもしれないが、私は下の2例のように書きたい。
  1. 2005年11月24日 22:41 |
  2. 入門Verilog
  3. | トラックバック:0
  4. | コメント:1

コメント

昔の記事に対するコメントで申し訳ありません。

VHDLから入った者ですが、私もこの書籍のこの部分で「並列代入のくせに、嘘だろ・・?」と思いました。
まず間違いなく混乱するので、私もビットのスライスを使って代入しています。

VerilogとVHDLとどちらから始めようかと思った時に、面倒くさそうだったVHDLから始めたのですが、面倒な分、かっちりしていて意外に手に馴染んでしまっています。
  1. 2008/07/04(金) 19:26:56 |
  2. URL |
  3. #-
  4. [ 編集 ]

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog.fc2.com/tb.php/74-8164f09e
この記事にトラックバックする(FC2ブログユーザー)