例化选择特定的几位输出遇到的问题

2020-02-04 10:24发布

各位大侠们

    故事是这样发生的,我在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 ","
  所以请教各位大侠 是什么问题

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
9条回答
waiter
2020-02-04 18:32
.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];
这样也是正确得妥妥的啊!

一周热门 更多>