用VerilogHDL实现基于FPGA的通用分频器的设计.kdh
FPGA_ASIC-基于FPGA的通用分频器设计
基于FPGA的通用分频器设计周子昂,王福源,魏军辉(郑州大学信息工程学院,河南郑州450052)摘要:本文介绍了一种能够完成半整数和各种占空比的奇/偶数和的通用的分频器设计,并给出了本设计在Altera公司的FLEX10K系列EPF10K10LC84-3型FPGA芯片中实现后的测试数据和设计硬件的测试结果,结果表明了设计的正确性和可行性。
由于设计采用VHDL硬件描述语言实现,用户可以自行裁减和设置分频器的功能,所以有很广泛的应用价值。
关键词: 通用分频器; 占空比; 半整数;中图分类号:TN772 文献标识码:ADesign of universal frequency divider based on FPGAZHOU zi ang, WANG fu yuan,WEI jun hui(College of information, Zhengzhou University, Zhengzhou, Henan, 450052)Abstract: This paper presents an algorithm for designing a universal frequency divider which can realize different duty cycle either odd and even divider number. Experiments and hardware test onAltera PF10K10LC84-3 chip of FLEX10K series are given to show that the design is successful. Depending on the VHDL realization of this algorithm the design is of design flexibility and widely applications.Keywords: universal frequency divide; half duty cycle; half integer;1.概述分频器是数字系统设计的基本电路。
用Verilog+HDL语言设计分频器和32位计数器
i<i+1l
end
cs)∥有片选信号
end endrnodule
begin if(addr)
aceuh<2data}
该模块已通过软件仿真,符合设计要求。并已将程序下载到FPGA芯片,在电路板上与 系统进行联调,已证明设计达到预期功能,正式投入使用。
参 考 文 献
1夏宇闻.复杂数字电路与系统的VerilogHDL设计技术.北京t北京航空航天大学出版杜,1999.1—86 2阎石鼓字电子技术基础.北京:高等教育出版社.1 997.224--295 3束万焘·罗 车,吴顺军.CPI,D技术及其盥用西安:西安电子科技大学出版社,1999.30】oo
end end
output
elkl.c}//输出时钟和计数进位信号
j
wirte[15
reg
பைடு நூலகம்
O]data—reg·dataI
c,clkl{
if(i>=119) 计数值的高16位数和低
begin
∥对输人时钟进行J20分频
reg[1 5:O]aceub.aecul;
1
6位数
j<=0; clkl<=~clkl;
第23卷第6期 2002年1 1月
微计算机应用
MICROCOMPUTER APPLICATIONS
Vol
23.N。.6
Nov-,2002
用Ver|log
HDL语言设计分频器和32位计数器
谈艳云 罗志强
100083)
仍局
(北京航空航天大学电子工程东北京
擅要t介绍一种软件实现分频器和32位计数器的设计思路.即采用大规模可编程逻辑芯片.
+PLUS
II仿真正是一种实用的EDA软件,它具有原理图输入和文本输入(采用硬件描述语
用Verilog实现基于FPGA的通用分频器
counter_n u2(reset,en,c,clk_out,count);(调用counter_n,元件例化)
fenpin_2 u3(clk_out,b);(调用fenpin_2,元件例化)
半整数分频器也是在这种方法基础上实现的。除了一个模N计数器,还需要一个异或模块和一个2分频模块。半整数分频器原理如图1所示:
半整数分频器设计思想:通过异或门和2分频模块组成一个改变输入频率的脉冲添加电路,也就是说N-0.5个输入信号周期内产生了N个计数脉冲,即输入信号其中的一个含一个脉冲的周期变为含两个脉冲的周期。而这一改变正是输入频率与2分频输出异或的结果。由2分频输出决定一个周期产生两个脉冲有两种方式:当一个输入信号来一个脉冲(前半周期)时,2分频输出变为‘1’,clk_in取反,后半周期就会产生一个脉冲;2分频输出由‘1’变为‘0’时,clk_in刚把一个周期(前半周期)内低电平变为高电平产生一个脉冲,而后半周期的脉冲与‘0’异或不变。从而实现N-0.5分频。
parameter N=7;
input reset,en,clk_in;
output clk_out;
output[7:0] count;
reg clk_out;
reg[7:0] count;
always @(posedge clk_in)
begin
if (reset)
结 语
本文旨在介绍一种进行FPGA开发时,所需多种分频的实现方法,如果设计中所需分频形式较多,可以直接利用本设计,通过对程序的稍微改动以满足自己设计的要求。如果设计中需要分频形式较少,可以利用本设计部分程序,以节省资源。
基于FPGA分频器设计
基于FPGA分频器设计分频器大家用的都很多,相对而言,奇数分频比偶数分频要简单点。
下面我简单介绍下使用Verilog HDL语言设计分频计数器的方法。
偶数倍分频:如进行N倍整数分频,那么可以由待分频的时钟触发器计数器计数,当计数器从0计数到N/2-1时,输出时钟进行翻转,并给计数器一个复位信号,使得下一个时钟从零开始计数,以此循环下去。
这种方法可以实现任意的偶数分频,且占空比为50%。
奇数倍分频:归类为一般的方法,对于实现占空比为50%的N倍奇数分频,首先进行上升沿触发进行模N计数,计数从0开始,到(N-1)/2进行输出时钟的翻转,然后经过(N+1)/2再次进行翻转得到一个占空比非50%的奇数n分频时钟。
再者同时进行下降沿触发的模N计数,到和上升沿过(N-1)/2时,输出时钟再次翻转生成非50%的奇数n倍分频时钟,两个占空比非50%的N分频时钟相或运算,得到占空比为50%的奇数N倍分频时钟。
我以5分频计数为例子:module div5_clk(clk, rst, clk_5);input clk,rst;output clk_5;wire clk_5;reg clk_5o;reg clk_5j;reg[2:0] count0;reg[2:0] count1;always@(posedge clk or negedge rst)beginif(!rst)begincount0 <= 3'b000;clk_5o <= 0;endelse if(count0 == 3'd4)begincount0 <= 3'b000;clk_5o <= 0;endelse if(count0 >= 2)beginclk_5o <= 0;count0 <= count0 + 1;endelsebeginclk_5o <= 1;count0 <= count0 + 1;endendalways@(negedge clk or negedge rst) beginif(!rst)begincount1 <= 3'b000;clk_5j <= 0;endelse if(count1 == 3'd4)begincount1 <= 3'b000;clk_5j <= 0;endelse if(count1 >= 2)beginclk_5j <= 0;count1 <= count1 + 1;endelsebeginclk_5j <= 1;count1 <= count1 + 1;endendassign clk_5 = clk_5o | clk_5j; endmodule其他的以此类推。
verilog分频器的设计原理
Verilog分频器的设计原理一、概述Verilog分频器是数字电路设计中常用的一个模块,它可以将输入的时钟信号分频成较低频率的信号。
在数字系统中,分频器的应用非常广泛,可以用于时钟频率控制、时序信号生成等领域。
本文将介绍Verilog分频器的设计原理,帮助读者了解其工作原理和实现方法。
二、分频器的基本结构1. 分频器的概念分频器是一种能够将输入时钟信号分频成较低频率的信号的电路。
在数字系统中,分频器通常用于降低时钟频率,以满足某些特定的时序要求。
其基本原理是通过对输入时钟信号进行计数和判断,当计数值达到一定阈值时输出一个时钟脉冲,从而实现对输入信号的分频操作。
2. 分频器的基本结构一个简单的分频器通常由计数器和触发逻辑两部分组成。
计数器用于对输入信号进行计数,触发逻辑用于判断计数值是否达到分频的要求,并生成相应的时钟脉冲输出。
根据计数器的位宽和触发逻辑的设计,可以实现不同的分频比。
三、Verilog分频器的设计原理1. Verilog分频器的模块化设计在Verilog中,通常将分频器设计为一个独立的模块,通过实例化和连接可以方便地集成到更大的数字系统中。
分频器的模块化设计可以使其具有良好的可重用性和扩展性,提高数字系统的整体设计效率。
2. Verilog分频器的时序要求在Verilog中设计分频器时,需要考虑到时钟信号的时序要求。
由于分频器通常用于时序控制,因此需要保证分频的输出信号能够与系统中其他模块的时钟信号同步,避免出现不稳定和不可预测的情况。
3. Verilog分频器的实现方法在Verilog中,可以使用寄存器、计数器和逻辑门等原语来实现分频器的功能。
通过合理的组合和连接这些原语,可以实现不同的分频比和时钟脉冲输出。
Verilog语言本身对于多种数字逻辑的建模和描述具有很好的支持,可以方便地实现各种分频器的设计。
四、Verilog分频器的设计实例1. 2分频器的设计以2分频器为例,其实现原理比较简单。
用Verilog+HDL实现基于FPGA的通用分频器的设计
要.
暑
工 。 广
实
现
基
于
1'
_口
o
>
的
通
用
分
频
器
的
设
计
万方数据
end
always@(posedge counter)
OUT=’OUT: Endmodule
在方法1中,计数部分采用了?:运算符,这种运算符简 单明了,易于阅读。但在程序中需使用两个always型语句, 才能实现分频后的输出。
中国电力教育,2006 【5]5吴玉昌,胡荣强,王文娟.基于CPLD/FPGA的多功能
分频器的设计与实现[J】.设计应用.2007. 【6】杜刚,孙超,陈安军.基于FPGA技术的16位数字分
频器的设计[J】.仪器仪表学报,2006.
作者简介 罗浩,男,江西理工大学信息工程学院在读研究生,江西
理工大学应用科学学院助教,主要研究方向:通信与信息系 统。
参考文献 [1]I徐欣,于红旗,易凡等.基于FPGA的嵌人式系统设计
【M】.北京:机械工业出版社,2005. [2]张建平,杜学东.一种基于FPGA的分频方法研究
[J】.福建电脑,2006. [3】何静,李清峰.基于FPGA/CPLD的占空比为1:n的n
分频器的设计[J].现代电子技术。2006. [4】杨旭辉.基于FPGA/CPLD的多种分频器的研究【J】.
9
14
8
80
5பைடு நூலகம்
39
16
9
200
6
99
21
11
从表一中可以看出,在实现相同倍数的分频器时,不同 的程序语句占用的FPGA的逻辑单元LE数不同,方法1约是 方法2的两倍。 2结束语
Verilog常用分频器的实现
Verilog常用分频器的实现在Verilog中,实现常用分频器可以通过多种方法,包括基于计数器、移位寄存器和频率除法器等技术。
下面将介绍三种常用的Verilog分频器实现方法。
1.计数器分频器:计数器分频器是一种基于计数器的分频器实现方法。
该方法通常通过计数器对输入脉冲进行计数,并根据计数值的变化来控制输出信号的频率。
```module CounterDividerinput wire clk,input wire reset,output wire outreg [31:0] count;if (reset) begincount <= 0;end else begincount <= count + 1;endendassign out = count[31];endmodule```在这个示例中,计数器模块接收一个时钟信号和复位信号,并在时钟上升沿时对计数器进行计数。
输出信号是计数器的最高位,用于将输入信号除以计数器的最大值。
2.移位寄存器分频器:移位寄存器分频器是一种基于移位寄存器的分频器实现方法。
该方法通过对输入信号进行连续的移位操作来实现分频。
```module ShiftDividerinput wire clk,input wire reset,input wire enable,output wire outreg [31:0] shift_register;reg [3:0] count;if (reset) beginshift_register <= 0;count <= 0;end else beginif (enable) beginshift_register <= {shift_register[30:0], shift_register[31]};count <= count + 1;endendendassign out = shift_register[0];endmodule```在这个示例中,移位寄存器分频器模块接收一个时钟信号、复位信号和使能信号,并在使能信号有效时对输入信号进行连续的位移操作。
基于FPGA的分频器的设计与实现
基于FPGA的分频器的设计与实现摘要:在数字逻辑电路设计中,分频器通常用来对某个给定频率进行分频,以得到所需的频率。
整数分频器的实现采用标准的计数器,也可采用可编程逻辑器件实现。
有时,时钟源与所需的频率不成整数倍关系可采用小数分频器进行分频。
本文在模拟设计频率计脉冲信号时,使用半整数分频器设计电路,且利用VHDL硬件描述语言和原理图输入方式,通过Quartus II以及EPM240T100C5型FPGA方便地完成了半整数分频器电路的设计。
关键词:FPGA;QUARTUSⅡ;VHDL语言;分频器中图分类号:G64 文献标识码:A 文章编号:1673-9132(2016)25-0023-02DOI:10.16657/ki.issn1673-9132.2016.25.013一、分频器的基本原理(一)整数分频的基本原理整数分频包含偶数分频和奇数分频,对于偶数N分频通常使用N/2计数器实现占空比为1:1的N分频器,分频输出信号模为N\2自动取反;对于奇数分频必须分频输出信号为模N计数中的一位[1]。
整数分频器的实现,采用可编程逻辑器件设计实现,当时钟源与所需的频率不成整数倍关系,此时可采用小数分频器进行分频。
(二)小数分频的基本原理小数分频的基本原理是采用脉冲吞吐计数器和锁相环技术先设计两个不同分频比的整数分频器,然后通过控制单位时间内两种分频比出现的不同次数来获得所需要的小数分频值,分频系数为N-0.5(N为整数)时,可控制扣除脉冲的时间,以使输出成为一个稳定的脉冲频率,而不是一次N分频,一次N-1分频[2]。
二、实验目的使用Quartus II仿真软件,使用半整数分频的方式,通过VHDL语言将整个分频器各个模块的编写使用FPGA实现分频器的整个设计和实现,通过分频器的设计实现掌握基本的整数分频和小数分频的原理,加强对硬件语言的理解,以及对使用组合电路设计复杂器件的能力[3]。
三、设计过程1.运行Quartus II,新建立一个工程,器件选择EPM240T100C5新片,完成新工程的建立[4]。
用Verilog HDL实现基于FPGA的通用分频器的设计
用Verilog HDL实现基于FPGA的通用分频器的设计
罗浩;许艳;仲佳嘉
【期刊名称】《科技广场》
【年(卷),期】2008(000)010
【摘要】在数字逻辑电路设计中,常常遇到一些对时钏分频的需求.本文实现了一种基于FPGAFPGA的软件化的分频方法,通过对不同的Verilog HDL语言程序语句进行比较分析和仿真综合.
【总页数】2页(P215-216)
【作者】罗浩;许艳;仲佳嘉
【作者单位】江西趣工大学应用科学学院,江西赣州,341000;江西趣工大学应用科学学院,江西赣州,341000;武汉理工大学信息学院,湖北武汉430070;江西趣工大学应用科学学院,江西赣州,341000
【正文语种】中文
【中图分类】TP311
【相关文献】
1.基于Verilog HDL语言的FPGA浮点数加减法运算的实现 [J], 谢文彬
2.基于FPGA的通用数控分频器的设计与实现 [J], 张建妮;陆晓燕
3.用Verilog实现基于FPGA的通用分频器 [J], 唐晓燕; 梁光胜; 王玮
4.用Verilog实现基于FPGA的通用分频器 [J], 唐晓燕; 梁光胜; 王玮
5.基于Verilog HDL的通用UART模块设计与实现 [J], 吕阳; 刘莉娜; 郑良广; 侯晓伟
因版权原因,仅展示原文概要,查看原文内容请购买。
基于FPGA的多种形式分频器设计与实现
基于FPGA的多种形式分频器设计与实现摘要FPGA(现场可编程门阵列),它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。
它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
本文通过VHDL语言编程在FPGA上实现多种形式的分频器的设计。
包括偶数分频,奇数分频,半整数分频,占空比可调分频,小数分频,并在这基础上实现了五种分频的集成。
并举例说明了分频器的应用。
关键词:FPGA,VHDL,分频器设计;the design and implement of various formsof points on the frequency based on FPFAAbstractFPGA(Field Programmable Gata Array),it is the future development product based on programmable devices, such as PAL,GAL,CPLD and so on. It is half a custom circuit in the field of ASIC. It not only solves the shortage of custom circuit, but also overcomes the limited defect of the existing programmable device gate circuit. This article realize the design and implement of various forms of points on the frequency through VHDL language.It Includes the even points frequency, an odd points frequency, half integer points frequency, occupies emptiescompared adjustable points frequency, decimal points frequency, And achieves the integration of five points frequency on this basis.It also illustrates the application of frequency device.目录第一章绪论 (1)第一节FPGA概述 (1)第二节VHDL语言的概述 (1)第三节分频器的概述 (2)第四节本文研究内容 (2)第二章VHDL语言 (3)第一节VHDL语言结构 (3)一、实体(ENTITY) (3)二、结构体(ARCHITECTURE) (3)三、程序包、库及配置 (4)第二节VHDL的数据类型与描述语言 (4)一、VHDL语言的对象 (4)二、VHDL语言的主要描述语句 (5)第三章多种形式分频器设计 (6)第一节设计任务 (6)一、设计的任务 (6)第二节系统设计与仿真 (6)一、顶层框图设计 (6)二、顶层文件设计 (7)三、模块设计 (8)第三节分频器的应用 (34)结论 (35)谢辞 (36)参考资料 (37)第一章绪论第一节 FPGA概述FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。
用Verilog+HDL进行FPGA设计的一些基本方法
Dout<=Dout+1;
end
endmodule
f2—2)一个简单的8位计数器电路描述
用Verilog HDL描述时序逻辑电路时需要注意以下两点:
1)在用always语句描述时序逻辑电路时,只可能出现如下
三种形式:
a)always@(posedge Clk):不包含任何异步复位信号.但可
能包含同步复位信号。
3)注意仿真与综合的一致性。在FPGA设计中,对Verilog HDL程序进行的仿真称为功能仿真.功能仿真正确后的程序才 可以拿来进行综合。在整个设计过程中,必须保证综合前后电路 功能不变。要做到这一点,前提条件就是我们在书写Verilog HDD程序时必须遵循一定的规则。
2基本逻辑电路设计
2.1组合逻辑电路设计。 组合逻辑电路是数字系统中的一种最基本的电路类型。这 种电路的特点就是任意时刻的输出仅仅处决与该时刻的输入, 与电路原来的状态无关。在Verilog HDL中,可以使用三种方法 来生成组合逻辑电路:使用连续赋值语句,使用不带时钟触发的
if fDataln==qDl Y3=0; else Y3=1:
ห้องสมุดไป่ตู้
endmodule
(2-一1)一个简单的组合逻辑描述 用Verilog HDL描述组合逻辑电路时需要注意如下几点: 1)连续赋值语句和函数描述的电路只能是组合逻辑电路。
2)在使用用always语句时,所有被读取的变量都必须出现 在always语句的敏感信号列表中.否则会导致仿真与综合的不 一致。
≮穆国自控弼邮局订阅号:82.946 120元/年一93—
圈豳圈圜图豳堕圃豳豳蛋
《微计算机信息>(测控自动化)2004年第20卷第6期
FPGA与CPLD相比。最大的一个特点就是它的寄存器相当 丰富,因此.更加适合设计时序逻辑电路。实际上,由于FPGA内 部延迟的不确定.用FPGA描述的电路大多是时序逻辑电路。
基于FPGA的通用数控分频器的设计与实现
基于FPGA的通用数控分频器的设计与实现【摘要】本文首先介绍了各种分频器的实现原理,并在FPGA开发平台上通过VHDL文本输入和原理图输入相结合的方式,编程给出了仿真结果。
最后通过对各种分频的分析,利用层次化设计思想,综合设计出了一种基于FPGA的通用数控分频器,通过对可控端口的调节就能够实现不同倍数及占空比的分频器。
【关键词】FPGA;分频器;VHDL1.引言分频器是数字系统中非常重要的模块之一,被广泛应用于各种控制电路中。
在实际中,设计人员往往需要将一个标准的频率源通过分频技术以满足不同的需求。
常见的分频形式主要有:偶数分频、奇数分频、半整数分频、小数分频、分数分频。
在某些严格的情况下,还有占空比的要求。
其中非等占空比的偶数分频器和奇数分频器其实现比较容易,但对于半整数分频器和占空比为50%的奇数分频器实现比较困难。
本文首先介绍了各种分频器的实现原理,并结合VHDL硬件描述语言对其进行了仿真,最后提出一个可控的通用分频器的设计方法,该方法可实现任意分频,资源消耗低,具有可编程等优点。
2.偶数分频器偶数分频器比较简单,即利用计数器对需要分频的原始时钟信号进行计数翻转。
例如:要进行M=2N(N为自然数)分频,当计数值为0~k-1时,输出高电平,当计数值为k-1~2N-1时输出低电平,同时计数值复位,如此循环可实现任意占空比的偶数分频,其中M和k为预置数,可根据分频倍数和占空比的要求进行置数。
如图1所示,当k=N时,即可实现占空比为50%的偶数分频[1]。
图1 占空比为50%的4分频仿真结果图2 占空比为50%的5分频仿真结果3.奇数分频器任意占空比的奇数分频器的实现,其原理与偶数分频器类似。
但对于占空比为50%的任意奇数次分频却无法用上述相同的方法实现。
下面介绍一种常用的实现方法[4]。
实现原理:采用两个不同的边沿触发器(一个在上升沿和一个在下降沿)来实现,其细节在于实现1/2个原始时钟周期的时间差。
基于verilog的分频器设计 (可实现任意整数分频)
1. 讲废话此,有时候在我们的设计中或多或少会需要用到不同频率的时钟信号,这就要求我们对系统时钟进行分频。
如果你现在去网上搜索关于FPGA分频器的设计,会有不少大牛已经做出来了。
比如“任意奇数分频” “任意偶数分频” “任意小数分频” ,类似云云。
作为一个爱折腾的小菜,我总是觉得,搞这么多好麻烦哦,我不就是需要分一下频嘛,干哈还要整出这么多样式出来,顿时觉得不会再爱了。
后来的后来,我实在受不了这么多种分频方法给我带来的困扰和烦恼,决定来一个大统一,把“任意偶数分频”和“任意奇数分频” 整合成一个模块,实现“任意整数分频”。
所以,各位大大们,如果实在没事儿,就不要再“捡肥皂”了,试一试下面的分频方法吧,相信会让你在以后的FPGA道路上走得更加顺畅和游刃有余。
2. 晒干货例化时,仅需要按您的需求修改代码中带★号的参数 ps. 这里只有一处需要修改/*********************************************************************** *******************Author: Bob LiuE-mail:shuangfeiyanworld@Device: EP2C8Q208C8Tool: Quartus 8.1Function: 实现时钟的任意分频Version: 2012-1-9 v1.0************************************************************************ ********************/module div_N (input CLK, // 基准时钟output CLK_div_N // N分频后得到的时钟);wire [31:0] N=20; // ★ N为分频系数,N≥2即可,N的值为CLK除以CLK_div_N后取整(四舍五入)/******************** 产生备用时钟1 ***************/reg [31:0] cnt1;reg CLK_div_N_1;always @ (posedge CLK)beginif(N[0]==0) // 如果N为偶数,比N%2==0这种判断方式更节省资源beginif(N==2) // 如果N为2CLK_div_N_1 <= ~CLK_div_N_1;elsebeginif(cnt1==((N-2)>>1)) //比cnt1==(N-2)/2这种判断方式更节省资源begincnt1 <= 0;CLK_div_N_1 <= ~CLK_div_N_1;endelsecnt1 <= cnt1+1;endendelse // 如果N为奇数beginif(cnt1==N-1)cnt1 <= 0;elsecnt1 <= cnt1+1;if((cnt1==N-1) || (cnt1==(N-1)/2))CLK_div_N_1 <= ~CLK_div_N_1;else ;endend/*********************** 产生备用时钟2 *********************/wire CLK0=(N%2)? (~CLK):0; // 如果N为偶数,备用时钟2(CLK_div_N_2)恒为0,即不需要用到此备用时钟reg [31:0] cnt2;reg CLK_div_N_2;always @ (posedge CLK0)beginif(cnt2==N-1)cnt2 <= 0;elsecnt2 <= cnt2+1;if((cnt2==N-1) || (cnt2==(N-1)/2))CLK_div_N_2 <= ~CLK_div_N_2;end/******************** 产生最终分频时钟************************/assign CLK_div_N = CLK_div_N_1 | CLK_div_N_2;endmodule3. 扯犊子忘了交代一点,上面的设计可实现任意整数分频,任意小数分频这样的精度要求还没有加进去,请小伙伴儿们见谅啊。
分频器的verilog设计
分频器的verilog设计笔者最近由于实验室⽼师的任务安排重新⼜看了⼀下分频器的verilog实现,现总结如下,待以后查看之⽤(重点是查看计数器计到哪个值clk_out进⾏状态翻转)1.偶数分频占空⽐为50%其实质还是⼀个N计数器模块来实现,⾸先要有复位信号,这个复位信号的作⽤就是使计数器和分频输出clk_out刚开始有⼀个复位值,其次就是计数翻转了,注意这⾥是计到哪个值翻转,⾸先刚开始时reset复位时计数器赋初值为0,然后计数器计到N/2-1时进⾏clk-out状态翻转,即clk_out<=~clk_out,此时别忘了计数器接着加1操作(count<=count+1),紧接着在计数器计到N-1时clk_out再翻转状态,与此同时计数器进⾏清零操作。
count<=0;这部分的程序代码如下:module tmm_c(clk,reset,m,clk_out);input clk;input reset;input [7:0]m;output clk_out;reg [7:0]count;reg clk_out;always@(posedge clk)beginif(reset)begincount<=0;clk_out<=0;endelseif(count==m-1)beginclk_out<=~clk_out;count<=0;endelseif(count==m/2-1)beginclk_out<=~clk_out;count<=count+1;endelsecount<=count+1;endendmodule与此相关的testbench代码如下:`timescale 1ns/1nsmodule tmm_c_tb;reg clk;reg reset;reg[7:0] m;wire clk_out;tmm_c u1(clk,reset,m,clk_out);initialbeginclk=0;reset=1;always #5 clk=~clk;endmodulemodelsim仿真波形图:2.奇数分频占空⽐为50%其实质也是⼀个计数器,思想和偶数分频相似,不过奇数分频前期需要两个always模块,这两个always模块的输出分别为clk_out1、clk_out2,⽤到两个count1、count2,其中clk_out1的输出是待分频时钟的上升沿触发进⾏的计数输出的结果,这个也需要计数器模块和reset 复位信号,但此时计到何值clk_out1进⾏翻转呢?复位完之后还是输出和计数全部为零,然后当计数到count=(N-1)/2时clk_out1进⾏翻转,计数到count=N-1时计数器清零,clk_out进⾏翻转。
基于VerilogHDL的分频器的优化设计
第37卷第4期河南大学学报(自然科学版)Vol.37 No.42007年7月Journal of Henan University (Natural Science )J ul.2007基于Verilog HDL 的分频器的优化设计张奇惠,武超,王二萍,蒋俊华,张伟风3(河南大学物理与电子学院微系统物理研究所,河南开封475001) 收稿日期:2006209216 基金项目:河南省高校创新人才培养工程资助课题 作者简介:张奇惠(1982-),男,河南上蔡人,硕士研究生,研究方向为微电子. 3通讯联系人,E 2mail :wfzhang @.摘 要:基于整数和小数分频的实现原理,提出了整数和小数分频器的算法和结构,采用Verilog 硬件描述语言优化设计了偶数、非50%占空比和50%占空比的奇数、半整数分频器,重点对任意小数分频器进行了设计优化.用LDV5.1进行了仿真,用Synplify Pro 进行了基于AL TERA 公司FP GA 的综合,证明了其可行性.关键词:分频器;Verilog HDL ;优化;FP GA中图分类号:TN772 文献标识码:A 文章编号:1003-4978(2007)04-0343-04Optimization Design of Frequency Dividers B ased on V erilog H DLZHAN G Qi 2hui ,WU Chao ,WAN G Er 2ping ,J IAN G J un 2hua ,ZHAN G Wei 2feng 3(I nstitute of M icrosystem Physics ,School of Physics and Elect ronics ,Henan Universit y ,Kai f eng 475001,China )Abstract :This paper presents the algorithm ,structure and Verilog implementation of integer and decimal f requency dividers ,including types of even integer ,odd integer with duty cycle 50%and not exactly 50%,N 20.5and random decimal.Based on the FP GA device of AL TERA ,they are simulated with LDV5.1,and synthsized with Synplify Pro.K ey w ords :frequency divider ;Verilog HDL ;optimization ;FP GA 分频器(divider )是数字集成电路和FP GA 设计的基础,是使用效率非常高的设计,也是通信系统中一个重要组成部分[1],如频率合成就是应用于802.11b 无线通讯协议中实现频率变换的一个非常关键的技术[2].整数分频相对比较简单,特别是偶数分频器的实现,而小数分频器的实现相对来说要复杂一些.本文利用优化了的算法和结构,使用Verilog HDL 语言分别对整数分频器和小数分频器的实现进行了设计,使用Cadence 公司的LDV5.1(Logic Design and Verificatio n )软件进行了前仿和后仿的功能验证,用Synplify Pro 进行综合.1 整数分频器的设计1.1 偶分频从电路的角度,采用单级D 触发器即可实现2分频,例如用一个触发器的输出Q 的反连接到其输入,就构成了一个2分频,再接一个触发器就可构成4分频电路,理论上,用这种方法可以实现对主频的2n 的分频.从Verilog HDL 代码的编写上来说,偶分频可以用计数器来实现,或者用状态机,最好用Moore 机来实现.用计数器或者状态机描述R TL 代码也是其它分频器实现的基本思想和主要方法.最普通的计数器是加/减计数器,但在同一时刻,普通计数器的输出可能有多位发生变化,因此,当使用组合逻辑对输出进行译码时,会导致尖锋脉冲信号.使用约翰逊计数器可以避免这个问题.约翰逊计数器是一种移位计数器,采用的是把输出的最高位取非,然后反馈送到最低位触发器的输入端.约翰逊计数器在每个时钟下只有一个输出发生变化.1.2 奇分频奇分频可以分为占空比为非50%的奇分频和占空比为50%的奇分频.当然第二种情况的设计更为复杂一些.本页已使用福昕阅读器进行编辑。
远程FPGA虚拟实验平台用SystemVerilogHDL实现计数器和分频器
远程FPGA虚拟实验平台⽤SystemVerilogHDL实现计数器和分频器远程FPGA虚拟实验平台⽤SystemVerilog HDL实现计数器和分频器原理计数器本实验中,材料给出的计数器是⼆进制来分频的,就搞得还挺⿇烦。
/** The input port is replaced with an internal signal **/wire reset =PB[0];wire clk;/************* The logic of this experiment *************/logic [23:0] count;always@(posedge CLOCK or posedge reset)beginif(reset)count <=0;elsecount <= count+1;endassign clk = count[22];//2^23,详解见下⽅logic [7:0]q;always @ (posedge clk or posedge reset)if(reset)q <=1;elseq <={q[6:0], q[7]};/****** Internal signal assignment to output port *******/assign L[7:0]= q[7:0];endmodule由代码可知,在CLOCK输出2个信号后,clk=1,然后CLOCK需要再输出2个信号,使clk=0。
这个过程的时间是2(次)/10M(次/秒),约为838毫秒。
测试界⾯的刷新间隔T实际上是,每隔T时间显⽰⼀下虚拟实验⾯板当前的情况,如果在测试时刷新间隔T=1000ms,会使得刷新不完全按照分频器转换后的频率来,所以刷着刷着就跳过了某⼏次,这个“某⼏次”是可以算的,但是我懒得算。
也就是说,只要刷新间隔T<=838ms就能让每个灯都亮了,但是如果不是838的倍数,灯亮的时候就不匀速,有点抽风。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
0引言
在数字电路中,时钟脉冲信号是最重要的信号之一。
一个数字电路往往需要多种频率的脉冲作为驱动,通常采用一个高频晶振产生一种高频率的脉冲,再利用其它的分频方法进行分频,从而产生各种不同频率的脉冲,是一种常用的方法。
本文设计的分频器是采用Verilog HDL硬件描述语言,采用参数化的设计思想,在FPGA上实现的一种软件化的分频器,且该分频器仅占用FPGA的几个逻辑单元。
1通用分频器的设计
分频器分为偶数分频、奇数分频、半整数分频和小数分频等,本文采用参数化的设计思想设计偶数分频器。
所谓参数化就是把程序中的某些参数设计成可以改变的量,使用户可以根据需要设定参数的值,以满足不同的需求。
1.1分频原理
在设计偶数分频器时,采用通过一个由待分频时钟上升沿所触发的计数器循环计数来实现N倍(N为偶数)分频的实现方法,这种方法可以实现占空比为50%的任意偶数分频。
1.2设计方法
在FPGA上,可以采用两种不同的Verilog HDL程序语句来设计计数器。
用这两种程序语句设计的计数器功能相同,但其实现方式不同,程序结构也不一样。
所以这两种程序语句编译综合后,它们占用的逻辑单元LE数差别很大。
本文对这两种程序语句进行了分析,比较了它们所占用的逻辑单元数的差别,并对产生这种差别的原因进行了分析。
(1)方法1
module FPQ_1(CLK,OUT);
input CLK;
output OUT;
parameter bitsize=4;//计数器二进制位数
parameter L=9;//1/2倍的计数基数减1
reg[bitsize:0]count=0;
reg OUT=0;
reg counter;
always@(posedge CLK)
begin
count=(count<L)(count+1):0;//计数
counter=(count==L)1:0;
用Verilog HDL实现基于FPGA的通用分频器的设计Design of General Frequency Divider Based on FPGA Using Verilog HDL
罗浩1许艳1,2仲佳嘉3
Luo Hao Xu Yan Zhong Jiajia
(1.江西理工大学应用科学学院,江西赣州341000;2.武汉理工大学信息学院,湖北武汉430070;3.江西赣州供电公司通信
自动化分公司,江西赣州341000)
(1.College of Applied Science,Jiangxi Univ.of Science&Technology,Jiangxi Ganzhou341000;2.School of Information Engineering,Wuhan Univ.of Technology,Hubei Wuhan430070;3.Branch of Communication and Automatization,Jiangxi
Ganzhou Electric Power Corporation,Jiangxi Ganzhou341000)
摘要:在数字逻辑电路设计中,常常遇到一些对时钟分频的需求。
本文实现了一种基于FPGA的软件化的分频方法,通过对不同的Verilog HDL语言程序语句进行比较分析和仿真综合。
关键词:数字逻辑电路设计;分频器;FPGA;Verilog HDL
中图分类号:TP311文献标识码:A文章编号:1671-4792-(2008)10-0215-02
Abstract:Due to the limitation of the frequency dividers recently widely used,in this paper,a new software method of frequency dividers based on FPGA is parison and analysis are presented,and synthesis and simulation are performed by different Verilog HDL language program statement.
Keywords:Digital Logic Circuit Design;Frequency Divider;FPGA;Verilog HDL 用Verilog HDL 实现
基于FPGA
的通用分频器的设计
215
科技广场2008.10
end
always@(posedge counter)
OUT=~OUT;
Endmodule
在方法1中,计数部分采用了?:运算符,这种运算符简单明了,易于阅读。
但在程序中需使用两个always型语句,才能实现分频后的输出。
(2)方法2
module FPQ_2(CLK,OUT);
input CLK;
output OUT;
parameter bitsize=4;//计数器二进制位数
parameter L=9;//1/2倍的计数基数减1
reg[bitsize:0]counter=0;
reg OUT=0;
always@(posedge CLK)
begin
if(counter<L)
counter=counter+1;
else
begin
OUT=~OUT;
counter=0;
end
end
endmodule
方法2用if-else语句完成计数功能来实现分频。
if-e1se 条件语句一般比较长,不如?:运算符简洁。
但这段程序只使用了一个always语句,比上段程序少用了一个。
1.3综合后的电路及仿真结果
在ISE8.2i环境下,经仿真后,得到20倍分频仿真结果,如图一所示。
由图一中可以看出,这两种方法均具有良好的分频效果。
1.4结果分析
对上述两种程序在ISE8.2i环境下编译综合后,得到表一的结果。
表一综合后逻辑单元(LE)数的比较
从表一中可以看出,在实现相同倍数的分频器时,不同的程序语句占用的FPGA的逻辑单元LE数不同,方法1约是方法2的两倍。
2结束语
本文介绍了基于FPGA的通用分频器的设计方法,并用Verilog HDL语言实现。
其程序是在ISE8.2i环境下,利用Xilinx公司的XC2V40-6CS144可编程逻辑器件仿真。
参考文献
[1]徐欣,于红旗,易凡等.基于FPGA的嵌入式系统设计[M].北京:机械工业出版社,2005.
[2]张建平,杜学东.一种基于FPGA的分频方法研究[J].福建电脑,2006.
[3]何静,李清峰.基于FPGA/CPLD的占空比为1:n的n 分频器的设计[J].现代电子技术,2006.
[4]杨旭辉.基于FPGA/CPLD的多种分频器的研究[J].中国电力教育,2006
[5]吴玉昌,胡荣强,王文娟.基于CPLD/FPGA的多功能分频器的设计与实现[J].设计应用,2007.
[6]杜刚,孙超,陈安军.基于FPGA技术的16位数字分频器的设计[J].仪器仪表学报,2006.
作者简介
罗浩,男,江西理工大学信息工程学院在读研究生,江西理工大学应用科学学院助教,主要研究方向:通信与信息系统。
图一20倍分频仿真图216。