您好,欢迎来到华佗健康网。
搜索
您的当前位置:首页基于VHDL语言的十进制计数显示设计

基于VHDL语言的十进制计数显示设计

来源:华佗健康网


(读书报告、研究报告)

考核科目 :SOPC(片上可编程系统)及EDA技术 学生所在院(系):电气工程及其自动化学院 学 生 姓 名 : 学 号 : 考核结果 阅卷人

第 1 页 (共 页)

语言的十进制计数显示设计VHDL基于

1 引言

我们熟知的各种数字系统终端设备都需要对于十进制的信息进行数码显示,从万用表,电压源等等仪器仪表到生活中的各种电气设备,其中最常用的显示器件就是LED和LCD。在大规模可编程逻辑器件FPGA的硬件基础上,根据译码器原理运用VHDL语言对十进制计数译码显示电路进行了设计,同时通过Quartus II 的软件开发环境对设计电路进行了仿真,同时下载到课程所发的实验箱中验证了硬件功能。

2 十进制译码器显示的原理

计数器是一种中规模的集成电路,其种类繁多,不但可以实现计数分频,而且可以实现测量、运算、定时、延时等等控制功能。目前各类计数器均有典型产品,二进制计数器74LS161、十进制计数器74LS90、十六进制计数器74LS191等。

十进制计数器的工作原理,同二进制计数器相比较为复杂。一般分析步骤是: (1)从逻辑图上得出每个触发器的输入信号表达式;

(2)将上述表达式带入 各触发器的状态方程,得到表示该计数器工作状态的状态方程; (3)根据状态方程得到计数器的状态转换表; (4)判断计数器的功能;

图1 为由D触发器组成的四位数码计数电路图 在上图所示的同步十进制加法计数器中有:

将上述关系代入各JK触发器的特征方程,则计数器的状态方程为:

设计数器初始状态为0000,第一个计数脉冲来到后有:

即计数器的状态为0001。同理计数可得,第2个计数脉冲来到后,状态为0010,类推可得到表1所示的状态转换表。由于是这里是十进制计数器,所以在计数器状态为1001时,即计数为9时需要跳过后面的6个状态,在下一个脉冲到来时,状态变为0000,完成一次十进制计数循环。 表1 同步十进制加法计数器状态表

计数 QQQQ十进制数 3 0011 3

4 010045 0101566 011077 01118 1000 1001 9X1010 10 X 111011

2314

00 0000

1 1 000120010 2

X 12 1100 X 1101 13.1111

11111其中利用开发箱上的开关1作为计数脉冲给出端,开关2作为清零信号给出端,显示由7段LED给出,计数与数码显示所需七位二进制数对应关系表2所示: 表2 7段数码管显示对应二进制数

计数数码管对应七位二进制 111111000 011000000 110110001

111100001011001010 101101010

0011111 011011100000111 11111111000 1111011 1001 0000000 其他 3 程序框图及程序清单

根据上述原理,利用VDHL语言在Altera公司研发的Quartus II的仿真环境中进行程序设计。 程序流程图如下: 开始 是 清零端是否为1 否 否 计数端是否有信号 是 计数器加一 计数器是否到10 否

显示计数器值 进位位 清

十进制显示计数器程序流程图2 图

按上述流程图在用VHDL语言在仿真环境里的编程代码如下: library IEEE; use rr is port(

rst,clk:in std_logic;

y:out std_logic_vector(13 downto 0)); end rr;

architecture Behavioral of rr is signal oc:std_logic;

signal data:std_logic_vector(3 downto 0); Signal Data1:std_logic_vector(3 downto 0); Signal Data2:std_logic_vector(3 downto 0);

signal count_1:STD_LOGIC_vector (3 DOWNTO 0); signal count_2:STD_LOGIC_vector (3 DOWNTO 0); signal outdata1:std_logic_vector(6 downto 0); signal outdata2:std_logic_vector(6 downto 0); begin

count1: process(rst,clk) begin

if (rst='1') then count_1<=

elsif (rising_edge(clk)) then if (count_1=@1) then count_1<=

else count_1<=count_1+1;oc<='0'; end if; if(oc='1')then

count_2<=count_2+1; elsif (count_2= 0) then count_2<= end if; end if;

Data1<=count_1;Data2<=count_2; end process;

led1:process(rst,clk) begin

if (rst='1') then outdata1<=

else if (rising_edge(clk)) then case data1 is WHEN WHEN

WHEN 0=>outdata1<=H1101; WHEN 1=>outdata1<=I1001; WHEN 0=>outdata1<= 0011; WHEN 1=>outdata1<=A1011; WHEN WHEN

0=>outdata1<=1111; 1=>outdata1<=I0000;

WHEN @0=>outdata1<=I1111; WHEN @1=>outdata1<=I1011; when others=>outdata1<= end case;

case data2 is WHEN WHEN

WHEN 0=>outdata2<=H1101; WHEN 1=>outdata2<=I1001; WHEN 0=>outdata2<= 0011; WHEN 1=>outdata2<=A1011; WHEN WHEN

0=>outdata2<=1111; 1=>outdata2<=I0000;

WHEN @0=>outdata2<=I1111; WHEN @1=>outdata2<=I1011; when others=>outdata2<= end case; end if; end if;

end process;

y<=outdata2&outdata1; end Behavioral; 4 仿真结果

通过编译成功后,利用Quartus自带的waveform simulation进行十进制计数器的仿真,仿真结果如下:

图3 十进制加法计数器仿真结果

上图中表示的是从0到19的计数,其中y[0]到y[6]表示的十进制个位数,y[7]到y[13]表示的是十位数,其数位以表示成了7段数码管显示所需输出值,对应表2可得仿真结果正确。 结论5

本文介绍了十进制计数器显示电路的原理及其设计方法,并且运用仿真软件实现预期目标,它省去了一个译码器的过程,直接通过一个中间变量把四位二进制的计数值对应成7段数码管所需的七位二进制数输出。通过仿真验证结果正确,并且利用开发箱进行了硬件上的测试。利用这种方法进行带显示的计数器的设计,我们可以延伸到多种进制的电路设计中去,并且结合上述思想可以通过编程代替译码器部分,直接输出显示信号,相信这可以再很 多领域中得到应用和参考。.

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.com 版权所有 湘ICP备2023021991号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务