数字电路与逻辑设.docx

上传人:b****6 文档编号:8190350 上传时间:2023-01-29 格式:DOCX 页数:13 大小:436.50KB
下载 相关 举报
数字电路与逻辑设.docx_第1页
第1页 / 共13页
数字电路与逻辑设.docx_第2页
第2页 / 共13页
数字电路与逻辑设.docx_第3页
第3页 / 共13页
数字电路与逻辑设.docx_第4页
第4页 / 共13页
数字电路与逻辑设.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

数字电路与逻辑设.docx

《数字电路与逻辑设.docx》由会员分享,可在线阅读,更多相关《数字电路与逻辑设.docx(13页珍藏版)》请在冰豆网上搜索。

数字电路与逻辑设.docx

数字电路与逻辑设

 

数字电路与逻辑设

计实验报告

 

学院:

信息与通信工程学院

班级:

姓名

学号

序号:

 

一、实验名称和实验任务要求

实验一:

QuartusII图形输入法设计;

EDA基础实验1

(1)

(2)(3)必做,选做VHDL实现全加器

(1)用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图形模块单元。

(2)用实验内容1中生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其功能,并下载到实验板测试,要求用拨码开关设定输出信号,发光二极管显示输出信号。

(3)用3线——8线译码器(74LS138)和逻辑门设计实现函数F,仿真验证其功能,并下载到实验板测试。

要求用拨码开关设定输出信号,发光二极管显示输出信号。

实验二:

组合逻辑电路的设计与实现;

(1)数码管译码器(第七章实验2

(2))

用VHDL语言设计实现一个共阴极7段数码管译码器,仿真验证其功能,并下载到实验板测试。

要求用拨码开关设定输出信号,七段数码管显示输出信号。

(2)8421码转余3码(第七章实验3

(2))

用VHDL设计实现一个8421码转换为余3码的代码转换器,仿真验证其功能,并下载到实验板测试。

要求用拨码开关设定输出信号,发光二极管显示输出信号。

(3)奇校验器(第七章实验4

(2))

用VHDL设计实现一个4为二进制奇校验器,输入奇数个‘1’时,输出为‘1’,否则输出‘0’,仿真验证其功能,并下载到实验板测试。

要求用拨码开关设定输出信号,发光二极管显示输出信号。

实验三:

时序电路的设计与实现;

(1)8421十进制计数器(第七章实验8

(2))

用VHDL设计实现一个带异步复位的8421码十进制计数器,仿真验证其功能,并下载到实验板测试。

要求用拨码开关设定输出信号,发光二极管显示输出信号。

(2)分频器(第七章实验11

(1))

用VHDL设计实现一个分频系数为12,分频输出信号占空比为50%的分频器。

要求在QuartusII平台上设计程序并仿真验证设计。

(3)将

(1)、

(2)和数码管译码器3个电路进行链接,并下载到实验板显示计数结果;

实验四:

数码管动态扫描控制器、点阵行扫描控制器(二选一);

(1)用VHDL语言设计并实现六个数码管串行扫描电路,要求同时显示0,1,2,3,4,5这六个不同的数字图形到六个数码管上,仿真下载验证其功能。

(2)用VHDL语言设计并实现六个数码管滚动显示电路。

循环滚动,始终点亮6个数码管,左出右进。

状态为:

012345-123450-234501-345012-450123-501234-012345

 

二、实验三(3)和实验四模块端口说明及连接图

实验三(3)

分频器与异步计数器共用reset复位键,clk为分频器时钟信号,分频器输出信号为计数器提供时钟信号,计数器的输出为数码管译码器输入信号。

实验四

(1)

clk为输入时钟,经过一个分频器,产生2kHz的扫描信号作为时钟,驱动计数器工作。

选用模值为6的计数器,通过一个3线至6线译码器,产生段码,依次控制6个LED的亮灭,使得某一时刻有且仅有一个LED点亮,同时产生对应的,将点亮的LED数码管赋值显示为相应的数码予以显示。

由于扫描频率较高,6位LED数码管序列将显示持续稳定的0至5的数码

实验四

(2)

为实现移位,在

(1)的基础上关键改动为新增一个计数器,技术周期远远大于扫描周期,这样,在一个大的计数周期内,对于要显示的6位数码进行动态扫描(和实验任务1中相同),显示出6种移位状态中的一种;在下一个大的周期内,利用FLAG标志,并使用求余运算将显示位的数码移位。

三、实验一

(2)、实验三(3)和实验四的原理图或VHDL代码

1、实验一

(2)的原理图

2、实验三(3)VHDL代码

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYfinalIS

PORT(clk,reset:

INSTD_LOGIC;

q:

OUTSTD_LOGIC_VECTOR(6DOWNTO0);

cat:

OUTSTD_LOGIC_VECTOR(5DOWNTO0));

ENDfinal;

ARCHITECTUREaOFfinalIS

