原创 关于parallel_case和full_case的使用

2009-10-25 00:07 6461 5 8 分类: MCU/ 嵌入式

总是想写点东西,区分一下synopsys 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就可以了。


 


浅浅的说了一下,有什么说错,就拍我一砖,呵呵。

PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

用户1136505 2015-9-1 10:08

Thanks for sharing this book. It's valuable.

用户1850916 2015-8-26 17:24

嗯,又涨姿势了

用户377235 2015-8-23 16:18

说的不错 受教了

用户1776131 2014-8-7 10:14

very good

coyoo 2014-7-29 08:56

群号为:170938241

用户467230 2014-7-28 17:08

谢谢作者的总结和代码,对于较快了解FPGA的深入设计/实现方法很有帮助!

coyoo 2014-3-26 11:02

书名其实我在另外一篇博文里有提到: http://bbs.ednchina.com/BLOG_ARTICLE_3016593.HTM 至于QQ群,目前还没有,呵呵,大家有兴趣,可以自己组群到时候拉我进去即可。

用户1211780 2014-3-26 10:46

书名是什么呢?另外,你出的那本书我买了,确实不错,需要仔细阅读,有的章节我看了好几遍,哈哈。顺便问一句,有没有专门的qq群呢?

coyoo 2014-3-26 10:31

严格来说是一本老外书里的例程,人家例子是基于Xilinx和Synplify,我将这些例子在Quartus II里进行了验证比较而已。

用户1211780 2014-3-26 10:25

这是一本书的源代码么?
相关推荐阅读
用户37223 2010-03-07 22:22
写verilog就是要简单
写verilog就要要简单。因为verilog是要表达实际的电路设计的,只要能表达设计意图,使用的语法越简单越好。简单意味着出错机会少、容易理解、不容易误解。怎么样才算一个简单的verilog文件呢?...
我要评论
3
5
关闭 站长推荐上一条 /3 下一条