今天碰到一个很恶心的问题,我要用6.25mhz的clock,我只有100mhz的时钟,怎么办?分频呗!这个是简单。
always @(posedge clk_100)begin
if(reset)
clk_6_25m <= 1'b0;
else if(...)
clk_6_25m <= ~clk_6_25m;
end
恶心的是,我的6.25mhz的电路使用的是同步reset,也就是类似:
always @(posedge clk_6_25m)begin
if(reset)
.....
else
.....
end
也就是说,在reset为1的时候,clk_6_25m肯定是0,那clk_6_25m控制的时序电路处于何种状态呢?那些个复位怎么处理呢?此时,本人无比的感觉异步复位的绝对好处!
没办法,我还是得用的啊!
然后,本人就使用了如下的方式,硬是凑出个reset出来!
reg rst_d,rst_d1,rst_d2;
reg [5:0] cnt_rstlatch;
wire rst_edge;
assign rst_edge = ~rst_d2 & rst_d1;
always @(posedge clk_100) begin
rst_d <= rst;
rst_d1 <= rst_d;
rst_d2 <= rst_d1;
end
always @(posedge clk_100 or negedge rst)
begin
if(!rst)
cnt_rstlatch <= 6'd0;
else if(rst_edge)
cnt_rstlatch <= 6'd30;
else if(cnt_rstlatch > 6'd0)
cnt_rstlatch <= cnt_rstlatch - 6'd1;
end
assign rst_wg = !(cnt_rstlatch > 6'd0);
这里涉及到一个问题,就是分频的倍数越高,所需要的cnt_rstlatch 就越多,终究不是好办法。。。
阅读(1341) | 评论(0) | 转发(0) |