gpt4 book ai didi

debugging - verilog 中的 Testbench 产生错误,指出真实表达式被滥用

转载 作者:行者123 更新时间:2023-11-28 21:21:03 24 4
gpt4 key购买 nike

当我运行我的测试平台时,它产生了错误

ERROR:HDLCompiler:480 - "/home/ise/FPGA/trapezoid/testbed.v" Line 31: Illegal context for real expression

这是我在 verilog 中的第一个项目,所以我真的不知道哪里出了问题。我正在尝试设置一个简单的测试组,就像 this 的第 10 页一样对于我的代码。 UCF 的代码编译得很好,所以它一定是测试平台中的东西。测试台代码与 powerpoint 中的代码非常相似,所以我认为它来 self 尝试将局部变量设置为测试的特定值并且我没有定义不同的输入。 (我需要这样做是因为要真正测试它需要有两个信号输入,但我不能用 powerpoint 中描述的简单测试平台来做到这一点。所以我将局部变量设置为它们需要的值并携带on.) 请注意,当 SIGNAL 定义为等于 0 时,此错误仍然会发生。

如有任何帮助,我们将不胜感激。我正在使用 Oracle VM Virtualbox ISE。

代码

module trapverilog(
input CLK,
input SIGNAL,
input x,
input SUM, // OUT is mapped to SUM on board
output reg OUT
);

reg[64:0] yregone;
reg[64:0] yregtwo;
reg[64:0] sum;

always @(posedge CLK)
begin
yregtwo = yregone;
yregone = SIGNAL;
if (yregtwo != 0)
begin
sum = ((yregone + yregtwo)*x/2) + SUM; //treats x as plain h, change if treated as h/2
OUT = sum;
end
end

endmodule

用户配置文件

NET "CLK" LOC = P126;
NET "SIGNAL" LOC = P35 | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST;
NET "x" LOC = P34 | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST;
NET "OUT" LOC = P33 | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST;

测试台

module testbed();
reg CLK, SIGNAL, x, SUM;
wire OUT;

// instantiate device under test
trapverilog dut(.CLK(CLK), .SIGNAL(SIGNAL), .x(x), .SUM(SUM), .OUT(OUT));

// apply inputs one at a time
initial begin
x = 1; CLK = 1; SUM = 0; trapverilog.yregone = 1; trapverilog.yregtwo = 2; #10; // apply input, wait
if (OUT !== 1.5) $display("failed."); // check
end
endmodule

最佳答案

特定错误是您在测试台结束时将 OUT1.5 进行比较的结果。与某些编程语言不同,Verilog 是强类型的,并且有许多类型无法像您根据您的 UCF 所做的那样综合。

但是,正如 duskwuff 所提到的,您提供的代码存在很多问题,甚至模拟和综合之间的差异也是如此。测试台仅用于仿真,而 FGPA 的约束文件(如 UCF)与综合相关;所以在一些基本概念上似乎存在很多混淆。

关于debugging - verilog 中的 Testbench 产生错误,指出真实表达式被滥用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51623047/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com