EDA总复习.docx
《EDA总复习.docx》由会员分享,可在线阅读,更多相关《EDA总复习.docx(49页珍藏版)》请在冰豆网上搜索。
EDA总复习
第一章
1、名词解释
VHDL:
超高速集成电路硬件描述语言
ASIC:
专用集成电路
FPGA:
现场可编程门阵列
CPLD:
复杂可编程逻辑器件
2、EDA技术最终实现目标的ASIC的三种途径:
(1)超大规模可编程逻辑器件
(2)半定制或全定制ASIC
(3)混合ASIC
3、VHDL综合的含义和特点
含义:
将用行为和功能层次表达的电子系统转换为低层次的便于具体实现的模块组合装配的过程。
特点:
(1)从自然语言转换到VHDL语言等算法表示,即自然语言综合
(2)从算法表示转换到寄存器传输级,即从行为域到结构域的综合,即行为综合
(3)RTL级表示转换到逻辑门(包括触发器)的表示,即逻辑综合;
(4)从逻辑门表示转换到版图表示,或转换到FPGA的配置网表文件,可称为结构综合。
第二章
1、FPGA/CPLD设计流程的几个步骤:
设计输入—综合—适配—时序仿真与功能仿真—编程下载—硬件测试
2、原理图输入与VHDL文本输入设计的区别:
答:
原理图输入是绘制特定功能的电路原理图
“告诉我你要设计什么样的系统硬件,我就画给你”
VHDL是用语言多层次描述系统硬件
“告诉我你的电路行为,那么VHDL编译器会完成这个电路行为的硬件系统”
但是设计师并不能控制电路怎么实现。
VHDL文本输入的优点:
易修改
不依赖于任何特定硬件环境,可移植性好
更灵活
3、IP核的含义及分类
答:
含义:
就是知识产权核或知识产权模块的意思
分类:
软IP:
用硬件描述语言描述的功能块
固IP:
完成了综合的功能块
硬IP:
提供设计的最终阶段产品:
掩模
第三章
1、名词解释:
LUT:
LookUpTable(可编程查找表)
SARM:
静态随机存储器
2.FPGA-FieldProgrammableGateArray
CPLD-ComplexProgrammableLogicDevice
3.乘积项可编程结构--可编程逻辑器件(PLD)
SRAM查找表逻辑方法--可编程门阵列(PGA)
4.PAL(可编程阵列逻辑)
与阵列可编程
或阵列不可编程
GAL(通用阵列逻辑器件)(GeneralArrayLogicDevice)
第四章
◆实例:
多路选择器设计,触发器设计,异步时序电路设计,全加器设计,计数器设计,移位寄存器设计
1、多路选择器设计
4选1的多路选择器原理:
名称:
mux41
端口设置:
输入端:
a,b,c,d
选择控制输入端:
s0,s1
输出端:
y
实现功能:
当s0s1=00时选择输出y=a;否则当s0s1=01时选择输出y=b;否则当s0s1=10时选择输出y=c;否则选择输出y=d。
ENTITYmux41IS
PORT(a,b,c,d,s0,s1:
INBIT;
y:
OUTBIT);
ENDENTITYmux41;
ARCHITECTUREoneOFmux41IS
BEGIN
y<=aWHENs0='0'ands1='0'ELSE
bWHENs0='0'ands1='1'ELSE
cWHENs0='1'ands1=‘0'ELSE
d;
ENDARCHITECTUREone;
2、D触发器设计
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYDFF1IS
PORT(CLK:
INSTD_LOGIC;
D:
INSTD_LOGIC;
Q:
OUTSTD_LOGIC);
END;
ARCHITECTUREbhvOFDFF1IS
SIGNALQ1:
STD_LOGIC;--类似于在芯片内部定义一个数据的暂存节点
BEGIN
PROCESS(CLK)
BEGIN
IFCLK'EVENTANDCLK='1'
THENQ1<=D;
ENDIF;
Q<=Q1;--将内部的暂存数据向端口输出
ENDPROCESS;
ENDbhv;
3、时序电路设计
…
ARCHITECTUREbhvOFMULTI_DFFIS
SIGNALQ1,Q2:
STD_LOGIC;
BEGIN
PRO1:
PROCESS(CLK)
BEGIN
IFCLK'EVENTANDCLK='1'
THENQ1<=NOT(Q2ORA);
ENDIF;
ENDPROCESS;
PRO2:
PROCESS(Q1)
BEGIN
IFQ1'EVENTANDQ1='1'
THENQ2<=D;
ENDIF;
QQ<=Q2;
ENDPROCESS;
4、半加器设计
absoco
0000
0110
1010
1101
【例4-16】
LIBRARYIEEE;--半加器描述
(1):
布尔方程描述法
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYh_adderIS
PORT(a,b:
INSTD_LOGIC;
co,so:
OUTSTD_LOGIC);
ENDENTITYh_adder;
ARCHITECTUREfh1OFh_adderis
BEGIN
so<=NOT(aXOR(NOTb));
co<=aANDb;
ENDARCHITECTUREfh1;
【例4-17】
LIBRARYIEEE;--半加器描述
(2):
真值表描述法
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYh_adderIS
PORT(a,b:
INSTD_LOGIC;
co,so:
OUTSTD_LOGIC);
ENDENTITYh_adder;
ARCHITECTUREfh1OFh_adderis
SIGNALabc:
STD_LOGIC_VECTOR(1DOWNTO0);
BEGIN
abc<=a&b;
PROCESS(abc)
BEGIN
CASEabcIS
WHEN"00"=>so<='0';co<='0';
WHEN"01"=>so<='1';co<='0';
WHEN"10"=>so<='1';co<='0';
WHEN"11"=>so<='0';co<='1';
WHENOTHERS=>NULL;
ENDCASE;
ENDPROCESS;
ENDARCHITECTUREfh1;
【例4-19】
LIBRARYIEEE;--1位二进制全加器顶层设计描述
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYf_adderIS
PORT(ain,bin,cin:
INSTD_LOGIC;
cout,sum:
OUTSTD_LOGIC);
ENDENTITYf_adder;
ARCHITECTUREfd1OFf_adderIS
COMPONENTh_adder
PORT(a,b:
INSTD_LOGIC;
co,so:
OUTSTD_LOGIC);
ENDCOMPONENT;
COMPONENTor2a
PORT(a,b:
INSTD_LOGIC;
c:
OUTSTD_LOGIC);
ENDCOMPONENT;
SIGNALd,e,f:
STD_LOGIC;
BEGIN
u1:
h_adderPORTMAP(a=>ain,b=>bin,co=>d,so=>e);
u2:
h_adderPORTMAP(a=>e,b=>cin,co=>f,so=>sum);
u3:
or2aPORTMAP(a=>d,b=>f,c=>cout);
ENDARCHITECTUREfd1;
5、多路选择器设计
4选1的多路选择器原理:
实现功能:
当s0s1=00时选择输出y=a;否则当s0s1=01时选择输出y=b;否则当s0s1=10时选择输出y=c;否则选择输出y=d。
ENTITYmux41IS
PORT(a,b,c,d,s0,s1:
INSTD_LOGIC;y:
OUTSTD_LOGIC);
ENDENTITYmux41;
ARCHITECTUREoneOFmux41IS
SIGNALss:
STD_LOGIC_VECTOR(1DOWNTO0);
BEGIN
Process(a,b,c,d,s0,s1)
ss<=s0&s1;
BEGIN
•CASEssIS
•WHEN"00"=>y<=a;
•WHEN"01"=>y<=b;
•WHEN"10"=>y<=c;
•WHEN"11"=>y<=d;
•WHENOTHERS=>NULL;
•ENDCASE;
6、利用QUARTUSⅡ库中元器件D触发器(图形符号见图1)和元件例化,完成如下图所示的电路设计。
LIBRARYieee;
USEieee.std_logic_1164.ALL;
ENTITYshifterIS
PORT(din,clk:
INstd_logic;
dout:
OUTstd_logic);
ENDshifter;
ARCHITECTUREaOFshifterIS
COMPONENTdff
PORT(D,clk:
INstd_logic;
Q:
OUTstd_logic);
ENDCOMPONENT;
SIGNALd:
std_logic_vector(4DOWNTO0);
BEGIN
d(0)<=din;
U0:
dffPORTMAP(D=>d(0),clk=>clk,Q=>d
(1));
U1:
dffPORTMAP(D=>d
(1),clk=>clk,Q=>d
(2));
U2:
dffPORTMAP(D=>d
(2),clk=>clk,Q=>d(3));
U3:
dffPORTMAP(D=>d(3),clk=>clk,Q=>d(4));
dout<=d(4);
ENDa;
6、计数器的设计
【例4-21】
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;--运算符重载函数
ENTITYCNT4IS
PORT(CLK:
INSTD_LOGIC;
Q:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
END;
ARCHITECTUREbhvOFCNT4IS
SIGNALQ1:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(CLK)
BEGIN
IFCLK'EVENTANDCLK='1'THEN
Q1<=Q1+1;
ENDIF;
Q<=Q1;
ENDPROCESS;
ENDbhv;
【例4-20】
ENTITYCNT4IS
PORT(CLK:
INBIT;
Q:
BUFFERINTEGERRANGE15DOWNTO0);
END;
ARCHITECTUREbhvOFCNT4IS
BEGIN
PROCESS(CLK)
BEGIN
IFCLK'EVENTANDCLK='1'THEN
Q<=Q+1;
ENDIF;
ENDPROCESS;
ENDbhv;
带有异步复位和同步使能的10进制计数器
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCNT10IS
PORT(CLK,RST,EN:
INSTD_LOGIC;
CQ:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
COUT:
OUTSTD_LOGIC);
ENDCNT10;
ARCHITECTUREbehavOFCNT10IS
BEGIN
PROCESS(CLK,RST,EN)
VARIABLECQI:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
IFRST='1'THENCQI:
=(OTHERS=>'0');--计数器复位
ELSIFCLK'EVENTANDCLK='1'THEN--检测时钟上升沿
IFEN='1'THEN--检测是否允许计数
IFCQI<"1001"THENCQI:
=CQI+1;--允许计数
ELSECQI:
=(OTHERS=>'0');--大于9,计数值清零
ENDIF;
ENDIF;
ENDIF;
IFCQI="1001"THENCOUT<='1';
--计数大于9,输出进位信号
ELSECOUT<='0';
ENDIF;
CQ<=CQI;--将计数值向端口输出
ENDPROCESS;
ENDbehav;
练习:
1:
设计一个带有异步清零和同步使能端的3位增1/减1计数器:
当输入信号UP等于1时计数器增1;当输入信号UP等于0时计数器减1。
输出为计数后的值及进位信号。
Libraryieee;
Useieee.std_logic_1164.all;
Useieee.std_logic_unsigned.all;
Entityup_downis
Port(clk,rst,en,up:
instd_logic;
Sum:
outstd_logic_vector(2downto0);
Cout:
outstd_logic);
End;
Architectureaofup_downis
Signalcount:
std_logic_vector(2downto0);--定义信号
Begin
Process(clk,rst)--进程,敏感信号
Begin
Ifrst=’0’thenCount<=(others=>’0’);--异步清零
Elsifrising_edge(clk)then--如果上升沿
Ifen=’1’then
Caseupis
When‘1’=>count<=count+1;
Whenothers=>count<=count-1;
Endcase;
Endif;
Endif;
Endprocess;
Sum<=count;
Cout<=’1’whenen=’1’and((up=’1’andcount=7)or(up=’0’andcount=0))
else‘0’;--进位信号
End;
习题:
4.7设计含有异步清零和设计使能的16位二进制加减可控计数器
Libraryieee;
Useieee.std_logic_1164.all;
Useieee.std_logic_unsigned.all;
Entityup_downis
Port(clk,rst,en,up:
instd_logic;
Sum:
outstd_logic_vector(15downto0);
End;
Architectureaofup_downis
Signalcount:
std_logic_vector(15downto0);--定义信号
Begin
Process(clk,rst)--进程,敏感信号
Begin
Ifrst=’0’thencount<=(others=>’0’);--异步清零
Elsifrising_edge(clk)then--如果上升沿
Ifen=’1’then
Caseupis
When‘1’=>count<=count+1;
Whenothers=>count<=count-1;
Endcase;
Endif;
Endif;
Endprocess;
Sum<=count;
End;
练习:
设计一个带有同步并行加载功能的8位右移移位寄存器,其移空位用输入端sda的值来填补。
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYshifterIS
PORT(clk,sda,load:
INSTD_LOGIC;
Din:
instd_logic_vector(7downto0);
QB:
OUTstd_logic_vector(7downto0));
ENDshifter;
ARCHITECTUREbehaveOFshifterIS
SIGNALreg:
std_logic_vector(7downto0);
BEGIN
PROCESS(clk,load)
BEGIN
ifclk’eventandclk=‘1’then
ifloda=‘1’thenreg<=din;
elsereg<=sda&Din(7downto1);
endif;
endif;
endprocess;
QB<=reg;
Endbehav;;
习题4.4
如上图是一个含有上升沿触发的D触发器的时序电路,试写出此电路的VHDL设计文件
练习:
设计一个JK触发器
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYJKff_v1IS
PORT(J,K:
INSTD_LOGIC;
clk:
INSTD_LOGIC;
set:
INSTD_LOGIC;
reset:
INSTD_LOGIC;
Q,QB:
OUTSTD_LOGIC);
ENDJKff_v1;
ARCHITECTUREbehaveOFJKff_v1IS
SIGNALQ_temp,QB_temp:
STD_LOGIC;
BEGIN
PROCESS(clk,set,reset)
BEGIN
IF(set='0'ANDreset='1')THEN
Q_temp<='1';
QB_temp<='0';
ELSIF(set='1'ANDreset='0')THEN
Q_temp<='0';
QB_temp<='1';
ELSIF(clk'EVENTANDclk='1')THEN
IF(J='0'ANDK='1')THEN
Q_temp<='0';
QB_temp<='1';
ELSIF(J='1'ANDK='0')THEN
Q_temp<='1';
QB_temp<='0';
ELSIF(J='1'ANDK='1')THEN
Q_temp<=NOTQ_temp;
QB_temp<=NOTQB_temp;
ENDIF;
ENDIF;
Q<=Q_temp;
QB<=QB_temp;
ENDPROCESS;
ENDbehave;
第六章
1、信号与变量的异同
相同点:
从硬件电路系统来看,变量和信号相当于逻辑电路系统中的连线和连线上的信号值,常量相当于独立中的恒定电平,如GND或者VCC。
区别:
接受与保持信号的方式和信息保持与传递的区域大小上。
例如
信号可以设置传输延迟量,而变量不能;
2、进程中的信号与变量赋值语句
【例6-1】
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYDFF3IS
PORT(CLK,D1:
INSTD_LOGIC;
Q1:
OUTSTD_LOGIC);
END;
ARCHITECTUREbhvOFDFF3IS
BEGIN
PROCESS(CLK)
VARIABLEQQ:
STD_LOGIC;
BEGIN
IFCLK'EVENTANDCLK='1'THEN
QQ:
=D1;
ENDIF;
Q1<=QQ;
ENDPROCESS;
END;
【例6-2】
...
ARCHITECTUREbhvOFDFF3IS
SIGNALQQ:
STD_LOGIC;
BEGIN
PROCESS(CLK)
BEGIN
IFCLK'EVENTANDCLK='1'THEN
QQ<=D1;
ENDIF;
Q1<=QQ;
ENDPROCESS;
END;
例6—8带进位循环左移(8位移位寄存器)
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYSHIFTIS
PORT(CLK,CO:
INSTD_LOGIC;--时钟和进位输入
MD:
INSTD_LOGIC_VECTOR(2DOWNTO0);
--移位模式控制字
D:
INSTD_LOGIC_VECTOR(7DOWNTO0);
--待加载移位的数据
QB:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);
--移位数据输出
CN:
OUTSTA_LOGIC);--进位输出
ENDENTITY;
ARCHITECTUREbehavOFSHIFTIS
SIGNALREG:
STD_LOGIC_VECTOR(7DOWNTO0);
SIGNALCY:
STD_LOGIC;
BEGIN
PROCESS(CLK,MD,CO)
BEGI