【问题标题】:Simulation output is all zeroes模拟输出全为零
【发布时间】:2011-08-08 21:55:03
【问题描述】:

我的设计块代码和测试平台编译;但是,当我模拟时,我没有得到正确的输出。谁能告诉我我的代码哪里出错了?

这是测试平台的代码:

module testbench;
reg [511:0]FROM_LS;
reg CLK;
reg [63:0]TO_IF_ID;

initial
 begin
  CLK= 0;
  TO_IF_ID[63:0]=63'b0;
  FROM_LS[511:480]= 32'b00011_00000_00100_01100_11100_10111_01;
  FROM_LS[479:448]=32'b00_11000_00100_01111_11111_00011_10000;
 end
always
 begin
  #10 CLK= ~ CLK;
   //FROM_LS[511:448]= ~ FROM_LS[511:448];
  $display("FROM_LS= %b", FROM_LS);
  $display("TO_IF_ID= %b", TO_IF_ID);
 end
endmodule

这是设计块的代码:

module inst_line_buffer(input wire [511:0]from_LS,
                    input wire clk,
                    output reg [63:0]to_if_id);
parameter mem_size=16;
integer k;    
reg [31:0] ilb[0:mem_size-1];   

initial
 begin
  for (k = 0; k < mem_size ; k = k + 1)
    begin
    ilb[k] = 32'b00;
    //$display ("ilb= %b",ilb[k]);
    end
 end
 always @(posedge clk)
   begin
   ilb[0]= from_LS[511:480];
   ilb[1]= from_LS[479:448];
   ilb[2]= from_LS[447:416];
   ilb[3]= from_LS[415:384];
   ilb[4]= from_LS[383:352];
   ilb[5]= from_LS[351:320];
   ilb[6]= from_LS[319:288];
   ilb[7]= from_LS[287:256];
   ilb[8]= from_LS[255:224];
   ilb[9]= from_LS[223:192];
   ilb[10]= from_LS[191:160];
   ilb[11]= from_LS[159:128];
   ilb[12]= from_LS[127:96];
   ilb[13]= from_LS[95:64];
   ilb[14]= from_LS[63:32];
   ilb[15]= from_LS[31:00];
   to_if_id [63:32]= ilb[0];
   to_if_id [31:0]= ilb[1];
   $display("ilb= %b", ilb[1]);
  end
endmodule

我预计TO_IF_ID 的值应该是0001100000001000110011100101110100110000010001111111110001110000,但我得到的都是零。

【问题讨论】:

  • 在您提供的代码中,inst_line_buffer 没有被实例化。
  • @andy : 我在上面的代码中实例化了 inst_line_buffer 如下: inst_line_buffer ilb(FROM_LS,CLK, TO_IF_ID);现在我无法模拟。我得到的错误是:**错误:(vsim-3053)C:/Modeltech_pe_edu_10.0a/examples/tstbnch.v(5):非法输出或输入端口连接“端口“to_if_id””。 # 区域:/testbench/ilb # 加载设计时出错

标签: verilog simulation


【解决方案1】:

当您在 testbench 模块上运行模拟时,TO_IF_ID 始终为 0,因为您只在 initial 块中的时间 0 为它分配了一次值。如果你想改变值,就需要以某种方式驱动它。

正如 Andy 在评论中指出的那样,您可能打算在您的测试台中实例化 inst_line_buffer 模块。 Verilog 不会为您神奇地做到这一点。但是,您应该将TO_IF_ID 声明为wire 而不是reg,并将其从initial 块中删除。

module testbench;
reg [511:0]FROM_LS;
reg CLK;
wire [63:0]TO_IF_ID;

inst_line_buffer inst_line_buffer (
    .from_LS    (FROM_LS),
    .clk        (CLK),
    .to_if_id   (TO_IF_ID)
);

initial begin
  CLK= 0;
  FROM_LS[511:480]= 32'b00011_00000_00100_01100_11100_10111_01;
  FROM_LS[479:448]=32'b00_11000_00100_01111_11111_00011_10000;
    #500 $finish;
 end
always
 begin
  #10 CLK= ~ CLK;
   //FROM_LS[511:448]= ~ FROM_LS[511:448];
  $display("FROM_LS= %b", FROM_LS);
  $display("TO_IF_ID= %b", TO_IF_ID);
 end
endmodule

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多