各位大侠们
故事是这样发生的,我在top模块定义了一个输出
OUTPUT[2:0]OUT300; 是wire类型
然后在底层模块中定义了一个寄存器组
//以下为底层模块的端口定义
output[7:0]OUT300A;
reg[7:0]OUT300A;
//现在要例化
.OUT300A(OUT300), //这么写是没问题的 也不报错.但是只取了低3位的数据
.OUT300A[6:4](OUT300[2:0]), //这样写就会有问题 报错
具体的报错内容是这个
Error (10170): Verilog HDL syntax error at WAP2_D1.v(165) near text "["; expecting ")", or ","
所以请教各位大侠 是什么问题
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
这样写语法支持???????没这么试过,为什么非得这样,底层处理就好了
------- 这样不出错才真的有问题啊!!
你都定义了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];
这样也是正确得妥妥的啊!
一周热门 更多>