2012-10-23 47 views
0

我正想在Quartus開發板上從LED寫入蛇。這有點像KITT-Leds,但是當我嘗試運行我的程序時,出現錯誤。Verilog錯誤:無法詳細說明用戶層次結構「counter:counter」

module ukol3(KEY,LEDR); 
input[1:0]KEY; 
output[14:0] LEDR; 

counter counter(KEY[0], KEY[1], LEDR[14:0]); 

endmodule 

module counter(C,CLR,Q); 
input C, CLR; 
output [14:0] Q; 
reg [14:0] tmp; 
integer i; 

always @(posedge C or posedge CLR)  
    begin 

     if (CLR) 
      tmp = 15'b000000000000000; 

     if (tmp == 15'b111111111111111) 
      i = 0; 

     if (tmp == 15'b000000000000000) 
      i = 1; 

     if (i == 1) 
      tmp = tmp + 1'b1; 

     if (i == 0) 
      tmp = tmp - 1'b1; 
     end 
    assign Q = tmp; 


endmodule 

這給了我一個錯誤:

Error: Can't elaborate user hierarchy "counter:counter"

我真的不知道發生了什麼事情。

+0

我認爲錯誤信息告訴你總是阻塞是不可綜合的。考慮使用非阻塞賦值來推斷寄存器。 – 2012-10-23 21:04:47

+0

爲實例指定與模塊不同的名稱。你的代碼是pastebin上數據的好副本,但蛇應該做什麼?它實際上是一個移位寄存器,應該填充然後清空?整數i只會在時鐘的上升沿改變狀態,以捕捉計數器的最大值或最小值。否則,它會鎖定最近的設置。那是你要的嗎? – mkstlwtz

回答

0

這個問題是關於Verilog,而不是vhdl。我想問幾個問題:你的代碼是否可綜合?你在綜合模塊計數器後得到了什麼?

對於你的問題,我認爲你應該先編譯counter,然後編譯ukol3。當你沒有先做的時候,EDA工具不會找到櫃檯。你應該把它分成兩個可分離的文件,然後先做計數器。

P.S .:對於更清晰的代碼,您應該使用更好的映射端口方法,例如counter counter (.C(KEY[0]),.CLR (KEY[1]),.Q (LEDR[14:0]));