每天一点Verilog,《高级FPGA设计》学习笔记:综合编码2

    技术2026-08-30  4

    当判决树有特权编码时应该利用if/else结构。

    另一方面,case结构常常利用在所有条件互不相容的情况。为了在verilog中实现完全相同的功能,一个case语句可以利用。

     

        case(1)

            ctrl[0]: rout<=in[0];

            ctrl[1]: rout<=in[1];

            ctrl[2]: rout<=in[2];

            ctrl[3]: rout<=in[3];

        endcase

     

     

    由于case语句是if/else结构的一个有效替代的事实,许多初学者以为这是自动地无特权判决树实现,对于更严格的VHDL语言这个碰巧是正确的,但是对verilog不是这样,可以在下图中看到verilog的具体实现图。

    默认的是特权被译码来设置多路选择器上相应的使能引脚,这导致许多设计者落入陷阱。为了去除这个特权编码,利用综合的伪指令“parallel_case”来实现真正的并行结构。但是并不提倡这么做。去除特权后的结构图如下:

    如果case语句的条件没有一个是成立的,综合工具已经把寄存器的输出返回送到判决树作为一个缺省条件。对设计者来说,一个好的习惯是显式给出缺省条件,这个缺省可能或不可能是当前数值,它避免了工具自动地锁存当前值。

     

    一个类似于parallel_case语句的综合伪指令是full_case伪指令。这个伪指令通知综合工具,所有的情况已经覆盖,不要求一个隐含的缺省条件。不过,这同样是不推荐使用的,会带来风险,因为用这些伪指令会引起仿真和综合之间的失配。下面是同时使用full_case和parallel_case的结构图:

     

    最新回复(0)