簡體   English   中英

Verilog中的Testbench會產生錯誤,表明真實表達被濫用

[英]Testbench in verilog produces errors saying real expression is being misused

當我運行測試台時,它會產生錯誤

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

這是我在verilog中的第一個項目,所以我真的不知道出什么問題了。 我正在嘗試為我的代碼設置一個簡單的測試程序,如頁面的第10頁。 使用UCF的代碼可以很好地編譯,因此它必須在測試台中。 testbench代碼與powerpoint中的代碼非常相似,因此我認為它源於我嘗試將局部變量設置為測試的某些值並且沒有定義其他輸入的嘗試。 (我需要這樣做,因為要真正對其進行測試,它需要有兩個用於SIGNAL的輸入,但是我無法使用powerpoint中描述的簡單測試床來進行此操作。因此,我將局部變量設置為需要它們並攜帶的局部變量。請注意,當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進行合成。

但是,正如黃昏所提到的,您提供的代碼甚至在模擬和合成之間的差異中都存在很多問題。 測試平台僅用於模擬,而FGPA的約束文件(如UCF )與合成相關; 因此,在一些基本概念上似乎存在很多困惑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM