0

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

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

这是我在verilog中的第一个项目,所以我真的不知道出了什么问题。我正在尝试为我的代码设置一个像第 10 页一样的简单测试包带有 UCF 的代码编译得很好,所以它必须是测试台中的东西。测试台代码与 powerpoint 中的代码非常相似,所以我认为这是因为我尝试将局部变量设置为测试的某些值,并且我没有定义不同的输入。(我需要这样做,因为要真正测试它,它需要有两个信号输入,但我不能用 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
4

1 回答 1

1

具体错误是您与测试台结束时进行比较OUT的结果。1.5与某些编程语言不同,Verilog 是强类型的,并且有许多类型无法像您基于UCF.

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

于 2018-07-31T23:47:39.320 回答