NgdBuild:605 - 逻辑根块' test_bench'使用类型' test_bench'没有扩张。符号' test_bench'目标&artix7'不支持

时间:2014-04-15 16:50:03

标签: verilog

错误是NgdBuild:605 - 逻辑根块' test_bench'使用类型' test_bench'是    未展开。符号' test_bench'目标&artix7'不支持。在ISE。

请让我知道为什么会出现此错误

module Processor_Top(CLK, Inst, I_addr);
  input         CLK;
  input  [31:0] Inst;
  output [31:0] I_addr;

  reg    [31:0] address;
  reg    [31:0] I_addr;

  initial address =   32'h00000000;

  always@(posedge CLK)
  begin
    $display ("%h", address);
    $display (" Fetched Instruction: %h", Inst);
    address = address + 4;
    I_addr = Inst[address];
  end

endmodule

2。指令存储器

module Instruction_Memory(Address, Data);
  input  [31:0] Address;
  output [31:0] Data;

  reg    [31:0] mem [0:63];

  initial begin
    $readmemh("isort.cod",mem);
  end

  assign Data = mem[Address];

endmodule

3。 test_bench.v

module test_bench;

// Inputs
reg         CLK;
wire [31:0] Inst;

// Outputs
wire [31:0] I_addr;


// Instantiate the Unit Under Test (UUT)
Processor_Top uut (
  .CLK   (CLK), 
  .Inst  (Inst),  
  .I_addr(I_addr)
);

Instruction_Memory im(I_addr, Inst);
initial begin
  // Initialize Inputs
  CLK = 0;

  // Wait 100 ns for global reset to finish
  #100;

  // Add stimulus here
end

always #100
begin
  CLK<=~CLK;
end

endmodule

1 个答案:

答案 0 :(得分:3)

EDAPlayground中看起来很好。

我不得不评论$readmemh("isort.cod",mem);

作为一种风格指南,虽然写作更为常见:

always begin
 #100 CLK = ~CLK;
end

在此处使用阻止(=)分配是正确的。您应该在边缘触发流程(<=)中使用非阻塞(always@(posedge CLK))。

要运行100个循环,您可以执行以下操作,目前您的testbench将永远运行:

initial begin
  CLK = 0;

  // Wait 100 ns for global reset to finish
  //@(posedge globalreset_n);
  @(posedge CLK);

  // Add stimulus here
  repeat(100) begin
    @(posedge CLK);
  end

  $finish();
end