gpt4 book ai didi

counter - 良好的计数器设计或可能的亚稳态问题?

转载 作者:行者123 更新时间:2023-12-01 22:25:02 24 4
gpt4 key购买 nike

我的目标的快速总结:设计一个由可变长度自动重新加载计时器触发的计数器。

更详细一点:将有一个寄存器,其值会发生变化(可预见地发生变化,并且在 AutoReloadTimer 模块的 EN 信号之前被锁存),用于设置计数器递增的速率。

这是自动重新加载计时器:

module AutoReloadTimer( clk, rst, EN, D, done );
input clk;
input rst;
input EN;
input [WIDTH-1:0] D;
output done;

parameter WIDTH = 8;

// OneShot EN -> load
wire load;
OneShotD OneShot_D(
.clk( clk ),
.rst( rst ),
.in( EN ),
.RE( load )
);

reg [WIDTH-1:0] counter, load_value;

always @( posedge clk ) begin
if ( rst ) begin
counter <= {WIDTH{1'b1}};
load_value <= {WIDTH{1'b1}};
end else if ( load ) begin
counter <= D;
load_value <= D;
end else if (counter == 0 ) begin
counter <= load_value;
load_value <= load_value;
end else begin
counter <= counter - 1'b1;
load_value <= load_value;
end
end

assign done = ( counter == 0 );

endmodule

这是由 AutoReloadTimer 模块的完成信号触发的计数器:

module Counter( clk, rst, EN, CLR, Q );
input clk;
input rst;
input EN;
input CLR;
output [WIDTH-1:0] Q;

parameter WIDTH = 8;

reg [WIDTH-1:0] ctr;

always @( posedge clk ) begin
if ( rst ) begin
ctr <= {WIDTH{1'b0}};
end else if ( CLR ) begin
ctr <= {WIDTH{1'b0}};
end else if ( EN ) begin
ctr <= ctr + 1'b1;
end else begin
ctr <= ctr;
end
end

assign Q = ctr;
endmodule

这是来自测试台的波形的一部分: Counter Waveform

我在这里好奇的是我的计数器的稳定性 - 完成信号在时​​钟上升沿变低是否是一个问题?我对 Verilog 和数字设计还很陌生。我熟悉这个术语,也熟悉亚稳态的概念,但我对它的理解并不完全满意。

寻求意见、批评等。

编辑我忘记包含模块的配置来生成该图:

wire ART_done;
AutoReloadTimer ART0 (
.clk( clk ),
.rst( rst ),
.EN( EN ),
.D( 4 ),
.done( ART_done )
);

Counter uut (
.clk(clk),
.rst(rst),
.EN(ART_done),
.CLR(CLR),
.Q(Q)
);

最佳答案

只要您的 AutoReloadTimer 和 Counter 模块以及使用完成信号的任何逻辑都位于同一时钟上,您就不会有任何亚稳态问题。您将拥有一个完全同步的实现。当然,您还必须满足您使用的设备的时序要求

完成信号实际上会在时钟上升沿之后改变一些小的组合路径延迟,从而导致计数器达到 0。任何使用完成信号的逻辑在下一个上升沿之前都有剩余的时钟周期,以执行以下操作它需要执行(更多组合逻辑)并且仍然满足由完成信号调节的任何寄存器输入的设置时间。

只有当任何寄存器的输入在时钟转换时正确转换时,才会出现亚稳态问题。如果正在注册的数据来自使用异步时钟的寄存器,或者寄存器的建立或保持时序被违反,则可能会发生这种情况。

关于counter - 良好的计数器设计或可能的亚稳态问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24337984/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com