一个计数器的问题
时间:10-02
整理:3721RD
点击:
今天碰到别人写的一个计数器:
reg [2:0] cnt;
always @(posedge clk,negedge rst)
begin
if(rst)
cnt <= 3'd0;
else begin
cnt <= cnt + 3'd1;
if(cnt == 3'd3)
cnt <= 3'd0;
end
end
这样写的方式跟我们平时写的方式有出入,结果我就产生了疑问,这样的写法是基于怎样的考虑,
有考虑到实际的硬件电路?
ps:习惯写法:
reg [2:0] cnt;
always @(posedge clk,negedge rst)
begin
if(rst)
cnt <= 3'd0;
else if(cnt == 3'd3)
cnt <= 3'd0;
else
cnt <= cnt + 3'd1;
end
reg [2:0] cnt;
always @(posedge clk,negedge rst)
begin
if(rst)
cnt <= 3'd0;
else begin
cnt <= cnt + 3'd1;
if(cnt == 3'd3)
cnt <= 3'd0;
end
end
这样写的方式跟我们平时写的方式有出入,结果我就产生了疑问,这样的写法是基于怎样的考虑,
有考虑到实际的硬件电路?
ps:习惯写法:
reg [2:0] cnt;
always @(posedge clk,negedge rst)
begin
if(rst)
cnt <= 3'd0;
else if(cnt == 3'd3)
cnt <= 3'd0;
else
cnt <= cnt + 3'd1;
end
这个电路看一眼就知道是垃圾。连高低电平复位都搞不清楚。
恩。
可能是初学呗~
我也覺得是初學者, 沒有什麼特別意義
问过前辈,他们说第一个是mux在后,对前级的驱动能力要求不那么高;
第二个是mux在前,对前级的驱动能力要求高些;
对他的解释持怀疑态度
always @ (posedge clk or posedge rst)
begin
if (rst == 1'b1)
cnt <= 3'd0;
else if (cnt >= 3'd3)
cnt <= 3'd0;
else
cnt <= cnt + 3'd1;
end
在综合上,综合器会把他们综合成一样的
