私はVerilogを初めて使いこなしていますが、最初にその言語を学ぶのはポート相互接続に関するものだと思います。だから、私は素朴に次のコードを書いた。バインディングモジュールのポートに 'assign'を使用する
module mult4(input wire [3:0] x, y,
output wire [7:0] z)
sum8 sh, sl, ss;
assign sl.x = (y[0] ? x : 0),
sl.y = (y[1] ? x : 0) << 1,
sh.x = (y[2] ? x : 0) << 2,
sh.x = (y[3] ? x : 0) << 3,
ss.x = sl.z,
ss.y = sh.z,
sl.cin = 0,
sh.cin = 0,
ss.cin = 0,
z = ss.z;
endmodule
これはまったく動作しませんでした。ここでsum8
には、次のシグネチャを持つ単なる8ビット加算器である:もちろん
module sum8(input wire cin, // carry-in bit
input wire [7:0] x, y, // operands
output wire cout, // carry-out bit
output wire [7:0] z); // result
、私はそれをコンパイルするには、このコードを書き換えることができますが、私は別のものを知っていただきたいと思います。 Verilogで同様のルック・アンド・フィールを実現する方法はありますか、またはポートのマッピングをモジュール名の後の括弧内に定義できる唯一の場所はありますか?もしそうなら、その理由はありますか?他のHDLにも、私が望むような機能がありますか?
探している機能を表示できますか?すなわち 'sum8'は何を表していますか? ss.zはどのように価値がありますか? –
「sum8」とは何ですか? –
@ dave_59:ご迷惑をおかけして申し訳ありません。質問を更新しました。しかし、それは具体的なモジュールの仕組みではなく、 'module.port'から読み込むことができますが、なぜそれに割り当てることはできません。たぶん、質問そのものがあまり良くないとは限りません。 – firegurafiku