基于VHDL的小数分频器设计

合集下载

基于VHDL的全数字分数分频器设计

基于VHDL的全数字分数分频器设计
前向通道中分频器实现方式主要影响输出波 形的占空比.若前向通道采用D触发器.则输出波形 趋于对称,通常输出波形占空比为N:N或者Ⅳ:fⅣ+11, 具体情况由输出波形的周期相对于输入波形周期 的倍数是否为整数决定。若输出波形的周期为 输入周期的整数倍.则输出波形占空比为N:N, 否则为Ⅳ:(N+I)。
若前向通道采用模Ⅳ计数器实现.则输出波形 高电平占0.5或者1个输入波形周期宽度,具体是0.5 还是1.同样由输出波形周期是否为输入波形周期 的整数倍决定。若为整数倍,则占1个输入波形周期 宽度.否则占0.5个。
图4是前向通道采用了2个D触发器级联实现4 分频的仿真结果,输出波形elk—out占空比为3:4或者 4:4.分别对应于输出周期为输入周期的3.5倍与4倍 的情况。
m=b一(Ⅱrood b),
F。,,=I…a/5]+1,
疋=[胡],
(、 37 )
/z=a rood b
其中f.]表示取整,o mod 6表示求。除以b的余数。 如要设计一个5.1分频的分频器。则昭51,6=10,所
以由式(3)可得m=9,E---6,F。=5,n=l。 2.2任意分数分频器的实现
分频器的实现主要由两个模块实现.一个模块 是可预置数的可控双模分频器.另一个模块是可预
万方数据
其慨。=志≯。^=寿。
网2 3.5分频器仿真波j髟
采用VHDL语言设计上述电路(令N=4).并进行 仿真得到波形如图2所示.图中clk in为输入波形.比
锨五和clk—in可以得出:勘的每个周期中f.kgclk.in少
一个正脉冲。但是.观察模Ⅳ计数器输出temp.就可 以发现,实际上在矗的每个周期中£是ELelkin多了一个 正脉冲j分析如下:没此时刻为图中五的第一个高电 平下降沿前一刻,^=1,然后clk in由1变为0,导致异 或门的输出£变为1,£的上升沿使模Ⅳ(模4)计数器 计数.计数器结果加1。由于计数器计到了最大值, 故clk out输出高电平1.elk out的上升沿又促使2分频 器工作,使磊由1变为0,然后兀反馈回异或门得输人 端,与ckl in通过异或门使7:变为0.反馈使得‘由0变 为1.以后经过一段时问又返回0。

VHDL分频器课程设计

VHDL分频器课程设计

VHDL分频器课程设计一、课程目标知识目标:1. 学生能理解VHDL语言的基本概念,掌握VHDL语言的基本语法结构;2. 学生能掌握分频器的工作原理,了解分频器在数字系统中的应用;3. 学生能运用VHDL语言设计简单的分频器电路,并实现预期的分频功能。

技能目标:1. 学生能运用所学知识,独立完成VHDL分频器代码编写;2. 学生能通过仿真软件对所设计的分频器进行功能验证,并分析其性能;3. 学生能运用所学技能解决实际工程问题,具备一定的实践操作能力。

情感态度价值观目标:1. 学生对VHDL语言及数字系统设计产生兴趣,提高学习积极性;2. 学生通过课程学习,培养团队协作精神,提高沟通与交流能力;3. 学生在课程实践中,养成严谨、认真的学习态度,树立正确的工程观念。

课程性质:本课程为实践性较强的专业课,要求学生具备一定的数字电路基础和VHDL语言知识。

学生特点:学生处于高年级阶段,具有一定的专业基础知识和实践能力,但个体差异较大。

教学要求:结合学生特点,注重理论与实践相结合,充分调动学生的学习积极性,提高学生的实践操作能力。

在教学过程中,注重培养学生的团队协作精神和工程观念。

通过本课程的学习,使学生能够掌握VHDL分频器的设计方法,为后续相关课程的学习和实际工程应用打下坚实基础。

二、教学内容1. VHDL语言基础回顾:复习VHDL的基本语法、数据类型、信号与变量、行为描述与结构描述等基本概念,确保学生具备扎实的VHDL编程基础。

教材章节:第二章 VHDL语言基础内容列举:基本语法、数据类型、信号与变量、行为描述与结构描述2. 分频器原理及分类:介绍分频器的工作原理、分类及性能指标,使学生了解不同类型分频器的优缺点及适用场景。

教材章节:第五章 分频器设计与实现内容列举:分频器原理、分类、性能指标3. VHDL分频器设计方法:讲解基于VHDL语言的分频器设计方法,包括计数器法、移位寄存器法等,并分析各种方法的优缺点。

基于VHDL的分频器设计[开题报告]

基于VHDL的分频器设计[开题报告]

开题报告电子信息工程基于VHDL的分频器设计三、课题研究的方法及措施由于本课题所设计的分频器基于EDA技术,应用VHDL硬件语言设计完成的,因此选择合适的硬件解决原理对分频器性能至关重要的,为了满足不同系统功能需求的分频,本课题将阐述不同原理,不同分频器,同种分频不同原理的设计方案。

占空比可控的整数分设计方案,原理为计数器为带预置数的计数器,其设计的特殊之处在于:可以根据需要,调整数据的位宽,而且计数的初始值是从l开始的,此处计数初始值的设定是设计的一个创新,这样做的目的是为了配合后面比较器的工作,计数器的输出数据作为比较器的输入,比较器的另一输入作为控制端,控制高低电平的比例,从而达到占空比可调的目的。

原理图如图1所示。

图1 占空比可控的原理图部分小数分频的基本原理是采用脉冲吞吐计数器和锁相环技术先设计两个不同分频比的整数分频器,然后通过控制单位时间内两种分频比出现的不同次数来获得所需要的小数分频值。

如设计一个分频系数为lO.1的分频器时。

可以将分频器设计成9次10分频,1次11分频这样总的分频值为如式1所示。

F=(9×10+lxl 1)/(9+1)=10.1 (式1)从这种实现方法的特点可以看出,由于分频器的分频值不断改变.因此分频后得到的信号抖动较大。

当分频系数为N-0.5(N为整数)时,可控制扣除脉冲的时间,以使输出成为一个稳定的脉冲频率。

而不是一次N分频.一次N-1分频。

图2给出了通用小数分频器的电路组成。

图2通用小数分频器的电路组成改进的小数分频设计方案,将两个整数分频器由一个整数分频器和一个半整数分频器代替,结果在如上分析的两个性能方面都有所提高。

利用参数化的设计思想和VHDL描述语言与原理图输入方法相结合的方式,设计并实现了一种抖动性能好且通用性强的小数分频器。

其原理图如下图3。

