我无法使用iverilog命令在linux中使用其testbench编译寄存器单元的verilog代码

时间:2017-03-07 19:18:50

标签: verilog iverilog

  1. 这是模块单元......

    =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)))
    
  2. 这是测试台

    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
    
  3. 我正在linux中使用iverilog命令编译此代码。

  4. iverilog -o register_unit.v register_unit_tb.v

  5. 编译代码时,它在data_out端口上出错,表示转换无效。

  6. 错误是data_out不是test_bench中的有效l值,而data_out在此处声明为wire。

1 个答案:

答案 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;