基于Verilog的FPGA整数分频器设计及仿真
2015-07-12刘慧慧梁天泰周英杰
张 泽,刘慧慧,田 涛,梁天泰,周英杰
(1.北京工业大学 机电学院,北京 100124;2.北京石油化工学院 光机电装备技术北京市重点实验室,北京 102617;3.北京化工大学 机电工程学院,北京 100029)
基于Verilog的FPGA整数分频器设计及仿真
张 泽1,刘慧慧2,田 涛1,梁天泰2,周英杰3
(1.北京工业大学 机电学院,北京 100124;2.北京石油化工学院 光机电装备技术北京市重点实验室,北京 102617;3.北京化工大学 机电工程学院,北京 100029)
简单介绍了主要的时钟分频方法,提出了FPGA内部PLL分频的局限性,给出了基于Verilog HDL的整数分频方法。编写了Verilog HDL程序,实现了基于FPGA硬件平台的占空比为50%的任意整数分频。结合Quartus开发平台和Modelsim仿真软件验证表明,该分频方法简单、实用。采用该方法,替换N值可实现任意整数等占空比的分频。
Verilog HDL;FPGA;计数;分频;仿真;占空比
在大部分时钟电路设计中, 首先考虑的方法是集成的锁相环资源,如使用Xilinx的DLL或ALTERA的PLL模块对时钟分频设计;但芯片内部的DLL或PLL资源十分有限,所以设计一些基本时钟电路时,往往采用高频晶振产生高频率的脉冲,然后通过分频方法进行分频,得到不同频率的脉冲。例如对时钟要求不高的数字电路,通过Verilog HDL进行时钟分频是非常通用的方法,可以有效节省锁相环资源,消耗不多的逻辑单元就可以得到所需要的时钟频率[1]。
1 Verilog HDL语言
Verilog HDL是目前世界上最流行的硬件描述语言之一,它允许设计者进行各种层次的逻辑设计,还能对所设计的数字系统进行逻辑综合、仿真验证和时序分析。其具有很强的文件读写能力,允许用户在不同的抽象层次上对电路进行建模,这些层次从门级、寄存器传输级、行为级直至算法级[2]。
在FPGA 上,采用Verilog HDL语言进行分频器设计主要有如下优点:设计的分频器是一种可嵌入式的,可直接嵌入到多种应用系统中;可同其他电路设计在在一块FPGA上,提高系统集成度,有效提高FPGA 的利用率;具有很大的灵活性,实现硬件电路设计的软件化,边设计边调试,有效提高设计效率,缩短设计周期。
本文基于QuartusII 10.0和Modelsim 6.5e平台,使用Cyclone EP1C3T100I7N 芯片,内部只有1个PLL模块,不能满足多种频率时钟电路的需要,通过待分频的时钟触发计数器,设计了一种较为通用的,可实现等占空比的任意整数分频器[3-6]。
2 偶数N倍分频
一般方法为计数器被触发时,对模N从0开始计数,计数到N/2-1时,输出时钟反转,同时传递1个复位信号,让计数器计数清零,以保证下一个时钟到来时计数器还是从0开始计数,如此循环,实现时钟等占空比偶数N倍分频。下述以10倍分频为例:
module div10(clkin, rst_n, clkout);
input clkin,rst_n;
output clkout;
reg clkout;
reg[4:0] cnt;
always@(posedge clkin or negedge rst_n)
if(!rst_n)
begin
cnt=0;
clkout = 0;
end
else if(cnt==4) //此处4 =(10/2-1)
begin
cnt=0;
clkout = ~clkout;
end
else
cnt=cnt+1;
endmodule
3 奇数N倍分频
对于实现等占空比的奇数N倍分频,设计方法有所区别。设定某一定值为(N-1)/2,首先用待分频的时钟上升沿触发计数器从0开始计数,当计数到这一定值时对输出时钟进行翻转,然后计数器加1再次对输出时钟进行翻转,得到一个占空比非50%奇数N倍分频时钟N1;与此同时,用时钟下降沿触发从0开始计数,到同一定值时进行输出翻转,计数器加1输出再次翻转,得到另一个占空比非50%的奇数N倍分频时钟N2。N1和N2这2个分频时钟相或运算,最终得到占空比为50%的奇数N倍分频时钟。下述以11倍分频为例:
module div_11(clkin, rst_n, cnt1,cnt2, clkout);
input clkin,rst_n;
output[3:0] cnt1,cnt2;
output clkout;
reg[3:0] cnt1,cnt2;
reg clk0,clk1;
wire clkout;
always@(posedge clkin or negedge rst_n)
if(!rst_n)
begin
cnt1 <= 1'b0;
clk0 <= 1'b0;
end
else
if(cnt1 <10)
begin
cnt1 <= cnt1 + 1'b1;
if(cnt1 == 5) //5=(10-1)/2
begin
clk0 <= ~clk0;
end
end
else //再次翻转
begin
clk0 <= ~clk0;
cnt1 <= 1'b0;
end
always@(posedge clk_re or negedge rst_n)
if(!rst_n)
begin
cnt2 <= 1'b0;
clk1 <= 1'b0;
end
else
if(cnt2 < 10) //10=11-1,这里cnt1和cnt2采用阻塞和非阻塞结果不同,可另探讨
begin
cnt2 <= cnt2 + 1'b1;
if(cnt2 == 5)
begin
clk1 <= ~clk1;
end
end
else
begin
clk1 <= ~clk1;
cnt2 <= 1'b0;
end
assign clk_re = ~clkin;
assign clkout = clk0 | clk1;
endmodule
4 仿真验证
在Quartus II 10.0中,工程编译通过后建立测试脚本,编写测试脚本程序,通过设置将测试脚本添加到Simulation关联中,直接运行EDA RTL Simulation进行仿真,具体步骤可查阅相关资料[7-8]。主要测试脚本程序如下:
initial begin
clkin=0;
forever
#12 clkin=~clkin;
end
initial begin
rst_n=0;
#100;
rst_n=1;
#5000;
$stop;
end
仿真结果如图1和图2所示。clkin信号都是在12 ns处翻转,rst_n信号在100 ns处变为高电平,计数器开始计数,总共运行5 100 ns。图1中clkout脉冲周期为10个clkin脉冲周期,图2中clkout脉冲周期则为11个clkin脉冲周期,cnt端口只是为了仿真时便于观察。
图1 10倍分频
图2 11倍分频
这2种分频方法简单,易于理解,成功实现了占空比为50%的任意整数N倍分频。2个initial模块简单实用,可以直接引用到Verilog分频仿真实验中。
5 结语
使用集成大量晶振来实现多频率输出,会造成很大的成本,不同晶振间的相位延迟也无法进行预测,而且集成大量晶振也容易在一个期间内引起串扰。采用Verilog HDL语言,对较高的晶振源进行分频设计就能很容易得到多样的频率输出,方便对不同产品的测试和应用。
本文设计的通用分频器,可实现占空比为50%任意整数分频,为设计人员在FPGA上设计其他等占空比任意整数分频器提供了一种思路。
[1] 夏宇闻.Verilog 数字系统设计教程[M].北京:北京航空航天大学出版社,2003.
[2] 夏宇闻.复杂数字电路与系统的Verilog HDL设计技术[M].北京:北京航空航天大学出版社,2002.
[3] 于枫,张丽英,廖宗建.ALTERA可编程逻辑器件应用技术[M].北京:科学出版社,2004.
[4] 邓玉元,吴琼.数字电路中等占空比分频器的实现[J].现代电子技术,2006,4(2):25-26.
[5] 夏龙根.一种新型分频器的设计实现[J].现代电子技术,2006,29(7):49-51.
[6] 郭振铎,刘洲峰,徐庆伟,等.一种基于Verilog的FPGA分频设计[J].成组技术与生产现代化,2010(3):59-62.
[7] 孙富明,李笑盈.基于多种EDA工具的FPGA设计[J].电子技术应用,2002(1):70-73.
[8] 汪国强.EDA技术及应用[M].北京:机械工业出版社,2004.
责任编辑马彤
FPGAIntegerFrequencyDividerDesignandSimulationbasedonVerilog
ZHANG Ze1,LIU Huihui2,TIAN Tao1,LIANG Tiantai2,ZHOU Yingjie3
(1.Colloge of Mechanical and Electronic Engineering, Beijing University of Technology , Beijing 100124,China;2.Opto-mechatronic Equipment Technology Beijing Area Major Laboratory, Beijing Institute of Petro-chemical Technology,Beijing 102617,China; 3.Collogy of Mechanical and Electrical Engineering, Beijing University of Chemical Technology,Beijing 100029,China)
A brief introduction for the main clock division method was given, put forward limitations of FPGA internal PLL frequency divider, and gave the integer divide method based on Verilog HDL. Wrote Verilog HDL program, realized an arbitrary integer divider that the duty cycle is 50% and based on the hardware platform of the FPGA. Combined with Quartus development platform and Modelsim simulation software validation, the results showed that the frequency division method is simple and practical. By using this method, the replacement value of N can realize any integer frequency divider that duty cycle.
Verilog HDL,FPGA,count,frequency divider,simulation,duty cycle
TN 40
:A
张泽(1988-),男,硕士研究生,主要从事脉冲激光测距等方面的研究。
2014-10-21