版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、西北师范大学知行学院EDA课程设计说明书 系 别 专业班级 学生姓名 学 号 指导教师 量程自动转换数字频率计的设计一、设计目标:A 设计一个3位十进制数字式频率计,其测量范围为1MHz,量程分10kHz,100kHz和1MHz三档(最大读数分别为9.99kHz,99.9kHz,999kHz)。被测信号应是一符合CMOS电路要求的脉冲或正弦波。B 要求量程可根据被测量的频率大小自动转换,即当计数器溢出时,产生一个换挡信号,让整个计数时间减少为原来的1/10,从而实现换挡功能。C 要求实现溢出报警功能,即当频率高于999kHz时,产生一个报警信号,点亮LED灯,从而实现溢出报警功能。D 小数点位
2、置随量程变化自动移位。E 采用记忆显示方式,即计数过程中不显示数据,待计数过程结束后,显示计数结果,并将此显示结果保持到下一次计数结束。显示时间应不小于1秒。二、设计思路及实现方案:1. 频率计的工作原理:常用的测量频率的方法有两种,一种是测周期法,一种是测频率法。测周期法需要有基准系统时钟频率Fs,在待测信号一个周期Tx内,记录基准系统时钟频率的周期数Ns,则被测频率可表示为:Fx=Fs/Ns 测频率法就是在一定时间间隔Tw(该时间定义为闸门时间)内,测得这个周期性信号的重复变换次数为Nx,则其频率可表示为:Fx=Nx/Tw 本设计采用的是直接测频率的方法。2. 频率计的原理框图:频率计的系
3、统设计可分为3位十进制计数模块,闸门控制模块,译码显示模块,可自动换挡模块和分频模块。其原理框图如下:分频模块可自动换挡模块闸门控制模块3位十进制计数模块译码显示模块其中,可自动换挡模块为闸门控制模块提供3个挡,也就是三个测量范围的基准时钟信号,通过计数器的最高位的溢出情况来判定工作在第几挡。 闸门控制模块根据基准时钟信号产生基准时钟信号周期2倍的周期使能信号,随后为锁存器产生一周期性地锁存信号,再然后为计数模块产生一周期性的清零信号。 3位十进制计数模块在使能信号和清零信号的控制下对被测信号的波形变化进行计数,若产生溢出则为自动换挡模块输出一换挡信号。 译码显示模块显示被测信号的频率。三、设
4、计步骤1. 分频模块: 输入信号为4MHZ的高频脉冲,经过分频器后得到1KHZ的脉冲。分频器的代码如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fenping2 isport(clk : in std_logic;clk_out : out std_logic);end fenping2;architecture behavior of fenping2 is begin process(clk) variable count: integer range 0 to 1999
5、; variable x: std_logic; begin if clk'event and clk='1' then if count<1999then count:=count+1; else count:=0; x:=not x; end if; end if; clk_out<=x; end process;end architecture behavior;模块说明:clk为4MHZ时钟脉冲输入端,clk_out为1KHZ脉冲输出端。由于输入为高频信号,不易仿真且代码编译无误,这里没有给出时序波形图。经软件编译后,得到模块为: 2.3位十进制计数
6、模块: 3位十进制计数模块包含3个级联十进制计数器,用来对施加到时钟脉冲输入端的待测信号产生的脉冲进行计数,十进制计数器具有计数使能、清零控制和进位输出功能。用于计数的时间间隔(计数允许周期T)由闸门控制模块的控制信号发生器所产生的使能信号来控制,计数使能信号也在闸门控制模块中产生。自动换挡模块决定计数器读数的单位。 1位十进制计数器的VHDL源程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity count10 is port (CLK,RST,EN : in std_logi
7、c; CQ : out std_logic_vector(3 downto 0); COUNT : out std_logic ); end count10;architecture behav of count10 isbegin process(CLK, RST, EN) variable CQ1 : std_logic_vector(3 downto 0); begin if RST = '1' then CQ1 := (others =>'0') ; elsif CLK'event and CLK='1' then if E
8、N = '1' then if CQ1 < 9 then CQ1 := CQ1 + 1; else CQ1 := (others =>'0'); end if; end if; end if; if CQ1 = 9 then COUNT <= '1' else COUNT <= '0' end if; CQ <= CQ1; end process;end behav;以上源程序编译成功后,生成计数器模块如下:3位十进制计数模块为:3.闸门控制模块: 以基准信号的周期为一秒为例,频率测量的基本原理是计算
9、一秒内待测信号的脉冲个数,这就要求能产生一个周期为2秒,占空比为50%的周期信号TSTEN。用这个信号作为计数器的EN输入端,使其计数时间正好为1秒。当TSTEN为高电平时,计数开始,低电平时,计数停止。在计数器停止期间,首先要产生一个锁存信号LOAD,用其上升沿控制锁存器REG12将之前的计数结果存入锁存器中,并由显示模块将其显示出来。设置锁存器是为了让显示稳定,不会因为周期性的清零信号使得数值不断闪烁。锁存之后需有一清零信号CLR_CNT将计数器清零,为下一秒的计数操作做准备。 闸门控制模块的VHDL源程序如下:library ieee;use ieee.std_logic_1164.al
10、l;use ieee.std_logic_unsigned.all;entity testctl is port (clk : in std_logic; clr_cnt : out std_logic; tsten : out std_logic; load : out std_logic ); end testctl;architecture behav of testctl issignal a:std_logic;begin process(clk) begin if clk'event and clk='1' then a<=nota; end if;
11、end process; process(clk,a) if a='0' and clk='0' then clr_cnt<='1' else clr_cnt<='0' end if; end process; load<=not a; tsten<= a;end behav;时序仿真结果如下:编译后生成的模块为: 其中,clk为基准信号输入端,clr_cnt为清零信号,tsten为计数使能信号,load为锁存允许信号。3. 可自动换挡模块:本设计通过控制基准时钟信号来实现量程的自动转换。在第一个计数器的C
12、LK端接一周期为0.001s(1KHz)的时钟信号,其测量范围为100-999000Hz,为2挡;在第一个计数器的COUNT端将会得到周期为0.01s的信号,即为1挡,其测量范围为10-99900Hz;在第二个计数器的COUNT端将会得到0.1s的信号,即为0挡,其测量范围为0-9990Hz。这里还需要一个3选1选择器来选择第几个计数器的COUNT端作为基准时钟信号。3选1选择器可根据3位十进制计数模块的溢出情况来作为选择标准。3选1选择器的VHDL源程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigne
13、d.all;entity mux31 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 mux31;architecture behav of mux31 isbegin process(input0,input1,input2,a)begin case a is when"0000"=> y <=input0;
14、o<=0; when"0001"=> y <=input1; o<=0; when"0010"=> y <=input2; o<=0; when others=> y<='0'o<='1'end case;end process;end behav;生成的模块为:仿真波形为:当输入为0000时:当输入为0001时:当输入为0010时:当输入为0011时:可以看到,设计完全符合要求,o端可以作为量程溢出标志。综上,量程自动转换模块为:4. 译码显示模块:译码显示模块
15、的设计分为显示锁存器的设计,七段数码显示译码器的设计和小数点显示模块的设计3部分。显示锁存器是在计数结束后,利用load信号的上升沿把最新计数结果保存起来。其源程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity reg12 isport(load : in std_logic;din0,din1,din2: in std_logic_vector(3 downto 0);dout0,dout1,dout2: out std_logic_vector(3 downto 0);en
16、d reg12;architecture behav of reg12 isbegin process(load) begin if load'event and load='1'then dout0<=din0; dout1<=din1; dout2<=din2; end if; end process;end architecture behav; 生成的模块为:仿真结果为:七段数码显示译码器的vhdl源程序如下:library ieee;use ieee.std_logic_1164.all;entity seg7 isport( dat:in
17、std_logic_vector(3 downto 0); tmp:out std_logic_vector(6 downto 0); end seg7;architecture arc of seg7 is begin process(dat) begin case dat is when "0000"=>tmp<="0000001" when "0001"=>tmp<="1001111" when "0010"=>tmp<="0010010&qu
18、ot; when "0011"=>tmp<="0000110" when "0100"=>tmp<="1001100" when "0101"=>tmp<="0100100" when "0110"=>tmp<="0100000" when "0111"=>tmp<="0001111" when "1000"=>
19、tmp<="0000000" when "1001"=>tmp<="0000100" when "1010"=>tmp<="0001000" when "1011"=>tmp<="1100000" when "1100"=>tmp<="0110001" when "1101"=>tmp<="1000010" wh
20、en "1110"=>tmp<="0110000" when "1111"=>tmp<="0111000" end case; end process;end arc; 生成的模块为:小数点显示模块的源程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dot is port (dang_in: in std_logic_vector(3 downto 0); dang: o
21、ut std_logic_vector(2 downto 0);end dot;architecture one of dot isbegin process(dang_in) begin case dang_in is when"0000"=>dang<="100" when"0001"=>dang<="010" when"0010"=>dang<="001" when others=>dang<="111" end case;end process;end one;经编译后生成的模块为:四、结论 综合仿真时,为了直观的读出所测频率值,没有加七段数码显示译码器。为了便于仿真,clk_in端输入为1us(是1ms的0.001倍),sig输入端也同样变为待测信号的0.001倍
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论