从图2.3.7可以看出oclk进位信号成功实现与清零的同步,消除了电路冒险。
此外,我们还考虑了从另一个方面来解决这个问题。由于是采用可编程逻辑器件(PLD)来实现电路设计,硬件描述语言(HDL,Hardware Description Language)可以描述硬件电路的功能,我们采用应用最为广泛的VHDL语言进行了模60计数器的设计,成功的消除了电路中的冒险。以下为其源代码: library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all; 库和包集合说明语句
ENTITY mod60vhdl IS PORT (
ci :IN std_logic;
nreset :IN std_logic; 实体描述部分 load :IN std_logic;
d :IN std_logic_vector(7 downto 0); clk :IN std_logic; co :out std_logic;
qh :buffer std_logic_vector(3 downto 0); ql :buffer std_logic_vector(3 downto 0) );
END mod60vhdl;
ARCHITECTURE behave OF mod60vhdl IS BEGIN
co<='1' when(qh=\结构体描述
PROCESS(clk,nreset) 进程及敏感表 BEGIN
IF(nreset='0')THEN 清零端低电平清零 qh<=\ql<=\
ELSIF(clk 'EVENT AND clk='1')THEN 时钟信号上升沿来临 if(load='1')then 置数端高电平同步置数 qh<=d(7 downto 4);
9
ql<=d(3 downto 0);
elsif(ci='1')then
if(ql=9)then 各位计满后自动清零 ql<=\if(ql=5)then qh<=\else
qh<=qh+1; 未计满则加计数 end if;
else ql<=ql+1; end if; END IF; END IF;
END PROCESS; 结束进程 END behave; 结束结构体
可见,采用VHDL进行设计,不局限于仅有的元器件,相比原理图设计方式,设计的灵活性大大增加,并且思路清晰,逻辑严密,设计起来省时省力。
图2.3.10 计数电路的总连接图
可以发现,quartus2的封装功能使设计过程条理清晰,连线简洁,便于识图。这既是自顶向下模块化设计方法的基本要求,也是其必然结果。
2.3.3 译码显示电路
从计数电路送出的各位计数信号为8421BCD码,不能直接送到数码管进行显示。首先要经过译码电路将其译为对应的段码,才能使数码管显示正确的数字。此外,为节省电能和电路连线,需采用动态显示电路。其基本原理为:在任一时钟周期,只有一个数码管被点亮,并显示其对应的数字。六个数码管及其段码在选通电路的作用下轮流被点亮和传输。由于人眼的视觉暂留效应,当选通的频率足够快时(>60HZ),人眼将会感觉到六位数码管被同时点亮。以下分别讨论译码和显示电路的具体设计。
10
图 2.3.11 七段数码管的结构
a b c d e f g
f
a
b g e
c d
数码管的根据点亮时公共端的电平分为共阴和共阳。显示译码器的功能是将表示数字的BCD码转换为七段显示码。
以下为其真值表:
D C B A a b c d e f g 显示 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 0 0 1 1 1 1 1 0 0 1 0 0 0 1 0 0 1 0 2 0 0 1 1 0 0 0 0 1 1 0 3 0 1 0 0 1 0 0 1 1 0 0 4 0 1 0 1 0 1 0 0 1 0 0 5 0 1 1 0 0 1 0 0 0 0 0 6 0 1 1 1 0 0 0 1 1 1 1 7 0 0 0 0 0 0 0 0 0 0 0 8 1 0 0 1 0 0 0 0 1 0 0 9
图2.3.12 7447译码器
化简后表达式为:
a=ABCD+ABC b=ABC+ABC c=ABC
d=ABC+ABC+ABCD e=A+ABC
f=AB+ABCD+ABC g=ABC+BCD
其中LTN、RBIN以及BIN等管脚与消隐、灯测试有关,本次设计不予考虑,都置为高电位。
11
动态显示部分的基本框图如下:
图 2.3.13 动态显示电路框图
DIG08421BCDSLDIG1SHMLMHHLHHDIG0DIG1DIG2DIG3DIG4DIG5DIG58421BCDabcdefg24选4MUX显示译码器7447DIG2DIG3A2 A1 A0CLK2译码器DIG4计数器74138
计数器在时钟信号的作用下,产生模为6的BCD码计数信号,分别送到24选4MUX和74138中作为地址信号。24选4数据选择器根据A2A1A0的值选择SL、SH、ML、MH、HL、HH中的一路数据送到7447译码器进行译码,同时74138译码器将A2A1A0的值译码后分别输出到六片数码管的共阴端,作为片选信号。这样,在时钟信号CLK2的驱动下,各个数码管依次轮流显示对应的数值。
其中,24选4MUX可以用四片74151来组成。
图 2.3.14 74151
74151芯片为8选1数据选择 器。其根据ABC脚输入的BCD 码值分别选通D0~D7的中的一路,从Y输出。GN为使能控制端。
12