电子设计自动化文档格式.docx
《电子设计自动化文档格式.docx》由会员分享,可在线阅读,更多相关《电子设计自动化文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
![电子设计自动化文档格式.docx](https://file1.bdocx.com/fileroot1/2023-1/29/7148d962-6c1e-4622-becb-24ef6a62440b/7148d962-6c1e-4622-becb-24ef6a62440b1.gif)
2
7
11
10
12
9
根据全加器的的输出和输入的关系,以及进位和输入的关系:
s=abcin-1cout=ab+abcin-1
由此可以用基本等式算法便能很直观的设计出程序。
B.流程图:
a+b+cin=和
判断
和大于15
和小于15
cout=1
s=和-15
cout=0
s=和
C.程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityadder4bitis
port(cin:
instd_logic;
a,b:
instd_logic_vector(3downto0);
s:
outstd_logic_vector(3downto0);
cout:
outstd_logic);
endadder4bit;
architecturebehofadder4bitis
signalsint:
std_logic_vector(4downto0);
signalaa,bb:
begin
aa<
='
0'
&
a(3downto0);
bb<
b(3downto0);
sint<
=aa+bb+cin;
s(3downto0)<
=sint(3downto0);
cout<
=sint(4);
endbeh;
D.仿真波形:
2.用if语句和case语句设计一个4-16译码器。
dq
~0000~0000000000000001
~0001~0000000000000010
~0010~0000000000000100
~0011~0000000000001000
~0100~0000000000010000
~0101~0000000000100000
~0110~0000000001000000
~0111~0000000010000000
~1000~0000000100000000
~1001~0000001000000000
~1010~0000010000000000
~1011~0000100000000000
~1100~0001000000000000
~1101~0010000000000000
~1110~010*********
~1111~1000000000000000
我们知道4_16
译码器的端口中,有4个输入
端,16个输出端,4个输入端
代表十进制输数到15,会对应
不同的输出。
原理图如图所示:
输入四位二进制数d
根据输入
用if或case语句
选择输出数据
输出十六位二进制数q
C.程序:
①if语句
libraryIEEE;
useIEEE.std_logic_1164.all;
entityencoder4_16is
port(d:
inSTD_LOGIC_VECTOR(3downto0);
q:
outSTD_LOGIC_VECTOR(15downto0));
endencoder4_16;
architectureencoder_ifofencoder4_16is
begin
process(d)
ifd="
0000"
thenq<
=(0=>
'
1'
others=>
);
elsifd="
0001"
=(1=>
0010"
=(2=>
0011"
=(3=>
0100"
=(4=>
0101"
=(5=>
0110"
=(6=>
0111"
=(7=>
1000"
=(8=>
1001"
=(9=>
1010"
=(10=>
1011"
=(11=>
1100"
=(12=>
1101"
=(13=>
1110"
=(14=>
1111"
=(15=>
elseq<
=(others=>
endif;
endprocess;
endencoder_if;
②case语句
useieee.std_logic_1164.all;
entitydecoder4_16is
port(data:
instd_logic_vector(3downto0);
en:
instd_logic;
y:
outstd_logic_vector(15downto0));
endentitydecoder4_16;
architecturearch1ofdecoder4_16is
process(en,data)
ifen='
then
casedatais
when"
=>
y(15downto0)<
="
1111111111111110"
;
1111111111111101"
1111111111111011"
1111111111110111"
1111111111101111"
1111111111011111"
1111111110111111"
1111111101111111"
1111111011111111"
1111110111111111"
1111101111111111"
1111011111111111"
1110111111111111"
1101111111111111"
1011111111111111"
0111111111111111"
whenothers=>
y(15downto0)<
1111111111111111"
endcase;
endarchitecture;
D.仿真波形
实验三
时序电路设计
1.设计4位二进制同步加/减法可逆计算器。
已知要求为:
输入:
clr:
异步清零(高电平有效)
clk:
时钟输入
load:
同步预置使能端(低电平有效)
D3~D0:
4位二进制数输入端
updown:
加/减法控制信号
(‘1’加,‘0’减)
输出:
Q3~Q0:
4位二进制计数输出
CO:
进位输出
BO:
借位输出
本题虽然输入输出数据很多思路还是比较简单,明确。
比如各种各样的约束条件如clr,clk,load端,我使用IF和WHEN语句,和IF-ELSE语句来实现程序所需功能。
首先判断clr端,若为1,则输出0000,若为低电平,否则进行下一步:
判断时钟同步预置使能端load,若为0,Q3~Q0输出为D3~D0,否则进行下一步:
判断updown:
加/减法控制信号,若为1,输出根据clk:
时钟输入作加法运算输出,若为0,输出根据clk:
时钟输入作减法运算输出。
clr,clk,load,updown,D3~D0
输出:
CO,BO,Q3~Q0
为1
判断clr值输出0000
为0
为0
判断load值输出为D3~D0
为1
判断updown值
加法器减法器
libraryieee;
entityjishuqiis
port(clr,clk,load,updown:
d:
co,bo:
outstd_logic;
q:
bufferstd_logic_vector(3downto0));
endentityjishuqi;
architecturewtfofjishuqiis
begin
co<
when(q="
andupdown='
)else'
bo<
process(clk,clr,updown)is
if(clr='
)thenq<
elsif(clk'
eventandclk='
)then
if(load='
=d;
elseif(updown='
=q+1;
Elseq<
=q-1;
endif;
endprocess;
endarchitecturewtf;
D.仿真波形:
清零端为高电平有效:
清零端为低电平,load端为低电平有效:
清零端为低电平,load端为高电平,updown为1
清零端为低电平,load端为高电平,updown为