奇数倍分频有多种实现方法,下面介绍常用的错位异或法的原理:
以下是一个3分频电路的verilog代码:
module clk_div_3(clk_in, rst_n, clk_out);
input clk_in;
input rst_n;
output clk_out;
reg [1:0] cnt_p, cnt_n;
reg clk_out_p, clk_out_n;
always @(posedge clk_in) begin
if(!rst_n) begin
cnt_p <= 0;
clk_out_p <= 0;
end
else begin
if(cnt_p == 2'b10)begin
cnt_p <= 2'b00;
clk_out_p <= clk_out_p;
end
else begin
cnt_p <= cnt_p + 1;
clk_out_p <= ~clk_out_p;
end
end
end
always @(negedge clk_in) begin
if(!rst_n) begin
cnt_n <= 0;
clk_out_n <= 0;
end
else begin
if(cnt_n == 2'b10)begin
cnt_n <= 2'b00;
clk_out_n <= clk_out_n;
end
else begin
cnt_n <= cnt_n + 1;
clk_out_n <= ~clk_out_n;
end
end
end
assign clk_out = clk_out_p | clk_out_n;
endmodule
用testbenchwaveform产生逻辑仿真为:
总结:这种错位异或法可以推广实现任意的奇数分频:对于实现占空比为50%的N倍奇数分频,首先进行上升沿触发的模N计数,计数到某一选定值(这里俺一般选第一个时钟沿)时进行输出时钟翻转,然后经过(N-1)/2再次进行翻转得到一个占空比非50%的奇数N分频时钟;再者同时进行下降沿触发的模N计数,到和上升沿触发输出时钟翻转选定值相同值时,进行输出时钟翻转,同样经过(N-1)/2时,输出时钟再次翻转生成占空比非50%的奇数N分频时钟。两个占空比非50%的N分频时钟相或运算,得到占空比为50%的奇数N分频时钟。
以下是一个7分频电路的verilog代码:
module clk_div_7(clk_in, rst_n, clk_out);
input clk_in;
input rst_n;
output clk_out;
reg [2:0] cnt_p, cnt_n;
reg clk_out_p, clk_out_n;
always @(posedge clk_in) begin
if(!rst_n) begin
cnt_p <= 0;
clk_out_p <= 0;
end
else begin
if(cnt_p == 3'b110) begin
cnt_p <= 0;
clk_out_p <= clk_out_p;
end
else if(cnt_p == 3'b011) begin
cnt_p <= cnt_p + 1;
clk_out_p = ~clk_out_p;
end
else if(cnt_p == 3'b000) begin
cnt_p <= cnt_p + 1;
clk_out_p = ~clk_out_p;
end
else begin
cnt_p <= cnt_p + 1;
clk_out_p <= clk_out_p;
end
end
end
always @(negedge clk_in) begin
if(!rst_n) begin
cnt_n <= 0;
clk_out_n <= 0;
end
else begin
if(cnt_n == 3'b110) begin
cnt_n <= 0;
clk_out_n <= clk_out_n;
end
else if(cnt_n == 3'b011) begin
cnt_n <= cnt_n + 1;
clk_out_n = ~clk_out_n;
end
else if(cnt_n == 3'b000) begin
cnt_n <= cnt_n + 1;
clk_out_n = ~clk_out_n;
end
else begin
cnt_n <= cnt_n + 1;
clk_out_n <= clk_out_n;
end
end
end
assign clk_out = clk_out_p | clk_out_n;
endmodule
逻辑仿真图为:
- 大小: 4.1 KB
- 大小: 4.6 KB
分享到:
相关推荐
奇数分频FPGA设计.利用主时钟的上升沿和下降沿分别产生6分频的时钟clk_1to3P和clk_1to3N,该时钟占空比为1/3,即高电平1个周期,电平2个周期。再利用两个时钟的高电平交叉部分刚好=1.5倍源时钟,“异或”后,得到3...
数字设计常见面试题——奇数分频占空比50%verilog实现
奇偶分频,使用Verilog HDL编写,能实现奇数,偶数分频
FPGA设计中时常用到时钟频率奇数分频的频率,这里介绍一种奇数倍分频的Verilog实现方法
给出了一种奇数分频电路设计方法,采用verilog HDL描述。修改代码中参数可以进行任意奇数分频,包含了设计文档和源代码。
用verilog HDL实现的任意偶分频的,奇数分频的示例。记得用记事本打开。
对于N倍的奇数分频,首先是在系统时钟的上升沿得到占空比为(N+1)/(2*N)的分频时钟clk_div_1,然后在系统时钟的下降沿得到占空比为(N+1)/(2*N) 的clk_div_2,最后将两个分频之后的时钟相与便会得到想要的奇数分频。...
实用verilog语言编写的偶数与奇数分频程序,可以实现任意不带小数分频
该代码可以实现任意的奇数偶数分频
基于Verilog设计七分频等奇数分频程序,EDA课程作业和考试基本用到,可以学习Verilog其他的分频程序
用verilog实现奇数分频器功能,fpga开发
基于verilog的PRESENT加密算法,包含源码、testbench、Quartus II的波形文件等等,加密结果检验正确,可以通过modelsim看所有中间变量结果。
用verilog 实现任意奇数的分频 百分之五十的占空比和非百分之五十的占空比均可轻松实现
SHA256算法的verilog实现 IPCore 自动生成的FIFO和ROM
分频器是FPGA设计中使用频率非常高的基本设计之一,尽管在目前大部分...第二,奇数倍分频:奇数倍分频常常在论坛上有人问起,实际上,奇数倍分频有两种实现方法:首先,完全可以通过计数器来实现,如进行三分频,通过待
占空比1:4的5分频奇数分频Cyclone4E FPGA设计Verilog逻辑源码Quartus工程文件, Quartus软件版本11.0, FPGA型号为CYCLONE4E系列中的EP4CE6E22C8,可以做为你的学习设计参考。 module f_14(clk_50M,f_14); input ...
任意分频用verilog实现,偶数分频,奇数分频
只用改一个参数,即可实现任意占空比为50%的奇数分频。很方便的
AES算法的verilog语言实现,已分成好模块,不同模块有不同的代码
任意分频的verilog 语言实现(占空比50%)