赞
踩
FPGA提供的是50M的系统时钟clk,在具体设计的时候需要对时钟分频以满足各个模块的要求,此处因为我要使用传感器,传感器的读写时序是以微秒计算的,于是需要对clk进行50分频产生1MHz的分频时钟。此处使用计数器的方法进行分频,这种方法是一种加法器的变形电路,实现较为简单。
偶数分频的分频系数N,通过时钟触发计数器计数,当计数器从0计数到N/2-1时,输出时钟进行翻转,以此循环下去,此处使用50分频,于是反转条件为50/2-1=24
- always @ (posedge clk or negedge rst_n)
- begin
- if (!rst_n) begin
- cnt <= 5'b0;
- clk_1us <= 1'b0;
- end
- else if(cnt < 5'd24)
- begin
- cnt <= cnt + 1'b1;
- clk_1us <= clk_1us;
- end
- else begin
- cnt <= 5'b0;
- clk_1us <= ~clk_1us;
- end
- end

经过编写testbench程序在modelsim里进行仿真得到如下仿真图
如图在10ns之前由于复位信号未产生作用,信号处于不定态(红线),而1010ns时完成一个时钟周期,所以T=1000ns,即0.000001s,T=1s/1M,完成50分频得到1M信号的既定功能。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。