北京邮电大学数电实验报告.docx
- 文档编号:3775066
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:25
- 大小:202.31KB
北京邮电大学数电实验报告.docx
《北京邮电大学数电实验报告.docx》由会员分享,可在线阅读,更多相关《北京邮电大学数电实验报告.docx(25页珍藏版)》请在冰豆网上搜索。
北京邮电大学数电实验报告
数字电路与逻辑设计
实验报告
专业:
通信工程
班级:
2013211123
姓名:
学号:
班内序号:
指导老师:
实验一:
QuartusⅡ原理图输入法设计与实现
实验目的:
(1)熟悉用QuartusⅡ原理图输入法进行电路设计和仿真;
(2)掌握QuartusⅡ图形模块单元的生成与调用;
(3)熟悉实验板的使用。
实验内容:
(1)用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图形模块单元;
(2)用实验内容1中生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其功能,并下载到实验板测试,要求用拨码开关设定输入信号,发光二极管显示输出信号;
(3)用3线-8线译码器(74LS138)和逻辑门设计实现函数F=
仿真验证其功能,并下载到实验板测试。
要求用拨码开关设定输入信号,发光二极管显示输出信号。
原理图及仿真波形图:
(1)半加器
原理图:
仿真波形图:
分析:
S=a
b;C=ab
其中a,b为输入端,C为进位端,S为本位和,当ab=‘00’‘01’‘10’时不用进位,故C=‘0’,当ab=‘11’时需要进位使得C=‘1’,S=‘0’。
(2)全加器
原理图:
仿真波形图:
分析:
Si=Ai
Bi
Ci-1;Ci=AiBi+Ci-1(Ai
Bi)
全加器与半加器的不同在于,全加器需要考虑低位的进位,而半加器不需要。
因而对于全加器,Ai、Bi为加数和被加数,Ci-1为低位的进位,Ci为进位,Si为本位和,实质上相当于Ai+Bi+Ci-1,满2进1,Ci为进位,Si为本位和。
(3)译码器
原理图:
仿真波形图:
分析:
又有要实现的功能为F=
又根据74LS138的使用原理可得图示的连接方法。
实验二:
用VHDL设计与实现组合逻辑电路
实验目的:
(1)熟悉用VHDL语言设计组合逻辑电路的方法;
(2)熟悉用QuartusⅡ文本输入法进行电路设计;
(3)熟悉不同的编码及其之间的转换。
实验内容:
(1)用VHDL语言设计实现一个共阴极7段数码管译码器,仿真验证其功能,并下载到实验板测试。
要求用拨码开关设定输入信号,7段数码管显示输出信号;
(2)用VHDL语言设计实现一个8421码转换为余3码的代码转换器,仿真验证其功能,并下载到实验板测试。
要求用拨码开关设定输入信号,发光二极管显示输出信号;
(3)用VHDL语言设计实现一个4位二进制奇校验器,输入奇数个‘1’时,输出为‘1’,否则输出为‘0’,仿真验证其功能,并下载到实验板测试。
要求用拨码开关设定输入信号,发光二极管显示输出信号。
VHDL代码及仿真波形图:
(1)数码管译码器
VHDL代码:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYseg7_1IS
PORT(
a:
INSTD_LOGIC_VECTOR(3downto0);
b:
OUTSTD_LOGIC_VECTOR(6downto0)
);
endseg7_1;
ARCHITECTUREseg7_1_archOFseg7_1IS
BEGIN
PROCESS(a)
BEGIN
CASEaIS
WHEN"0000"=>b<="1111110";--0
WHEN"0001"=>b<="0110000";--1
WHEN"0010"=>b<="1101101";--2
WHEN"0011"=>b<="1111001";--3
WHEN"0100"=>b<="0110011";--4
WHEN"0101"=>b<="1011011";--5
WHEN"0110"=>b<="1011111";--6
WHEN"0111"=>b<="1110000";--7
WHEN"1000"=>b<="1111111";--8
WHEN"1001"=>b<="1111011";--9
WHENOTHERS=>b<="0000000";
ENDCASE;
ENDPROCESS;
END;
仿真波形图:
分析:
数码管译码器主要运用case语句,将每一种情况罗列出来,而仿真波形图既是每一种情况的一种直观体现
(2)8421码转换为余3码的代码转换器
VHDL代码:
libraryieee;
useieee.std_logic_1164.all;
entityTWOis
port(
a:
instd_logic_vector(3downto0);
b:
outstd_logic_vector(3downto0)
);
endTWO;
architectureTWO_archofTWOis
begin
process(a)
begin
caseais
when"0000"=>b<="0011";--0
when"0001"=>b<="0100";--1
when"0010"=>b<="0101";--2
when"0011"=>b<="0110";--3
when"0100"=>b<="0111";--4
when"0101"=>b<="1000";--5
when"0110"=>b<="1001";--6
when"0111"=>b<="1010";--7
when"1000"=>b<="1011";--8
when"1001"=>b<="1100";--9
whenothers=>b<="0000";
endcase;
endprocess;
end;
仿真波形图:
分析:
余三码实际为8421码加上3的结果,可以用case列举的方式,也可以用加号,但需要加上相应的库
(3)奇校验器
VHDL代码:
libraryieee;
useieee.std_logic_1164.all;
entityTHREEis
port(
a:
instd_logic_vector(3downto0);
b:
outstd_logic_vector(0downto0)
);
endTHREE;
architectureTHREE_archofTHREEis
begin
process(a)
begin
caseais
when"0000"=>b<="0";--0
when"0001"=>b<="1";--1
when"0010"=>b<="1";--2
when"0011"=>b<="0";--3
when"0100"=>b<="1";--4
when"0101"=>b<="0";--5
when"0110"=>b<="0";--6
when"0111"=>b<="1";--7
when"1000"=>b<="1";--8
when"1001"=>b<="0";--9
when"1010"=>b<="0";--10
when"1011"=>b<="1";--11
when"1100"=>b<="0";--12
when"1101"=>b<="1";--13
when"1110"=>b<="1";--14
when"1111"=>b<="0";--15
whenothers=>b<="0";
endcase;
endprocess;
end;
仿真波形图:
实验三:
用VHDL设计与实现时序逻辑电路
实验目的:
(1)熟悉用VHDL语言设计时序逻辑电路的方法;
(2)熟悉用QuartusⅡ文本输入法进行电路设计;
(3)熟悉计数器和分频器的设计与应用。
实验内容:
(1)用VHDL语言设计实现一个带异步复位的8421码十进制计数器,仿真验证其功能,并下载到实验板测试。
要求用按键设定输入信号,发光二极管显示输出信号;
(2)用VHDL语言设计实现一个分频系数为12,分频输出信号占空比为50%的分频器,要求在QuartusⅡ平台上设计程序并仿真验证设计;
(3)将
(1)
(2)和数码管译码器三个电路进行连接,并下载到实验板显示计数结果。
VHDL代码、仿真波形图、模块端口说明:
(1)计数器
VHDL代码:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
entitycount_10is
port(
clk,clear:
INSTD_LOGIC;
q:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDcount_10;
architectureaofcount_10is
signalcn:
integerrange0to10;
begin
process(clk)
begin
IF(clear='0'ORcn=10)THEN
cn<=0;
ELSIF(clk'eventANDclk='1')THEN
cn<=cn+1;
ELSEcn<=cn;
ENDIF;
ENDPROCESS;
q<=CONV_STD_LOGIC_VECTOR(cn,4);
ENDa;
仿真波形图:
分析:
输入为时钟信号和复位信号。
由于是异步复位,所以复位信号的优先级最高。
当复位信号为0时,输出变为0000;当复位信号为1时,每当遇到时钟上升沿,输出状态加1,实现加计数,计数循环为0000→···1010,其中1010与0000占用同一个周期的clk,因此输出波形会出现“芒刺”。
(2)分频器
VHDL代码:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYdiv_12IS
PORT(
clk:
INSTD_LOGIC;
clear:
INSTD_LOGIC;
clk_out:
OUTSTD_LOGIC);
ENDdiv_12;
ARCHITECTUREaOFdiv_12IS
SIGNALtmp:
INTEGERRANGE0TO5;
SIGNALclktmp:
STD_LOGIC;
BEGIN
PROCESS(clear,clk)
BEGIN
IFclear='0'THEN
tmp<=0;
ELSIFclk'eventANDclk='1'THEN
IFtmp=5THEN
tmp<=0;clktmp<=NOTclktmp;
ELSE
tmp<=tmp+1;
ENDIF;
ENDIF;
ENDPROCESS;
clk_out<=clktmp;
ENDa;
仿真波形图:
分析:
在本段设计中,clear=0不再是简单的清零操作,而是重新计算clk数目的操作,当出现clear=0时,将会重新计算6个时钟周期,再进行输出状态的翻转。
(3)计时器与分频器的连接
VHDL代码:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYtheIS
PORT(
clear1:
INSTD_LOGIC;
clear2:
INSTD_LOGIC;
clk1:
INSTD_LOGIC;
b1:
OUTSTD_LOGIC_VECTOR(6downto0);
CAT:
OUTSTD_LOGIC_VECTOR(5downto0)
);
endthe;
ARCHITECTUREaOFtheIS
COMPONENTdiv_12--分频器
PORT(
clk:
INSTD_LOGIC;
clear:
INSTD_LOGIC;
clk_out:
OUTSTD_LOGIC
);
ENDCOMPONENT;
COMPONENTcount_10--计数器
PORT(
clk,clear:
INSTD_LOGIC;
q:
OUTSTD_LOGIC_VECTOR(3DOWNTO0)
);
ENDCOMPONENT;
COMPONENTseg7_1--数码管译码器
PORT(
a:
INSTD_LOGIC_VECTOR(3downto0);
b:
OUTSTD_LOGIC_VECTOR(6downto0)
);
ENDCOMPONENT;
SIGNALna:
STD_LOGIC;
SIGNALnb:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
u1:
div_12PORTMAP(clk_out=>na,clk=>clk1,clear=>clear1);
u2:
count_10PORTMAP(clear=>clear2,clk=>na,q=>nb);
u3:
seg7_1PORTMAP(a=>nb,b=>b1);
CAT<="111110";
ENDa;
模块端口说明:
仿真波形图:
分析:
以clk1作为外部时钟使得分频器产生12分频的信号,分频器的输出作为计数器的时钟信号,使得计数器实现加计数的功能,译码管用于直观地显示计数器的输出。
实验四:
数码管动态扫描控制器
实验目的:
(1)掌握VHDL语言的语法规范,掌握时序电路描述方法;
(2)掌握多个数码管动态扫描显示的原理及设计方法。
实验内容:
(1)用VHDL语言设计并实现六个数码管串行扫描电路,要求同时显示0、1、2、3、4、5这6个不同的数字图形到6个数码管上,仿真验证其功能,并下载到实验板测试;
(2)用VHDL语言设计并实现六个数码管滚动显示电路
①循环向左滚动,始终点亮6个数码管,左进右出。
状态为:
012345→123450→234501→345012→450123→501234→012345
②向左滚动,用全灭的数码管填充右边,直至全部变灭,然后又依次从右边一个一个地点亮。
状态为:
012345→12345X→2345XX→345XXX→45XXXX→5XXXXX→XXXXXX→XXXXX0→XXXX01→XXX012→XX0123→X01234→012345,其中‘X’表示数码管不显示
VHDL代码、仿真波形图、模块端口说明:
(1)数码管串行扫描电路
VHDL语言:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYTaLLIS
PORT
(
clk,rs:
INSTD_LOGIC;
b:
OUTSTD_LOGIC_VECTOR(6downto0);
cat:
OUTSTD_LOGIC_VECTOR(5downto0)
);
ENDTaLL;
ARCHITECTUREaOFTaLLIS
COMPONENTgray--技术状态不连续的异步计数器
PORT(
clk,rs:
INSTD_LOGIC;
countout:
OUTSTD_LOGIC_VECTOR(5downto0)
);
ENDCOMPONENT;
COMPONENTshuma--数码管
PORT(
cat:
INSTD_LOGIC_VECTOR(5downto0);
b:
OUTSTD_LOGIC_VECTOR(6downto0)
);
ENDCOMPONENT;
SIGNALna:
STD_LOGIC_VECTOR(5downto0);
BEGIN
u1:
grayPORTMAP(clk=>clk,rs=>rs,countout=>na);
u2:
shumaPORTMAP(cat=>na,b=>b);
cat<=na;
ENDa;
模块端口说明:
仿真波形图:
分析:
技术状态不连续的异步计数器作为脉冲分配器产生相应的cat信号控制6个数码管的亮与灭,而每一个数码管显示同样的数字,故而每个cat对应的输出b是固定的。
当时钟频率较高时,人眼无法辨别几个数码管输出的先后,看上去就可以认为几个数码管同时输出012345
技术状态不连续的异步计数器:
VHDL代码:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYgrayIS
PORT(
clk,rs:
INSTD_LOGIC;
countout:
OUTSTD_LOGIC_VECTOR(5downto0)
);
ENDgray;
ARCHITECTUREbehavOFgrayIS
SIGNALnextcount:
STD_LOGIC_VECTOR(5downto0);
BEGIN
PROCESS(clk,rs)
BEGIN
IFrs='0'THEN
nextcount<="111110";
ELSIF(clk'eventANDclk='1')THEN
CASEnextcountIS
WHEN"111110"=>nextcount<="111101";
WHEN"111101"=>nextcount<="111011";
WHEN"111011"=>nextcount<="110111";
WHEN"110111"=>nextcount<="101111";
WHEN"101111"=>nextcount<="011111";
WHEN"011111"=>nextcount<="111110";
WHENOTHERS=>nextcount<="111110";
ENDCASE;
ENDIF;
ENDPROCESS;
countout<=nextcount;
ENDbehav;
仿真波形图:
数码管:
VHDL代码:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYshumaIS
PORT(
cat:
INSTD_LOGIC_VECTOR(5downto0);
b:
OUTSTD_LOGIC_VECTOR(6downto0)
);
ENDshuma;
ARCHITECTUREseg_archOFshumaIS
BEGIN
PROCESS(cat)
BEGIN
CASEcatIS
WHEN"111110"=>b<="1111110";--0
WHEN"111101"=>b<="0110000";--1
WHEN"111011"=>b<="1101101";--2
WHEN"110111"=>b<="1111001";--3
WHEN"101111"=>b<="0110011";--4
WHEN"011111"=>b<="1011011";--5
WHENOTHERS=>b<="0000000";
ENDCASE;
ENDPROCESS;
END;
(2)循环向左滚动
VHDL代码:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitydiaseg2is
port(clear,clk:
instd_logic;
q:
outstd_logic_vector(6downto0);
countout:
outstd_logic_vector(5downto0)
);
enddiaseg2;
architecturediaseg2_arcofdiaseg2is
signalq_temp:
std_logic_vector(6downto0);
signalcount:
std_logic_vector(5downto0);
signalcnt,cnt1:
integerrange0to5;
signaltmp:
integerrange0to15999;
signalclk1:
std_logic;
begin
process(clk)
begin
if(clk'eventandclk='1')then
if(cnt=5)thencnt<=0;
elsecnt<=cnt+1;
endif;
endif;
endprocess;
process(clk,clear)
begin
if(clear='1')thentmp<=0;
elsif(clk'eventandclk='1')then
if(tmp=15999)thentmp<=0;
elsetmp<=tmp+1;
endif;
endif;
endprocess;
process(tmp)
begin
if(clk'eventandclk='1')then
if(tmp<1000)thenclk1<='0';
elseclk1<='1';
endif;
endif;
endprocess;
process(clk1)
begin
if(clk1'eventandclk1='1')then
if(cnt1=5)thencnt1<=0;
elsecnt1<=cnt1+1;
endif;
endif;
endprocess;
process(cnt,cnt1)
begin
if(clear='1')thenq_temp<="0000000";
else
casecnt+cnt1is
when0=>q_temp<="1111110";
when1=>q_temp<="0110000";
when2=>q_temp<="1101101";
when3=>q_temp<="1111001";
when4=>q_temp<="0110011";
when5=>q_temp<="1011011";
when6=>q_temp<="1111110";
when7=>q_temp<="0110000";
when8=>q_temp<="1101101";
when9=>q_temp<="1111001";
when10=>q_temp<="0110011";
when11=>q_temp<="1011011";
whenothers=>q_temp<="0000000";
endcase
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北京邮电 大学 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)