E D A 技 术 设 计 报 告
姓名:张 骥
学号:0967112219 班级:测控2009-2 学院:信息工程学院
内蒙古科技大学EDA技术设计
数字式频率计的EDA设计
1.1 设计要求
设计一个能测量方波信号频率的频率计,测量结果用4位十进制数显示,频率测量范围为分为三档。一档为0~9999Hz;二档为10.0~99.99kHz;三档为100.0~999.9kHz,用4个带小数点数码管显示其频率;并且在超出目前量程档次时报警。
1.2 原理描述
频率计是能够测量和显示信号频率的电路。所谓频率,就是周期性信号在单位时间内变化的次数。常用的直接测频法有两种,一种是测周期法,一种是测频率法。测周期法需要有基准系统时钟频率Fs,在待测信号一个周期Tx内,记录基准系统时钟频率的周期数Ns,则被测频率可表示为:
Fx=Fs/Ns
测频率法就是在一定时间间隔Tw(该时间定义为闸门时间)内,测得这个周期性信号的重复变换次数为Nx,则其频率可表示为:
Fx=Nx/Tw
这两种方法的计数值会产生正负一个字的误差,并且被测精度与计数器中记录的数值Nx有关,为保证测试精度,一般对于低频信号采用测周期法,对于高频信号采用测频率法,直接测频法的时序控制波形图如图所示。
直接测频法的一般思路是:在精确规定计数允许周期T内使能计数器,对被测信号的周期(脉冲)数进行计数,计数允许周期T的长度决定了被测信号频率的范围。较长的计数允许周期T对低频信号而言有利于改善测量精度,但对于高频信号来说,则会产生溢出;较短的计数允许周期T对低频信号的测量,虽然精度降低,但能测量的最大频率较高,且不会产生溢出。基于此思路,可得到数字式频率计系统组成框图如图所示
内蒙古科技大学EDA技术设计
图.直接测频法时序控制波形图
图.数字式频率计系统组成框图
根据图,可以把数字式频率计分为四个部分:即4位十进制计数器模块、闸门控制模块、译码显示模块和脉冲整形模块。该数字式频率计的精度取决于系统基准时钟,实际设计可采用石英晶体振荡器电路,以便为闸门控制电路产生精确的系统基准时钟。脉冲整形模块主要对待测频率信号进行整形,以确保待测频率信号与BCD计数器模块的输入脉冲相兼容。只要待测频率信号具有足够的幅度,就可采用施密特触发器对输入信号进行整形,把非方波信号转换为数字脉冲信号。在EDA设计中不考虑此模块的设计,下面将给出各低层模块的层次化设计方案。
1.3 频率计的层次化设计方案
1 4位十进制计数器模块
4位十进制计数器模块包含4个级联十进制计数器,用来对施加到时钟脉冲输入端的待测信号产生的脉冲进行计数,十进制计数器具有计数使能、清零控制和进位扩展输出。用于计数的时间间隔(计数允许周期T)由闸门控制模块的控制信号发生器所产生的使能信号来控制,使能十进制计数器的计数允许周期T可由闸门控制模块中的量程选择输入来决定。这样允许用户选择所希望的被测频率范围,并有效地确定读出数据中十进制小数点的位置。
1) 十进制计数器元件cnt10v的设计
十进制计数器既可采用QuartusII的宏元件74160,也可用VHDL语言设计,原书上的程序有误,经修改后,其源程序如下:
内蒙古科技大学EDA技术设计
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY cnt10v IS
PORT(clr:IN STD_LOGIC; clk:IN STD_LOGIC; cout:OUT STD_LOGIC; en:IN STD_LOGIC;
cq:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END cnt10v;
ARCHITECTURE examplel OF cnt10v IS BEGIN
PROCESS(clr,clk,en)
VARIABLE cqi:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN
IF clr='1'THEN cqi:=(OTHERS=>'0'); ELSIF clk'EVENT AND clk='1'THEN IF en='1'THEN
IF cqi<10 THEN cqi:=cqi+1; ELSE cqi:=(OTHERS=>'0'); END IF; END IF; END IF;
IF cqi=9 THEN cout<='1'; ELSE cout<='0'; END IF; cq<=cqi; END PROCESS; END;
在源程序中cout是计数器进位输出;cq[3..0]是计数器的状态输出;clk是时钟输入端;clr是复位控制输入端,当clr=1时,cq[3..0]=0;en是使能控制输入端,当en=1时,计数器计数,当en=0时,计数器保持状态不变。
在项目编译仿真成功后,将设计的十进制计数器电路设置成可调用的元件cont10v.bsf,用于以下的4位十进制计数器的顶层设计。
2)4位十进制计数器的顶层设计
该顶层设计可以用原理图输入的方法完成。在QUartusII中,新建一个原理图编辑窗,从当前的工程目录中调出4片十进制计数器元件cnt10v,并按图所示的4位十进制计数器的顶层原理图完成电路连接。
内蒙古科技大学EDA技术设计
图.4位十进制计数器的原理图
完成4位十进制计数器的顶层原理图编辑以后,即可进行真测试和波形分析,其仿真输出波形如图所示,当clr=0、en=1时其计数值在0到999之间循环变化,cout为计数进位输出信号,在实际应用中可作为超量程报警信号,因此仿真结
(a) (b)
图.十进制计数器模块
(a) 仿真输出波形;(b)元件符号图
内蒙古科技大学EDA技术设计
2 闸门控制模块EDA设计
根据所述,频率计电路工作时先要产生一个计数允许信号(即闸门信号),闸门信号的宽度为单位时间,如1s。在闸门信号有效时间内,对被测信号计数,即为信号的频率。该频率计电路的精度取决于闸门信号T,该模块可再分为2个子模块,一个是定时信号模块,一个是控制信号发生器模块。
1)定时信号模块Timer(自定义)
根据设计要求,对于四位十进制计数器来说,当闸门信号的最大采样时间为1S时,其计数值在0到999之间,则最大频率为999Hz,此即为频率计电路工作的一档;当闸门信号的最大采样时间为0.1S(100毫秒)时,其计数值在0到999之间,把它转换为频率则为最小频率为10Hz,最大频率为999900Hz或者99.99kHz,此即为频率计电路工作的二档;当闸门信号的最大采样时间为0.01S(10毫秒)时,其计数值在0到999之间,把它转换为频率则为最小频率为100Hz,最大频率为9999000Hz或者999.9kHz,此即为频率计电路工作的三档,此即为频率计电路工作的三档。
本设计中假设输入的系统基准时钟为4MHz,为产生四种不同的闸门信号T,可由40分频,100分频和10分频的3级模计数器对4M\\Hz信号进行分频,为控制信号发生器提供3种不同的频率信号,通过自动换挡模块mux3利用量程选择开关控制闸门信号T的基准时钟,原理图如图所示。
图.定时信号模块原理图
图中,cnt10v为已设计好的十进制计数器元件,可直接把该模块作为底层元件使用,MXU3为3选1数据选择器,其3个输入为1kHz信号进行分频后的3种不同的频率信号100ms、10ms、1ms。3个量程状态显示信号p0(一档)、p1(二档)、p2(三档)
2)控制信号发生器模块TESTCTL
该模块主要根据输入的控制时钟脉冲,首先要产生一个锁存信号LOAD,用其上升沿控制锁存器将之前的计数结果存入锁存器中,并由显示模块将其显示出来,设置锁存器是为了
内蒙古科技大学EDA技术设计
让显示稳定,不会因为周期性清零信号使得显示的数值不断闪烁。锁存之后须有一清零信号CLR_CNT将计数器清零,为了下一秒的计数操作做准备。
闸门控制模块的VHDL源程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY TESTCTL IS
PORT(clk:IN STD_LOGIC;
clr_cnt:OUT STD_LOGIC; tsten:OUT STD_LOGIC; load:OUT STD_LOGIC); END;
ARCHITECTURE example4 OF TESTCTL IS SIGNAL a:STD_LOGIC; BEGIN
PROCESS(clk) BEGIN
IF clk'EVENT AND clk='1'THEN a<=not a; END IF; END PROCESS; PROCESS(clk,a) BEGIN
IF a='0' and clk='0'THEN clr_cnt<='1'; ELSE clr_cnt<='0'; END IF;
END PROCESS; load<=NOT a; tsten<=a; END;
(a) (b)
图.闸门控制信号发生器模块元件符号图
内蒙古科技大学EDA技术设计
可自动换挡基准时钟模块的设计与实现
本设计通过控制基准时钟信号来时现量程的自动转换。如果一个周期为0.1s的信号作为时钟信号通过一个进制计数器,从十进制计数器的进位输出端将会得到一个周期为1s的信号。因此,频率计的三档位可以通过计数器相级联来实现,如图:
3选1的选择器可以根据十进制计数器模块的溢出情况来作为选择标准。先使可自动变换档的基准计时模块工作在0挡,若被测频率高于0挡的范围。则会使4位十进制计数器模块产生溢出,用这个溢出信号来使自动换挡基准时钟模块工作在一档;同理,如果被测频率还是高出一挡的测量范围,就在自动换为二档。若被测频率任高于二档的测量范围,则输出一报警信号。
内蒙古科技大学EDA技术设计
可自动换挡基准计时模块的VHDL源程序如下: LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux3 IS
PORT(a:IN STD_LOGIC_VECTOR(3 DOWNTO 0); y:OUT STD_LOGIC; o:OUT STD_LOGIC; input0:in STD_LOGIC; input1:in STD_LOGIC; input2:in STD_LOGIC); END mux3;
ARCHITECTURE example5 OF mux3 IS BEGIN
PROCESS(input0,input1,input2,a) BEGIN
CASE a IS
WHEN\"0000\"=>y<=input0; WHEN\"0001\"=>y<=input1; WHEN\"0010\"=>y<=input2;
WHEN OTHERS=>y<='0';o<='1'; END CASE; END PROCESS; END;
可自动换挡基准计时模块的元件图:
图中将所有计数器的清零信号接地,因为清零信号为高电平有效,接地信号一直保持低电平,这样保证计数器不会被清零,一直正常工作。所有计数器的使能端需要一个高电平信号EN
内蒙古科技大学EDA技术设计
使其一直保持正常工作。最后一个计数器并不属于实现基准信号换挡功能的计数器组,它直接为三选一选择器mux3服务,统计来自4位十进制计数器模块的最高位进位信号的个数。Y输出端输出已经调整了的适合于被测频率的基准时钟信号。 3 译码显示模块的设计与实现
译码显示模块由显示寄存器和译码扫描显示电路组成。
1)显示寄存器设计
显示寄存器是在计数结束后,利用触发器的上升沿把最新的频率测量值保存在起来,这样在计数过程中可不必一直看着数码管显示器,显示器将最终的频率读数定期进行更新,其输出将作为译码扫描显示电路的输入。16位显示寄存器的VHDL源程序如下: LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY REG16 IS
PORT(DIN0:IN STD_LOGIC_VECTOR(3 DOWNTO 0); DIN1:IN STD_LOGIC_VECTOR(3 DOWNTO 0); DIN2:IN STD_LOGIC_VECTOR(3 DOWNTO 0); DIN3:IN STD_LOGIC_VECTOR(3 DOWNTO 0); LOAD:IN STD_LOGIC;
DOUT0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); DOUT1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); DOUT2:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); DOUT3:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END REG16;
ARCHITECTURE example3 OF REG16 IS BEGIN
PROCESS(LOAD) BEGIN
IF LOAD'event and LOAD='1'THEN DOUT0<=DIN0; DOUT1<=DIN1; DOUT2<=DIN2; DOUT3<=DIN3; END IF; END PROCESS; END example3;
在源程序中LOAD是锁存信号,上升沿触发;DIN 0~3是寄存器输入;DOUT 0~3是寄存器输出。
2)译码扫描显示电路
数字逻辑系统中常用的显示器件是数码管,半导体是数码管的外形和等效电路如图
内蒙古科技大学EDA技术设计
6-27所示,其每一个字段都是一个发光二级管(Light Emitting Diode,LED), 因而也称之为LED数码管或LED显示器。LED数码管用7段发光二极管(带小数点时为8段)来显示数字,每一段都是一个发光二极管,一般把所有段的相同一端相连,连接到地(共阴极接法)或者是连接到电源(共阳极接法)。共阴级LED数码管的公共端连接到地,另一端分别接一个限流电阻后再接到控制电路的信号端,当信号端为高电平时,该段即被点亮,否则不亮。共阳极接法则相反,公共端连接到电源,另一端分别接一个限流电阻后再接到控制电路的信号端,只有信号端为低电平时才被点亮,否则不亮。
在数字逻辑电路中,数码管可以用TTL或CMOS集成电路来直接驱动,其驱动方式有BCD码驱动和直接驱动两种。BCD码驱动方式是用74LS48(共阳级7段显示驱动器)/74LS49(共阴级7段显示驱动器)译码驱动电路来控制数码管显示。直接驱动方式是直接对数码管相应字段给出驱动电平,显示字形。表给出了共阴级LED数码管显示译码真值表。
在CPLD/FPGA验证设计结果时,两种方法均可采用。N个LED数码管以静态方式显示时,需用到8×N条引脚线。在较为复杂的系统中,CPLD/FPGA的引脚端资源是有限的。因此对于多个LED数码管显示,可以采用扫描方式来实现LED数码管动态显示。
实现方法是将频率计的4个数码管的相应字段并联起来,由CPLD/FPGA的输出信号a、b、c、d、e、f、g、h(小数点)直接驱动相应字段,由片选信号S1、S2、S3、S4依次点亮各个LED数码管,循环进行显示,即一个数码管显示之后另一个数码管马上显示,利用人眼的视觉暂留特性,可以到多个数码管同时显示的效果。
采用扫描方式来实现LED数码管动态显示,控制好数码管之间的延时是相当重要。根据人眼视觉暂留原理,LED数码管每秒的导通16次以上,人眼就无法分辨LED数码管短暂的不亮,认为是一直点亮的(其实LED数码管是以一定频率在闪动的)。但是,延时(导通频率)也不是越小越好,因为LED数码管达到一定亮度需要一定时间。如果延时控制的不好则会出现闪动,或者亮度不够。据经验,延时0.005秒可以达到满意的效果。另外,显示的字符有变化时,可在延时到达后送一个低电平(共阴极数码管)让LED数码管先短暂熄灭,再显示下一个字符,可使在视觉上字符的变化更清晰。
(1)7段数码显示译码器的VHDL设计
该模块将显示寄存器的四位BCD数字符译成7段码,有试验箱七段数码显示器安装属性可知,其VHDL源程序如下:
内蒙古科技大学EDA技术设计
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY dec7 IS
PORT(din:IN BIT_VECTOR(3 DOWNTO 0); dout:OUT BIT_VECTOR(6 DOWNTO 0)); END;
ARCHITECTURE example2 OF dec7 IS BEGIN
PROCESS(din) BEGIN
CASE din IS
when \"0000\"=>dout<=\"0000001\"; when \"0001\"=>dout<=\"1001111\"; when \"0010\"=>dout<=\"0010010\"; when \"0011\"=>dout<=\"0000110\"; when \"0100\"=>dout<=\"1001100\"; when \"0101\"=>dout<=\"0100100\"; when \"0110\"=>dout<=\"0100000\"; when \"0111\"=>dout<=\"0001111\"; when \"1000\"=>dout<=\"0000000\"; when \"1001\"=>dout<=\"0000100\"; WHEN OTHERS=>NULL; END CASE; END PROCESS;
END example2;程序中,din是0~9的BCD码输入;dout为译码后的7段数据信号。
(2) 译码显示模块的定层电路设计
如图所示的译码显示模块的原理图,即可完成定层电路设计和仿真。
内蒙古科技大学EDA技术设计
译码显示模块的原理图
图.为其编译仿真后的输出时序波形图和生成的元件符号图如图
(a) (b)
译码显示模块dec7
(a) 仿真输出波形;(b)元件符号图
1.4 频率计电路顶层原理图的设计和仿真
1 频率计主体电路顶层原理图设计
在成功完成低层单元电路模块设计仿真后,可根据测频原理框图,可完成图(a)所示的频率计电路顶层原理图的设计文件。该电路中定时信号模块、控制信号发生器模块、4位十进制计数器模块、寄存显示模块为前面设计低层单元电路模块。clk为系统基准输入信号;Fx为待测频率信号,本设计测试中用4个发光二级管表示量程状态显示;baojing是进位扩展信号,用于超量程提示功能,在超出目前量程档次时发出报警信号,驱动LED发光报警。在QuartusII利用原理图输入对频率计电路顶层原理图plj.qpf编译仿真正确无误后,即可生成如图所示图。
内蒙古科技大学EDA技术设计
2 仿真设计
在QuartusII中选择波形编辑器,创建一个新的波形文件,本设计中要仿真的对象为频率计电路,下面只该出频率计主体电路(不含扫描显示)波形仿真输出结果,如图所示。F_in为待测频率信号,在仿真时设其周期为50ns;FS为标准频率信号,周期为500ns,图 (a) (b) (c) (d)分别给出了K2K1=00、01、10、11时所得的测频输出X4X3X2X1=5000(一挡)、X4X3X2X1=500(二挡)、X4X3X2X1=50(三挡)、X4X3X2X1=5(四挡)。
1.5 硬件测试
6位的数码显示器为7段共阳极静态显示器。它们对应的I/O口输出逻辑0(低电平)时,燃亮数码管的相应段。
数码管 L25 主芯片引脚号
数码管 L27 主芯片引脚号
数码管 L29 主芯片引脚号
数码管 L26 主芯片引脚号
为了能对所设计的4位数字显示的频率计电路进行硬件测试,应将其输入输出信号锁定在开发系统的目标芯片引脚上,并重新编译,然后对目标芯片进行编程下载,完成频率计电路的最终开发,其硬件测试示意图如图。
a 180 b 186 c 187 d 189 e 190 f 191 g 192 a 172 b 173 c 174 d 175 e 176 f 177 g 179 a 163 b 164 c 166 d 167 e 168 f 169 g 170 a 150 b 157 c 158 d 159 e 160 f 161 g 162 内蒙古科技大学EDA技术设计
选择目标器件为FLEX10K20RC208-4芯片。 4个数码管以十进制形式显示测频输出;待测频率信号Fx锁定在目标芯片的183脚,频率可选4MH;测频控制时钟clk接于目标芯片的75脚;将测频输出结果从高位到低位分别锁定在数码管L25 L27 L29 L26。
完成引脚锁定工作后,再次对设计文件进行编译,排查错误并生成编程下载文件。执行QuartusII主窗口“Processing”菜单下“Start Programming”,,将配置文件下载到系统的目标芯片上。选择不同的待测频率信号Fx,观测数码管输出,即可检查频率计电路的输出是否正确。
1.6 参考文献
EDA技术 刘江海 华中科技大学出版社 2009-08出版
电子技术课程设计设计指导书(试行版) 崔国玮 胡晓莉 王凤英 信息工程学院专业基础部 2011年5月
因篇幅问题不能全部显示,请点此查看更多更全内容