• 締切済み

Verilogで動的なモジュールを作る方法

Verilogで動的なモジュールを作る方法 たとえば、どのような周波数であっても 1秒のウェイトをする回路を作りたいと思っています。 試験的に、 `define time (1) //1S `define tCK (20) //周期20nS module wait( input iCLOCK, input inRESET, output reg oWAITEND); localparam = loop_end (1/(`time * 1000000000))/`tCK; reg [31 : 0] loop; always@(posedge iCLOCK or negedge inRESET)begin if(inRESET == 1'b0)begin loop <= 32'h00000000; end else begin if(loop < loop_end)begin loop <= loop + 32'h00000001; oWAITEND <= 1'b0; end else begin oWAITEND <= 1'b0; loop <= loop; end end end //always endmodule というものを作って、defineの値(このdefineは別ヘッダファイルからincludeしてやりました)を変えてやれば目的の周波数で動き、目的のウェイト作るモジュールををソース自体を変えずに得られると思いましたが、 シミュレーションではうまくいったものの、QuartusIIではうまく論理合成されませんでした。 もし、他に方法がありましたら教えていただけないでしょうか? よろしくおねがいします。

みんなの回答

回答No.2

#1です。 > localparam = loop_end (1/(`time * 1000000000))/`tCK; この式あってます? localparam real loop_end =(1/(`time * 1000000000))/`tCK; ってことかな? でもそれじゃrealとregを比較してる(^ ^;; localparam integer loop_end = (`time * 1000000000)/`tCK; じゃないの? あとは当たり前だけど、実記検証でリセット入れてますよね? それでも直らないんなら、 遅延つきシミュレーションとか テストモニター出してロジックアナライザで検証ですな。 ちなみに、普通動的なモジュールの生成といわれてイメージするのは verilog 2kのgenerate文とかです。

すると、全ての回答が全文表示されます。
回答No.1

> シミュレーションではうまくいったものの、QuartusIIではうまく論理合成されませんでした。 どんなエラーだったのでしょう? それとも合成はできたが、期待通りの動作をしなかったんでしょうか? ところで、 oWAITEND って何者? 不定から0になってるだけ・・・。 こんな信号何に使うんだ?

takeru_okwave
質問者

補足

申し訳ありません、上にあげたものはあくまでどういうことをしたいかということで 全くテストしていないものを書いてしまいました。 以下に書きなおします、申し訳ありませんでした。 `define set_time (1) //1S 目的のウェイト時間 `define tCK (20) //クロックの周期 module make_wait( input iCLOCK, input inRESET, output reg oWAITEND); localparam loop_end =(1/(`set_time * 1000000000))/`tCK; reg [31 : 0] loop; always@(posedge iCLOCK or negedge inRESET)begin if(inRESET == 1'b0)begin loop <= 32'h00000000; oWAITEND <= 1'b0; end else begin if(loop < loop_end)begin loop <= loop + 32'h00000001; oWAITEND <= 1'b0; end else begin oWAITEND <= 1'b1; loop <= loop; end end end //always endmodule 特にエラーなどはないのですが、シミュレーションでは期待通り、1秒待ったらoWAITENDが1になりました。 しかしながら、論理合成していざ回路に送ってみると、全くウェイトがなく動作してしまいます。 QuartusIIでは特に関係のありそうなエラーは出ませんでした。

すると、全ての回答が全文表示されます。

関連するQ&A