首页 > 解决方案 > HDL 计数器和标志编码风格

问题描述

在 Verilog/VHDL 中,假设我有一个 4 位计数器,以及一个在计数器等于 4 到 8 时应该置位的标志。有两种方法可以实现这一点

    if((cntr>=4)&&(cntr<8))
        flag <=1;
     else
       flag <= 0;

或者,我可以这样做

   if(cntr==4)
       flag<=1;
    else if (cntr==8)
       flag<=0;

在我看来,在功能上,它们做同样的事情。

有什么理由比另一个更好吗?风格明智?综合/实现怎么样?

标签: veriloghdldigital-logic

解决方案


在这两个示例中,flag都将被合成为触发器。这是因为(我假设)您是从时钟始终块内驱动它的,即您的两个示例是:

always @(posedge clk)
  if ((cntr>=4)&&(cntr<8))
    flag <= 1;
  else
    flag <= 0;

always @(posedge clk)
  if (cntr==4)
    flag <= 1;
  else if (cntr==8)
    flag <= 0;

这两个示例都是简单的(2 态)FSM。他们之间几乎没有选择。两者都将由触发器 ( flag) 实现,其 D 输入由少量组合逻辑驱动。唯一的区别是,第二个示例的组合逻辑可能比第一个示例小,因为实现==通常需要的面积比实现<or少>


推荐阅读