可编程逻辑器件及EDA技术实验报告Word格式.docx
- 文档编号:22876386
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:34
- 大小:1.07MB
可编程逻辑器件及EDA技术实验报告Word格式.docx
《可编程逻辑器件及EDA技术实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《可编程逻辑器件及EDA技术实验报告Word格式.docx(34页珍藏版)》请在冰豆网上搜索。
用这种方法可以简单、快捷地完成逻辑电路设计。
电路结构图:
实验波形仿真如下图:
2、常用编码器设计
编码是指用文字、符号和数码等来表示某种信息的过程。
在数字系统中,由于采用二进制运算来处理数据,因此通常是将信息编成若干位二进制代码,而在逻辑电路中,信号都是以高、低电平的形式给出的。
实现编码的数字电路称作编码器(encoder),编码器的逻辑功能就是把输入的每一个高低电平信号编成一组对应的二进制代码。
根据8线-3线优先编码器的真值表可得,优先编码器的编码输入、编码输出均为低电平有效,且有使能输入和使能输出功能。
例3.4试用VHDL设计一个8线-3线优先编码器,编码器输出为反码输出。
它的程序如下:
useieee.std_logic_unsigned.all;
entityexample3_4is
port(sin:
i:
instd_logic_vector(7downto0);
a:
outstd_logic_vector(2downto0);
e,s:
outstd_logic);
endexample3_4;
architecturebehavioralofexample3_4is
process(sin,i)
begin
ifsin='
1'
then
a<
="
111"
;
e<
='
s<
else
ifi(7)='
0'
000"
elsifi(6)<
001"
elsifi(5)<
010"
elsifi(4)<
011"
elsifi(3)<
100"
elsifi
(2)<
101"
elsifi
(1)<
110"
elsifi(0)<
endif;
endprocess;
在8线-3线优先编码器的设计中,使用了IF-ELSIF-ELSE-ENDIF语句,该语句具有优先级关系。
实验波形仿真图:
3、常用译码器设计
译码为编码的逆过程。
实现译码的逻辑电路称为译码器(decoder)。
译码器是少输入、多输出的逻辑电路,它的输入、输出间存在一对一的映射关系,其逻辑功能是将每组输入的代码译成对应的输出高或低有效的一路电平信号。
半导体数码管有共阳极和共阴极两种类型。
共阳极数码管的7个发光二极管的阴极接在一起,通常接地,而七个阳极则是独立的。
共阳极数码管与共阴极数码管相反,七个发光二极管的阳极接在一起,通常经过限流电阻后接+5V电源,而阴极是独立的。
例3.6试用VHDL设计一个半导体数码管的七段显示译码器。
程序参考如下:
entityexample3_6is
PORT(hex:
INSTD_LOGIC_VECTOR(3DOWNTO0);
segment:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
END;
ARCHITECTUREbehavioralOFexample3_6IS
BEGIN
PROCESS(hex)
CASEhex(3DOWNTO0)IS
WHEN"
0000"
=>
segment<
="
0111111"
;
--X"
3F"
'
0001"
0000110"
06"
1
0010"
1011011"
5B"
2
0011"
1001111"
4F"
3
0100"
1100110"
66"
4
0101"
1101101"
6D"
5
0110"
1111101"
7D"
6
0111"
0000111"
07"
7
1000"
1111111"
7F"
8
1001"
1101111"
6F"
9
1010"
1110111"
77"
10
1011"
1111100"
7C"
11
1100"
0111001"
39"
12
1101"
1011110"
5E"
13
1110"
1111001"
79"
14
1111"
1110001"
71"
15
WHENOTHERS=>
NULL;
ENDCASE;
ENDPROCESS;
当共阴极数码管的某一阳极接高电平时,相应的二极管发光,若要显示某字形,则使相应几段的二极管发光即可,所以共阴极数码管需要有输出高电平有效的译码器去驱动,而共阴极数码管则需要输出低电平有效的译码器去驱动。
上面程序是一个能驱动共阳极数码管的7段译码器的VHDL程序。
实验波形仿真如下:
4、数据选择器设计
数据选择器(multiplexer)是在地址选择信号的控制下,从多路输入数据中选择一路作为输出的逻辑电路,叫做多路开关,简称MUX。
在可编程逻辑器件的设计中经常用数据选择器来实现课编程逻辑器件内部数据总线的连接。
例3.7试用VHDL设计4选1数据选择器。
参考程序:
Libraryieee;
Useieee.std_logic_1164.all;
Useieee.std_logic_arith.all;
Useieee.std_logic_unsigned.all;
Entityexample3_7is
Port(d:
instd_logic_vector(3downto0);
instd_logic_vector(1downto0);
e:
endexample3_7;
architecturebehavioralofexample3_7is
process(e,a,d)
ife='
then
caseais
when"
00"
f<
=d(0);
01"
=>
=d
(1);
10"
=d
(2);
11"
=d(3);
endcase;
endprocess;
一个4选1数据选择器,D3~D0为4个数据输入,F为数据输出,A1、A0是地址选择输入。
当A1、A0为不同代码时,D3~D0中不同输入通道数据送至输出端F。
E为使能端,当E=0时,数据选择器正常工作,否则禁止工作。
实验波形仿真:
5、数据分配器设计
在数字信号的传输过程中,常常需要将一路数据分配到多路通道中去。
实现这种功能的逻辑电路,叫做数据分配器(Demultiplexer),简称DEMUX,其电路为单输入、多输出形式。
例3.10试用VHDL设计两总线数据分配器。
它的参考程序如下:
entityexample3_10is
port(sel:
a,b:
mux_out:
outstd_logic_vector(7downto0));
endexample3_10;
architecturebehavioralofexample3_10is
process(sel,a,b)
ifsel='
mux_out<
=a;
elsemux_out<
=b;
D为被传输的数据输入,A、B是(地址)选择输入,Q0~Q3为数据输出。
6、数值比较器设计
数值比较器是用来比较两个数据之间市值关系的电路。
按照比较的数据类型划分,数值比较器可分为无符号数二进制比较器和有符号数二进制比较器。
例3.12试用VHDL设计两个8位有符号数的数值比较器,比较分别输出大于、小于和相等的结果。
entityexample3_12is
port(a,b:
gt,eq,lt:
endexample3_12;
architecturebehavioralofexample3_12is
signalsab:
std_logic_vector(1downto0);
sab<
=a(7)&
b(7);
process(a,b)
case(sab)is
ifa(6downto0)>
b(6downto0)thengt<
eq<
lt<
elsifa(6downto0)=b(6downto0)thengt<
elsegt<
when"
gt<
whenothers=>
endbehavioral;
从程序可以看到,利用并置的方法从输入数据中分离出符号位,然后用case语句将符号位的四种组态分开,分别处理。
7、算术运算单元电路设计
算术运算单元电路是构成处理器CPU的算术逻辑单元(ALU)的一个重要组成部分。
例3.13试用VHDL设计一个8位二进制数的加法器。
libraryieee;
entityfulladderis
port(ai,bi,cin:
si,cio:
endfulladder;
architecturebehavioraloffulladderis
si<
=(aixorbi)xorcin;
cio<
=(aiandbi)or(cinandai)or(cinandbi);
entityexample3_13is
ci:
co:
outstd_logic;
s:
outstd_logic_vector(7downto0));
endexample3_13;
architecturebehavioralofexample3_13is
componentfulladder
port(ai,bi,cin:
endcomponent;
signalcarry:
std_logic_vector(8downto0);
carry(0)<
=ci;
co<
=carry(8);
gen:
foriIN0to7generate
add:
fulladderportmap(
ai=>
a(i),
bi=>
b(i),
cin=>
carry(i),
si=>
s(i),
cio=>
carry(i+1));
endgenerategen;
8位二进制加法器可以由8个全加器通过级联的方式构成。
实验波形仿真图如下:
二、时序逻辑电路设计
根据逻辑电路功能,逻辑电路可分为组合逻辑电路和时序逻辑电路两大类。
其特点是电路任意时刻的稳态输出仅取决于该时刻的输入信号,而与电路原来的状态无关。
1、常用触发器设计
触发器(flip-flop)是能存储一位二进制数的逻辑电路,是时序逻辑电路的基本单元电路。
触发器具有两个稳定状态,用来表示逻辑状态或二进制数的0和1。
例3.14试用VHDL设计一个D触发器。
它参考程序如下:
ENTITYexample3_14IS
PORT(CLK:
INSTD_LOGIC;
D:
Q:
OUTSTD_LOGIC);
ARCHITECTUREbehavioralOFexample3_14IS
PROCESS(CLK)
IFCLK'
EVENTANDCLK='
THENQ<
=D;
ENDIF;
END;
对于时序电路的控制,通常可以划分为同步方式和异步方式。
同步方式是指控制信号只有在时钟有效时才起作用,简称同步控制;
异步方式是指控制系统起作用不需要时钟信号有效,简称异步控制。
例3.15试用VHDL设计一个具有异步复位和同步置位的D触发器。
它的参考程序:
entityexample3_15is
port(d:
instd_logic;
clk:
clr,set:
q:
outstd_logic);
endexample3_15;
architecturebehavioralofexample3_15is
process(clk,clr,set)
ifclr='
thenq<
elsifrising_edge(clk)then
ifset='
q<
=d;
2、常用数码寄存器设计
数码寄存器用于寄存数据,不能进行数据移位。
它被广泛地应用于各类数字计算机和数字系统中。
一般来说,寄存器是借助时钟脉冲的作用把数据寄存在触发器内,寄存数据的位数和所用触发器的个数是相等的,因为一个触发器能储存1位二进制码,所以用N触发器组成的寄存器能储存一组N二进制码。
按照数码寄存器的功能,可以把数码寄存器的功能划分为寄存器、锁存器和移位寄存器等。
例3.17试用VHDL设计一个8位锁存器。
entityexample3_17is
instd_logic_vector(7downto0);
le:
endexample3_17;
architecturebehavioralofexample3_17is
signalqin:
std_logic_vector(7downto0);
p1:
process(d)
ifle='
qin<
endprocessp1;
p2:
process(le)
iffalling_edge(le)then
=qin;
endprocessp2;
3、常用计数器设计
计数的功能就是累计输入脉冲的个数。
实现计数功能的数字电路就称为计数器(counter)。
被计数的脉冲(简称计数脉冲)可以是周期性脉冲,也可以是非周期性脉冲,它通常加载计数器的时钟输入端,作为计数器的时钟脉冲。
计数器在循环中的状态个数叫做计数器的模(modulus)。
在循环中有m个状态的计数器称为模m计数器,或称m分频计数器。
实验内容:
例3.21试用VHDL设计一个十进制计数器。
entityexample3_21is
port(en,clk:
outstd_logic_vector(3downto0);
qcc:
endexample3_21;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 可编程 逻辑 器件 EDA 技术 实验 报告