EDA的一些程序代码Word格式.docx
《EDA的一些程序代码Word格式.docx》由会员分享,可在线阅读,更多相关《EDA的一些程序代码Word格式.docx(32页珍藏版)》请在冰点文库上搜索。
PROCESS(ABC)
BEGIN
IFABC(0)='
0'
THENL<
000"
ELSIFABC(1DOWNTO0)="
01"
THENL<
="
001"
ELSIFABC(2DOWNTO0)="
011"
010"
ELSIFABC(3DOWNTO0)="
0111"
ELSIFABC(4DOWNTO0)="
01111"
100"
ELSIFABC(5DOWNTO0)="
011111"
101"
ELSIFABC(6DOWNTO0)="
0111111"
110"
ELSIFABC(7DOWNTO0)="
01111111"
111"
ENDIF;
ENDPROCESS;
ENDARCHITECTURE;
时序仿真TestBench文件内容(不含注释)及仿真波形图
仿真时制作的TestBench文件添加:
WAITFOR200ns;
A<
='
B<
1'
C<
D<
E<
F<
G<
H<
WAITFOR200ns;
8421码奇偶校验位发生器设计
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYxor42IS
PORT(B8,B4,B2,B1:
P,NP:
OUTSTD_LOGIC;
ARCHITECTUREBHVOFXOR42IS
SIGNALe,f,g:
STD_LOGIC;
VGA<
e<
=B8XORB4;
f<
=B2XORB1;
g<
=eXORf;
p<
=g;
NP<
=gXOR'
注意:
在Entity中务必添加VGA功能选择端口:
VGA:
OUTSTD_LOGIC_VECTOR(3DOWNTO0)
在Architecture中务必添加功能选择设置:
(2)时序仿真TestBench文件内容(不含注释)及仿真波形图
LIBRARYieee;
USEieee.std_logic_1164.all;
ENTITYxor42_vhd_tstIS
ENDxor42_vhd_tst;
ARCHITECTURExor42_archOFxor42_vhd_tstIS
--constants
--signals
SIGNALB1:
SIGNALB2:
SIGNALB4:
SIGNALB8:
SIGNALNP:
SIGNALP:
SIGNALVGA:
STD_LOGIC_VECTOR(3DOWNTO0);
COMPONENTxor42
PORT(
B1:
B2:
B4:
B8:
NP:
OUTSTD_LOGIC;
P:
VGA:
OUTSTD_LOGIC_VECTOR(3DOWNTO0)
);
ENDCOMPONENT;
i1:
xor42
PORTMAP(
--listconnectionsbetweenmasterportsandsignals
B1=>
B1,
B2=>
B2,
B4=>
B4,
B8=>
B8,
NP=>
NP,
P=>
P,
VGA=>
VGA
init:
PROCESS
--variabledeclarations
BEGIN
--codethatexecutesonlyonce
WAITFOR100ns;
B8<
B4<
B2<
B1<
WAIT;
ENDPROCESSinit;
always:
--optionalsensitivitylist
--()
--codeexecutesforeveryeventonsensitivitylist
ENDPROCESSalways;
ENDxor42_arch;
\
半加器设计
--半加器
ENTITYh_adderIS
PORT(a,b:
co,so:
OUTSTD_LOGIC);
ARCHITECTUREfh1OFh_adderIS
SIGNALabc:
STD_LOGIC_VECTOR(1DOWNTO0);
abc<
=a&
b;
PROCESS(abc)
CASEabcIS
WHEN"
00"
=>
so<
co<
10"
11"
WHENOTHERS=>
NULL;
ENDCASE;
ENDPROCESS;
ENDARCHITECTUREfh1;
ENTITYf_adder_vhd_tstIS
ENDf_adder_vhd_tst;
ARCHITECTUREf_adder_archOFf_adder_vhd_tstIS
SIGNALain:
SIGNALbin:
SIGNALcin:
SIGNALcout:
SIGNALsum:
COMPONENTf_adder
ain:
bin:
cin:
cout:
sum:
f_adder
ain=>
ain,
bin=>
bin,
cin=>
cin,
cout=>
cout,
sum=>
sum,
ain<
bin<
cin<
--codeexecutesforeveryeventonsensitivitylist
ENDf_adder_arch;
带使能输入及同步清零的增1计数器
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCNT16IS
PORT(CLK,CLR,EN:
Q:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
VGA:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDCNT16;
ARCHITECTUREbehavOFCNT16IS
PROCESS(CLK,CLR,EN)
VARIABLEQI:
IFCLR='
THENQI:
=(OTHERS=>
'
);
ELSIFCLK'
EVENTANDCLK='
THEN
IFEN='
THENQI:
=QI+1;
ELSEQI:
ENDIF;
Q<
=QI;
ENDbehav;
生成TestBench模板文件,做以下修改:
在Architecture的常数声明部分添加
……
--constants
CONSTANTclk_period:
TIME:
=40ns;
--该常数用于设置时钟周期,40ns
两个进程修改如下:
PROCESS
--variabledeclarations
--codethatexecutesonlyonce
WAITFOR100ns;
en<
WAITFOR1500ns;
clr<
--codeexecutesforeveryeventonsensitivitylist
clk<
WAITFORclk_period/2;
--时钟信号的TestBench的一般描述
其中黑体部分,是时钟信号仿真TestBench的描述方式之一。
完成时序仿真,保存波形截图。
带使能输入、进位输出及同步清零的增1十进制计数器
ENTITYCNT10IS
COUT:
ENDCNT10;
ARCHITECTUREbehavOFCNT10IS
IFQI=9THENCOUT<
ELSECOUT<
clk<
基本串入/并出移位寄存器
libraryieee;
useieee.std_logic_1164.all;
entitysb8is
port(clk,din:
instd_logic;
dout:
outstd_logic_vector(7downto0);
VGA:
outstd_logic_vector(3downto0));
endentity;
architectureoneofsb8is
begin
VGA<
process(clk)
variablereg8:
std_logic_vector(7downto0):
00000000"
begin
ifclk'
eventandclk='
then
reg8(7downto1):
=reg8(6downto0);
reg8(0):
=din;
endif;
dout<
=reg8;
endprocess;
endarchitecture;
时序仿真TestBench文件内容:
WAITFOR40ns;
din<
仿真波形图:
改进的串入/并出移位寄存器
(1)Top-LevelDesignVHDL代码
在Entity中务必添加VGA模式端口:
在Architecture中务必添加模式设定:
entitysb88is
outstd_logic_vector(3downto0);
architectureoneofsb88is
std_logic_vector(3downto0);
variablej:
integer:
=1;
ifj>
4then
dout<
j:
elsif
clk'
j:
=j+1;