verilog 模块端口说明

用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

每个人有自己的编程习惯啊 呵呵我就喜欢把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
是不是觉得这样写比第一种更加简洁明了呐~~~
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-02-08
一般定义端口不在module后面()中定义,而是单独定义,像第一种表达方式一样。
写法比较标准。
还有第一种写法有错误,C应该是output C;
input 不能定义成reg类型
相似回答