編譯出錯解決方法


本文轉載自網絡。

Error (10228): Verilog HDL error at test.v(1): module "test" cannot be declared more than once
Error (10228): Verilog HDL error at beep.v(1): module "beep" cannot be declared more than once


說明你在 setting中已經把這兩個文件加進去了,已經加進去就不能再用include聲明一次
實體名和工程名要相同,一個工程可有多個模塊構成,在頂層模塊中調用其他模塊就可
繼續追問:
按照你說的做了 確實沒有問題了 可是燒程序進去的時候 只有combine的程序燒進去了
test 和 beep的程序還是沒有燒進去
應該怎么弄
配置管腳的時候都沒有出現test 和 beep設置的輸出與輸入
想知道到底怎么樣可以一起燒進FPGA中去
補充回答: 關鍵你在 頂層模塊 combine 中有沒調用 子模塊進行運用,如果只是把子模塊加進來時沒用的,在頂層模塊中要寫出子模塊的輸入輸出(配置管腳只會出現頂層模塊的管腳),並在接下來語句中進行例化配置,將雙方管教匹配上


2.Error (10170): Verilog HDL syntax error at Verilog2.v(4) near text ","; expecting "="

哪位大蝦幫幫忙
module mux4 (A,B,C,D,sel,sum);
input A,B,C,D,sel;
output sum;
assign temp1,temp2;

always@(sel or A or B or C or D)
begin
temp1 = sel ? A:C;
temp2 = sel ? B:D;
end
always @(temp1 or temp2)
sum = temp1 + temp2;
endmodule
用quartus時報錯


答:
什么叫assign temp1,temp2;
明明應該是wire temp1,temp2;
追問
Error (10137): Verilog HDL Procedural Assignment error at Verilog2.v(10): object "temp2" on left-hand side of assignment must have a variable data type
按你的改完之后還是編譯錯誤啊
回答
失誤。沒仔細看。always的聲明,不應該用wire,是Reg類型。你用的assign是用來wire賦值的,比如assign temp1 = temp2+2; 這個時候要把temp1聲明稱wire。初學時,這些個wire reg assign很容易弄不明白。也就是應該改成reg temp1,temp2;
追問
大蝦 還是沒懂啊 我已經把assign改成wire了 並不想用assign賦值,只是想聲明兩個中間變量而已,大蝦幫忙仔細看看 如何才能編譯通過 萬分感謝
回答
.........你記住,常用的幾種變量的類型是這樣區分的。
always @ ()括號里不管是時鍾觸發還是單個變量觸發,下面的等號左邊數據,統統用reg。也就是你現在這個情況,應該用reg。
如果是assign賦值,那么等號左邊的應該是wire
還有一種就是例化的模塊,你如果不懂例化遲早要碰到。例化模塊的輸出數據類型也要設為wire
這些都是最最常用的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM