个时刻,只有一位数(4bits)能被数据选择器选中并送至显示译码器,8片数码管中也只有一块被使能显示该位数值。经过模8计数器一个周期后,所有的数值均在对应的数码管上显示一次,当扫描电路的时钟信号足够快时,人眼由于视觉暂留的效果看到8个数码管同时在亮。该电路在完美实现显示功能前提下,大大节省了资源,提高了FPGA资源的利用率。 整点报时功能则是组合逻辑电路的应用之一,根据卡诺图方法,得到报时方程,然后用门电路将蜂鸣信号输出到蜂鸣器即能实现整点报时功能。
闹钟设定和响铃主要由两部分构成,一是闹钟设定以及显示电路,而是响铃电路。闹钟设定以及显示电路主要涉及到显示电路的复用问题,而设定电路则与计时电路类似,由模24和模60计数器构成。响铃电路则用到比较器,将计时电路的时、分和闹钟设定电路的时、分比较,二者相等的时候则输出蜂鸣信号,驱动蜂鸣器工作。
LED点阵电路主要是用VHDL语言编写,用汉字字库提取软件得到某个汉字的行列信息并转换为二进制,由于该实验箱的LED 16*16点阵模块是串入数据,并出显示,故还需编写一个并串转换电路,将刚才的汉字数据转换为串行数据输出到LED点阵数据输入端,同样采用的扫描显示原理,点阵电路每接收32个二进制数据,则将其按行显示,当扫描时钟足够快,16个周期后,就能将改字符完整的显示出来。
1.3 子模块设计原理
1.3.1 脉冲信号发生电路
该实验平台已经提供了48MHz的时钟频率,而计时电路所用的时钟是1Hz的信号,蜂鸣器蜂鸣信号也需要500和1000Hz的信号,故需要用分频电路对48MHz信号进行分频得到所需信号。为提高电路设计的简便性和准确性,该分频电路主要有二分频、三分频、十分频等电路模块组装而成:
二分频电路就是一个D触发器,其原理图电路见图3-1-1。
图3-1-1 二分频原理图电路
三分频电路则用到了74160计数器,利用74160的异步清零端,在0011时立即跳转回到0000,将第二位QB作为输出信号即实现三分频功能,其原理图见图3-1-2。
5
图3-1-2 三分频原理图电路
十分频电路类似于三分频电路,利用74163的同步置数端,为实现接近50%的占空比,将最高位QD作为输出端,0000~0100五种状态下输出为0,0100后跳转至1011,后面1011~1111五种状态下输出为1,这样就完美的实现了50%占空比的十分频功能,其原理图电路见图3-1-3。
图3-1-3 十分频原理电路图
在这三个基础的分频器电路基础上,将三个二分频电路和一个三分频电路级联即可得到24分频电路,将三个十分频电路级联即可得到1000分频电路,由于最终要实现48,000,000分频,在Quartus II 软件上仿真比较困难,故我们只有对每一块仿真,只要24、48、10分频电路均正确,则最终得到的总的分频电路是不会有问题的。24分频和10分频电路的仿真结果见图3-1-4和图3-1-5。
图3-1-4 24分频电路波形仿真图
6
图3-1-5 10分频电路波形仿真图
将各个模块成功设计后,我们便能得到最终的分频电路,原理电路图见图3-1-6。输入48MHz时钟信号后便能得到所需要的1Hz、2Hz、500Hz、1000Hz时钟信号。
图3-1-6 总分频电路
相比较于原理图设计,用VHDL语言设计分频电路则方便地很多,而且稍加改动便能得到所需的分频电路,由此可见VHDL语言设计的优越性——简单方便、更容易实现。通用的分频电路VHDL语言为: library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity vhdldiv is
generic( N1:integer:=48; M1:integer:=24); port(
clki:in std_logic; en:in std_logic; clko:out std_logic );
end entity;
architecture d of vhdldiv is
signal count :integer range 0 to N1; begin
process(clki,en,count) begin
if en='1' then
if rising_edge(clki) then
7
if count=N1-1 then count<=0; else count<=count+1; end if; end if; end if;
end process;
clko<='1' when count 当中N1为分频后一个周期包含的CLK数量,M1为一个周期中为高电平的CLK数量。将其分装后,稍微修改M1、N1后即可以随意使用。封装结果和实际应用见图3-1-7. 图3-1-7 VHDL编写分频器封装结果和实际应用 1.3.2 二十四小时计时电路 二十四小时计时电路主要分三块:时、分、秒,分别为模24和模60计数器,每个计数器均由两块74160BCD码计数器组成,分别对应两位数字的十位和个位。计数器分别有时钟输入端CLK、异步清零端CLR、使能端EN和计满进位端Qc。模60和模24计数器的原理图电路见图3-2-1和图3-2-2. 图3-2-1 模60计数器原理图电路 8 图3-2-2 模24计数器原理图电路 对两电路分别进行波形仿真发现成功实现计数、使能、清零和进位功能。两种电路的波形仿真结果分别见图3-2-3和3-2-4. 图3-2-3 模60计数器波形仿真结果 图3-2-4 模24计数器波形仿真结果 在此基础上,将模24和两块模60级联就能得到基本的计时电路。原理电路图见图3-2-5. 图3-2-5 基本计时电路 1.3.3 快速校分校时电路 快速校分(时)电路主要涉及到两个问题:一是校分(时)开关打开后分(时)电路使能计数,其他模块暂停计数;二是,校分(时)开关打开后,分(时)电路时钟信号为2Hz。 问题一通过基本的门电路就能实现,mincheck、houcheck分别为校分、校时开关信号,nmincheck、nhoucheck分别为校分、校时开关取反信号,secc、minc分别为秒钟计满进位信号,当总使能信号为高,校分、校时开关为低时,秒钟正常计时;当校分开关为高或者秒钟计满进位,且未校时时,分钟使能计时;当校时开关为高或者分钟计满进位,且未校分时,时钟使能计时。实现电路见图3-3-1. 9