打印
[FPGA]

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

[复制链接]
811|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
XLDZZ|  楼主 | 2016-7-7 14:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大侠们

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

相关帖子

沙发
332117438| | 2016-7-7 17:33 | 只看该作者
.OUT300A[6:4](OUT300[2:0]),

这样写语法支持???????没这么试过,为什么非得这样,底层处理就好了

使用特权

评论回复
板凳
XLDZZ|  楼主 | 2016-7-7 22:44 | 只看该作者
逻辑不够了

使用特权

评论回复
地板
waiter| | 2016-7-8 00:17 | 只看该作者
.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];
这样也是正确得妥妥的啊!

使用特权

评论回复
5
XLDZZ|  楼主 | 2016-7-8 10:48 | 只看该作者
这么做要多几个逻辑 我用的是老掉牙的max7000 就128个宏单元 我现在已经使用了127个

使用特权

评论回复
6
waiter| | 2016-7-9 14:48 | 只看该作者
XLDZZ 发表于 2016-7-8 10:48
这么做要多几个逻辑 我用的是老掉牙的max7000 就128个宏单元 我现在已经使用了127个 ...

怎么可能?
这种写法一点额外逻辑都不需要!因为它只是一种连线关系的描述而已。

使用特权

评论回复
7
XLDZZ|  楼主 | 2016-7-9 17:49 | 只看该作者
你自己写写看就知道了 后来我把pwm的位宽降低才可以的

使用特权

评论回复
8
waiter| | 2016-7-9 19:15 | 只看该作者
我才不想去写这个东西呢。如果连我说的这个,你都还认为不对,那么你的确是还有很多东西要学习啊!

使用特权

评论回复
9
habc987| | 2016-7-12 22:34 | 只看该作者
8楼正解

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

64

主题

182

帖子

0

粉丝