EDA考点缩印版2.docx
《EDA考点缩印版2.docx》由会员分享,可在线阅读,更多相关《EDA考点缩印版2.docx(15页珍藏版)》请在冰豆网上搜索。
EDA考点缩印版2
27、VHDL文本输入设计法初步
答:
(1)编辑输入并保存VHDL源文件:
为工程设计建立文件夹,输入设计项目和存盘
(2)将当前设计设定为工程和选定目标器件(3)选择VHDL文本编译版本号和排错(4)时序仿真:
建立波形文件,输入信号节点,设置波形参量,为输入信号加上激励电平并存盘,运行仿真器并观察分析波形(5)设计项目的其他信息和资源配置(6)锁定引脚(7)编程下载和测试(8)设计流程归纳:
MAX+plus设计流程,步骤1:
建立文件夹;步骤2:
输入设计项目原理图/VHDL代码;步骤3:
存盘,注意原理图/文本取名;步骤4:
将设计项目设计成project;步骤5:
选择目标器件;步骤6:
启动编译;步骤7建立仿真波形文件;步骤8:
仿真测试和波形分析;步骤9引脚锁定并编译;步骤10:
编程下载/配置;步骤11:
硬件测试。
28、信号
信号的赋值需要有一个δ延时;在进程中所有赋值语句都必须在一个δ延时中完成;当在进程中存在同一个信号有多少个赋值源时,实际完成赋值。
29、用户自定义数据类型定义语句
由用户定义的数据类型有很多,如枚举类型enumerationtype、整数类型intergertype、数组类型arraytype、记录类型recordtype、时间类型timetype、实数类型realtype等。
用户自定义数据类型是用类型定义语句type和子类型定义语句subtype实现的。
30、一般有限状态机的设计
用VHDL设计的状态机有多种形式,从状态机的信号输出方式上分有mealy型和moore型;从结构上分有单进程和多进程状态机;从状态表达方式上分有符号化状态机和确定状态编码的状态机;从编码方式上分有顺序编码状态机、一位热码编码状态机或其他编码方式状态机。
但是一般常用的状态机通常包含说明部分、主控时序进程、组空组合进程、辅助进程几个部分。
31、Mealy型有限状态机
与moore型相比,mealy机的输出变化要领先一个周期,即一旦输入信号或状态发生变化,输出信号即可发生变化。
Mealy机的组合进程中的输出信号是当前状态和当前输入的函数。
32、双向端口设计注意答:
A,在IF语句中,输出信号都有了完整的叙述才能构成组合电路;B,端口模式应采用INOUT;C,使用(描述)端口的输入特性时,要将输出设为高阻态。
33、三态
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYtri_sIS
port(enable:
INSTD_LOGIC;
datain:
INSTD_LOGIC_VECTOR(7DOWNTO0);
dataout:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDtri_s;
ARCHITECTUREbhvOFtri_sIS
BEGIN
PROCESS(enable,datain)
BEGIN
IFenable='1'THENdataout<=datain;
ELSEdataout<="ZZZZZZZZ";
ENDIF;
ENDPROCESS;
ENDbhv;
带有并行置位的
ARCHITECTUREbehavOFSHFRTIS
BEGIN
PROCESS(CLK,LOAD)
VARIABLEREG8:
STD_LOGIC_VECTOR(7DOWNTO0);
BEGIN
IFCLK'EVENTANDCLK='1'THEN
IFLOAD='1'THEN--装载新数据
REG8:
=DIN;ELSE
REG8(6DOWNTO0):
=REG8(7DOWNTO1);
ENDIF;ENDIF;
QB<=REG8(0);
ENDPROCESS;--输出最低位
ENDbehav;
34、半加器:
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;
35、7种基本逻辑操作符,AND,OR,NAND,NOR,XOR(异或)XNOR(同或),NOT。
数据对象:
信号SIGNAL,变量VERIABLE,常量CONSTANT信号属性:
ENENT,LAST_VALUE
文件具体取名最好与文件实体名相同,后缀为.vhd表示为VHDL文件,后缀为.tdf表示为AHDL文件,后缀为.v表示Verilog文件。
波形文件名后缀.scf。
采用原理图输入设计的文件后缀为.gdf.
36、变量:
变量是一个局部量,只能在进程和子程序中使用。
变量不能将信息带出对它做出定义的当前结构。
变量的赋值是一种理想化的数据传输,是立即发生的,不存在任何延时行为。
变量的主要作用是在进程中作为临时的数据存储单元。
信号:
信号是描述硬件系统的基本数据对象,其性质类似于连接线;可作为设计实体中并行语句模块间的信息交流通道。
信号不但可以容纳当前值,也可以保持历史值;与触发器的记忆功能有很好的对应关系。
37、两类延时:
传输延时、固有延时也称为惯性延时,固有延时的主要物理机制是分布电容效应。
传输延时并不考虑信号持续的时间,他仅仅表示信号传输推迟或延迟了一个时间段,即传输延时。
38、仿真δ:
VHDL仿真器和综合器自动为系统中的信号赋值配置一足够小而又能满足逻辑排序的延时量,即仿真软件的最小分辨时间,称为δ延时。
在行为仿真、功能仿真综合中,引入δ延时是必需的。
39、原理图输入设计方法配备了各种需要的元件库,其中包含基本逻辑元件库(如与非门、反相器、D触发器等)、宏功能原件(包含了几乎74系列的器件),以及类似于IP核的宏功能块LMP库。
40、异步复位:
与clk时钟信号无关。
同步清零:
只有时钟沿来时控制信号才有效。
41、在VHDL程序设计中,常用的库有IEEE,标准库std,工作库work。
42、在IEEE库中,较常用的程序包有std_logic_1164std_logic_arith,std_logic_unsigned,standard,textio.
43、VHDL程序一般包括几个组成部分,每部分的作
用是什么?
有两大部分组成:
实体:
描述了电路器件的外部情况及个信号端口的基本性质。
结构体:
负责描述电路器件的内部逻辑功能或电路结构。
44、状态机的基本结构如何?
状态机的种类有哪些?
组合逻辑部分和寄存器部分。
寄存器部分存储状态机内部状态;组合逻辑部分又分为状态译码器和输出译码器。
分为mealy和moore。
45、变量通常在进程中定义,信号在结构体中定义。
46、process语句由三个部分组成,进程说明语句、顺序描述语句和敏感信号参数表。
47、D触发器
libraryieee;
useieee.std_logic_1164.all;
entitydffis
port(d,clk:
instd_logic;q:
outstd_logic);
end;
architecturebhvofdffis
signalq1:
std_logic;
begin
process(sd,rd,clk)
begin
ifclk'eventandclk='1'thenq1<=d;
endif;
endprocess;
q<=q1;nq<=notq1;
endbhv;
或非门
libraryieee;
useieee.std_logic_1164.all;
entityfor2ais
PORT(t,y:
INSTD_LOGIC;m:
OUTSTD_LOGIC);
END;
ARCHITECTUREfh1OFfor2ais
Begin
m<=not(tory);
End;
顶层描述
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYfigureIS
PORT(a,d,clk:
INSTD_LOGIC;qq:
OUTSTD_LOGIC);
END;
ARCHITECTUREFd1OFfigureIS
COMPOENT
dffis
port(d,clk:
instd_logic;q:
outstd_logic);
ENDCOMPONENT;
COMPONENTfor2ais
PORT(t,y:
INSTD_LOGIC;m:
OUTSTD_LOGIC);
ENDCOMPONENT;
SIGNALp,e,f:
STD_LOGIC;
BNGIN
u1:
for2aPORTMAP(t=>a,y=>f,m=>p);
u2:
dffPORTMAP(d=>p,clk=>clk,q=>e);
u3:
dffPORTMAP(d=>d,clk=>e,q=>f);
qq<=f;
ENDARCHITECTUREfd1;
48、进程要点
对进行进程的设计要注意:
process为一无限循环语句;process中的顺序语句具有明显的顺序/并行运行双重性;进程必须有敏感信号的变化来启动;进程语句本身是并行语句;信号是多个进程的通信线;一个进程中只允许描述对应于一个时钟信号的同步时序逻辑。
49、带有复位和时钟使能的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');
ENDIF;ENDIF;ENDIF;
IFCQI=“1001”THENCOUT<=‘1’;
ELSECOUT<='0';
ENDIF;
CQ<=CQI;
ENDPROCESS;
ENDbehav;
50、用VHDL描述一个具有计数使能、异步复位和计数器并行预置功能的16位加法计数器。
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityt74ls161is
port(clr,ld,en,clk:
instd_logic;
q:
outstd_logic_vector(15downto0);
p:
instd_logic_vector(15downto0));
endt74ls161;
architecturearchoft74ls161is
signalm:
std_logic_vector(15downto0);
begin
process(clr,ld,en,clk)
begin
if(clr='0')thenm<=(others=>’0’);
elsif(ld='0')thenm<=p;
elsif(clk'eventandclk='1')thenif(en=’1’)then
m<=m+1;
endif;
endif;
q<=m;
endprocess;endarch;
51、用VHDL设计2位全减器电路,要求首先设计个1位全减器,然后用元件例化语句设计2位全减器。
一位全减器
LIBRaryieee;
useieee.std_logic_1164.all;
entitysuberis
port(a,b,c:
instd_logic;
dout,sub:
outstd_logic);
endsuber;
architecturearchofsuberis
signals:
std_logic_vector(2downto0);
begin
s<=c&b&a;
process(s)
begin
casesis
when"000"=>dout<='0';sub<='0';
when"001"=>dout<='1';sub<='0';
when"010"=>dout<='1';sub<='1';
when"011"=>dout<='0';sub<='0';
when"100"=>dout<='1';sub<='1';
when"101"=>dout<='0';sub<='0';
when"110"=>dout<='0';sub<='1';
when"111"=>dout<='1';sub<='1';
whenothers=>null;
endcase;endprocess;endarch;
2位全减器
LIBRaryieee;
useieee.std_logic_1164.all;
entityfullsuberis
port(x,y:
instd_logic_vector(1downto0);
sin:
instd_logic;
dout1:
outstd_logic_vector(1downto0);
sub1:
outstd_logic);
endfullsuber;
architecturearchoffullsuberis
componentsuber
port(a,b,c:
instd_logic;
dout,sub:
outstd_logic);
endcomponent;
signale:
std_logic;
begin
u1:
suberportmap(a=>x(0),b=>y(0),
c=>sin,dout=>dout1(0),sub=>e);
u2:
suberportmap(a=>x
(1),b=>y
(1),
c=>e,dout=>dout1
(1),sub=>sub1);
endarch;
52、带异步复位的D触发器
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYDFF4IS
PORT(CLK:
INSTD_LOGIC;
clr,D:
INSTD_LOGIC;
Q:
OUTSTD_LOGIC);
ENDDFF4;
ARCHITECTUREbhvOFDFF1IS
BEGIN
PROCESS(CLK,clr)
BEGIN
ifclr=‘0’thenQ<=‘0’;
elsifCLK'EVENTANDCLK='1'
THENQ<=D;
ENDIF;
ENDPROCESS;
ENDbhv;
53、带有并行置位的移位寄存器
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYSHFRTIS
PORT(CLK,LOAD:
INSTD_LOGIC;
DIN:
INSTD_LOGIC_VECTOR(7DOWNTO0);QB:
OUTSTD_LOGIC);
ENDSHFRT;
ARCHITECTUREbehavOFSHFRTIS
BEGIN
PROCESS(CLK,LOAD)
VARIABLEREG8:
STD_LOGIC_VECTOR(7DOWNTO0);
BEGIN
IFCLK'EVENTANDCLK='1'THEN
IFLOAD='1'THENREG8:
=DIN;
ELSEREG8(6DOWNTO0):
=REG8(7DOWNTO1);
ENDIF;
ENDIF;
QB<=REG8(0);
ENDPROCESS;
ENDbehav;
54、1位2进制全加器
LIBRARYIEEE;
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_adder
PORTMAP(a=>ain,b=>bin,co=>d,so=>e);
u2:
h_adder
PORTMAP(a=>e,b=>cin,co=>f,so=>sum);
u3:
or2aPORTMAP(a=>d,b=>f,c=>cout);
ENDARCHITECTUREfd1;
55、状态编码
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYAD574AIS
PORT(D:
INSTD_LOGIC_VECTOR(11DOWNTO0);CLK,STATUS:
INSTD_LOGIC;
OUT4:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
Q:
OUTSTD_LOGIC_VECTOR(11DOWNTO0));
ENDAD574A;
ARCHITECTUREbehavOFAD574AIS
SIGNALcurrent_state,next_state:
STD_LOGIC_VECTOR(4DOWNTO0);
CONSTANTst0:
STD_LOGIC_VECTOR(4DOWNTO0):
="11100";
CONSTANTst1:
STD_LOGIC_VECTOR(4DOWNTO0):
="00001";
CONSTANTst2:
STD_LOGIC_VECTOR(4DOWNTO0):
="00000";
CONSTANTst3:
STD_LOGIC_VECTOR(4DOWNTO0):
="00100";
CONSTANTst4:
STD_LOGIC_VECTOR(4DOWNTO0):
="00110";
SIGNALREGL:
STD_LOGIC_VECTOR(11DOWNTO0);
SIGNALLK:
STD_LOGIC;
BEGIN
COM1:
PROCESS(current_state,STATUS)
BEGIN
CASEcurrent_stateIS
WHENst0=>next_state<=st1;
WHENst1=>next_state<=st2;
WHENst2=>IF(STATUS='1')THENnext_state<=st2;
ELSEnext_state<=st3;
ENDIF;
WHENst3=>next_state<=st4;
WHENst4=>next_state<=st0;
WHENOTHERS=>next_state<=st0;
ENDCASE;
OUT4<=current_state(4DOWNTO1);
ENDPROCESSCOM1;
REG:
PROCESS(CLK)
BEGIN
IF(CLK'EVENTANDCLK='1')THENcurrent_state<=next_state;
ENDIF;
ENDPROCESSREG;
LK<=current_state
(1);
LATCH1:
PROCESS(LK)
BEGIN
IFLK='1'ANDLK'EVENTTHEN
REGL<=D;
ENDIF;
ENDPROCESS;
Q<=REGL;
ENDbehav;