杨熙丞03870124数字电路报告综述.docx
《杨熙丞03870124数字电路报告综述.docx》由会员分享,可在线阅读,更多相关《杨熙丞03870124数字电路报告综述.docx(17页珍藏版)》请在冰豆网上搜索。
![杨熙丞03870124数字电路报告综述.docx](https://file1.bdocx.com/fileroot1/2023-2/1/5fade2ab-1ced-4c2c-86a3-83a1e5d6495e/5fade2ab-1ced-4c2c-86a3-83a1e5d6495e1.gif)
杨熙丞03870124数字电路报告综述
数字电路与数字逻辑大型试验报告
姓名杨熙丞
学号201203870124
指导教师周晓
专业班级电气信息类1201
学院信息学院
提交日期2014年7月9日
一.试验内容
1.数字乘法器的设计
2.彩灯循环显示控制电路实验
3.四位二进制加法器试验
4.水位报警器试验
二.4位数字乘法器设计
1.设计题目
4位数字乘法器设计
2.方案设计及原理
图1.工作时序图
乘法器的算法可以用算法流程图来描述。
当START信号为高电平时,启动乘法运算。
在运算过程中,共进行4次累加和移位操作。
当i=4时,表示运算结束,END信号置为高电平。
图2.原理框图
在明确乘法器的算法之后,便可将电路划分成数据处理单元和控制单元。
数据处理单元实现算法流程图规定的寄存、移位、加法运算等各项运算及操作。
控制单元接收来自数据处理单元的状态信号并向其发出控制信号。
REGA和REGB为4位寄存器,分别用于存放被乘数A、乘数B。
REGS为一5位寄存器,用于存放加法器输出的结果(考虑进位时为5位)。
在运算过程中,寄存器REGS和REGB合起来用于存放部分积P,因此,REGS和REGB还应具有右移功能,以实现部分积的右移。
寄存器REGS的移位输出送寄存器REGB,寄存器REGB的移位输出信号Bi送至控制器,以决定部分积是与被乘数相加还是与零相加。
并行加法器ADDER用于实现4位二进制加法运算。
计数器CNT用于控制累加和移位的循环次数。
当计数值等于4时,计数器的输出信号i4输出高电平。
控制器MULCON的功能是接收来自寄存器REGB的移位输出信号Bi和计数器输出信号i4,发出CA、CB0、CB1、CS0、CS1、CLR、CC等控制信号。
其中,CA为寄存器REGA的控制信号,用于选择置数或保持功能;CS0、CS1为寄存器REGS的控制信号,用于选择置数、右移和保持等功能;CB0、CB1为寄存器REGB的控制信号,用于选择置数、右移和保持等功能;CLR为寄存器REGS和计数器CNT的异步清零信号;CC为计数器CNT计数使能信号。
乘法器的控制单元采用CP脉冲上升沿触发,而数据处理单元采用CP的下降沿触发。
其目的有二:
一是使控制器无需产生数据处理单元的时钟信号,降低了控制器复杂程度;二是为了避免时钟偏移对电路的不良影响。
3.顶层原理图的设计
图3.顶层原理图
4.底层模块设计
REGA:
libraryIEEE;
useIEEE.std_logic_1164.all;
entityREGAis
port(CP,LD:
instd_logic;
D:
instd_logic_vector(3downto0);
Q:
outstd_logic_vector(3downto0));
endREGA;
architectureoneofREGAis
begin
process(CP,LD,D)
begin
if(CP'eventandCP='1')then
ifLD='1'then
Q<=D;
endif;
endif;
endprocess;
end;
REGB
libraryIEEE;
useIEEE.std_logic_1164.all;
entityREGBis
port(CP,DIR:
instd_logic;
S:
instd_logic_vector(1downto0);
D:
instd_logic_vector(3downto0);
Q:
bufferstd_logic_vector(3downto0));
endREGB;
architectureoneofREGBis
begin
process(CP,D,S)
begin
if(CP'eventandCP='1')then
caseSis
when"00"=>NULL;
when"01"=>Q<=DIR&Q(3downto1);
when"11"=>Q<=D;
whenothers=>NULL;
endcase;
endif;
endprocess;
end;
REGC
libraryIEEE;
useIEEE.std_logic_1164.all;
entityREGCis
port(CP,RD,DIR:
instd_logic;
S:
instd_logic_vector(1downto0);
D:
instd_logic_vector(4downto0);
Q:
bufferstd_logic_vector(4downto0));
endREGC;
architectureoneofREGCis
begin
process(CP,D,S,RD)
begin
if(RD='1')thenQ<=(others=>'0');
elsif(CP'eventandCP='1')then
caseSis
when"00"=>NULL;
when"01"=>Q<=DIR&Q(4downto1);
when"11"=>Q<=D;
whenothers=>NULL;
endcase;
endif;
endprocess;
end;
CNT
libraryIEEE;
useIEEE.std_logic_1164.all;
useIEEE.std_logic_unsigned.all;
entityCNTis
port(CP,RD,ET:
instd_logic;
CO:
outstd_logic);
endCNT;
architectureoneofCNTis
signalQ:
std_logic_vector(2downto0);
begin
process(CP,RD,ET)
begin
if(RD='1')then
Q<="000";
elsif(CP'eventandCP='1')then
ifET='1'then
if(Q=4)then
Q<="000";
else
Q<=Q+1;
endif;
endif;
endif;
endprocess;
process(Q)
begin
if(Q=4)then
CO<='1';
else
CO<='0';
endif;
endprocess;
end;
MULCON
libraryIEEE;
useIEEE.std_logic_1164.all;
entityMULCONis
port(START,I4,BI,CP:
instd_logic;
DONE,RD,CA,CB1,CB0,CC1,CC0,ET:
outstd_logic);
endMULCON;
architectureoneofMULCONis
signalcurrent_state,next_state:
bit_vector(1downto0);
constants0:
bit_vector(1downto0):
="00";
constants1:
bit_vector(1downto0):
="01";
constants2:
bit_vector(1downto0):
="11";
constants3:
bit_vector(1downto0):
="10";
begin
COM:
process(current_state,START,BI,I4)
begin
DONE<='0';RD<='0';CA<='0';CB1<='0';CB0<='0';CC1<='0';CC0<='0';ET<='0';
casecurrent_stateis
whenS0=>DONE<='1';
if(start='1')thennext_state<=S1;
elsenext_state<=S0;
endif;
whenS1=>RD<='1';CA<='1';CB1<='1';CB0<='1';
next_state<=S2;
whenS2=>
if(BI='1')thenCC1<='1';CC0<='1';ET<='1';
elseET<='1';
endif;
next_state<=S3;
whenS3=>CB0<='1';CC0<='1';
if(I4='1')thennext_state<=S0;
elsenext_state<=S2;
endif;
endcase;
endprocessCOM;
REG:
process(CP)
begin
ifCP='1'andCP'eventthen
current_state<=next_state;
endif;
endprocessREG;
end;
ADD4B
libraryIEEE;
useIEEE.std_logic_1164.all;
useIEEE.std_logic_unsigned.all;
entityADD4Bis
port(
A:
instd_logic_vector(3downto0);
B:
instd_logic_vector(3downto0);
C:
outstd_logic_vector(3downto0);
COUT:
outstd_logic);
end;
architectureoneofADD4Bis
signalCRLT:
std_logic_vector(4downto0);
signalAA,BB:
std_logic_vector(4downto0);
begin
AA<='0'&A;
BB<='0'&B;
CRLT<=AA+BB;
C<=CRLT(3downto0);
COUT<=CRLT(4);
end;
5.仿真结果
图4.仿真结果
当A的四位输入信号为1111,B的四位输入信号为0000时,P的8位输出为00000000,满足结果要求。
6引脚锁定和下载测试
表一引脚锁定:
SW0
A0
PIN_N25
SW1
A1
PIN_N26
SW2
A2
PIN_P25
SW3
A3
PIN_AE14
SW4
B0
PIN_AF14
SW5
B1
PIN_AD13
SW6
B2
PIN_AC13
SW7
B3
PIN_C13
KEY0
START
PIN_G26
CLKIN
CP
PIN_G25
LEDG8
END
PIN_Y12
LEDG7
P7
PIN_Y18
LEDG6
P6
PIN_AA20
LEDG5
P5
PIN_U17
LEDG4
P4
PIN_U18
LEDG3
P3
PIN_V18
LEDG2
P2
PIN_W19
LEDG1
P1
PIN_AF22
LEDG0
P0
PIN_AE22
下载测试:
已通过老师审核。
三.自选设计题
1.设计题目
彩灯循环显示控制电路实验
2.方案设计及原理
主要芯片由74198构成,74198是一种双向8位移位寄存器。
74198功能表:
清零
模式控制
时钟
串行输入
并行输入
输出
功能
描述
S1
S0
CLOCK
DSL
DSR
A
B
C
D
QAQBQCQD...QH
0
×
×
×
×
×
×
×
×
×
0000...0
清零
1
×
×
0
×
×
×
×
×
×
QA0QB0QC0QD0...QH0
保持
1
1
1
↑
×
×
a
b
c
d
abcd...h
并入
1
0
1
↑
×
0
×
×
×
×
0QA0QB0QC0...QG0
右移0
1
0
1
↑
×
1
×
×
×
×
1QA0QB0QC0...QG0
右移1
1
1
0
↑
0
×
×
×
×
×
QB0QC0QD0...QH00
左移0
1
1
0
↑
1
×
×
×
×
×
QB0QC0QD0...QH01
左移1
1
0
0
×
×
×
×
×
×
×
QA0QB0QC0QD0...QH0
保持
此电路设计了5个输入端,GAO输入端与A,B,E,F相连。
DI输入端与C,D,G,H相连。
S0,S1控制左移右移。
Cp控制时钟脉冲。
8个输出端显示结果。
这样可以做到二亮二灭右移或左移。
当S0=0,S1=1时彩灯左移。
当S0=1,S1=0时,彩灯右移。
(此时GAO为高电平,DI为低电平)当GAO和DI为高电平时,彩灯全亮。
当GAO和DI为低电平时,彩灯全灭。
3顶层原理图设计
图5顶层原理图
4.仿真结果
此时为全亮。
图6仿真结果
此时为全灭。
5.引脚锁定与下载测试
表2引脚锁定:
CLKIN
CP
PIN_G25
SW0
A0
PIN_N25
LEDG7
P7
PIN_Y18
LEDG6
P6
PIN_AA20
LEDG5
P5
PIN_U17
LEDG4
P4
PIN_U18
LEDG3
P3
PIN_V18
LEDG2
P2
PIN_W19
LEDG1
P1
PIN_AF22
LEDG0
P0
PIN_AE22
SW1
A1
PIN_N26
下载测试已通过老师审核。
四.自选设计题2
1.设计题目
四位二进制加法器试验
2.方案设计及原理
1试验用到了74283元件。
其中A3~A0和B3~B0是被加数,CIN是进位标志。
S3~S0显示结果,COUT是输出进位标志。
电路将两个四位二进制被加数从电平开关SW7~SW0输入,进位输入通过按键输入。
和及进位输出直接驱动发光二极管。
3顶层原理图设计
图7顶层原理图
4仿真结果
图8仿真结果
当A为0001,B为0000,进位输入为1时,结果为0010,满足要求。
5引脚锁定与下载测试
表3引脚锁定:
SW0
A0
PIN_N25
SW1
A1
PIN_N26
SW2
A2
PIN_P25
SW3
A3
PIN_AE14
SW4
B0
PIN_AF14
SW5
B1
PIN_AD13
SW6
B2
PIN_AC13
SW7
B3
PIN_C13
KEY0
CIN
PIN_G26
LEDG4
COUT
PIN_U18
LEDG3
S3
PIN_V18
LEDG2
S2
PIN_W19
LEDG1
S1
PIN_AF22
LEDG0
S0
PIN_AE22
试验结果已通过验收。
五.自选设计题3
1.设计题目
水位报警器
2.方案设计及原理
设计一个水位报警控制器,设水位高度用四位二进制数A3A2A1A0提供。
当水位上升到7米时,白指示灯w开始亮;当水位上升到9米时,黄指示灯y开始亮:
当水位上升到11米时,红指示灯r开始亮,其它灯灭;水位不可能上升到14米。
试用或非门设计此报警器的控制电路。
方案设计:
根据逻辑规定和功能要求,可得到相应的真值表。
并根据真值表,画出卡诺图。
再写出最简与-或逻辑表达式。
3顶层原理图设计
图9.顶层原理图
4仿真结果
图10仿真结果
A3A2A1A0在0000-0110时,灯不亮。
在0111-1000时(7m-8m)灯W亮。
图11仿真结果
在1001-1010时(9m-10m)时灯Y亮。
图12仿真结果
1011-1101时(11m-13m)灯R亮
5.引脚锁定与下载测试
表4引脚锁定:
SW0
A0
PIN_N25
SW1
A1
PIN_N26
SW2
A2
PIN_P25
SW3
A3
PIN_AE14
LEDR0
R
PIN_AE23
LEDR1
Y
PIN_AF23
LEDR2
W
PIN_AB21
下载测试已通过。
六.心得体会
本次数字电路大型实验使我学到了很多东西,不仅让我们掌握了VHDL语言和如何构建原理图,而且还让我们学会了如何进行结果的仿真和下载,最终目的是让我们学会了硬件电路设计的一种新的方法。
更重要的是,能够让我们每个人都亲身进行操作并增强了我们自己的动手能力,以后如果碰到硬件电路的设计,我们就能有迹可循,也就可以用现在学过的知识运用到实践中去,这样对我自己也有很大的提高。
不过在实验中,我也碰到了一些问题。
例如,有时VHDL语言编译的时候有错误,这时只能边找错误边调试,有时可能是由于符号引起的错误,要特别注意。
有时在构建原理图编译时也会碰到有错误的问题,这时可能是由于原理图中线没连好的缘故,就要重新回到原理图中修改再编译。
还有引脚的问题,要参考书最后面的资料。
总体上来说,这次实验对我们的帮助很大,以后能够让我们更好地运用到实践中去。
更重要的是这些发现错误并解决的能力,希望以后也不要忘记。