为了账号安全,请及时绑定邮箱和手机立即绑定

为什么在编译的时候,第二种会报warning?

为什么在编译的时候,第二种会报warning?

慕慕森 2023-02-17 16:18:46
用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 
是不是觉得这样写比第一种更加简洁明了呐~~~

查看完整回答
反对 回复 2023-02-20
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

一般定义端口不在module后面()中定义,而是单独定义,像第一种表达方式一样。
写法比较标准。
还有第一种写法有错误,C应该是output C;
input 不能定义成reg类型

查看完整回答
反对 回复 2023-02-20
  • 2 回答
  • 0 关注
  • 150 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号