欢迎来到天天文库
浏览记录
ID:56101082
大小:233.00 KB
页数:7页
时间:2020-06-19
《基于VHDL语言的十进制计数显示设计(读书报告、研究报告、EDA、SOPC).doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、2010年春季学期创新研修课程考核(读书报告、研究报告)考核科目:SOPC(片上可编程系统)及EDA技术学生所在院(系):电气工程及其自动化学院学生姓名:学号:考核结果阅卷人第1页(共页)基于VHDL语言的十进制计数显示设计1引言我们熟知的各种数字系统终端设备都需要对于十进制的信息进行数码显示,从万用表,电压源等等仪器仪表到生活中的各种电气设备,其中最常用的显示器件就是LED和LCD。在大规模可编程逻辑器件FPGA的硬件基础上,根据译码器原理运用VHDL语言对十进制计数译码显示电路进行了设计,同时通过QuartusII8.0的软件开发环境对设计电路进行了仿真,同时下载到
2、课程所发的实验箱中验证了硬件功能。2十进制译码器显示的原理计数器是一种中规模的集成电路,其种类繁多,不但可以实现计数分频,而且可以实现测量、运算、定时、延时等等控制功能。目前各类计数器均有典型产品,二进制计数器74LS161、十进制计数器74LS90、十六进制计数器74LS191等。十进制计数器的工作原理,同二进制计数器相比较为复杂。一般分析步骤是:(1)从逻辑图上得出每个触发器的输入信号表达式;(2)将上述表达式带入各触发器的状态方程,得到表示该计数器工作状态的状态方程;(3)根据状态方程得到计数器的状态转换表;(4)判断计数器的功能;图1为由D触发器组成的四位数码计
3、数电路图在上图所示的同步十进制加法计数器中有:将上述关系代入各JK触发器的特征方程,则计数器的状态方程为:设计数器初始状态为0000,第一个计数脉冲来到后有:即计数器的状态为0001。同理计数可得,第2个计数脉冲来到后,状态为0010,类推可得到表1所示的状态转换表。由于是这里是十进制计数器,所以在计数器状态为1001时,即计数为9时需要跳过后面的6个状态,在下一个脉冲到来时,状态变为0000,完成一次十进制计数循环。表1同步十进制加法计数器状态表计数Q4Q3Q2Q1十进制数000000100011200102300113401004501015601106701117
4、810008910019101010X111011X121100X131101X141110X151111X其中利用开发箱上的开关1作为计数脉冲给出端,开关2作为清零信号给出端,显示由7段LED给出,计数与数码显示所需七位二进制数对应关系表2所示:表27段数码管显示对应二进制数计数值数码管对应七位二进制数00001111110000101100000010110110100111111001010001100110101101101101100011111011111100001000111111110011111011其他00000003程序框图及程序清单根据上述原理
5、,利用VDHL语言在Altera公司研发的QuartusII的仿真环境中进行程序设计。程序流程图如下:开始是清零端是否为1否否计数端是否有信号是计数器加一是计数器是否到10进位位加1否清零显示计数器值图2十进制显示计数器程序流程图按上述流程图在用VHDL语言在仿真环境里的编程代码如下:libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entityrrisport(rst,clk:instd_logic;y:outstd_log
6、ic_vector(13downto0));endrr;architectureBehavioralofrrissignaloc:std_logic;signaldata:std_logic_vector(3downto0);SignalData1:std_logic_vector(3downto0);SignalData2:std_logic_vector(3downto0);signalcount_1:STD_LOGIC_vector(3DOWNTO0);signalcount_2:STD_LOGIC_vector(3DOWNTO0);signaloutdata1:
7、std_logic_vector(6downto0);signaloutdata2:std_logic_vector(6downto0);begincount1:process(rst,clk)beginif(rst='1')thencount_1<="0000";count_2<="0000";elsif(rising_edge(clk))thenif(count_1="1001")thencount_1<="0000";oc<='1';elsecount_1<=count_1+1;oc<='0';endif;if(oc='1')the
此文档下载收益归作者所有