任意分频 奇数偶数分频
来源:互联网 发布:猪八戒出题软件 编辑:程序博客网 时间:2024/05/16 19:28
任意分频的方法从网上看了有不少东西,主要有奇数分频,偶数分频,再就是任意分频。
1、先说一下任意分频,任意分频的方法类似于DDS的产生方法,Fo/Fclk = fword / 2^N; N为计数器位宽,位宽越大,计数器越精确,
如果产生1_000_010Hz频率的信号,假设位宽是32位,时钟是50M,fword = 1_000_010 * 2^32 /50_000_000 = 85900204.913 四舍五入
fword为85900205;以2^31当作门限电压,当计数器小于2^32一半的时候,div_clk输出低电平,否则输出高电平,不过存在相位抖动的
情况,一般情况采用这种方法分频是ok的。
/*-----------------------------------------------------------------------Date : 2017--XXDescription : Design for LCD1602 Display.-----------------------------------------------------------------------*/module pro_clk( //global clock input clk, //system clock input rst_n, //sync reset //XXX interface output reg div_clk // ); //--------------------------------//Funtion : pinlv控制字parameter fword = 32'd85900205;reg [31:0] cnt;always @(posedge clk or negedge rst_n)begin if(!rst_n) cnt <= 32'd0; else cnt <= cnt + fword;end//--------------------------------//Funtion : 方波合成always @(posedge clk or negedge rst_n)begin if(!rst_n) div_clk <= 1'd0; else if(cnt < 32'h7fff_ffff) div_clk <= 1'd0; else div_clk <= 1'd1;end//--------------------------------//Funtion : 检测上升沿reg div_clk_r;always @(posedge clk or negedge rst_n)begin if(!rst_n) div_clk_r <= 1'd0; else div_clk_r <= div_clk;endwire div_value;assign div_value = (div_clk == 1'b1 && div_clk_r == 1'b0) ? 1'b1 : 1'b0;endmodule
2、偶数分频就是平常大家最常用的一种方法,比如进行N分频,N为偶数,那么通过计数器从0计数到N/2 - 1,输出时钟进行反转,这样最终输出的信号就是
N倍偶数分频了。
/*-----------------------------------------------------------------------
Date : 2017-07-29
Description : Design for 奇数分频.
-----------------------------------------------------------------------*/
module pro_clk
(
//global clock
input clk, //system clock
input rst_n, //sync reset
//div_clk interface
output div_clk //
);
//--------------------------------
//Funtion : counter1
parameter N = 32'd11;
reg [31:0] cnt;
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
cnt <= 32'd0;
else if(cnt == N - 1'b1)
cnt <= 32'd0;
else
cnt <= cnt + 1'd1;
end
//--------------------------------
//Funtion : counter2
parameter N1 = 32'd11;
reg [31:0] cnt1;
always @(negedge clk or negedge rst_n)
begin
if(!rst_n)
cnt1 <= 32'd0;
else if(cnt1 == N1 - 1'b1)
cnt1 <= 32'd0;
else
cnt1<= cnt1 + 1'd1;
end
//--------------------------------
//Funtion : 方波合成
reg div_clk1;
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
div_clk1 <= 1'd0;
else if(cnt == ((N >> 1'b1) - 1'b1))
div_clk1 <= 1'b0;
else if(cnt == N - 1'b1)
div_clk1 <= 1'b1;
end
//--------------------------------
//Funtion : 方波合成
reg div_clk2;
always @(negedge clk or negedge rst_n)
begin
if(!rst_n)
div_clk2 <= 1'd0;
else if(cnt1 == ((N1 >> 1'b1) - 1'b1))
div_clk2 <= 1'b0;
else if(cnt1 == N1 - 1'b1)
div_clk2 <= 1'b1;
end
//--------------------------------
//Funtion : 方波合成
assign div_clk = div_clk1 | div_clk2;
//--------------------------------
//Funtion : 检测上升沿
reg div_clk_r;
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
div_clk_r <= 1'd0;
else
div_clk_r <= div_clk;
end
wire div_value;
assign div_value = (div_clk == 1'b1 && div_clk_r == 1'b0) ? 1'b1 : 1'b0;
endmodule
- 任意分频 奇数偶数分频
- 任意奇数分频
- Verilog--奇数分频与偶数分频及占空比
- 奇数分频
- FPGA三分频,五分频,奇数分频
- 分频
- 分频
- 分频
- 分频
- 时钟的奇数分频
- 用Verilog语言实现奇数倍分频电路3分频、5分频、7分频
- verilog实现奇数倍分频
- Verilog实现任意整数分频
- quartus PLL 实现 任意分频
- verilog 语言实现任意分频
- 任意整数分频模块 Verilog
- quartus PLL 实现 任意分频
- Verilog任意整数分频电路
- csu1978LXX的图论题(floyd)
- 零基础学习嵌入式:嵌入式linux视频教程免费分享!
- VMware安装及破解+CenOS6.5安装+SecureCRT远程连接Linux
- 【redis学习(二)】手把手教你windows下的redis安装以及集群搭建
- F(x) [数位DP]
- 任意分频 奇数偶数分频
- 关于typedef的用法总结
- Python(22):用SciPy做优化
- UNIX网络编程-tcp套接字编程一
- 25个强大的CSS代码
- 约瑟环解法
- spring IOC和DI
- 31. Next Permutation
- HDOJ1176 免费馅饼 简单的二维DP