本帖最后由 kdurant 于 2016-9-2 15:39 编辑
纯属胡扯,以altera为例:
assign led = cnt[127];
reg [127:0] cnt;
always @(posedge clk or negedge rst)
begin
if(~rst)
cnt <= 0;
else
cnt <= cnt + 1'b1;;
end
一个128bit的计数器,消耗资源
Total logic elements 128 / 10,320 ( 1 % )
Total combinational functions 128 / 10,320 ( 1 % )
Dedicated logic registers 128 / 10,320 ( 1 % )
Total registers 128
assign led = cnt2[63];
reg [63:0] cnt1;
reg [63:0] cnt2;
always [url=home.php?mod=space&uid=72445]@[/url] (posedge clk or negedge rst)
begin
if(~rst)
cnt1 <= 0;
else
cnt1 <= cnt1 + 1'b1;;
end
always @ (posedge clk or negedge rst)
begin
if(~rst)
cnt2 <= 0;
else if(cnt1 == {64{1'b1}})
cnt2 <= cnt2 + 1;
end
拆分成2个64bit的计数器,消耗资源
Total logic elements 149 / 10,320 ( 1 % )
Total combinational functions 149 / 10,320 ( 1 % )
Dedicated logic registers 128 / 10,320 ( 1 % )
Total registers 128
可见拆分为2个更小的计数器,消耗的资源反而更多了,比较cnt2需要多一个比较逻辑才能加
这么做只有一个理由,那就是减少了计数器的组合逻辑路径(减少了加法器的进位链级数),提高了Fmax
可以说是面积换速度吧 |