我創建了一個簡單模塊,使用Verilog generate語句多次複製。但是,似乎生成語句以某種方式影響模塊中的變量賦值。下面的代碼:SystemVerilog中的變量賦值生成語句
module test();
timeunit 10ns;
timeprecision 1ns;
wire[3:0] out;
reg[3:0] values[0:4] = {5, 6, 7, 8, 9};
logic clk;
generate
genvar i;
for (i=0; i < 5; i++) begin: M1
MUT mut(
.out,
.in(values[i]),
.clk
);
end
endgenerate
initial begin
#1 clk = 0;
$monitor("%b %b %b %b %b\n", M1[0].mut.out, M1[1].mut.out, M1[2].mut.out, M1[3].mut.out, M1[4].mut.out);
#10 $stop;
end
always #1 clk++;
endmodule
module MUT(output [3:0] out, input [3:0] in, input clk);
reg[3:0] my_reg[0:7];
assign out = my_reg[7];
always @(posedge clk) begin
my_reg[7] <= in; //5
end
endmodule
這個測試方案的預期產出將是0101 0110 0111 1000 1001
,但是輸出我得到的是xxxx xxxx xxxx xxxx
。看起來test
模塊中的values
變量中的值沒有被分配給MUT
模塊中的out
變量。但是,當我用my_reg[7] <= 5;
代替my_reg[7] <= in;
時,代碼將按預期工作。當我直接指定out
(將其聲明爲寄存器之後),即out <= in;
時,該代碼也適用。如果我不使用任何生成語句而手動複製MUT
模塊,則沒有任何問題。
我欠你的咖啡。很完美,謝謝。 – iab 2014-08-29 15:25:18