FC2カウンター FPGAの部屋 2005年11月04日
FC2ブログ

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

FPGAの部屋

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

Verilog-HDLのお勉強

今日はVerilog-HDLのお勉強をしようと思い、この本を買いました。
この本はVHDLとVerilog双方の言語で、カウンタやシフタ、FIFO等の回路が書いてある。VHDLは多少なりとも理解できるので、対訳本みたいな感じで勉強しやすいかもと思い購入した。さらに全ての回路がパラメータでビット幅を拡張する(パラメタライズ)ことが出来るように書いてある。自分もそう書きたいと思っているので、とても共感できた。
以前からVerilogでパラメタライズな書き方をしたいと思っていた。例えば、パラメタライズなビット幅で、リセット時の値がオール1のDフリップフロップを書くとする。VHDLでは(others => '1');で済むがVerilogでのスマートな書き方がわからなかった。VHDLでは
process(reset, clk) begin
 if reset='1' then
  q <= (others => '1');

だけど、Verilogでは
always @(posedge clk or posedge reset)
 if (reset)
  q <= -1;

かなと思っていた。(以前、掲示板で聞いたの忘れてしまった)
でも、こう書けば良いということがわかった。
parameter BIT_WIDTH 8;
always @(posedge clk or posedge reset)
 if (reset)
  for(i=0; i<BIT_WIDTH-1; i=i+1)
   q[i] <= 1'b1;

これならば完璧である。なぜ自分で思いつかなかったかと思うと情けない。
いい本だと思う。明日も本を読んで勉強したい。

-----------------------
前にFPGA掲示板で教えてもらったのを思い出した。
`define BITWIDTH 4
always @(posedge clk or posedge reset)
 if (reset)
   q <= {`BPS_WIDTH{1'B1}};

だった。
  1. 2005年11月04日 22:29 |
  2. 入門Verilog
  3. | トラックバック:0
  4. | コメント:2