关于parallel_case和full_case的使用

在写RTL的时候,常常会用到CASE语句,但是case语句实际综合后,产生的逻辑变化比较多,parallel_case和full_case主要就是用来控制综合器把case语句综合成什么硬件逻辑。


首先说说parallel_case。


例子一:


case (CASE_SIGNAL)


begin


  CASE1: A = B;


  CASE2: A = C;


  default:  A = D;


end


endcase


在这个case语句中,如果没有parallel_case的限制,case的条件是有优先级的,CASE1的优先级最高,CASE2次之,default最后。产生这样的优先级,是要用相应的硬件产生的。但是有些设计中,case语句不需要优先级,不同的case不会同时产生,那么综合器生成的优先级逻辑就是冗余的了。为了去除这些冗余逻辑,就用


case (CASE_SIGNL) // synopsys parallel_case


来告诉综合器,不需要产生优先级逻辑,而缩小了硬件的规模。但产生的副作用是,设计者要保证CASE1和CASE2不会同时发生,否则A会被赋予一个不确定的值。


再来就是full_case。


例子二:


case (CASE_SIGNAL)


begin


  CASE1: A = B;


  CASE2: A = C;


end


endcase


在例子二中,没有default的选项,综合器会产生一个latch,因为CASE都不成立时,A要保持上一次的值。然而通常设计者是不希望产生这个latch的。这时候,使用


case (CASE_SIGNL) // synopsys full_case


来告诉综合器,所有的CASE已经覆盖,不需要自动产生latch。


但产生的副作用是,设计者要保证只会有CASE1和CASE2,不会有CASE3的出现,否则A会是一个不确定的值。


其实full_case和default分支的作用是一样的,在case语句中只要有full_case或者default就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值