用verilog寫一個module:module(A,B,C)input A;input B;input C;wire A; wire B;reg C;endmodule 和module(input A,input B, output C)wire A; wire B;reg C;endmodule 應該是一樣的吧?但是為什么在編譯的時候,第二種會報warning:Redeclaration of ansi port A, B, C is not allowed 而第一種卻不會報?我用的是xilinx 12.3
2 回答

肥皂起泡泡
TA貢獻1829條經驗 獲得超6個贊
每個人有自己的編程習慣啊 呵呵我就喜歡把input output的聲明寫在端口里和樓主一樣 沒什么問題;也就是說樓主的兩種寫法都可以,自己習慣,看著順眼就好。但是樓主的語法有問題,當然就報錯了;
報錯告訴你重復定義了。神馬原因涅?因為module(input A,input B, output C)中的input A,input B, output C就已經是對信號定義了,你下面再寫wire A; wire B;reg C當然重新定義了。
你可以這樣寫
module(input A,input B, output reg C) //(輸入wire型 不用寫)
endmodule
是不是覺得這樣寫比第一種更加簡潔明了吶~~~

慕的地6264312
TA貢獻1817條經驗 獲得超6個贊
一般定義端口不在module后面()中定義,而是單獨定義,像第一種表達方式一樣。
寫法比較標準。
還有第一種寫法有錯誤,C應該是output C;
input 不能定義成reg類型
添加回答
舉報
0/150
提交
取消