COMPONENTV8_2IS

PORT(clk,reset:

INSTD_LOGIC;

q:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDCOMPONENTV8_2;

COMPONENTV11_1IS

PORT(clk,clear:

INSTD_LOGIC;

clk_out:

OUTSTD_LOGIC);

ENDCOMPONENTV11_1;

COMPONENTseg7_1IS

PORT(

a:

INSTD_LOGIC_VECTOR(3DOWNTO0);

b:

OUTSTD_LOGIC_VECTOR(6DOWNTO0);

cat:

OUTSTD_LOGIC_VECTOR(5DOWNTO0)

);

ENDCOMPONENTseg7_1;

SIGNALa:

STD_LOGIC;

SIGNALe:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

u1:

V8_2PORTMAP(clk=>a,reset=>reset,q=>e);

u2:

V11_1PORTMAP(clk=>clk,clear=>reset,clk_out=>a);

u3:

seg7_1PORTMAP(a=>e,b=>q,cat=>cat);

ENDa;

3、实验四的VHDL代码

分频器:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitysiis

port(clk_in:

instd_logic;

clk_out:

outstd_logic);

end;

architectureaofsiis

signalcnt:

integerrange0to999;

signalclk_tmp:

std_logic;

begin

process(clk_in)

begin

if(clk_in'eventandclk_in='1')then

ifcnt=999then

cnt<=0;clk_tmp<=notclk_tmp;

else

cnt<=cnt+1;

endif;

endif;

endprocess;

clk_out<=clk_tmp;

end;

六个数码管串行扫描电路

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYSIIIS

PORT(CLK:

INSTD_LOGIC;

SG:

OUTSTD_LOGIC_VECTOR(6DOWNTO0);

BT:

OUTSTD_LOGIC_VECTOR(5DOWNTO0));

END;

ARCHITECTUREarcOFSIIIS

componentsi

port(clk_in:

instd_logic;clk_out:

outstd_logic);

endcomponent;

SIGNALCNT6:

INTEGERRANGE0TO6;

SIGNALA:

INTEGERRANGE0TO5;

SIGNALclk_tmp:

STD_LOGIC;

BEGIN

u1:

siportmap(clk_in=>CLK,clk_out=>clk_tmp);

P1:

process(CNT6)

BEGIN

CASECNT6IS--3线至6线译码器

WHEN0=>BT<="011111";A<=0;--A为位码

WHEN1=>BT<="101111";A<=1;

WHEN2=>BT<="110111";A<=2;

WHEN3=>BT<="111011";A<=3;

WHEN4=>BT<="111101";A<=4;

WHEN5=>BT<="111110";A<=5;

WHENOTHERS=>NULL;

ENDCASE;

ENDPROCESSP1;

P2:

process(clk_tmp)

BEGIN

IFclk_tmp'EVENTANDclk_tmp='1'THEN--实现模6计数器

CNT6<=CNT6+1;

ifCNT6=5then

CNT6<=0;

endif;

ENDIF;

ENDPROCESSP2;

P3:

process(A)

BEGIN

CASEAIS--实现数码管的显示功能

WHEN0=>SG<="1111110";WHEN1=>SG<="0110000";

WHEN2=>SG<="1101101";WHEN3=>SG<="1111001";

WHEN4=>SG<="0110011";WHEN5=>SG<="1011011";

WHENOTHERS=>NULL;

ENDCASE;

ENDPROCESSP3;

ENDarc;

循环滚动,始终点亮6个数码管,左出右进

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYsiiiIS

PORT(CLK:

INSTD_LOGIC;

SG:

OUTSTD_LOGIC_VECTOR(6DOWNTO0);

BT:

OUTSTD_LOGIC_VECTOR(5DOWNTO0));

END;

ARCHITECTUREarcOFsiiiIS

componentsi

port(clk_in:

instd_logic;

clk_out:

outstd_logic);

endcomponent;

SIGNALCNT6:

INTEGERRANGE0TO6;

SIGNALA:

INTEGERRANGE0TO5;

SIGNALCOUNT:

INTEGERRANGE0TO5001:

=0;

SIGNAlFLAG:

INTEGERRANGE0TO7:

=0;

SIGNAlFLAG_A:

INTEGERRANGE0TO5;

SIGNALclk_tmp:

STD_LOGIC;

BEGIN

u1:

siportmap(clk_in=>CLK,clk_out=>clk_tmp);

P1:

process(CNT6)

BEGIN

CASECNT6IS

WHEN0=>BT<="011111";A<=0;--3线至6线译码器

WHEN1=>BT<="101111";A<=1;

WHEN2=>BT<="110111";A<=2;

WHEN3=>BT<="111011";A<=3;

WHEN4=>BT<="111101";A<=4;

WHEN5=>BT<="111110";A<=5;

WHENOTHERS=>NULL;ENDCASE;

ENDPROCESSP1;

P2:

process(clk_tmp)

BEGIN

IFclk_tmp'EVENTANDclk_tmp='1'THEN--实现模6计数器

CNT6<=CNT6+1;

ifCNT6=5then

CNT6<=0;

endif;

IF(FLAG=6)THEN--设置标志

FLAG<=0;

ENDIF;

IFCOUNT=5000THEN--相当于另一个时钟

COUNT<=0;--计数周期为5000

FLAG<=FLAG+1;--当记满5000时左移动一位

ELSE

COUNT<=COUNT+1;--不满5000继续计数

ENDIF;

ENDIF;

ENDPROCESSP2;

P3:

process(A)

BEGIN

FLAG_A<=((A+FLAG)mod6);--使用求余运算实现移位

CASEFLAG_AIS--实现数码管的显示功能

WHEN0=>SG<="1111110";WHEN1=>SG<="0110000";

WHEN2=>SG<="1101101";WHEN3=>SG<="1111001";

WHEN4=>SG<="0110011";WHEN5=>SG<="1011011";

WHENOTHERS=>NULL;

ENDCASE;

ENDPROCESSP3;

endarc;

四、实验一

(2)、实验三(3)和实验四的仿真波形图

实验一

(2)全加器

实验三(3)

实验四

(1)

实验四

(2)

五、仿真波形图分析

实验一的全加器:

其中ain为被加数,bin为加数,相邻低位来的进位数为cin,输出本位和为sum,向相邻高位进位数为cout。

实现二进制加法。

实现的函数关系为sum=ain⊕bin⊕cin

实验三(3):

分频器与异步计数器共用reset复位键,clk为分频器时钟信号,分频器输出信号为计数器提供时钟信号,计数器的输出为数码管译码器输入信号。

即用先用分频器实现了对时钟信号的12分频,分频输出信号占空比为50%,分频器输出作为带异步复位的8421码十进制计数器的时钟信号,计数器的输出作为数码管的输入信号,控制数码管的显示。

实验四

(1):

通过分频器输入产生选通脉冲,控制0至5号LED数码管依次亮灭,同时使用数码显示信号使得数码管显示相应数码。

实现时通过连接引入分频信号,通过数据选择器选择数码管。

计数器信号触发数据选择器,赋值给位码触发数码管显示数码。

最终实现动态扫描显示数字序列。

实验四

(2)代码主体和实验任务1中一致,基本思想也一致。

为实现移位,关键改动为新增一个计数器,技术周期远远大于扫描周期,这样,在一个大的计数周期内,对于要显示的6位数码进行动态扫描(和实验任务1中相同),显示出6种移位状态中的一种;在下一个大的周期内,利用FLAG标志,并使用求余运算将显示位的数码移位,比如,大的计数周期为0时,FLAG为0,显示“012345”六位数码,大的周期为1时,FALG为1,此时各位求余(即FLAG_A求余)对应的数码为123450,显示的数码也就为“123450”。

以此类推,实现循环移位。

六、故障及问题分析

上实验课之前,需要下载安装Quartus软件,由于版本的原因,尝试了好几次才安装并破解成功,其中有一个问题就是习惯性的安装在了中文目录下。

实验一半加器的步骤书上罗列的很详细,一步一步来几乎没有问题,而且上课老师又带领做了一下,就是到了全加器,由于保存的名称不符,导致浪费了很多时间。

实验二由于教材上有相关的例题,所以没有出现大的问题,基本都能自己解决。

实验三由于上课老师要求的与我自己预习时想的不一样,所以在代码的合并上出现一些问题。

最后是参考老师的PPT模板完成VHDL修改。

实验四的

(1)老师的PPT上基本就给出了雏形,只需稍加修改,用软件运行一下就好,

(2)则是参考了网上的资料,但是网上资料的计数模值有问题,需要修改一下。

七、总结和结论

总的来说这学期的数电实验次数虽然不多,但是确实能够学到一些东西。

感觉和前面电路实验很大的一点不同是:

数电实验不需要我们一步一步去搭实验电路,一切都在电路板上完成,相比较电路的结构,我们更需要了解电路的功能,尤其是电路在工作状态下的各项参数。

进行数字电路实验,理论分析是十分重要的一环,只有逻辑分析透彻无误了,才能用语言进行描述,进而用硬件实现。

这次实验让我对VHDL这样一门硬件描述语言有了更加深刻的认识。

语言是描述设计者逻辑思想的,有什么样的逻辑思维就会产生什么样的代码,换句话说,逻辑思维错误将直接导致描述错误,进而不能实现数字逻辑。

应该着重优化逻辑思维,才能写出优秀的硬件代码。

虽然这学期的数电实验与理论课都结束了,但是我知道,数字电路与逻辑这门课将一直伴随着我们的学习、工作。

所以我打算在空余时间努力精习一下VHDL语言。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 兵器核科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1