2013-08-22 66 views
0

我是Verilog HDL的新手,我的第一個項目是使用一組寄存器實現一個簡單的秒錶計數器。我正在使用Altera Quartus。編譯Quartus中的Verilog代碼

當我嘗試編譯下面的代碼時,我不斷收到每個和每個寄存器的錯誤。錯誤消息之一是這樣的:

錯誤(10028):無法解析淨 「SEC0 [3]」 在test_interface.v(127)

任何人都可以幫助多個恆定的驅動程序?代碼在Modelsim中模擬得很好。

這裏的代碼是造成問題的片段:

always
always @ (posedge clk) 

    if (qsoutput == 1) 
     sec0 = sec0 + 1; 
    else if (sec0 == 4'b1010) begin 
     sec1 = sec1 + 1; 
     sec0 = 4'b0000; 
    end else if (sec1 == 4'b0110) begin 
     min0 = min0 + 1; 
     sec1 = 4'b0000; 
    end else if (min0 == 4'b1010) begin 
     min1 = min1 + 1; 
     min0 = 4'b0000;  
    end else if (min1 == 4'b0110) begin 
     sec0 = 4'b0000; 
     sec1 = 4'b0000; 
     min0 = 4'b0000; 
     min1 = 4'b0000; 
    end 
+0

我真的沒有看到這段代碼有什麼問題。你可以發佈'test_interface.v'的全部內容,同時記下哪些是第127行?你還可以發佈整個編譯錯誤列表嗎? – Tim

+0

實際上,我得到了每行代碼的多個錯誤,而不僅僅是127.它繼續像這樣:錯誤(10028):在test_interface.v處無法解析網絡「sec0 [3]」的多個常量驅動程序 - 錯誤(10028):無法解析test_interface.v等網絡上的「sec1 [3]」等多個常量驅動程序 – user2707696

+0

瞭解,但我們需要您提供更多信息。如果你想讓我看得更遠,請張貼我要求的兩件事。您可以選擇編輯將其添加到帖子的底部。 – Tim

回答

2

基於your code in Dropbox,要分配寄存器。這對於綜合和Altera Quartus錯誤消息的共同贊助者所指的是非法的。一個reg類型只能在一個always塊中分配。

作爲示例,sec0always @(posedge reset_reg)中定義,代碼在您的問題中提供。 code in Dropbox甚至更​​糟糕,因爲您將計數器邏輯分成4個獨立的始終塊,分配sec0

我建議你把所有sec*min*抵抗者一個時鐘同步始終與異步阻止:

always(@posedge clk or posedge reset_reg) 
begin 
    if(reset_reg) 
    begin 
    // ... asynchronous reset code ... 
    end 
    else 
    begin 
    // ... synchronous counter code ... 
    end 
end 

本文介紹了有關良好的Verilog編碼實踐細節合成: http://www.sunburst-design.com/papers/CummingsSNUG2000SJ_NBA.pdf


您將遇到的其他問題:

  • 分配寄存器時使用非阻塞(<=)。這在前面提到的Cliff's paper中討論過。
  • 擺脫最初的塊。我瞭解一些FPGA合成器允許它和一些忽略它。具有異步的更好的做法是將所有內容都放入已知和可預測的值中。
  • always @ (clk or start_reg or lap_reg or reset_reg)開始的塊有一個奇怪的靈敏度列表,可能會給你帶來問題。如果您希望組合邏輯@(*)@(posedge clk or posedge reset_reg)用於同步觸發器,那麼您就不想要這樣。
  • 很少使用雙邊觸發器。行always @ (posedge clk or negedge clk)應該是always @ (posedge clk)同步或always @(*)組合邏輯。
+0

感謝您提供所有這些有價值的信息! – user2707696

+0

@ user2707696如果此答案已滿足您的問題,請接受此答案。這將有助於其他人知道你不在尋找更多的解決方案。如果答案中的內容不完整或不清楚,請添加評論。 – Greg