Verilog编码规则:不使用integer类型,使用精确定义位宽的wire\reg类型

            在初学Verilog时就被前辈教导,使用数字时应精确定义位宽,这是有道理的。

            举例:

            assign z_dout_t = (z_dout[12] == 1'b1) ? {dist_flag_sync, z_dout[11:0]+1} : {dist_flag_sync, z_dout[11:0]};

            这里有个加1的处理,没有指明位宽,结果综合出来是下面的效果。

            而实际设计意图是想达到下面的效果(z_dout_t[15:12]直接由dist_flag_sync[3:0]赋值)。

         可以看出。如果指明位宽12,则输出结果只输出指定宽度[11:0],进位会舍弃掉。如果不指明位宽,则输出结果是[12:0],进位会保留。

         精确限定位宽,则综合结果明确,不论在何种编译器上都能得出相同的编译结果,代码通用性更好。

        上面的例子是实际项目中遇到的问题。再一次说明遵守编码规则的重要性。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值