图3改进小数分频原理图四、课题研究进度计划毕业设计期限:自2011年12月10日至2012年3月10日。

基于VHDL数控分频器设计

基于VHDL数控分频器设计

目录一、设计任务与要求 (3)二、总体框图 (3)三、选择器件 (4)四、功能 (5)1、数控分频器 (5)2、BCD译码器 (6)3、扫描器 (11)4、3-8译码器 (13)5、7段数码管显示译码器 (16)五、总体设计电路图 (19)1总体(顶层)电路原理图 (19)2仿真结果 (19)3管脚分配图 (20)4.硬件连接情况 (20)六.心得体会 (20)数控分频器设计一、设计任务与要求数控分频器的功能就是当输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比,以实现所需的输出频率。

基本功能:1、实现8位分频器,依据输入的8位2进制数的不同,有不同的分频比。

如输入10010000,即对输入的时钟信号进行144分频,如输入01001000,即对输入的时钟信号进行72 分频。

2、输出的波形应为占空比位50%的方波。

3、有显示功能,显示当前的分频比,即,输入的二进制数的大小。

总体框图设计思路:数控分频器用计数值可并行预置的加法器设计完成,当在输入端给定不同输入数据时将对输入的时钟信号有不同的分频比。

把输入端输入的八位二进制数直接通过BCD译码器转换为十位BCD码表示的十进制数,通过扫描器对3个数码管进行选通扫描,最后7段数码管显示译码器对选中数码管的赋值进行译码,并驱动数码管显示该数据。

模块的功能:1、数控分频器:实现8位分频器,依据输入的8位2进制数的不同,有不同的分频比。

如输入10010000,即对输入的时钟信号进行144分频。

2、BCD译码器:把输入端的8位2进制数转换成10位BCD码表示的十进制数。

3、扫描器:when “000”=>daout<=dout(3 downto 0);when “001”=>daout<=dout(7 downto 4);when “010”=>daout<=dout(3 downto 2)<="00";daout(1 downto 0)<=dout(9 downto 8);when others=>null;4、3-8译码器:当sel=0时,q=11111110;选择个位数码管亮。

VHDL语言各种分频器的设计

VHDL语言各种分频器的设计

硬件描述
使用VHDL,设计师可以描述电路 的结构、行为和功能,而无需关 心具体的物理实现细节。
设计层次
VHDL适用于不同层次的设计,从 门级到系统级,使得设计者可以 专注于设计逻辑而不是物理实现。
VHDL语言基本结构
实体
描述电路的输入和输出端口。
结构体
描述电路的内部逻辑和行为。

