而 case 语句是并行的,没有优先级,这在两者综合出来的 RTL 视图中可以明显的观察出来。但由于现在的仿真和综合工具已经足够强大,最后综合后的结果 if…else…与 case…语句其实并无不同,只不过是两种不同的实现方式而已,因此基本上不用考虑这两者间的区别。在不影响功能的前提下设计师不需要做局部的优化工作,例如...
Altera QuartusII中,使用parallel_case综合属性,可以让case语句综合成没有优先级的并行case逻辑。对于case, casex, casez都一样的。 语句需要这样写(注释部分很重要): case (sel) // synthesis parallel_case ... 所以,一些资料中认为case是一定无优先级是不准确的。 以下是QuartusII 11.0 Help中“parallel_case...
•Case语句通常综合出无优先级的多路复用器,而if和?:通常综合出有优先级的多路复用器。 •对于模块的输入信号,尽量在寄存器锁存之后再用,但如果输入信号来自其他模块的寄存器输出,则不用。对于输出信号尽量用锁存器锁存之后再输出。这样可以获得更好的timing。 •reg变量只能在一个always语句中赋值。 •在写验...
case变量本身可以是 不同信号的拼接。 通常在以下场景中选择多路if语句: 综合优先级编码逻辑,有多个变量控制语句流程。 使用case语句比if-else语句更具可读性,特别是用于状态机时。 在case结构中,如果未指定所有可能的case,并且缺少default语句,则会推断出锁存器。 同样,对于if-else结构,如果缺少最后的else语句,也...
一个正确的说法是,case语句,即可以实现parallel结构,也可以实现优先级编码。 具体内容可参见case语句的综合结果,你究竟会了吗? 因此,我们可以使用case语句代替if语句去判断固定优先级的仲裁器应该输出什么grant值,RTL代码参见下文即可。 3.2 for循环法 除此以外,for语句也可以用来设计固定优先级仲裁器,对于固定主设备...
case 和 parallel case(问题多出现在caseZ和caseX,注意保持互斥)),而if…else用的就是它的优先级...
casex是顺序执行的满足条件就退出 所以5‘b00???是满足5’b0x000的 因为这里‘x’和‘?’ 一样会被看成是任意满足的数值。如果在实际电路里面这种语义的东西是综合不出来的。所以请尽量避免进到casex()的信号是带有x数值的信号。
使用Case语句而不是if-then-else语句 复杂的if-then-else语句通常会生成优先级译码逻辑这将会增加这些路径上的组合时延 用来产生复杂逻辑的Case语句通常会生成不会有太多时延的并行逻辑 对于Verilog用户可以使用编译向导synopsys parallel_case 使用一个或多个核生成器块 ...
对于组合逻辑,采用 if…else 或 case 语句,其综合的结果将有所不同。如果电路不需要有优先级的设计,则应优先采用 case 语句。因为在一般情况下,case 语句实现的电路的设计路径延迟要小于 if…else 语句实现的电路。但要注意,如果信号 a 是关键路径,则此时综合的时序结果前者要优于后者。