HDL计数器和标志编码样式

时间:2018-05-17 09:17:14

标签: verilog hdl digital-logic

在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;

在我看来,在功能上,这些做同样的事情。

有没有理由比另一个好?风格明智?合成/实施怎么样?

1 个答案:

答案 0 :(得分:1)

在两个示例中,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输入由少量组合逻辑驱动。唯一的区别是第二个示例的组合逻辑可能比第一个更小,因为实现==通常比实现<>需要更少的区域。