FC2カウンター FPGAの部屋 Verilog-HDLのお勉強
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

コメント

こんばんは。私のようなものがコメントするのもアレですが、
>  for(i=0; i<BIT_WIDTH-1; i=i+1)
>   q[i] <= 1'b1;
この書き方は見たことがないです。(私は書きません)これはalways文の中なのでqを初期化するのに[BIT_WIDTH]クロック必要ということですよね?あまりスマートとは、、言えないような、、。
それ以前ですが、alwaysのなかでfor文は書けましたっけ?あとfor文は実回路ではあまり使われないみたいです。(テストベンチでは多用しますが)

verilogのbit埋めは、、、そうそう、青地の部分の書式です。それですよね。しかし、すべてのバスのバス幅をdefine宣言するのが面倒なので、私は-1か0を入れてしまってます。汗 もしくは4{1'b0}。
乱文失礼しました。
  1. 2005/11/07(月) 23:46:36 |
  2. URL |
  3. キコ #-
  4. [ 編集 ]

コメントありがとうございます。コメントいただけるとうれしいです。
本に載っているので、always文の中でfor文書けるんじゃないかと思いますが、実際にやってみたいと思います。VHDLでは、process文の中でfor ...loop使って、論理合成できます。
何クロックかかるかというのも多分forの中は1デルタ時間で実行されると思うので、シミュレーター上では一瞬だと思います。
私も以前教えてもらった{`BPS_WIDTH{1'B1}}がいいかなと思ってます。1行で書けるし。。。後はBPS_WIDTHをヘッダファイルに書いてインクルードすればOK。
回路はなるべく使いまわせるように、パラメータを使って書くようにしています。パラメータを替えればほかに使えるように。でも、あまりやりすぎると後から見てわかんなくなっちゃうんですけど。
Verilogは特にテストベンチが書きやすいですね。2001でfor generateや多元配列がサポートされたし、System Verilogも出るみたいだし、乗り換えてもいいかなと思っています。
Verilogいろいろ教えてください。
  1. 2005/11/08(火) 09:46:55 |
  2. URL |
  3. marsee #-
  4. [ 編集 ]

コメントの投稿


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

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