2 つのモジュールをインスタンス化するこのトップ モジュールがあります。
fillRam fillRam1(
.clk(mclk),
.ramaddrb(ramaddrb),
.romaddrb(romaddrb),
.romoutb(romoutbwire),
.raminb(raminb));
vga vgainst(
.ck(mclk),
.HS(HS),
.VS(VS),
.outRed(OutRed),
.outGreen(OutGreen),
.outBlue(OutBlue),
.sw(sw),
.romouta(romoutawire),
.ramouta(ramoutawire),
.romaddra(romaddra),
.ramaddra(ramaddra));
この最上位モジュールには、RAM と ROM を接続する 2 つのモジュールもあります。
rom rom_instance (
.clka(mclk), // input clka
.addra(romaddrawire), // input [14 : 0] addra
.douta(romouta), // output [7 : 0] douta
.clkb(ck), // input clkb
.addrb(romaddrbwire), // input [14 : 0] addrb
.doutb(romoutb) // output [7 : 0] doutb
);
私がやりたいことは、vga モジュールから romadra 値を取得し、それを rom_instance に渡し、romouta 値を取得して vga モジュールに戻すことです。そのために 2 つの変数を宣言します。
reg [14:0] romaddra;
wire [14:0] romaddrawire;
reg [7:0] romouta;
wire [7:0] romoutawire;
assign romaddrawire = romaddra;
assign romoutawire = romouta;
すべてのクロック サイクルで、vga インスタンスから romadra 値を取得し、それを romaddrawire に書き込み、ROM インスタンスに渡します。次に、romouta の値を取り、それを romoutawire に書き込み、VGA インスタンスに返します。
他の rom ポートと ram ポートにも同様の宣言があります。しかし、それらのすべてで、このエラーが発生します。
ERROR:HDLCompilers:102 - "top.v" line 82 Connection to output port 'romaddra' must be a net lvalue
VGA Verilog コードで:
output reg [14:0] romaddra;
およびROM Verilogで:
output [7 : 0] douta;
この全体のレジスタとワイヤの種類について非常に混乱しています。誰かがここで何がうまくいかないのか、その理由も説明してくれたらうれしいです. ありがとう。