FPGA奇数和偶数分频器和半整数及任意小数分频器设计(Verilog程序)
余年寄山水
893次浏览
2021年01月24日 17:20
最佳经验
本文由作者推荐
描写花的佳句-1500
Engineer
Lhrace
Author:
---Engineer Lhrace
1
、
半整数
分频占空比不为
50%
//
说明:设 计的史上最好用的半整数分频占空比不为
50%
,包含设计思路
module div_5(clk,clk_div,cnt1,cnt2,temp1,temp2);//N+0.5
input clk;
output clk_div;
output reg[31:0]cnt1,cnt2;
output reg temp1,temp2;
initial begin temp1=0;temp2=1;end
//
首先进行初始化,
temp1=0;temp2=1
parameter N=5;
//
设定分频系数为
N+0.5
always @(posedge clk)
//temp1
上升沿跳变
begin
if(cnt1==2*N)
//
2*N
begin cnt1[31:0]<=32'd0;end
else begin cnt1[31:0]<=cnt1[31:0]+32'd1;end
if(cnt1==32'd0) begin temp1<=1;end
/
/
高电平时间为
N+1;
if(cnt1==N+1) begin temp1<=0;end
//
低电平时间为
N;
end
always@(negedge clk)
//temp2
下降沿跳变
begin
if(cnt2==2*N)
//
2*N
begin cnt2[31:0]<=32'd0;end
else begin cnt2[31:0]<=cnt2[31:0]+32'd1;end
if(cnt2==32'd0) begin temp2<=0;end
//
低电平时间为
N;
if(cnt2==N) begin temp2<=1;end
//
高电平时间为
N+1;
end
assign clk_div=temp1&&temp2;
//
逻辑与
endmodule
//
如果要进行
N+0.5
分频
//
思路:总的来说要进行
N+1+N=2N+1
次分频
//
在时钟的上升沿和下降沿都进行跳变
//
上升沿进行占空比为
N+1
比
N
的时钟
temp1;
//
下降沿进行 占空比为
N
比
N+1
的时钟
temp2;
//
最后
div=temp1&&temp2
即可得到所需要的半整数分频
分频
5.5
仿真结果
Engineer
Lhrace
2
、奇数分频
占空比为
50%
//
说明:奇数分频。
module div_5(clk,clk_div,cnt1,cnt2,temp1,temp2);//
input clk;
output clk_div;
output reg[31:0]cnt1,cnt2;
output reg temp1,temp2;
parameter N=5;
//
设定分频系数
always @(posedge clk)
begin
if(cnt1==N-1)
//
N-1
进行
N
计数
begin cnt1[31:0]<=32'd0;end
else begin cnt1[31:0]<=cnt1[31:0]+32'd1;end
if(cnt1==32'd0) begin temp1<=1;end
//
if(cnt1==(N-1)/
2) begin temp1<=0;end
//
当计数到
(N-1)/
2
时翻转
end
always@(negedge clk)
begin
if(cnt2==N-1)
//N-1
begin cnt2[31:0]<=32'd0;end
else begin cnt2[31:0]<=cnt2[31:0]+32'd1;end
if(cnt2==32'd0) begin temp2<=1;end
//;
if(cnt2==(N-1)/
2) begin temp2<=0;end
//
当计数到
(N-1)/
2
时翻转
;
end
assign clk_div=temp1||temp2;
//
逻辑或
endmodule