数字电路与逻辑设计实验上实验报告.docx
- 文档编号:9531149
- 上传时间:2023-05-19
- 格式:DOCX
- 页数:32
- 大小:298.40KB
数字电路与逻辑设计实验上实验报告.docx
《数字电路与逻辑设计实验上实验报告.docx》由会员分享,可在线阅读,更多相关《数字电路与逻辑设计实验上实验报告.docx(32页珍藏版)》请在冰点文库上搜索。
数字电路与逻辑设计实验上实验报告
数字电路与
逻辑设计实验(上)
实
验
报
告
学院:
信息与通信工程学院
班级:
2013211119
姓名:
王译锌
学号:
2013210563
班内序号:
16
一、实验名称与任务要求
实验名称:
数字电路与逻辑设计实验(上)
任务要求:
本学期数字实验课分为4次,每次4学时,具体安排如下:
实验一:
实验内容:
QuartusII原理图输入法设计与实现
实验题目:
(1)半加器
(2)全加器(3)利用74138实现函数
实验二:
实验内容:
用VHDL设计与实现组合逻辑电路
实验题目:
(1)数码管译码器
(2)8421码转余3码(3)奇校验器
实验三:
实验内容:
用VHDL设计与实现时序逻辑电路
实验题目:
(1)8421十进制计数器
(2)分频器(3)将
(1)、
(2)和数码管译码器3个电路进行链接,并下载到实验板显示计数结果
实验四:
实验内容:
用VHDL设计与实现相关电路
实验题目:
数码管动态扫描控制器、点阵行扫描控制器(二选一)
二、实验三(3)和实验四模块端口说明与连接图
(一)、实验三(3)模块端口说明与连接图
实验三(3)要求将8421十进制计数器、分频器和数码管译码器三个电路进行连接。
对于整个电路,输入端口包括输入的时钟信号clk,数码管译码器的灭灯bi和试灯lt信号,译码器的地址选择信号address(选择哪一个灯亮)和计数器的清零dclear;输出端口包括数码管译码器的输出控制信号y(控制显示的数字)和对应于输入地址的亮灯信号cat(选择哪一个灯亮)。
其端口的VHDL描述如下:
ENTITYDisCounterIS
PORT(
clk:
INSTD_LOGIC;
lt,bi:
INSTD_LOGIC;
cclear:
INSTD_LOGIC;
address:
INSTD_LOGIC_VECTOR(2DOWNTO0);
cat:
OUTSTD_LOGIC_VECTOR(5DOWNTO0);
y:
OUTSTD_LOGIC_VECTOR(6DOWNTO0)
);
ENDDisCounter;
8421十进制计数器的输入端口包括输入时钟信号clk,计数清零信号clear;输出包括计数器的计数输出cnt。
其VHDL描述如下:
COMPONENTCounter10
PORT(
clk,clear:
INSTD_LOGIC;
cnt:
OUTSTD_LOGIC_VECTOR(3DOWNTO0)
);
ENDCOMPONENT;
12分频器的输入端口为输入时钟信号clki;输出端口为经过分频的输出的时钟信号clko。
其VHDL描述如下:
COMPONENTDiv12
PORT(
clki:
INSTD_LOGIC;
clko:
OUTSTD_LOGIC
);
ENDCOMPONENT;
数码管译码器的输入端口包括输入8421码的端口code,灭灯信号bi和试灯信号lt,选择亮灯信号c;输出包括译码结果对应的显示控制信号y和选择需要亮的灯的信号cat。
其VHDL实现如下:
COMPONENTSeg7_1
PORT(
code:
INSTD_LOGIC_VECTOR(3DOWNTO0);
lt,bi:
INSTD_LOGIC;
c:
INSTD_LOGIC_VECTOR(2DOWNTO0);
cat:
OUTSTD_LOGIC_VECTOR(5DOWNTO0);
y:
OUTSTD_LOGIC_VECTOR(6DOWNTO0)
);
ENDCOMPONENT;
数字显示译码器的连接图如下:
(二)、实验四模块端口说明与连接图
本实验包括三部分。
下面依次介绍端口:
1、012345的静态显示
该部分输入信号只有时钟信号clk;输出信号包括了对显示的数字的控制信号partout和控制显示数字的LED灯的信号catout。
其VHDL实现如下:
ENTITYScan1IS
PORT(clk:
INSTD_LOGIC;
partout:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);
catout:
OUTSTD_LOGIC_VECTOR(5DOWNTO0)
);
ENDScan1;
其中分频器的输入和输出分别为输入的时钟clki和分频得到的时钟信号clko。
其VHDL实现如下:
COMPONENTDiv
PORT(clki:
INSTD_LOGIC;
clko:
OUTSTD_LOGIC
);
ENDCOMPONENT;
译码器的输入只有时钟信号clk;输出包括对显示的数字的控制信号parto和控制显示数字的灯的信号cato。
其VHDL实现如下:
COMPONENTTran
PORT(clki:
INSTD_LOGIC;
parto:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);
cato:
OUTSTD_LOGIC_VECTOR(5DOWNTO0)
);
ENDCOMPONENT;
静态显示012345的连接图如下:
2、012345的滚动显示:
本实验实现了012345的滚动显示,即依次显示012345、123450、……501234、012345。
从外部来看,该电路的端口仍然只有三个。
输入信号只有时钟信号clk;输出信号包括了对显示的数字的控制信号partout和控制显示数字的灯的信号catout。
其VHDL实现如下:
ENTITYScan2IS
PORT(clk:
INSTD_LOGIC;
partout:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);
catout:
OUTSTD_LOGIC_VECTOR(5DOWNTO0)
);
ENDScan2;
该电路由五个元件组成,两个分频器分出不同的频率,高频实现对显示的控制,低频实现对移位的控制。
两个分频器的原理是一样的,只是具有不同的分频系数而已,故只写出其中一个的VHDL描述:
COMPONENTDiv1
PORT(clki:
INSTD_LOGIC;
clko:
OUTSTD_LOGIC
);
ENDCOMPONENT;
电路中另一个元件Choose实现选择当前显示数字的LED,其包含了一个时钟输入端口clki,一个选择结果的输出端口cato,其VHDL实现如下:
COMPONENTChoose
PORT(clki:
INSTD_LOGIC;
cato:
OUTSTD_LOGIC_VECTOR(5DOWNTO0)
);
ENDCOMPONENT;
实现移位功能也定义了一个元件JudgeMove,它有两个输入端口,分别是分频器分出的低频movei和高频tempclki,这两个时钟配合实现移位的功能;输出端口numbero输出了要显示的数(011111表示输出0,101111表示输出1,以此类推)。
其VHDL实现如下:
COMPONENTJudgeMove
PORT(tempclki,movei:
INSTD_LOGIC;
numbero:
OUTSTD_LOGIC_VECTOR(5DOWNTO0)
);
ENDCOMPONENT;
最后一个元件Display把前面元件得到的要显示的数的代码转化为对七段数码管的控制,输入端口numberi为前一元件得到的代码信号,输出端口为代码对应的七段数码管控制信号parto。
其VHDL实现如下:
COMPONENTDisplay
PORT(numberi:
INSTD_LOGIC_VECTOR(5DOWNTO0);
parto:
OUTSTD_LOGIC_VECTOR(6DOWNTO0)
);
ENDCOMPONENT;
电路连接图如下:
3、012345的滚动与擦除
该部分的功能与第二部分类似,有同样的输入输出端口,且各元件也有相同的输入输出端口。
只是元件Choose中对于cat控制信号的赋值较之前更为复杂。
为了避免重复,不再一一列出。
电路连接图如下:
三、部分实验原理图或代码
(一)、实验一
(2)原理图
全加器可以由两个半加器加上外加门来实现,这一点可以由全加器和半加器的表达式清楚的看出。
对全加器:
Si=AiXORBiXORCi-1;Ci=((AiXORBi)ANDCi-1)OR(AiANDBi)
而对于半加器:
Si=AiXORBi;Ci=AiANDBi
(二)、实验三(3)VHDL代码
1、总体电路的实现:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYDisCounterIS
PORT(
clk:
INSTD_LOGIC;
lt,bi:
INSTD_LOGIC;
cclear:
INSTD_LOGIC;
address:
INSTD_LOGIC_VECTOR(2DOWNTO0);
cat:
OUTSTD_LOGIC_VECTOR(5DOWNTO0);
y:
OUTSTD_LOGIC_VECTOR(6DOWNTO0)
);
ENDDisCounter;
ARCHITECTUREArch_DCOFDisCounterIS
COMPONENTDiv12
PORT(
clki:
INSTD_LOGIC;
clko:
OUTSTD_LOGIC
);
ENDCOMPONENT;
COMPONENTCounter10
PORT(
clk,clear:
INSTD_LOGIC;
cnt:
OUTSTD_LOGIC_VECTOR(3DOWNTO0)
);
ENDCOMPONENT;
COMPONENTSeg7_1
PORT(
code:
INSTD_LOGIC_VECTOR(3DOWNTO0);
lt,bi:
INSTD_LOGIC;
c:
INSTD_LOGIC_VECTOR(2DOWNTO0);
cat:
OUTSTD_LOGIC_VECTOR(5DOWNTO0);
y:
OUTSTD_LOGIC_VECTOR(6DOWNTO0)
);
ENDCOMPONENT;
SIGNALclock:
STD_LOGIC;
SIGNALcnt:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
u1:
Div12PORTMAP(clki=>clk,clko=>clock);
u2:
Counter10PORTMAP(clk=>clock,clear=>cclear,cnt=>cnt);
u3:
Seg7_1PORTMAP(code=>cnt,lt=>lt,bi=>bi,c=>address,cat=>cat,y=>y);
ENDArch_DC;
2、十进制计数器的实现:
实验实现的是8421十进制计数器,计数从0000到1001
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCounter10IS
PORT(
clk,clear:
INSTD_LOGIC;
cnt:
OUTSTD_LOGIC_VECTOR(3DOWNTO0)
);
ENDCounter10;
ARCHITECTUREArch_Counter10OFCounter10IS
SIGNALCount:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(clear,clk)
BEGIN
IF(clear='1')THEN
count<="0000";
ELSIF(clk'eventANDclk='1')THEN
IF(count="1001")THEN
count<="0000";
ELSE
count<=count+1;
ENDIF;
ENDIF;
ENDPROCESS;
cnt<=count;
ENDArch_Counter10;
3、12分频器的实现:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYDiv12IS
PORT(
clki:
INSTD_LOGIC;
clko:
OUTSTD_LOGIC
);
ENDDiv12;
ARCHITECTUREArch_Div12OFDiv12IS
SIGNALt:
STD_LOGIC;
BEGIN
PROCESS(clki)
VARIABLEcount:
INTEGERRANGE0TO5;
BEGIN
IF(clki'EVENTANDclki='1')THEN
IF(count=5)THEN
count:
=0;
t<=NOTt;
ELSE
count:
=count+1;
ENDIF;
ENDIF;
ENDPROCESS;
clko<=t;
ENDArch_Div12;
4、数码管译码器的实现:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYSeg7_1IS
PORT(
code:
INSTD_LOGIC_VECTOR(3DOWNTO0);
lt,bi:
INSTD_LOGIC;
c:
INSTD_LOGIC_VECTOR(2DOWNTO0);
cat:
OUTSTD_LOGIC_VECTOR(5DOWNTO0);
y:
OUTSTD_LOGIC_VECTOR(6DOWNTO0)
);
ENDSeg7_1;
ARCHITECTUREArch_SegOFSeg7_1IS
BEGIN
PROCESS(lt,bi,code)
BEGIN
IF(bi='1')THEN
cat<="111111";
ELSIF(lt='1')THEN
cat<="000000";
y<="1111111";
ELSE
CASEcodeIS
WHEN"0000"=>y<="1111110";
WHEN"0001"=>y<="0110000";
WHEN"0010"=>y<="1101101";
WHEN"0011"=>y<="1111001";
WHEN"0100"=>y<="0110011";
WHEN"0101"=>y<="1011011";
WHEN"0110"=>y<="0011111";
WHEN"0111"=>y<="1110000";
WHEN"1000"=>y<="1111111";
WHEN"1001"=>y<="1110011";
WHENOTHERS=>y<="0000000";
ENDCASE;
CASEcIS
WHEN"000"=>cat<="011111";
WHEN"001"=>cat<="101111";
WHEN"010"=>cat<="110111";
WHEN"011"=>cat<="111011";
WHEN"100"=>cat<="111101";
WHEN"101"=>cat<="111110";
WHEN"110"=>cat<="111111";
WHEN"111"=>cat<="111111";
ENDCASE;
ENDIF;
ENDPROCESS;
ENDArch_Seg;
(三)、实验四VHDL代码
1、012345的静态显示:
输入时钟经过一个分频器,产生较低频的信号作为时钟,驱动计数器工作。
选用模值为6的计数器,通过一个3线至6线译码器,产生控制6个LED的亮灭的信号,使得某一时刻有且仅有一个LED点亮,同时产生对应的数字信号,将工作的LED数码管赋值显示为相应的数码。
由于扫描频率较高,利用人眼的视觉暂留效应,在屏幕上即可看到稳定显示的数字。
①总体电路的实现:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYScan1IS
PORT(clk:
INSTD_LOGIC;
partout:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);
catout:
OUTSTD_LOGIC_VECTOR(5DOWNTO0)
);
ENDScan1;
ARCHITECTUREArch_S1OFScan1IS
SIGNALtempclk:
STD_LOGIC;
COMPONENTDiv
PORT(clki:
INSTD_LOGIC;
clko:
OUTSTD_LOGIC
);
ENDCOMPONENT;
COMPONENTTran
PORT(clki:
INSTD_LOGIC;
parto:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);
cato:
OUTSTD_LOGIC_VECTOR(5DOWNTO0)
);
ENDCOMPONENT;
BEGIN
u1:
DivPORTMAP(clki=>clk,clko=>tempclk);
u2:
TranPORTMAP(clki=>tempclk,parto=>partout,cato=>catout);
ENDArch_S1;
②分频器的实现
只需要改变常亮M的值,即可方便实现分频系数的改变。
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYDivIS
PORT(
clki:
INSTD_LOGIC;
clko:
OUTSTD_LOGIC
);
ENDDiv;
ARCHITECTUREArch_DivOFDivIS
CONSTANTM:
INTEGER:
=5;
SIGNALcount:
INTEGERRANGE0TOM;
SIGNALclk:
STD_LOGIC;
BEGIN
PROCESS(clki)
BEGIN
IF(clki'eventandclki='1')THEN
IFcount=MTHEN
count<=0;
clk<=NOTclk;
ELSE
count<=count+1;
ENDIF;
ENDIF;
ENDPROCESS;
clko<=clk;
ENDArch_Div;
③输出信号译码电路
在前面的电路实现中,为了方便修改,012345是通过一个数组来记录的,0记做011111,1记做101111,以此类推。
为了让数码可以正常显示,需要加一个译码电路,得到对七段数码管的控制信号。
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYTranIS
PORT(
clki:
INSTD_LOGIC;
parto:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);
cato:
OUTSTD_LOGIC_VECTOR(5DOWNTO0)
);
ENDTran;
ARCHITECTUREArch_TranOFTranIS
SIGNALcat:
STD_LOGIC_VECTOR(5DOWNTO0);
SIGNALpart:
STD_LOGIC_VECTOR(6DOWNTO0);
BEGIN
PROCESS(clki)
BEGIN
IF(clki'eventandclki='1')THEN
CASEcatIS
WHEN"111110"=>cat<="011111";part<="1111110";--0
WHEN"011111"=>cat<="101111";part<="0110000";--1
WHEN"101111"=>cat<="110111";part<="1101101";--2
WHEN"110111"=>cat<="111011";part<="1111001";--3
WHEN"111011"=>cat<="111101";part<="0110011";--4
WHEN"111101"=>cat<="111110";part<="1011011";--5
WHENOTHERS=>cat<="011111";part<="1111110";--0
ENDCASE;
ENDIF;
ENDPROCESS;
cato<=cat;
parto<=part;
ENDArch_Tran;
2、012345的滚动显示:
本实验的实现原理与基本要求基本一致。
为实现移位,新增了一个分频系数更高的分频器,记分出的信号为move。
当move输出一个上升沿的时候,做一个标记记录。
当另一个分频系数小的分频器输出的时钟信号tempclk到达上升沿(这意味着显示的LED和数字的改变),若此时move也到了上升沿(通过之前所做的标记来判断),则改变当前输出数码的赋值方式(假设第一位本来显示0,若不移动,接下来应该显示1,而由于需要移动数字,则第二位显示的数字应该为3。
此处比较巧妙,在移动信号move到来的第一个tempclk时钟周期内显示其实是错误的,但是因为只有一次且时间短暂,故人眼不会看出);若没有到达上升沿,则同实验一中一样正常显示下一位数。
通过这种方法,实现012345的滚动显示。
①总体电路的实现:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYScan2IS
PORT(clk:
INSTD_LOGIC;
partout:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);
catout:
OUTSTD_LOGIC_VECTOR(5DOWNTO0)
);
ENDScan2;
ARCHITECTUREAr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字电路 逻辑设计 实验 报告