北京邮电大学数电实验报告Word格式.docx
《北京邮电大学数电实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《北京邮电大学数电实验报告Word格式.docx(25页珍藏版)》请在冰豆网上搜索。
(2)用实验内容1中生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其功能,并下载到实验板测试,要求用拨码开关设定输入信号,发光二极管显示输出信号;
(3)用3线-8线译码器(74LS138)和逻辑门设计实现函数F=,仿真验证其功能,并下载到实验板测试。
要求用拨码开关设定输入信号,发光二极管显示输出信号。
原理图及仿真波形图:
(1)半加器
原理图:
仿真波形图:
分析:
S=ab;
C=ab
其中a,b为输入端,C为进位端,S为本位和,当ab=‘00’‘01’‘10’时不用进位,故C=‘0’,当ab=‘11’时需要进位使得C=‘1’,S=‘0’。
(2)全加器
Si=AiBiCi-1;
Ci=AiBi+Ci-1(AiBi)
全加器与半加器的不同在于,全加器需要考虑低位的进位,而半加器不需要。
因而对于全加器,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)
CASEaIS
WHEN"
0000"
=>
b<
="
1111110"
;
--0
0001"
0110000"
--1
0010"
1101101"
--2
0011"
1111001"
--3
0100"
0110011"
--4
0101"
1011011"
--5
0110"
1011111"
--6
0111"
1110000"
--7
1000"
1111111"
--8
1001"
1111011"
--9
WHENOTHERS=>
b<
0000000"
ENDCASE;
ENDPROCESS;
END;
数码管译码器主要运用case语句,将每一种情况罗列出来,而仿真波形图既是每一种情况的一种直观体现
(2)8421码转换为余3码的代码转换器
libraryieee;
useieee.std_logic_1164.all;
entityTWOis
port(
instd_logic_vector(3downto0);
outstd_logic_vector(3downto0)
endTWO;
architectureTWO_archofTWOis
begin
process(a)
caseais
when"
1010"
1011"
1100"
whenothers=>
b<
endcase;
endprocess;
end;
余三码实际为8421码加上3的结果,可以用case列举的方式,也可以用加号,但需要加上相应的库
(3)奇校验器
entityTHREEis
outstd_logic_vector(0downto0)
endTHREE;
architectureTHREE_archofTHREEis
0"
1"
--10
--11
--12
1101"
--13
1110"
--14
1111"
--15
实验三:
用VHDL设计与实现时序逻辑电路
(1)熟悉用VHDL语言设计时序逻辑电路的方法;
(3)熟悉计数器和分频器的设计与应用。
(1)用VHDL语言设计实现一个带异步复位的8421码十进制计数器,仿真验证其功能,并下载到实验板测试。
要求用按键设定输入信号,发光二极管显示输出信号;
(2)用VHDL语言设计实现一个分频系数为12,分频输出信号占空比为50%的分频器,要求在QuartusⅡ平台上设计程序并仿真验证设计;
(3)将
(1)
(2)和数码管译码器三个电路进行连接,并下载到实验板显示计数结果。
VHDL代码、仿真波形图、模块端口说明:
(1)计数器
useieee.std_logic_arith.all;
entitycount_10is
clk,clear:
INSTD_LOGIC;
q:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDcount_10;
architectureaofcount_10is
signalcn:
integerrange0to10;
process(clk)
IF(clear='
0'
ORcn=10)THEN
cn<
=0;
ELSIF(clk'
eventANDclk='
1'
)THEN
=cn+1;
ELSEcn<
=cn;
ENDIF;
q<
=CONV_STD_LOGIC_VECTOR(cn,4);
ENDa;
输入为时钟信号和复位信号。
由于是异步复位,所以复位信号的优先级最高。
当复位信号为0时,输出变为0000;
当复位信号为1时,每当遇到时钟上升沿,输出状态加1,实现加计数,计数循环为0000→·
·
1010,其中1010与0000占用同一个周期的clk,因此输出波形会出现“芒刺”。
(2)分频器
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYdiv_12IS
clk:
clear:
clk_out:
OUTSTD_LOGIC);
ENDdiv_12;
ARCHITECTUREaOFdiv_12IS
SIGNALtmp:
INTEGERRANGE0TO5;
SIGNALclktmp:
STD_LOGIC;
PROCESS(clear,clk)
IFclear='
THEN
tmp<
ELSIFclk'
IFtmp=5THEN
clktmp<
=NOTclktmp;
ELSE
tmp<
=tmp+1;
ENDIF;
clk_out<
=clktmp;
在本段设计中,clear=0不再是简单的清零操作,而是重新计算clk数目的操作,当出现clear=0时,将会重新计算6个时钟周期,再进行输出状态的翻转。
(3)计时器与分频器的连接
ENTITYtheIS