当前位置:文档之家› 数字逻辑实验报告

数字逻辑实验报告

附件2 数字逻辑实验报告序号:

数字逻辑实验报告(12-13学年)

学生姓名:依力夏提江·艾

买尔学号:12101020129

别: 计算机科学与技术班

级: 计12-1班

指导教师:吴磊

2013年 12 月 20 日

题目1 设计实现8线─3线普通二进制编码器

(1)实验(设计)原理

八-三优先编码器输入信号为din0,din1,din2,din3,din4,din5,din6和din7

,输出信号为out2、out1、out0。输入信号中din7的优先级别最低,依次类推,

din0的优先级别最高。也就是说若din0输入为1(即为高电平)则无论后续的输入信号怎么样,对应的这种状态一样,如若din0输入为0(即为低电平)则看优先级仅次于din0的din1状态决定,依次类推。因为din0到din7共8中状态,可以用3位二进制编码来表示。8-3优先编码器真值表如下表所示

(2)根据实验原理列出真值表

(3)说明程序中各部分的功能,对VHDL源程序说明和详细注释。

例如:用VHDL语言设计8-3编码器。

library IEEE; --IEEE库

use IEEE.std_logic_1164.all; --调用IEEE库中的程序包

USE IEEE.STD_LOGIC_ARITH.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

entity bianma is --定义实体名bianma

port (

din : in std_logic_vector (0 to 7);--定义输入信号din0,din1,din2,din3,din4,din5,din6,din7

EANABLE : in std_logic; --定义使能端

output : out std_logic_vector (0 to 2); --定义输出信号out0,out1,out2

Q :out std_logic_vector(2 downto 0); --定义计数器输出信号Q2,Q1,Q0

);

end bianma;

architecture behav of bianma is --定义结构体名behav

signal sint:std_logic_vector(4 downto 2);

signal cnt:std_logic_vector(2 downto 0);

begin

process(din)

begin --计数器

if EANABLE='1' then

cnt<=cnt+'1';

end if;

end process;

process(din)

begin --逻辑功能描述字形

if(EANABLE='0') then

if(din(0)='1') then output <="000";

elsif(din(2)='1') then output <="100";

elsif(din(3)='1') then output <="010";

elsif(din(4)='1') then output <="110";

elsif(din(5)='1') then output <="001";

elsif(din(6)='1') then output <="101";

elsif(din(0)='1') then output <="011";

else output <="111";

end if;

else output <="ZZZ";

end if;

end process;

Q<=cnt;

end behav;

实验已验机!

1行是库说明部分,打开库

2~4行是打开库中的程序包

5~11行是实体说明部分,描述电路的端口信号

12~最后,是结构体部分,描述电路的逻辑功能

VHDL语言不区分大小写,关键字用大写,用户自定义部分用小写。

(4) 实验过程中出现的问题及解决办法。

例如:

故障及问题分析

故障1:波形太密,endtime设置太短,看不出完整的周期

问题分析:调整endtime设置

解决办法:在调整了endtime设置之后,得到了比较清晰的波形

(5)对功能测试的截图,给予解释和说明。

对其仿真图进行仿真分析:din 为输入信号组,它由din7-din0八个输入信号组成。output 为输出信号组, 它由output2-output0三个二进制代码输出信号组成。enable 为使能端,当enable 为0时编码器工作,当使能端为1时输出高阻状态。当din0为1时,即输入为:1*******时,输出111,当din0为0时,输出由优先级仅次于din0的din1决定,即输入为:01******时,输出110,紧接着依次类推,分别得出输入为:001*****

时,输出101,输入为:0001****时,输出100,输入为00001***时,输出为011。到此为止由于使能段变为高电平,输出信号为高阻状态,但可以推断出当输入为000001**时,输出010,输入为0000001*时,输出001,输入为00000001时,输出为000

(6)端口管脚分配表。例如

表1 端口管脚分配表

(6) 记录硬件验证结果。

程序已经验机过了,可忘了拍照,在这儿参考同学拍的照片:

题目2 在7段数码管上同时显示自己学号的最后3位。

(1)实验原理

七段数码管发光原理。七段数码管一般由八个发光二极管组成,其中七个发光二极管排列成“8”字形,另一个位于小数点位置。根据连接形式的不同,数码管分为共阴极和共阳极两类。对于共阴极数码管,八个发光二极管的阴极连接在一起作为公共端,阳极作为段驱动端分别命名为a,b,c,d,e,f,g和dp。当公共端为低电平时,段驱动端为高电平时,相应段的二极管点亮发光。共阳极数码管正好相反,其原理如图所示。

