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

若前向通道采用模Ⅳ计数器实现.则输出波形 高电平占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分频器课程设计一、课程目标知识目标: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的分频器设计[开题报告]](https://img.taocdn.com/s3/m/2e8aa70426fff705cd170a78.png)
开题报告电子信息工程基于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数控分频器设计

目录一、设计任务与要求 (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语言基本结构
实体
描述电路的输入和输出端口。
结构体
描述电路的内部逻辑和行为。
库
包含预定义的元件和函数。
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的分频电路

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的各种分频、计数与按键控制的实现本系统利用两种分频可实现多种计数,按键控制数码管闪烁系统框图分频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;。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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--。