一、分频器
1.定义
分频器是数字系统设计中最常见的基本电路之一。所谓“分频”,就是把输入信号的频率变成成倍数地低于输入频率的输出信号。
分频器分为偶数分频器和奇数分频器,和计数器非常类似,有时候甚至可以说就是一个东西。
2.实现分频
想得到比固定时钟频率更慢的时钟,可以将固定时钟进行分频
想得到比固定时钟频率更快的时钟,可以将固定时钟进行倍频
又两种方式实现分频与倍频
①锁相环pll
②自己编写verilog语言来实现
3.奇偶分频
偶分频:成倍数低于输入频率的输出信号有2、4、6、8分频
奇分频:成倍数低于输入频率的输出信号有3、5、7、9分频
分频就是输出信号的一个周期对应clk的6个周期
凡是时钟信号都要连接到全局时钟网络,也叫全局时钟数,它是FPGA厂家专为时钟路径而特殊设计的,它能使时钟信号到达每个寄存器的时间都尽可能相同。更容易在高速系统中保持信号稳定。
4.实现偶分频方式
方式一:在分频之后的时钟产生的(分频)
方式二:在系统信号中产生的(降频)
其区别如下,实现的条件一个是在分频之后为条件,另外一个是在系统时钟下产生的,我们建议使用第二种方式
二、实现
1.方式一波形图
2.方式一程序(分频法)
module divider_six
(
input wire sys_clk,
input wire sys_rst_n,
output reg clk_out
);
reg [1:0] cnt;
always@(posedge sys_clk or negedge sys_rst_n)
if(sys_rst_n == 1’b0)
clk_out <= 1’b0;
else if (cnt == 2’d2)
clk_out <= ~clk_out;
else
clk_out <= clk_out;
always@(posedge sys_clk or negedge sys_rst_n)
if(sys_rst_n == 1’b0)
cnt <= 2’b0;
else if(cnt == 2’d2)
cnt <= 2’b0;
else
cnt <= cnt + 1’b1;
endmodule
仿真程序
`timescale 1ns/1ns
module tb_divider_six();
reg sys_clk;
reg sys_rst_n;
wire clk_out;
initial
begin
sys_clk = 1’b0;
sys_rst_n <= 1’b0;
#20
sys_rst_n <= 1’b1;
end
always #10 sys_clk = ~sys_clk;
initial
begin
$timeformat(-9,0,“ns”,6);
m o n i t o r ( " @ t i m e monitor("@time %t:clk_flag=%b",monitor("@timetime,clk_flag);
end
divider_six divider_six_inst
(
.sys_clk (sys_clk) ,
.sys_rst_n(sys_rst_n) ,
.clk_out (clk_fout)
);
endmodule
3.方式二波形图
4.方式二程序(降频)
module divider_six
(
input wire sys_clk,
input wire sys_rst_n,
output reg clk_flag
);
reg [2:0] cnt;
always@(posedge sys_clk or negedge sys_rst_n)
if(sys_rst_n == 1’b0)
clk_flag <= 1’b0;
else if (cnt == 3’d4)
clk_flag <= 1’b1;
else
clk_flag <= 1’b0;
always@(posedge sys_clk or negedge sys_rst_n)
if(sys_rst_n == 1’b0)
cnt <= 3’b0;
else if(cnt == 3’d5)
cnt <= 3’d0;
else
cnt <= cnt + 1’b1;
endmodule
仿真程序与上面类似
————————————————
版权声明:本文为CSDN博主「guo-1228」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_48564372/article/details/112442712
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。