2、数码管动态扫描原理。显示控制器的引脚图如下图所示。图中:CLK为时钟输入端,RST 为复位信号输入端,LEDOUT[6..0]为段驱动输出;SEL [7..0]为位选信号输出;在实验仪器中,8位7段数码选用了共阴极类型,且驱动电路已经做好。

设计要求8位数码管是轮流点亮,可以通过控制SEL输出电平来实现。当SEL为10000000时,点亮第一位数码管,当SEL为01000000时,点亮第二位数码管,直到8位显示器全都显示完毕,等待进入下一个轮次的显示。

同时,还有一个问题不可忽视,不是位扫描信号的频率至少需要多少以上,才能使显示器不闪烁?简单的说,只要单个扫描频率超过人的眼睛视觉暂留频率24HZ以上就可以达到点亮单个显示,却能享有8个同时显示的视觉效果,而且显示也不闪烁。

(2)数字列表

(4)程序说明

library IEEE; --IEEE库

use IEEE.STD_LOGIC_1164.ALL; --调用IEEE库中的程序包

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity display is --定义实体名display

port(RST:in std_logic; --定义输入信号

HEX:in std_logic_vector(3 downto 0);

a,b,c,d,e,f,g:out std_logic); --定义输出信号out0,out1,out2 end display;

architecture Behavioral of display is --定义结构体名behavioral signal LEDOUT:std_logic_vector(6 downto 0);

begin

process(HEX,RST) --逻辑功能描述

begin

if RST='0' then

LEDOUT<=(others=>'0');

else case HEX is when"0000"=> LEDOUT<=B"1111110"; --0000字形0 when"0001"=> LEDOUT<=B"0110000"; --0001字形1 when"0010"=> LEDOUT<=B"1101101"; --0010字形2 when"0011"=> LEDOUT<=B"1111001"; --0011字形3 when"0100"=> LEDOUT<=B"0110011"; --0100字形4 when"0101"=> LEDOUT<=B"1011011"; --0101字形5 when"0110"=> LEDOUT<=B"1011111"; --0110字形6 when"0111"=> LEDOUT<=B"1110000"; --0111字形7 when"1000"=> LEDOUT<=B"1111111"; --1000字形8 when"1001"=> LEDOUT<=B"1111011"; --1001字形9 when others=> LEDOUT<=(others=>'1');

end case;

end if;

end process;

a<=LEDOUT(0);

b<=LEDOUT(1);

c<=LEDOUT(2);

d<=LEDOUT(3);

e<=LEDOUT(4);

f<=LEDOUT(5);

g<=LEDOUT(6);

end Behavioral;

上述实验可以输出任意数字,实验已验机!

(5)说明实验中遇到的问题及解决方法,写出实验总结。

实验过程中,前期工作很顺利,很快就将三个源程序正确完成,开始进行原理图的创建,但当我进行count(2:0)和a,b,c连线时,总提示出错,原来需要先画一个总线,再用三个bustap引出,最后将三条引线分别命名为count(0)、count(1)、count(2),再分别与a,b,c 相连才可以。还有,刚开始我将七段显示的源程序命名为display1,但我的预习程序中输入的实体名是display,刚开始进行检查都能顺利通过,但后来生成原理图后提示出错,后来我将源程序名和实体名改为一致,顺利通过了检查。通过这次实验,我更加理解了七段数码管的实现原理,更加巩固了用ISE软件进行FPGA开发的方法和实验箱的使用方法,掌握了原理图的输入方法,感觉收获颇丰

(6)记录实验现象,分析实验结果。

(7)实验过程中可看到8个数码管分别显示八个不同的数字。这是由于扫描频率超过人的眼睛视觉暂留频率24HZ以上就可以达到循环点亮单个数码管,却感觉8个数码管在同时显示的视觉效果,而且显示也不闪烁

(8)硬件测试结果

第二部分:设计个人体会

此时硬件课程设计上机实验,总体来说是对课本上知识的延伸和应用。第一个实验8-3编码器设计实验,起初本人以为3-8译码器做完以后才发现自己做错了,后来又做了8-3二进制编码器。实验过程因为对vhdl语言应用不熟练,设计实验遇到了麻烦,后来上网找了很多类似的都学别人的程序回过头来做发现自己不知不觉间会设计程序了,设计玩程序以后,程序的仿真虽然老师讲过可好、一会就忘了后来通过提问老师,和查资料终于学会了仿真,最后要管脚绑定,起初还感觉很恩,可都学完后发现,这太简单了。我上级之前把所有的程序都准备好了,自己的电脑也安装了quartus ii 程序。学会了所有的内容以后感觉很有成就感!

相关主题
文本预览
相关文档 最新文档