请大侠看看代码(关于同步清零的)
时间:10-02
整理:3721RD
点击:
目的:用19.44M的晶振 产生10khz,每当clr的上升沿的时候要求10khz与之对齐,clr也就是秒脉冲
代码:module C10KHz(input clk,
input clr,
output reg kout);
parameter fullcnt = 1944;
parameter halfcnt = 972;
reg [12:0] cnt;
reg clrbuf;
always @ ( posedge clk)begin
if(((clrbuf == 0 ) && (clr == 1)) | (cnt + 1 >= fullcnt)) begin
cnt <= 0;
kout <= 1;
end else begin
cnt <= cnt + 1;
kout <= cnt < halfcnt;
end
clrbuf <= clr;
end
endmodule
现象: 大多数时间能对齐,有时对不齐,请大家分析下,非常感谢!
代码:module C10KHz(input clk,
input clr,
output reg kout);
parameter fullcnt = 1944;
parameter halfcnt = 972;
reg [12:0] cnt;
reg clrbuf;
always @ ( posedge clk)begin
if(((clrbuf == 0 ) && (clr == 1)) | (cnt + 1 >= fullcnt)) begin
cnt <= 0;
kout <= 1;
end else begin
cnt <= cnt + 1;
kout <= cnt < halfcnt;
end
clrbuf <= clr;
end
endmodule
现象: 大多数时间能对齐,有时对不齐,请大家分析下,非常感谢!
连错误时刻的波形图都没有,怎么给你分析。
用示波器看的话就是大多数时候 clr的上升沿与10khz的上升沿对齐的,偶尔有几次没有对齐
仿真的时候没问题?
同步复位的概念不是说clr和clk要同一个沿出现呀,是说复位的有效是通过时钟采样来触发的,你把概念理解错了。
同意楼上,同步清零是指时钟有效沿到来时清零
楼上的理解错了,我说的不是和clr严格对齐,相差1到2个clk是可以接受的啊
所以说你不上仿真的波形图,人家怎么能理解
好,谢谢!
你的意思是要输入clr与输出的kout保持一直同步,是吗?那首先要让人知道你的clr是怎么产生的,秒脉冲的基准时钟是什么?也是19.44M的时钟吗?那你这个意思不是同步清零的概念了,而是保证两端信号同步的概念。还是先回答我问的问题吧。
clr是外部信号
既然是外部信号,那你怎么能控制他们之间对齐的关系呢?除非你内部作处理,但得到的就不是原来的clr信号了。
典型的CDC,把用来清零的信号先用时钟采样一次。