包含预定义的元件和函数。
end if;
end process;
8分频器设计
end Behavioral;
```
16分频器设计
16分频器:将输入频率降低到原来的 十六分之一。
VHDL代码实现
```vhdl
16分频器设计
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
03
if count = 3 then
4分频器设计
q <= '1';
count <= 0;
4分频器设计
01
else
02
q <= '0';
03
count <= count + 1;
4分频器设计
end if;
end if; end process;
4分频器设计
end Behavioral; ```
配置
指定实体和结构体的关联方式。
VHDL语言数据类型
标量类型
包括整数、实数、布尔等。
记录类型
组合不同数据类型的结构体。
向量类型
如位向量,用于表示位或字节。
数组类型

基于VHDL的分频电路

基于VHDL的分频电路
基于VHDL的分频电路 分频电路介绍
CPLD/FPGA与单片机相比,一个明显得优势就在于它的高速性。但很多外围器件的驱 动都需要低频的时钟(若时钟频率太高,则键盘扫描就会出错,七段数码管会闪烁和不稳 定就是最好的例子),所以经常需要用到分频电路。常见的分频电路为偶数倍分频和奇数 倍分频两种。下面对8分倍分频电路用VHDL做简单介绍。 方案设计 如果系统有一个200KHz的时钟,系统要求将其分为100KHz,50KHz,25KHz,并且 4 在这4个频率时钟中选择一个作为输出。下面给出两种设计方案: 1.设计一个2分频电路、一个4分频电路、一个8分频电路,直接从200KHz分频到所需要的 几个频率的时钟信号(如图1所示)。 2.只设计一个2分频电路,用3个2分频电路级联的方式,从200KHz逐级分出所需要的时钟 信号(如图2所示)。
图1
图2
下面用VHDL设计一个2分频电路: library ieee; use ieee.std_logic_1164.all; entity FreDevider is port (clock:in std_logic; clockout:out std_logic ); end; architecture behavior of FreDevider is signal clk:std_logic; begin process(clock) begin if rising_edge(clock) then clk<=not clk; end if; end process; clockout<=clk; end;
//元件端口 //元件行为描述
library ieee; use ieee.std_logic_1164.all; entity fredevider2 is port( clock:in std_logic; clockout:out std_logic ); end; architecture dcider of fredevider2 is constant N:integer:=3; signal counter:integer range 0 to N; signal clk:std_logic; begin process(clock) begin if rising_edge(clock) then if counter=N then counter<=0; clk<=not clk; else counter<=counter+1; end if; end if; end process; clockout<=clk; end;

小数分频器原理

小数分频器原理

基于CPLD/FPGA的半整数分频器的设计摘要:简要介绍了CPLD/FPGA器件的特点和应用范围,并以分频比为2.5的半整数分频器的设计为例,介绍了在MAX+plus II开发软件下,利用VHDL硬件描述语言以及原理图的输入方式来设计数字逻辑电路的过程和方法。

关键词:VHDL CPLD/FPGA 数字逻辑电路设计半整数分频器1 引言CPLD(Complex programmable Logic Device,复杂可编程逻辑器件)和FPGA(Field programmable Gates Array,现场可编程门阵列)都是可编程逻辑器件,它们是在PAL、GAL等逻辑器件基础上发展起来的。

同以往的PAL、GAL相比,FPGA/CPLD的规模比较大,适合于时序、组合等逻辑电路的应用。

它可以替代几十甚至上百块通用IC芯片。

这种芯片具有可编程和实现方案容易改动等特点。

由于芯片内部硬件连接关系的描述可以存放在磁盘、ROM、PROM、或EPROM中,因而在可编程门阵列芯片及外围电路保持不动的情况下,换一块EPROM芯片,就能实现一种新的功能。

它具有设计开发周期短、设计制造成本低、开发工具先进、标准产品无需测试、质量稳定以及实时在检验等优点,因此,可广泛应用于产品的原理设计和产品生产之中。

几乎所有应用门阵列、PLD和中小规模通用数字集成电路的场合均可应用FPGA和CPLD器件。

在现代电子系统中,数字系统所占的比例越来越大。

系统发展的越势是数字化和集成化,而CPLD/FPGA作为可编程ASIC(专用集成电路)器件,它将在数字逻辑系统中发挥越来越重要的作用。

在数字逻辑电路设计中,分频器是一种基本电路。

通常用来对某个给定频率进行分频,以得到所需的频率。

整数分频器的实现非常简单,可采用标准的计数器,也可以采用可编程逻辑器件设计实现。

但在某些场合下,时钟源与所需的频率不成整数倍关系,此时可采用小数分频器进行分频。

比如:分频系数为2.5、3.5、7.5等半整数分频器。

基于VHDL的计数与分频的实现

基于VHDL的计数与分频的实现

基于VHDL的各种分频、计数与按键控制的实现本系统利用两种分频可实现多种计数,按键控制数码管闪烁系统框图分频LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_arith.all;USE ieee.std_logic_unsigned.all;-- Entity DeclarationENTITY flash IS-- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE!PORT(key_in : IN STD_LOGIC;flash_out : OUT STD_LOGIC);-- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE!END flash;-- Architecture BodyARCHITECTURE flash_architecture OF flash ISsignal key_cnt: std_logic_vector(1 downto 0);BEGINprocess(key_in)beginif key_in 'event and key_in='0' thenif key_cnt="11" thenkey_cnt<="00";elsekey_cnt<=key_cnt+1;end if;end if;end process;flash_out<='0' when key_cnt(0)='0'else '1' when key_cnt(0)='1'else '1';END flash_architecture;LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_arith.all;USE ieee.std_logic_unsigned.all;-- Entity DeclarationENTITY div_4m_1hz IS-- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE!PORT(clk : IN STD_LOGIC;q : OUT STD_LOGIC);-- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE! END div_4m_1hz;-- Architecture BodyARCHITECTURE div_4m_1hz_architecture OF div_4m_1hz IS signal tmp:std_logic_vector(21 downto 0);BEGINprocess(clk)beginif clk'event and clk='1' thentmp<=tmp+1;end if;end process;q<=tmp(21);END div_4m_1hz_architecture;按键控制LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_arith.all;USE ieee.std_logic_unsigned.all;-- Entity DeclarationENTITY flash IS-- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE!PORT(key_in : IN STD_LOGIC;flash_out : OUT STD_LOGIC);-- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE!END flash;-- Architecture BodyARCHITECTURE flash_architecture OF flash ISBEGINprocess(key_in)beginif key_in 'event and key_in='0' thenif key_cnt="11" thenkey_cnt<="00";elsekey_cnt<=key_cnt+1;end if;end if;end process;flash_out<='0' when key_cnt(0)='0'else '1' when key_cnt(0)='1'else '1';END flash_architecture;LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_arith.all;USE ieee.std_logic_unsigned.all;-- Entity DeclarationENTITY flash IS-- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE!PORT(key_in : IN STD_LOGIC;flash_out : OUT STD_LOGIC);-- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE! END flash;-- Architecture BodyARCHITECTURE flash_architecture OF flash ISBEGINprocess(key_in)beginif key_in 'event and key_in='0' thenif key_cnt="11" thenkey_cnt<="00";elsekey_cnt<=key_cnt+1;end if;end if;end process;flash_out<='0' when key_cnt(0)='0'else '1' when key_cnt(0)='1'else '1';END flash_architecture;计数LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_arith.all;USE ieee.std_logic_unsigned.all;-- Entity DeclarationENTITY js10 IS-- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE!PORT(js10in : IN STD_LOGIC;key_set:IN STD_LOGIC;js10out : OUT STD_LOGIC_vector(3 downto 0);jw : OUT STD_LOGIC);-- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE! END js10;-- Architecture BodyARCHITECTURE js10_architecture OF js10 ISsignal cnt:std_logic_vector(3 downto 0);BEGINprocess(js10in,key_set)beginif key_set='1' thencnt<=cnt;elsif rising_edge(js10in) thenif cnt= "1001" thencnt<= "0000";jw<='1';elsecnt<=cnt+1;jw<='0';end if;end if;end process;js10out<=cnt;END js10_architecture;LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_arith.all;USE ieee.std_logic_unsigned.all;-- Entity DeclarationENTITY js6 IS-- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE!PORT(js6in : IN STD_LOGIC;key_set:IN STD_LOGIC;js6out : OUT STD_LOGIC_vector(2 downto 0);jw : OUT STD_LOGIC);-- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE!END js6;-- Architecture BodyARCHITECTURE js6_architecture OF js6 ISsignal cnt:std_logic_vector(2 downto 0);BEGINprocess(js6in,key_set)beginif key_set='0' thencnt<=cnt;elsif rising_edge(js6in) thenif cnt= "101" thencnt<= "000";jw<='1';elsecnt<=cnt+1;jw<='0';end if;end if;end process;js6out<=cnt;END js6_architecture;译码显示LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_arith.all;USE ieee.std_logic_unsigned.all;-- Entity DeclarationENTITY ymq_38 IS-- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE!PORToe : IN STD_LOGIC;clk:in std_logic;in4 : IN STD_LOGIC_vector(3 downto 0);out8 : OUT STD_LOGIC_vector(7 downto 0) );-- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE!END ymq_38;-- Architecture BodyARCHITECTURE a OF ymq_38 ISsignal out8_r:STD_LOGIC_vector(7 downto 0);BEGINprocess(in4)begincase in4 iswhen "0000"=>out8_r<="11000000";when "0001"=>out8_r<="11001111";when "0010"=>out8_r<="10100100";when "0011"=>out8_r<="10110000";when "0100"=>out8_r<="10011001";when "0101"=>out8_r<="10010010";when "0110"=>out8_r<="10000010";when "0111"=>out8_r<="11111000";when "1000"=>out8_r<="10000000";when "1001"=>out8_r<="10010000";when others =>out8_r<="11111111";end case;end process;process(clk,oe)beginif oe='1' thenif clk='1' thenout8<=out8_r;elseout8<="11111111";end if;elseout8<=out8_r;end process;END a;LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_arith.all;USE ieee.std_logic_unsigned.all;-- Entity DeclarationENTITY ymq38 IS-- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE!PORT(ymq38in : IN STD_LOGIC_vector(2 downto 0);oe : IN STD_LOGIC;clk:in std_logic;ymq38out : OUT STD_LOGIC_vector(7 downto 0) );-- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE! END ymq38 ;-- Architecture BodyARCHITECTURE b OF ymq38 ISsignal ymq38out_r:STD_LOGIC_vector(7 downto 0);BEGINprocess(ymq38in)begincase ymq38in iswhen "000"=>ymq38out_r<="11000000";when "001"=>ymq38out_r<="11001111";when "010"=>ymq38out_r<="10100100";when "011"=>ymq38out_r<="10110000";when "100"=>ymq38out_r<="10011001";when "101"=>ymq38out_r<="10010010";when "110"=>ymq38out_r<="10000010";when others =>ymq38out_r<="11111111";end case;end process;process(clk,oe)beginif oe='1' thenif clk='1' thenymq38out<=ymq38out_r;elseymq38out<="11111111";end if;elseymq38out<=ymq38out_r; end if;end process;END b;。

实验六 基于VHDL语言的分频器设计与实现

实验六 基于VHDL语言的分频器设计与实现

实验六基于VHDL语言的分频器设计与实现报告一、实验目的1、进一步掌握VHDL语言的基本结构及设计的输入方法。

2、掌握VHDL基本逻辑电路的综合设计应用。

二、实验原理在数字电路系统中,分频电路应用得十分广泛。

例如,工程人员常常使用分频电路来得到数字通信中的帧头信号、选通信号以及中断信号等。

因此,分频电路在数字电路系统的设计中也应该作为重要的基本电路来掌握,从而给今后的一些设计带来方便。

三、实验内容1、设计并实现一个6分频的分频电路,要求其输出信号的占空比为50%。

请分析分频电路设计原理并编写VHDL语言程序,利用Max+PlusII开发软件对其进行编译和仿真。

6分频电路实现程序代码如下:2、在实际数字电路设计过程中,往往需要得到占空比不是1:1的分频时钟,方法是:首先描述一个计数器电路,然后根据计数器电路的并行输出信号来决定输出时钟的高低电平。

请设计、编写VHDL 语言程序实现分频后时钟信号的占空比为1:15的16分频电路,并利用Max+PlusII开发软件对其进行编译和仿真。

四、实验设计1.程序代码:图library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity clk_div6 isport(clk:in std_logic;clk_out:out std_logic);end clk_div6;architecture rtl of clk_div6 issignal clk_temp:std_logic;beginprocess(clk)variable counter:integer range 0 to 15;constant md:integer:=2;beginif clk'event and clk='1'thenif counter=md thencounter:=0;clk_temp<=not clk_temp;elsecounter:=counter+1;end if;end if;end process;clk_out<=clk_temp;end rtl;2.仿真结果:五、实验结果分析本实验利用VHDL语言设计分频电路,目的在于进一步掌握VHDL语言的基本结构及设计的输入方法,掌握VHDL基本逻辑电路的综合设计应用。

小数分频VHDL代码

小数分频VHDL代码

小数分频VHDL代码本文介绍基于前置N/N+1分频器的小数分频基本原理,以及基于此原理的一位小数分频器的源代码,受数据位宽的影响,本文给出的代码系数整数部分的范围为0-15,如需更大数值可自行修改代码。

一、原理介绍:假设分频系数为N.X,则N*(10-X)+(N+1)*X=10*N-N*X+N*X+X=10*N+X=N.X*10由上式可见只要满足输出十个脉冲的时间内输入脉冲为10*N+X就可实现N.X分频.可对输入时钟进行(10-X)次N分频和X次(N+1)分频实现,由于先进行(10-X)次分频后进行X次(N+1)分频会造成相位有很大变化,可采用N分频和(N+1)分频交替进行的方法来改善相伴变化.实现原理不再过多介绍,请参看sel部分源代码。

二、源代码1:NdotXfd,顶层文件library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity NdotXfd isport (clock : in std_logic;n : in std_logic_vector(3 downto 0);x : in std_logic_vector(3 downto 0);clock_out : out std_logic);end entity;architecture arch of NdotXfd iscomponent numberport(n : in std_logic_vector(3 downto 0);number0 : out std_logic_vector(3 downto 0);number1 : out std_logic_vector(3 downto 0));end component;component fdnport(clock_in : in std_logic;enable : in std_logic;n_of_fd : in std_logic_vector(3 downto 0);clock_out : out std_logic);end component;component selport(clock_in : in std_logic;Xnumber : in std_logic_vector(3 downto 0);sel_out : out std_logic);end component;component mux_21port(a : in std_logic;b : in std_logic;s : in std_logic;y : out std_logic);end component;signal selt : std_logic;signal selt_not : std_logic;signal clock_1 : std_logic;signal clock_2 : std_logic;signal clock_sel: std_logic;signal n_fd : std_logic_vector(3 downto 0);signal n1_fd : std_logic_vector(3 downto 0);beginnumber0 : number port map (n, n_fd, n1_fd);fdn0 : fdn port map (clock, selt_not, n_fd, clock_1);fdn1 : fdn port map (clock, selt, n1_fd, clock_2);mux_210 : mux_21 port map (clock_2, clock_1, selt, clock_sel); sel0 : sel port map (clock_sel, x, selt);selt_not <= not selt;clock_out <= clock_sel;end arch;2:fdn,任意整数分频器(分步系数2--15,可自行修改代码增加分频系数)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fdn isport(clock_in : in std_logic;enable : in std_logic;n_of_fd : in std_logic_vector(3 downto 0);clock_out : out std_logic);end entity;architecture bhv of fdn issignal clock : std_logic;signal q0 : std_logic;signal q1 : std_logic;signal number : std_logic_vector(2 downto 0);signal counter0 : std_logic_vector(3 downto 0);signal counter1 : std_logic_vector(3 downto 0);beginfdn: process(enable, clock_in, n_of_fd, clock, q0, q1)beginnumber(2 downto 0) <= n_of_fd(3 downto 1);if q1 = '0' thenclock <= not clock_in;elseclock <= clock_in;end if;if (enable='1') thenif (n_of_fd(0)='0')thencounter1 <= (others=>'0');q1 <= '0';if rising_edge(clock_in) thenif (number="001") thenq0 <= not q0;elseif counter0 = number-1 thencounter0 <= (others=>'0');q0 <= not q0;elsecounter0 <= counter0 + 1;end if;end if;end if;elsecounter0 <= (others=>'0');q0 <= '0';if rising_edge(clock) thenif counter1 = number thencounter1 <= (others=>'0');q1 <= not q1;elsecounter1 <= counter1 + 1;end if;end if;end if;elseq0 <= '0';q1 <= '0';counter0 <= (others=>'0');counter1 <= (others=>'0');end if;end process fdn;output: process (enable, n_of_fd(0), q0, q1) beginif (enable='1') thenif (n_of_fd(0)='0')thenclock_out <= q0;elseclock_out <= q1;end if;elseclock_out <= '0';end if;end process output;end bhv;3:sel,分频器选择信号判断产生器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity sel isport(clock_in : in std_logic;Xnumber : in std_logic_vector(3 downto 0); sel_out : out std_logic);end entity;architecture bhv of sel issignal XsubTen : std_logic_vector(3 downto 0); signal q : std_logic_vector(4 downto 0);beginXsubTen <= 10 - Xnumber;sel: process(clock_in, q)beginif (clock_in'event and clock_in = '0') then if q + XsubTen >= 10 thenq <= q + XsubTen - 10;elseq <= q + XsubTen;end if;end if;if q >= Xnumber thensel_out <= '0';elsesel_out <= '1';end if;end process sel;end bhv;4:mux2_1,2选1数据选择器library ieee;use ieee.std_logic_1164.all;entity mux_21 isport(a : in std_logic;b : in std_logic;s : in std_logic;y : out std_logic);end entity;architecture bhv of mux_21 isbeginwith s selecty <= a when '1' ,b when others;end bhv;5:number,分频器系数处理器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity number isport( n : in std_logic_vector(3 downto 0); number0 : out std_logic_vector(3 downto 0); number1 : out std_logic_vector(3 downto 0) );end entity;architecture bhv of number isbeginnumber0 <= n;number1 <= n+1;end bhv;。

VHDL语言各种分频器的设计解析

VHDL语言各种分频器的设计解析

if(clkin”event and clkin=”1”) then
if(cnt<n-1) then
cnt <= cnt+1;
else
cnt <= 0;e Nhomakorabead if;
end if;
end process;
process(cnt) --依据计数值,把握输出时钟脉冲的高、低电平
begin
if(cnt<n/2) then
port(
clkin: IN std_logic;
clkout: OUT std_logic
);
End fdiv;
Architecture a of fdiv is
signal cnt: integer range 0 to n-1;
Begin process(clkin) --计数
begin
port(
clkin: IN std_logic;
clkout: OUT std_logic
);
End fdiv;
Architecture a of fdiv is
signal cnt: std_logic_vector(N-1 downto 0);
Begin
process(clkin)
ELSE
count <= count-1;
--模N计数器减法计数
clkout <= ”0”;
END IF;
END IF;
END PROCESS;
PROCESS(clkout)
BEGIN
IF(clkout”event AND clkout=”1”) THEN
div2 <= NOT div2; --输出时钟二分频

maxplus2小数分频

maxplus2小数分频

小数分频器的设计摘要:通过小数分频器的基本实现原理进行小数分频器主模块的设计与实现。

程序用VHDL硬件描述语言设计,在MAX+ plus Ⅱ开发软件下分析编译并进行仿真调试。

关键词:小数分频,VHDL一、小数分频的基本原理:小数分频器的功能就是当在输入端给定不通输入数据时,将对输入的时钟信号有不同的分频比,即对较高频率的信号分频,以得到所需要的低频信号。

小数分频器的实现方法很多, 但其基本原理一样,即在若干个分频周期中采取某种方法使某几个周期多计或少计1 个数, 即吞脉冲或插入脉冲的方法,从而在平均意义上获得1 个小数分频比,设要进行分频比为N 的小数分频, N 可表示为N = K + 10- nX式中, n , K, X 均为正整数; n 为到X 的位数,即N 有n 位小数。

另一方面,分频比又可以写成:N = M/ P式中:M 为分频器输入脉冲数; P 为输出脉冲数。

M = N P = ( K + 10- nX) P令P = 10 n ,则有M = 10 nK + X以上是小数分频器的一种实现方法, 即在进行10 nK 次分频时,设法多输入X 个脉冲。

二、仿真软件:MAX-plusⅡ。

可识别编译AHDL,VHDL,V erilog hdl等硬件语言。

三、设计的小数分频器主模块:设计(一):1、源代码:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ClkDivy ISPORT(clk:IN STD_LOGIC;clkdivp:OUT STD_LOGIC);END ClkDivy;ARCHITECTURE rtl OF ClkDivy ISCONSTANT md :STD_LOGIC_VECTOR(1 DOWNTO 0):="10";SIGNAL counter :STD_LOGIC_VECTOR(1 DOWNTO 0);SIGNAL tmpclk :STD_LOGIC;SIGNAL clkdiv5 :STD_LOGIC;SIGNAL tmpdiv2p5 :STD_LOGIC;BEGINp1:PROCESS(tmpclk)BEGINIF(tmpclk'event AND tmpclk='1')THENIF(counter="00")THENcounter<=md;tmpdiv2p5<='1';ELSEcounter<=counter-1;tmpdiv2p5<='0';END IF;END IF;END PROCESS p1;p2:PROCESS(tmpdiv2p5)BEGINIF(tmpdiv2p5'event AND tmpdiv2p5='1')THENclkdiv5<=NOT clkdiv5;END IF;END PROCESS p2;tmpclk<=clk XOR clkdiv5;clkdivp<=tmpdiv2p5;END rtl;2、生成的模块文件图3、仿真时序图:设计(二)1.源代码:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity HalfDivy isport(Inclk : in std_logic;Preset : in std_logic_vector(3 downto 0);Outclk : buffer std_logic);end HalfDivy;architecture Behavioral of HalfDivy issignal clk,divclk : std_logic := '0';signal count : std_logic_vector(3 downto 0) := "0000"; beginclk <= Inclk xor divclk;process(clk)beginif(clk'event and clk = '1') thenif(count = "0000") thencount <= preset-1;Outclk <= '1';elsecount <= count-1;Outclk <= '0';end if;end if;end process;process(Outclk)beginif(Outclk'event and Outclk='1') thendivclk<=not divclk;end if;end process;end Behavioral;2、生成的模块文件图3、仿真时序图:四:总结分频器完成对输入信号的整数或半整数分频功能,当然这只是分频器主模块,我们还要相应设计输入信号产生模块,控制模块等等,从而实现不同需要的信号分频,得到所需频段信号理想的效果。

分频器设计 VHDL

分频器设计 VHDL

实验报告课程名称电子设计自动化实验(基于FPGA)实验项目分频器设计(计数器设计)实验仪器计算机+ Quartus Ⅱ9.1系别信息与通信工程学院专业通信工程班级/学号学生姓名实验日期2012、5成绩_______________________ 指导教师_______________________分频器设计(计数器设计)利用VHDL语言,设计一个输入1MHz脉冲,分频后能产生100kHz、10kHz、1kHz、100Hz、10Hz、1Hz时钟脉冲产生电路。

(1)实验要求①利用VHDL语言编程;②利用仿真软件进行功能仿真;③编程下载到EP1C6Q240C8器件中,利用EDA/SOPC实验装置进行验证。

(2)实验设计注意事项实验要求每相差十倍频率都有脉冲输出,故采用十进制计数器对信号分频设计方法较为简单。

将十进制计数器做成COMPONENT,利用元件例化语句实现调用。

电路采用异步工作方式。

(3)VHDL代码LIBRARY IEEE;USE IEEE.std_logic_1164.all;USE IEEE.std_logic_arith.all;USE IEEE.std_logic_unsigned.all;ENTITY fenpin10 ISPORT(i:in std_logic;o:inout std_logic);END ENTITY;ARCHITECTURE func OF fenpin10 ISSIGNAL count:std_logic_vector(3 downto 0);SIGNAL tmp:std_logic;BEGINPROCESS(i)BEGINIF(i'EVENT AND i = '1') THENIF(count = "1001") THEN --当计数满9时进位count <= (OTHERS => '0');tmp <= NOT tmp;ELSEcount <= count + 1;END IF;END IF;END PROCESS;o <= tmp;END ARCHITECTURE;LIBRARY IEEE;USE IEEE.std_logic_1164.all;USE IEEE.std_logic_arith.all;USE IEEE.std_logic_unsigned.all;ENTITY fenpin ISPORT(clk:in std_logic;div_10:buffer std_logic;div_100:buffer std_logic;div_1000:buffer std_logic;div_10000:buffer std_logic;div_100000:buffer std_logic;div_1000000:buffer std_logic);END ENTITY;ARCHITECTURE func OF fenpin ISCOMPONENT fenpin10 --元件例化PORT(i:in std_logic;o:inout std_logic);END COMPONENT;SIGNAL x0,x1,x2,x3,x4,x5:std_logic;BEGINu1:fenpin10 PORT MAP(i => clk, o => x0);u2:fenpin10 PORT MAP(x0, x1);u3:fenpin10 PORT MAP(x1, x2);u4:fenpin10 PORT MAP(x2, x3);u5:fenpin10 PORT MAP(x3, x4);u6:fenpin10 PORT MAP(x4, x5);div_10 <= x0;div_100 <= x1;div_1000 <= x2;div_10000 <= x3;div_100000 <= x4;div_1000000 <= x5;END ARCHITECTURE;(4)仿真结果未下载验证、调试,如发现错误,见谅!——Higashi Q83831295。

使用VHDL进行分频器设计

使用VHDL进行分频器设计

使用VHDL 进行分频器设计作者:ChongyangLee摘要使用VHDL 进行分频器设计作者:ChongyangLee本文使用实例描述了在FPGA/CPLD 上使用VHDL 进行分频器设计,包括偶数分频、非50%占空比和50%占空比的奇数分频、半整数(N+0.5)分频、小数分频、分数分频以及积分分频。

所有实现均可通过Synplify Pro 或FPGA 生产厂商的综合器进行综合,形成可使用的电路,并在ModelSim 上进行验证。

目录概述 (1)计数器 (1)普通计数器 (1)约翰逊计数器 (3)分频器 (4)偶数分频器 (4)奇数分频器 (6)半整数分频器 (9)小数分频器 (11)分数分频器 (15)积分分频器 (18)概述分频器是数字电路中最常用的电路之一,在FPGA 的设计中也是使用效率非常高的基本设计。

基于FPGA 实现的分频电路一般有两种方法:一是使用FPGA 芯片内部提供的锁相环电路,如ALTERA 提供的PLL (Phase Locked Loop),Xilinx 提供的DLL(Delay Locked Loop);二是使用硬件描述语言,如VHDL、Verilog HDL 等。

使用锁相环电路有许多优点,如可以实现倍频;相位偏移;占空比可调等。

但FPGA 提供的锁相环个数极为有限,不能满足使用要求。

因此使用硬件描述语言实现分频电路经常使用在数字电路设计中,消耗不多的逻辑单元就可以实现对时钟的操作,具有成本低、可编程等优点。

计数器计数器是实现分频电路的基础,计数器有普通计数器和约翰逊计数器两种。

这两种计数器均可应用在分频电路中。

普通计数器最普通的计数器是加法(或减法)计数器。

下面是加法计数器的VHDL实现,其Synplify Pro下的RTL View如图1所示。

--file Name: ripple.vhd--Description: 带复位功能的加法计数器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity ripple isgeneric (width: integer := 4);port(clk, rst: in std_logic;cnt: out std_logic_vector(width - 1 downto 0));end ripple;architecture a of ripple issignal cntQ: std_logic_vector(width - 1 downto 0);beginprocess(clk, rst)beginif (rst = '1') thencntQ <= (others => '0');elsif (clk'event and clk = '1') thencntQ <= cntQ + 1;end if ; end process ;cnt <= cntQ;end a;代码 1 加法计数器 VHDL 代码图 1 加法计数器 RTL 视图加法计数器的Test Bench 代码如下所示,在ModelSim 下进行功能仿真,仿真 波形结果如图 2所示。

EDA结课论文——4.5分频电路的设计

EDA结课论文——4.5分频电路的设计

基于VHDL的4.5分频电路的设计班级09电子2 姓名吴天一学号090342343内容提要:在Quartus II 9.1上,通过程序输入法设计一个4.5分频电路,程序命名为DIVISION_4_5。

先创建工程,然后对程序进行编译,时序仿真并输出波形图与原理图。

关键词:4.5分频电路、VHDL、编译、仿真、波形图、原理图在使用数字系统设计中,除了偶数与奇数分频电路的设计外,常需要另一种分频电路,即半整数分频。

如下是基于VHDL的4.5分频电路的设计,并在Quartus9.1上实现。

1.用VHDL语言编写4.5分频电路的源程序源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY DIVISION_4_5 ISPORT(CLK : IN STD_LOGIC;Q : BUFFER STD_LOGIC);END ;ARCHITECTURE behav OF DIVISION_4_5 ISCONSTANT PRESET:STD_LOGIC_VECTOR(2 DOWNTO 0):="101";SIGNAL COUNT:STD_LOGIC_VECTOR(2 DOWNTO 0);SIGNAL P1,P2:STD_LOGIC;BEGINP1<=CLK XOR P2;PROCESS(P1)BEGINIF RISING_EDGE(P1) THENIF(COUNT="000") THENCOUNT<=PRESET-1;Q<='1';ELSECOUNT<=COUNT-1;Q<='0';END IF;END IF;END PROCESS MODN_COUNTER;PROCESS(Q) BEGINIF RISING_EDGE (Q)THENP2<=NOT P2;END IF;END PROCESS ;END behav;2.在QuartusII 9.1中实现程序的创建、编译、时序仿真、输出波形和原理图(1)建立文件夹建立文件夹D:\lw_13作为工作库,以便将设计过程中的相关文件存储于此。

小数倍直接频率合成vhdl代码实现

小数倍直接频率合成vhdl代码实现

小数倍直接频率合成(Fractional-N PLL)是一种在数字信号处理和通信领域中常见的频率合成技术。

该技术通过对基频进行小数倍的频率合成,可以实现更高精度的频率合成和信号调制。

在VHDL代码实现中,需要充分考虑电路的逻辑结构和时序控制,以确保频率合成器的稳定性和精确性。

一、小数倍直接频率合成技术概述1. 基本原理小数倍直接频率合成技术是通过控制频率合成器中的相位锁定环(PLL)的相位和频率,使其输出的频率为所需频率的小数倍。

通过对PLL的控制信号进行精确调节,可以实现对输出频率的高精度控制。

2. 应用领域小数倍直接频率合成技术在数字调制、通信系统、雷达信号处理等领域有着广泛的应用。

在无线通信系统中,可以通过小数倍频率合成技术实现多种调制格式的信号发射和接收。

二、VHDL代码实现小数倍直接频率合成1. 模块划分在VHDL代码实现中,可以将小数倍直接频率合成器划分为多个模块,包括相位锁定环(PLL)、数字控制单元(DCU)、数字信号处理单元(DSP)、时钟分频器等。

每个模块负责不同的功能,通过模块化设计可以提高代码的可读性和可维护性。

2. 时序控制在频率合成器中,时序控制是非常关键的部分。

VHDL代码需要精确地控制不同模块之间的时序关系,以确保输出频率的稳定和精确。

还需要考虑时钟信号的传输延迟和时钟抖动等因素对系统性能的影响。

3. 数字控制数字控制单元(DCU)是频率合成器中用于生成对PLL控制信号的关键模块。

在VHDL代码中,需要对DCU的逻辑功能进行实现,并通过数值计算和逻辑运算生成精确的控制信号。

还需要考虑数字信号处理单元(DSP)对控制信号的滤波和校准。

4. 信号处理在小数倍直接频率合成器中,需要对输入信号进行数字信号处理,以生成对PLL的合适控制信号。

VHDL代码中,需要对信号处理部分进行数值计算和滤波处理,以确保输出频率的精确性和稳定性。

5. 仿真和验证在编写VHDL代码实现小数倍直接频率合成器的过程中,需要进行仿真验证。

eda课程设计-航空通信中小数分频器的设计[管理资料]

eda课程设计-航空通信中小数分频器的设计[管理资料]

航空通信中小数分频器的设计摘要:FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。

它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。

本次项目是小数分频。

小数分频是为解决人们想要小数频率的愿望,而不局限于整数频率。

高速发展的的当今社会是数字化的时代,各种各样的数字化产品进入了市场。

而用VHDL语言实现的数字产品也在一定范围内满足市场上不同的需求。

用FPGA设计的产品不但降低的生产成本,还在一定程度上缩短了生产周期。

同时所需的人力又不是特别多。

小数分频的基本原理小数分频的基本原理是采用脉冲吞吐计数器和锁相环技术先设计两个不同分频比的整数分频器,然后通过控制单位时间内两种分频比出现的不同次数来获得所需要的小数分频值。

,可以将分频器设计成9次10分频,1次11分频,这样总的分频值为:F=(9×10+1×11)/(9+1)=,由于分频器的分频值不断改变,因此分频后得到的信号抖动较大。

(N为整数)时,可控制扣除脉冲的时间,以使输出成为一个稳定的脉冲频率,而不是一次N分频,一次N-1分频。

本次设计用VHDL设计了小数分频器,在QuartusⅡ,仿真结果证明本次实验正确,最后用FPGA器件实现了小数分频器。

关键字:FPGA 小数分频器 VHDL 频率计目录1 FPGA及VHDL简介什么是FPGA (3)FPGA由什么构成 (4)FPGA设计步骤 (5)硬件描述语言VHDL (9)2 小数分频分析及设计整数分频与半整数分频 (11)分频的程序 (11)顶层原理图 (14)3 外围及显示电路设计频率计 (15)4位十进制频率计的设计 (15)4位十进制频率计系统仿真及结果 (16)TESTCL模块的设计 (16)TESTCL模块系统仿真及结果 (19)4 实验总结 (20)致谢 (21)参考文献 (21)引言随着各种先进雷达、制导、定位系统、数字通信设备及专用测试仪性能的不断提高,对其频率源的要求越来越高。

基于VHDL的小数分频器设计

基于VHDL的小数分频器设计

基于VHDL的小数分频器设计
李慧
【期刊名称】《微计算机信息》
【年(卷),期】2010(026)029
【摘要】本文主要介绍了一种基于VHDL语言的双模前置小数分频器的设计,为了测试的需要同时设计了8位数字频率计,在MAX-PLUSⅡ平台下实现分频器的仿真,并下载到EPF10K10LC84-3芯片中实现.
【总页数】2页(P192-193)
【作者】李慧
【作者单位】223003,淮阴工学院
【正文语种】中文
【中图分类】TP386
【相关文献】
1.基于VHDL的半整数分频器的设计 [J], 林海波
2.基于VHDL的数控分频器设计及应用 [J], 郭海青
3.基于VHDL的全数字分数分频器设计 [J], 尹辉炳;张涛
4.基于VHDL的占空比可调奇分频器设计 [J], 薛开伍
5.基于VHDL的分频器设计方案探讨 [J], 程佳佳
因版权原因,仅展示原文概要,查看原文内容请购买。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

技术创新《微计算机信息》(嵌入式与SOC)2010年第26卷第10-2期360元/年邮局订阅号:82-946《现场总线技术应用200例》电子设计基于VHDL 的小数分频器设计The design of decimal fraction frequency divider based on the language named VHDL(淮阴工学院)李慧LI Hui摘要:本文主要介绍了一种基于VHDL 语言的双模前置小数分频器的设计,为了测试的需要同时设计了8位数字频率计,在MAX-PLUS Ⅱ平台下实现分频器的仿真,并下载到EPF10K10LC84-3芯片中实现。

关键词:双模;小数分频器;频率计中图分类号:TP386文献标识码:AAbstract:The design of double module decimal fraction frequency divider based on the language named VHDL is mainly presented in this text.8bit digital cymometer is designed for testing at the same time.Simulate is finished on MAX-PLUS Ⅱ,and download is finished in CMOS CHIP named EPF10K10LC84-3.Key words:double module;decimal fraction frequency divider;cymometer文章编号:1008-0570(2010)10-2-0192-021引言分频器是数字电路中最基础也是最常用的电路,整数分频器的实现比较简单,可采用标准的计数器或可编程逻辑器件设计实现。

但在某些特定场合下,时钟源与所需的频率往往不成整数倍关系,此时就需要采用小数分频器对输入的信号进行分频。

而同时本系统可以在不降低参考频率的前提下,提高系统输出频率的分辨率。

2双模前置小数分频原理用来实现小数分频器的方法很多,但其基本原理都基本一样,即在若干个分频周期中采取某种方法使某几个周期多计或少计一个数,从而在整个计数周期的总体平均意义上获得一个小数分频比,设要进行分频比为K 的小数分频,K 可表示为:K=N+10-n×X 式中:n,N,X 均为正整数;n 为到X 的位数,即K 有n 位小数。

另一方面,分频比又可以写成:K=M/P式中:M 为分频器输入脉冲数;P 为输出脉冲数。

令,则:以上是小数分频器的一种实现方法,即在进行10n 次N 分频时,设法多输入X 个脉冲。

3系统模块设计部分本系统主要包括两大部分:一部分是可预置分频系数的小数分频模块设计,另一部分是8位数字频率计的设计(主要是为了验证设计的结果而辅助设计的一个模块)。

具体模块框图如下:图1系统模块图4VHDL 程序实现4.1小数分频模块设计1)、原理分析以实现7.3分频为例,要实现7.3分频,只要在10次分频中做7(即10-3)次除7,3次除8就可以得到:N=(7×7+3×8)/10=7.3,又如,要实现分频系数为7.32的小数分频,只要在每100次分频中做68(100-32)次除7,32次除8即可得到N=(68×7+32×8)/10=7.32。

由上可知,要实现分频比为N.F 的小数分频,只需要对输入信号做N/N+1分频,考虑到该小数分频器要进行多次N 分频和N+1分频,那么就设法将两种分频混合均匀,这种“均匀”工作是通过计数器来完成的,在这里只讨论一位小数的情况,下面简要介绍这种混合的方法:每进行一次分频,计数值为10减去分频系数的小数部分,各次计数值累加。

若累加结果小于10,则进行N+1分频,若大于10或等于10,则进行N 分频。

2)、VHDL 语言实现(以1位小数为例)小数分频器主要由N/N+1分频器、计数器以及控制逻辑几大部分组成。

界面说明部分定义如下:ENTITY sheji_02ISport(clk:in std_logic;--输入信号num_zg,num_zd:in std_logic_vector (3downto 0);--分频系数高低位输入,最大输入为15.9err:out std_logic;fout:buffer std_logic);--输出信号end;分频系数为num_sheding 的分频器设计:process(clk)isbeginif clk'event and clk='1'then if num="0000"then李慧:讲师硕士(10)ÁM K P N X P−=×=+××10ÁP =10ÁM N X=×+192--邮局订阅号:82-946360元/年技术创新电子设计《PLC 技术应用200例》您的论文得到两院院士关注num<=num_sheding-1;num_out<='1';elsenum<=num-1;num_out<='0';end if;end if;end process;计数器部分设计如下:process(num_out)is beginif num_out'event and num_out='1'thenif tmp >=tmp_z then tmp <=tmp -tmp_z;num_sheding <=num_zg;--tmp_z 为小数部分数据else tmp<=tmp+10-tmp_z;num_sheding<=num_zg+1;end if;end if;end process;fout<=num_out;end;3)、波形仿真经过系统平台的编译仿真之后,得到如下的波形图:图2系统波形仿真图从以上波形我们可以看出:7.3分频的分频器在第一个时钟时进行8分频,第二、三个时钟时进行7分频。

4.2测频模块设计本设计模块主要由3个子模块组成:测频信号发生器TESTCTL,8个具有时钟使能的十进制加法计数器CNT10,和一个32位锁存器REG32B 。

这一部分在很多资料上都有记载,在此不再多述。

4.3显示模块设计本模块主要实现8位数字频率值的动态显示,显示锁存器中的数据,主要包括数码管动态扫描、七段数码管译码两大部分。

具体实现如下:process(ck)is --动态扫描进程,其中ck 为数码管扫描时钟beginif ck'event and ck='1'then cnt8<=cnt8+1;end if;case cnt8iswhen "000"=>sel<="10000000";show_data<=data(3downto 0);…when "111"=>sel<="00000001";show_data<=data (31downto 28);when others=>null;end case;end process;process(show_data)is –-译码进程begincase show_data iswhen "0000"=>sm<="1111110";…end case;end process;5实验结果在EDA 实验箱我们对以上设计进行了测试,达到了预期的效果,以7.3分频为例:首先利用测频模块测试输入频率,频率值为16384HZ,然后经过7.3分频,然后分频之后得到的信号再次进行测频,测得的频率值为2244HZ,分频系数为7.3012,达到了要求,误差小,系统分频的精度高。

6结论从测试结果来看,小数分频的功能基本上能够实现,分频的精度高,具有一定的实用性。

本文的创新点:选用FPGA 实现小数分频器,外围电路简单,系统集成化程度高,设计灵活,精度也明显高于普通的小树分频器。

参考文献[1]苏玉娜,程明等.基于FPGA 的单片机外围接口电路设计[J].微计算机信息.2009,5-2:p173-174[2]古天祥.电子测量原理.北京:机械工业出版社,2004[3]潘松,黄继业.EDA 技术实用教程.北京:科学出版社,2002[4]谭会生,张昌凡.EDA 技术及应用.西安:西安电子科技大学出版社,2001作者简介:李慧,(1980-)男(汉族),江苏淮安人,硕士,讲师,主要研究方向为测控技术与仪器。

Biography:LI Hui,(1980-),Male (HAN),Huaian city in Jiangsu Province ,Master ,Lecturer ,Researched Area:Technique and Instrumentation of Measurements.(223003淮阴工学院)李慧通讯地址:(223003江苏淮安市枚乘路1号淮阴工学院电子与电气工程学院)李慧(收稿日期:2009.10.13)(修稿日期:2010.01.05)(上接第152页)[4]张素智,史培中等.基于RFID 的车辆出入安全管理系统设计[J].微计算机信息.2009,5-2:204-206[5]e-Plate Brochure[EB/OL]..[6]谭思亮,邹超群.Visual C++串口通信工程开发与实例导航[M].北京:人民邮电出版社,2003.[7]Serial COM Simply in C#[EB/OL]./tutorial/tutorial_details.aspx?tutorial_id.作者简介:赵文婧(1984-),女,江苏人,徐州工程学院助教,硕士,主要研究方向:射频识别技术;王刚(1967-),男,新疆人,江苏大学特聘教授,博士,主要研究方向:射频识别技术、无线通信、高分辨率检测与成像技术以及超宽带电磁脉冲技术等。

Biography:ZHAO Wen-Jing (1984-),female,Jiangsu Province,assistant of Xuzhou Institute of Technology,Master,Research area:RFID technology.(221000徐州徐州工程学院信电工程学院)赵文婧(212013镇江江苏大学计算机科学与通信工程学院)王刚通讯地址:(221000江苏省徐州市新城区徐州工程学院中心校区信电工程学院电子信息教研室教1楼308室)赵文婧(收稿日期:2010.01.06)(修稿日期:2010.04.25)193--。

相关文档
最新文档