.OUT300A[6:4](OUT300[2:0]), //这样写就会有问题 报错
------- 这样不出错才真的有问题啊!!
你都定义了OUT300A是8比特的,哪有在端口列表时改他的道理?
或者说,你在模块定义时,这个“东西”你还可以理解为它是一个变量,从硬件上来说,就是规定了这个信号就是8比特的;而在例化时,.xxxx的形式,xxxx就只是一个表示符号,代表后面括号里的信号是与模块内的xxxx相连接而已。
你写成 .OUT300A[6:4](OUT300[2:0]), 估计是想把外部的 OUT300的[2:0],用模块内部的OUT300A的[6:4]驱动,那么你就直接写成:
.OUT300A({signal_nc0,OUT300[2:0],signal_nc2[3:0]}) ,
这样不就行了吗?
或者在顶层另外声明一个变量 wire [7:0] xxxyyy;
然后连接为:
.OUT300A(xxxyyy[7:0]) ,
然后重新驱动OUT300:
assign OUT300[2:0] = xxxyyy[6:4];
这样也是正确得妥妥的啊!
|