这是模块单元......
=IF(MONTH(DATE(YEAR(K2),MONTH(K2),DAY(H2)))<>MONTH(K2),
DATE(YEAR(K2),MONTH(K2)+1,0),
DATE(YEAR(K2),MONTH(K2),DAY(H2)))
这是测试台
module register_unit(data_out,data_in,load,clk,rst);
parameter word_size=8;
output [word_size-1:0] data_out;
input [word_size-1:0] data_in;
input load,clk,rst;
reg data_out;
always@(posedge clk or negedge rst)
if(rst==0)
data_out <= 0;
else if(load)
data_out <= data_in;
endmodule
我正在linux中使用iverilog命令编译此代码。
iverilog -o register_unit.v register_unit_tb.v
编译代码时,它在data_out端口上出错,表示转换无效。
错误是data_out不是test_bench中的有效l值,而data_out在此处声明为wire。
答案 0 :(得分:0)
您无法为wire
块中的initial
分配值。在测试平台的initial
块中,将data_out
更改为data_in
:
initial
begin
rst=0;
data_in=8'b0;
load=0;
#10 rst=1;
load=1;
#10 data_in=8'b00000100;
#10 data_in=8'b00000101;
#20 load=0;
end
我还在register_unit
中收到了编译器警告。您应该使用位宽声明reg
:
reg [word_size-1:0] data_out;