在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;
在我看来,在功能上,这些做同样的事情。
有没有理由比另一个好?风格明智?合成/实施怎么样?
答案 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输入由少量组合逻辑驱动。唯一的区别是第二个示例的组合逻辑可能比第一个更小,因为实现==
通常比实现<
或>
需要更少的区域。