verilog语言实现任意分频
原文出自:分频器是指使输出信号频率为输入信号频率整数分之一的电子电路。在许多电子设备中如电子钟、频率合成器等,需要各种不同频率的信号协同工作,常用的方法是以稳定度高的晶体振荡器为主振源,通过变换得到所需要的各种频率成分,分频器是一种主要变换手段。早期的分频器多为正弦分频器,随着数字集成电路的发展,脉冲分频器(又称数字分频器)逐渐取代了正弦分频器。下面以Verilog HDL 语言为基础介绍占空比为50%的分频器。1 偶分频偶分频比较简单,假设为N分频,只需计数到N/2-1,然后时钟翻转、计数清零,如此循环就可以得到N(偶)分频。代码如下。module fp_even(clk_out,clk_in,rst);output clk_out;input clk_in;input rst;reg [1:0] cnt;reg clk_out;parameter N=6; always @ (posedge clk_in or negedge rst)beginif(!rst) begin cnt <= 0; clk_out <= 0; endelse begin if(cnt==N/2-1) begin clk_out <= !clk_out; cnt<=0; end else cnt <= cnt + 1; endendendmodule可以通过改变参量N的值和计数变量cnt的位宽实现任意偶分频。偶分频(N=6)的RTL原理图:
偶分频(N=6)的行为仿真结果:
2 奇分频 实现奇数(N)分频,分别用上升沿计数到(N-1)/2,再计数到N-1;用下降沿计数到(N-1)/2,再计数到N-1,得到两个波形,然后把它们相或即可得到N分频。代码如下:module fp_odd(clk_out,clk_p,clk_n,clk_in,rst);output clk_out;output clk_p,clk_n;input clk_in,rst; reg [2:0] cnt_p,cnt_n;reg clk_p,clk_n;parameter N=5; always @ (posedge clk_in or negedge rst)begin if(!rst) cnt_p <= 0; else if(cnt_p==N-1) cnt_p <=0; else cnt_p <= cnt_p + 1;end always @ (posedge clk_in or negedge rst)begin if(!rst) clk_p <= 0; else if(cnt_p==(N-1)/2) clk_p <= !clk_p; else if(cnt_p==N-1) clk_p <= !clk_p;end always @ (negedge clk_in or negedge rst)begin if(!rst) cnt_n <= 0; else if(cnt_n==N-1) cnt_n <=0; else cnt_n <= cnt_n + 1;end always @ (negedge clk_in or negedge rst)begin if(!rst) clk_n <= 0; else if(cnt_n==(N-1)/2) clk_n <= !clk_n; else if(cnt_n==N-1) clk_n <= !clk_n;end assign clk_out = clk_p | clk_n;endmodule RTL SchemaTIc:
Simulate Behavioral Model:
同理,可以通过改变参量N的值和计数变量cnt_p和cnt_n的位宽实现任意奇分频。 3 任意占空比的任意分频在verilog程序设计中,我们往往要对一个频率进行任意分频,而且占空比也有一定的要求
- 电子电路设计之C51单片机常见问题(10-22)
- 电子电路常见故障类型及处理方法系统解析(08-22)
- 那些值得电子发烧友珍藏的经典模拟电路(02-03)
- 基于MC8051 IP核和FPGA的频率计设计(11-24)
- 赛灵思FPGA DIY系列(2):数字存储扫频仪(11-06)
- 基于Verilog FPGA 流水灯设计(07-09)