用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
提交
取消