图4.3为数字频率计顶层系统设计图
4.3.2 功能模块的实现
此数字频率计系统分为分频模块、数码管片选模块、计数并自动换挡模块、锁存器模块,数据输出并现实档位模块和译码器模块四个单元。
1 分频模块(FEN)
通过对 4MHz 时钟进行分频以获得 1 Hz 时钟,为核心模块 CORNA 提供1s的闸门时间。
2计数并自动换挡模块(CORNA)
该模块是整个程序的核心,它能在1s的闸门时间里完成对被测信号频率计数的功能,并通过选择输出数据实现自动换档的功能。
3锁存器模块(LOCK)
该模块实现锁存器的功能,在信号L的下降沿到来时将信号A4、A3、A2、A1锁存。 4 译码器模块(DISP)
该模块为4线—七段译码器,对输出信号进行译码,使其接到数码管,数码管能够
正常显示。
5.信号发生器模块
该模块先由一个正弦波发生器产生一个被测的正弦波信号,完后经过施密特触发器将正弦波转换为方波。
4.3.3 各模块基于VHDL的设计与仿真
1.分频模块(FEN) 分频模块的示意图
图4.4分频模块示意图
(1)分频器的功能: 从4M晶振时钟分出系统所需的几个时基信号。以下是对输入时钟信号进行40000000分频的程序,得到一个1Hz的时钟。根据系统需要,其他倍数的分频程序可以通过修改cnt的上限值得到。
(2)设计实体(Entity):计数模块取名FEN; (3)端口定义(Port):各输入输出引脚定义如下: CLK:时钟信号输入 Q:闸门信号输出
(4)设计输出:下面即为采用VHDL语言编写的分频模块设计文件: library ieee;
use ieee.std_logic_1164.all; entity fen is port(clk:in std_logic;
q:out std_logic); end fen;
architecture fen_arc of fen is begin process(clk)
variable cnt: integer range 0 to 3999999; variable x:std_logic; begin
if clk'event and clk='1'then if cnt<3999999 then cnt:=cnt+1; else cnt:=0; x:=not x; end if; end if; q<=x; end process; end fen_arc;
由于本设计分频分的是4000000,由于仿真时间太长,所以此仿真我做了个40分频的仿真图形如图4.5。
图4.5分频器模块仿真
此图为一个对输入信号进行40分频的仿真,即每计40个上升沿,输出信号翻转一次,输入信号CLK为10ns,输出q为0.25ns。 2.计数并自动换挡模块(CORNA)
计数并自动换挡模块示意图:
图4.6计数并自动换挡模块示意图
(1)计数器为十进制加法计数器,当CLR为高电平时,计数器清零;当CLR为低电平,并且DOOR为高电平时,允许计数。次频率计分为4个档位,当计数值大于9999时,频率计处于超量程状态,下一次测量时,量程自动增大1档。当计数值小于0001时,频率计处于欠程状态,下一次测量时,量程自动减小1档。当超量程的时候ALM报警。
(2)设计实体(Entity):计数模块取名CORNA; (3)端口定义(Port):各输入输出引脚定义如下: 输入端口:CLR,SIG,DOOR;
输出端口:Q0,Q1,Q2,Q3;
(4)设计输出:下面即为采用VHDL语言编写的计数并自动换挡模块设计文件: (见附录A)
(5)本模块实现自动换挡功能的流程图的如图4.7
C6≠0C6C5C4C3DANG=1110=0C5=0≠0≠0C5C4C3C2DANG=1101C4=0C3C2C1C0DANG=0111C4C3C2C1DANG=1011 图4.7自动换挡功能实现流程图
3.锁存器模块(LOCK) 锁存器模块示意图:
图4.8锁存器模块(LOCK)示意图
(1)锁存器模块是对计数并且的自动换挡输出的数据进行锁存的,即当L下降沿到来的时候,对A1,A2,A3,A4进行锁存。
(2)设计实体(Entity):计数模块取名LOCK; (3)端口定义(Port):各输入输出引脚定义如下: 输入端口:L,A4,A3,A2,A1,A0;
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库自动转换量程频率计控制器(7)在线全文阅读。
相关推荐: