Verilog のポート宣言にパラメータを使う
俺メモ
module add_4
(
input clk,
input [3:0] a,
input [3:0] b,
output [4:0] c
);
add #(.width(4) ) add_u(.clk(clk), .a(a), .b(b), .c(c));
endmodule // add_4
module add #(parameter width = 8)
(
input clk,
input [width-1:0] a,
input [width-1:0] b,
output reg [width:0] c
);
always @ (posedge clk)begin
c <= a + b;
end
endmodule // add
« アルゴリズムの名前 | Main | あーきてくちゃ »
The comments to this entry are closed.
Comments
この書式で、どうやって parameter を
include で共有できるんだ ?
。。。と毎度思ってますが、
> module hoge
> `include "hoge.prm"
> (
。。。と無理やりやってたら、
とうとう最近某プロジェクトで禁止されちまいました。
Posted by: noboshemon | 2008.09.11 09:29 AM
これでVerilogでもVHDLのgeneric文のように使えるんですね。
これは知らなかった。今まで、parameterをincludeしていました。
Posted by: marsee | 2008.09.12 05:06 AM
> これでVerilogでもVHDLのgeneric文のように
2001 より前の構文でも、実体宣言時に
parameter をオーバーライドする仕組みはありました。
2001 から、明示的に parameter とデフォルト値で
宣言できるようになったのはええのですが、
これが c 流の port の宣言より先になければならないわけで、
ファイルで共有するのは、かえってつらくなりました。
Posted by: noboshemon | 2008.09.12 05:38 AM
>> noboshemonさん
> module hoge
> `include "hoge.prm"
> (
この発想は素晴らしい!
僕は古き良きdefparamが好きなんですが、コピペ間違い起こしますし、できるだけモダンな記述にしていきたいです。
>> marseeさん
他の言語を勉強する力を、ちょっとずつVerilogに振り分けるようにしてみました。
大手さんで設計やられている方は、いろんな表記に詳しいのでしょうが、個人で勉強していると
どうしてもこういう情報は共有が難しいですね。
ブログでの紹介ありがとうございました。
Posted by: なつたん | 2008.09.12 08:23 PM
> この発想は素晴らしい
うわっはっは。
他の誰にも受けません ^_^;
上位モジュールからオーバーライドするなんて
論理合成も複雑になるし、parameter の管理の
責任の所在が怪しくなるんで、
私は仕事では使いません。
若い頃は、いろいろやりましたけど。。。
Posted by: noboshemon | 2008.09.14 12:24 AM
なつたんさん、こんにちは。
私のブログで紹介させていただきました。
とても有用な情報だと思ったので、なつたんさんのブログの記事の一部を引用させていただきました。自分のブログに書いておいて検索できるようにしたいので、事後承諾ですみませんが、ご了承ください。
仕事ではVHDLのconstant値を変えることでパラメータが変更できるようにしています。generate文でインスタンスするモジュールの数をconstant値で変えて性能を変更できるようにしたり、過激なことをしています。お客様に納品するわけじゃないのでやりたい放題です。
Posted by: marsee | 2008.09.16 04:25 PM
> marsee さん
ここに書いてあることは、好きに使っていただいてかまわないですよ。
自分自身、ここに書くのが一番検索が楽だと思って書いているだけですので。
Posted by: なつたん | 2008.09.17 06:47 PM