错误是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
答案 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