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

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 ","
  所以请教各位大侠 是什么问题

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
332117438
1楼-- · 2020-02-04 11:30
.OUT300A[6:4](OUT300[2:0]),

这样写语法支持???????没这么试过,为什么非得这样,底层处理就好了
XLDZZ
2楼-- · 2020-02-04 15:36
逻辑不够了
waiter
3楼-- · 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];
这样也是正确得妥妥的啊!
XLDZZ
4楼-- · 2020-02-04 20:32
这么做要多几个逻辑 我用的是老掉牙的max7000 就128个宏单元 我现在已经使用了127个
waiter
5楼-- · 2020-02-05 00:22
 精彩回答 2  元偷偷看……
XLDZZ
6楼-- · 2020-02-05 06:09
你自己写写看就知道了 后来我把pwm的位宽降低才可以的

一周热门 更多>