EDA期末复习资料 2文档格式.docx
《EDA期末复习资料 2文档格式.docx》由会员分享,可在线阅读,更多相关《EDA期末复习资料 2文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
二、VHDL程序填空
1.下面程序是1位十进制计数器的VHDL描述,试补充完整。
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCNT10IS
PORT(CLK:
INSTD_LOGIC;
Q:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDCNT10;
ARCHITECTUREbhvOFCNT10IS
SIGNALQ1:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(CLK)
BEGIN
IFCLK'
EVENTANDCLK='
1'
THEN--边沿检测
IFQ1>
10THEN
Q1<
=(OTHERS=>
'
0'
);
--置零
ELSE
=Q1+1;
--加1
ENDIF;
ENDIF;
ENDPROCESS;
Q<
=Q1;
ENDbhv;
2.下面是一个多路选择器的VHDL描述,试补充完整。
ENTITYbmuxIS
PORT(sel:
INSTD_LOGIC;
A,B:
INSTD_LOGIC_VECTOR(7DOWNTO0);
Y:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDbmux;
ARCHITECTUREbhvOFbmuxIS
y<
=Awhensel='
ELSE
B;
三、VHDL程序改错
仔细阅读下列程序,回答问题
--1
--2
ENTITYLED7SEGIS--3
PORT(A:
INSTD_LOGIC_VECTOR(3DOWNTO0);
--4
CLK:
--5
LED7S:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
--6
ENDLED7SEG;
--7
ARCHITECTUREoneOFLED7SEGIS--8
SIGNALTMP:
STD_LOGIC;
--9
BEGIN--10
SYNC:
PROCESS(CLK,A)--11
BEGIN--12
THEN--13
TMP<
=A;
--14
--15
ENDPROCESS;
--16
OUTLED:
PROCESS(TMP)--17
BEGIN--18
CASETMPIS--19
WHEN"
0000"
=>
LED7S<
="
0111111"
;
--20
0001"
0000110"
--21
0010"
1011011"
--22
0011"
1001111"
--23
0100"
1100110"
--24
0101"
1101101"
--25
0110"
1111101"
--26
0111"
0000111"
--27
1000"
1111111"
--28
1001"
1101111"
--29
ENDCASE;
--30
--31
ENDone;
--32
1.在程序中存在两处错误,试指出,并说明理由:
第14行TMP附值错误
第29与30行之间,缺少WHENOTHERS语句
2.修改相应行的程序:
错误1行号:
9程序改为:
TMP:
错误2行号:
29程序改为:
该语句后添加WHENOTHERS=>
0000000"
四、阅读下列VHDL程序,画出原理图(RTL级)
ENTITYHADIS
PORT(a:
b:
c:
OUTSTD_LOGIC;
d:
OUTSTD_LOGIC
);
ENDENTITYHAD;
ARCHITECTUREfh1OFHADIS
c<
=NOT(aNANDb);
d<
=(aORb)AND(aNANDb);
ENDARCHITECTUREfh1;
五、请按题中要求写出相应VHDL程序
1.带计数使能的异步复位计数器
输入端口:
clk时钟信号
rst异步复位信号
en计数使能
load同步装载
data(装载)数据输入,位宽为10
输出端口:
q计数输出,位宽为10
ENTITYCNT1024IS
PORT(CLK,RST,EN,LOAD:
DATA:
INSTD_LOGIC_VECTOR(9DOWNTO0);
Q:
OUTSTD_LOGIC_VECTOR(9DOWNTO0));
ENDCNT1024;
ARCHITECTUREONEOFCNT1024IS
PROCESS(CLK,RST,EN,LOAD,DATA)
VARIABLEQ1:
STD_LOGIC_VECTOR(9DOWNTO0);
IFRST='
THEN
Q1:
ELSIFCLK='
ANDCLK'
EVENTTHEN
IFLOAD='
THEN
Q1:
=DATA;
IFEN='
Q1:
=Q1+1;
ENDIF;
Q<
ENDONE;
2.
看下面原理图,写出相应VHDL描述
ENTITYTRI_STATEIS
PORT(E,A:
INOUTSTD_LOGIC;
B:
OUTSTD_LOGIC);
ENDTRI_STATE;
ARCHITECTUREBEHAVOFTRI_STATEIS
PROCESS(E,A,Y)
IFE='
B<
=Y;
Y<
='
Z'
ELSE
ENDBEHAV;
六、综合题
下图是一个A/D采集系统的部分,要求设计其中的FPGA采集控制模块,该模块由三个部分构成:
控制器(Control)、地址计数器(addrcnt)、内嵌双口RAM(adram)。
控制器(control)是一个状态机,完成AD574的控制,和adram的写入操作。
Adram是一个LPM_RAM_DP单元,在wren为’1’时允许写入数据。
试分别回答问题
下面列出了AD574的控制方式和控制时序图
AD574逻辑控制真值表(X表示任意)
CE
CS
RC
K12_8
A0
工作状态
X
禁止
1
启动12位转换
启动8位转换
12位并行输出有效
高8位并行输出有效
低4位加上尾随4个0有效
AD574工作时序:
1.要求AD574工作在12位转换模式,K12_8、A0在control中如何设置
K12_8为‘1’,A0为‘0’
2.试画出control的状态机的状态图
类似书上图8-4
3.对地址计数器模块进行VHDL描述
clkinc计数脉冲
cntclr计数器清零
rdaddrRAM读出地址,位宽10位
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityaddr_cntis
port(clkinc,cntclr:
instd_logic;
wraddr:
outstd_logic_vector(9downto0));
endaddr_cnt;
architectureoneofaddr_cntis
signaltmp:
std_logic_vector(9downto0);
begin
process(clkinc,cntclr)
begin
ifclkinc'
eventandclkinc='
then
ifcntclr='
tmp<
=(others=>
else
=tmp+1;
endif;
endif;
endprocess;
wraddr<
=tmp;
endone;
4.根据状态图,试对control进行VHDL描述
entitycontrolis
port(addata:
instd_logic_vector(11downto0);
status,clk:
cs,ce,a0,rc,k12_8,clkinc:
outstd_logic;
rddata:
outstd_logic_vector(11downto0));
endcontrol;
architecturebehavofcontrolis
typecon_stis(s0,s1,s2,s3,s4);
signalcst,nst:
con_st;
signallock:
std_logic;
signalreg12:
std_logic_vector(11downto0);
a0<
k12_8<
ce<
cs<
REGP:
process(clk)
ifclk'
eventandclk='
cst<
=nst;
COMP:
process(cst,status,addata)
case(cst)is
whens0=>
rc<
lock<
nst<
=s1;
whens1=>
=s2;
whens2=>
ifstatus='
thennst<
=s3;
endif;
rc<
whens3=>
=s4;
whens4=>
=s0;
whenothers=>
endcase;
LOCKP:
process(lock)
iflock='
andlock'
eventthen
reg12<
=addata;
rddata<
=reg12;
clkinc<
=lock;
--(或者为NOTLOCK,延后半个时钟)
endbehav;
5.已知adram的端口描述如下
ENTITYadramIS
PORT
(
data:
INSTD_LOGIC_VECTOR(11DOWNTO0);
--写入数据
wraddress:
--写入地址
rdaddress:
--读地址
wren:
INSTD_LOGIC:
--写使能
q:
OUTSTD_LOGIC_VECTOR(11DOWNTO0)--读出数据
);
ENDadram;
试用例化语句,对整个FPGA采集控制模块进行VHDL描述
entitydacois
port(clk,cntclr,status:
addata:
rdaddr:
instd_logic_vector(9downto0);
cs,ce,a0,rc,k12_8:
enddaco;
architectureoneofdacois
componentcontrolis
port(addata:
status,clk:
cs,ce,a0,rc,k12_8,clkinc:
rddata:
endcomponent;
componentaddr_cntis
port(clkinc,cntclr:
wraddr:
componentadramIS
PORT
(
data:
wraddress:
rdaddress:
wren:
q:
);
ENDcomponent;
signalrds:
signalclkinc:
signalwraddr:
u1:
controlportmap(addata=>
addata,status=>
status,
clk=>
clk,cs=>
cs,ce=>
ce,a0=>
a0,rc=>
rc,
k12_8=>
k12_8,clkinc=>
clkinc,rddata=>
rds);
u2:
addr_cntportmap(clkinc=>
clkinc,cntclr=>
cntclr,wraddr=>
wraddr);
u3:
adramportmap(data=>
rds,wraddress=>
wraddr,
rdaddress=>
rdaddr,wren=>
q=>
rddata);