EDA程序题文档格式.docx
- 文档编号:20557813
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:52
- 大小:198.26KB
EDA程序题文档格式.docx
《EDA程序题文档格式.docx》由会员分享,可在线阅读,更多相关《EDA程序题文档格式.docx(52页珍藏版)》请在冰豆网上搜索。
=tc;
endif;
Tc<
=ainxortb;
Endone;
1.设计一个3-8译码器
输入端口:
din输入端,位宽为3位
EN译码器输出使能,高电平有效
输出端口:
xout译码器输出,低电平有效
ENTITYDECODE3_8IS
PORT(DIN:
INSTD_LOGIC_VECTOR(2DOWNTO0);
EN:
XOUT:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDDECODE3_8;
ARCHITECTUREONEOFDECODE3_8IS
PROCESS(DIN,EN)
IFEN=‘1’THEN
IFDIN=“111”THENXOUT<
=“11111110”;
ELSIFDIN=“110”THENXOUT<
=“11111101”;
ELSIFDIN=“101”THENXOUT<
=“11111011”;
ELSIFDIN=“100”THENXOUT<
=“11110111”;
ELSIFDIN=“011”THENXOUT<
=“11101111”;
ELSIFDIN=“010”THENXOUT<
=“11011111”;
ELSIFDIN=“001”THENXOUT<
=“10111111”;
ELSEXOUT<
ENDONE;
LIBARRYIEEE;
ENTITYMYCIRIS
PORT(XIN,CLK:
YOUT:
OUTSTD_LOGIC);
ARCHITECTUREONEOFMYCIRIS
SIGNALA,B,C;
B<
=XINORA;
PROCESS(CLK)
A<
=C;
=B;
YOUT<
根据原理图写出相应的VHDL程序:
(10分)
Port(A,B,clk:
Qout:
Architecturebehaveofmyciris
Signalta,tb,tc:
std_logic;
Begin
tc<
=tanandtb;
Process(clk)
Begin
Ta<
Tb<
Endif;
Process(clk,tc)
Ifclk=‘1’then
Qout<
=c;
Endbehave;
已知一个简单的波形发生器的数字部分系统框图如下图所示:
图中DOWNCNT、MYROM都是在QuartusII中使用MegaWizard调用的LPM模块,其VHDL描述中Entity部分分别如下:
ENTITYDOWNCNTIS
PORT
(
clock:
INSTD_LOGIC;
q:
OUTSTD_LOGIC_VECTOR(5DOWNTO0)
);
ENDDOWNCNT;
ENTITYmyromIS
address:
INSTD_LOGIC_VECTOR(5DOWNTO0);
OUTSTD_LOGIC_VECTOR(7DOWNTO0)
ENDmyrom;
试用VHDL描述该系统的顶层设计(使用例化语句)。
Entitymysgis
Port(clk:
To_da:
outstd_logic_vector(7downto0));
Endmysq;
Architectureoneofmysqis
Signaladdr:
std_logic_vector(5downto0);
Componentlcnt
Port(clock:
Q:
outstd_logic_vector(5downto0));
Endcomponent;
Componentlrom
Port(address:
instd_logic_vector(5downto0);
Q:
U1:
lcntportmap(clock=>
clk,q=>
addr);
U2:
lromportmap(address=>
addr,q=>
to_da);
(15分)
Port(din,clk:
Signala,b,c;
Qout<
=cnand(axorb);
=din;
四、VHDL程序改错:
仔细阅读下列程序,回答问题
1LIBRARYIEEE;
2USEIEEE.STD_LOGIC_1164.ALL;
3
4ENTITYCNT4IS
5PORT(CLK:
6Q:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
7ENDCNT4;
8ARCHITECTUREbhvOFCNT4IS
9SIGNALQ1:
STD_LOGIC_VECTOR(3DOWNTO0);
10BEGIN
11PROCESS(CLK)BEGIN
12IFRISING_EDGE(CLK)begin
13IFQ1<
15THEN
14Q1<
=Q1+1;
15ELSE
16Q1<
=(OTHERS=>
'
0'
);
17ENDIF;
18ENDIF;
19ENDPROCESS;
20Q<
=Q1;
21ENDbhv;
22
1.在程序中存在两处错误,试指出,并说明理由:
12行,IF语句对应的关键字是then而非begin
14行,Q1是矢量,不能直接和整数1相加,需要使用重载函数
2.修改相应行的程序(如果是缺少语句请指出大致的行数):
错误1行号:
12程序改为:
BEGIN改为THEN
错误2行号:
3程序改为:
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
01LIBRARYIEEE;
02USEIEEE.STD_LOGIC_1164.ALL;
03USEIEEE.STD_LOGIC_UNSIGNED.ALL;
04ENTITYLED7CNTIS
05PORT(CLR:
06CLK:
07LED7S:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
08ENDLED7CNT;
09ARCHITECTUREoneOFLED7CNTIS
10SIGNALTMP:
11BEGIN
12CNT:
PROCESS(CLR,CLK)
13BEGIN
14IFCLR='
1'
THEN
15TMP<
=0;
16ELSEIFCLK'
EVENTANDCLK='
17TMP<
=TMP+1;
18ENDIF;
19ENDPROCESS;
20OUTLED:
PROCESS(TMP)
21BEGIN
22CASETMPIS
23WHEN"
0000"
=>
LED7S<
="
0111111"
;
24WHEN"
0001"
0000110"
25WHEN"
0010"
1011011"
26WHEN"
0011"
1001111"
27WHEN"
0100"
1100110"
28WHEN"
0101"
1101101"
29WHEN"
0110"
1111101"
30WHEN"
0111"
0000111"
31WHEN"
1000"
1111111"
32WHEN"
1001"
1101111"
33WHENOTHERS=>
34ENDCASE;
35ENDPROCESS;
36ENDone;
在程序中存在两处错误,试指出,并说明理由:
第15行,错误:
整数0不能直接赋值给TMP矢量;
改正:
TMP<
‘0’);
第16行,错误:
ELSEIF缺少一条对应的ENDIF语句;
将ELSEIF改为关键字ELSIF
4ENTITYCNT10IS
7ENDCNT10;
8ARCHITECTUREbhvOFCNT10IS
9THEN
指出并修改相应行的程序(如果是缺少语句请指出大致的行数):
12程序改为:
IFRISING_EDGE(CLK)THEN
3程序改为:
12行if语句配套关键字是then而非begin
3行程序中使用了+号重载函数,应包含使用对应程序包ieee.std_logic_unsigned.all
2.若编译时出现如下错误,请分析原因。
当前编译的程序文件没有放在指定文件夹内,所以系统找不到WORK工作库。
下面程序是一个10线-4线优先编码器的VHDL描述,试补充完整。
LIBRARYIEEE;
ENTITYcoderIS
PORT(din:
INSTD_LOGIC_VECTOR(9DOWNTO0);
output:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDcoder;
ARCHITECTUREbehavOFCODERIS
SIGNALSIN:
PROCESS(DIN)
IF(din(9)='
)THENSIN<
ELSIF(din(8)=’0’)THENSIN<
ELSIF(din(7)='
ELSIF(din(6)='
ELSIF(din(5)='
ELSIF(din(4)='
ELSIF(din(3)='
ELSIF(din
(2)='
ELSIF(din
(1)='
ELSESIN<
=“0000”;
ENDIF;
ENDPROCESS;
Output<
=sin;
ENDbehav;
--8位分频器程序设计
ENTITYPULSEIS
PORT(CLK:
D:
INSTD_LOGIC_VECTOR(7DOWNTO0);
FOUT:
END;
ARCHITECTUREoneOFPULSEIS
SIGNALFULL:
P_REG:
PROCESS(CLK)
VARIABLECNT8:
STD_LOGIC_VECTOR(7DOWNTO0);
IFCNT8="
11111111"
THEN
CNT8:
=D;
--当CNT8计数计满时,输入数据D被同步预置给计数器CNT8
FULL<
='
;
--同时使溢出标志信号FULL输出为高电平
ELSECNT8:
=CNT8+1;
--否则继续作加1计数
FULL<
--且输出溢出标志信号FULL为低电平
ENDIF;
ENDPROCESSP_REG;
P_DIV:
PROCESS(FULL)
VARIABLECNT2:
IFFULL'
EVENTANDFULL='
CNT2<
=NOTCNT2;
--如果溢出标志信号FULL为高电平,D触发器输出取反
IFCNT2='
THENFOUT<
ELSEFOUT<
ENDPROCESSP_DIV;
下面程序是参数可定制带计数使能异步复位计数器的VHDL描述,试补充完整。
libraryieee;
useIEEE.std_logic_1164.all;
useIEEE.std_logic_unsigned.all;
useIEEE.std_logic_arith.all;
entitycounter_nis
generic(width:
integer:
=8);
port(data:
instd_logic_vector(width-1downto0);
load,en,clk,rst:
q:
outstd_logic_vector(width-1downto0));
endcounter_n;
architecturebehaveofcounteris
signalcount:
std_logic_vector(width-1downto0);
process(clk,rst)
begin
ifrst='
then
count<
=(others=>
――清零
elsifclk’eventandclk=‘1’then――边沿检测
ifload='
count<
=data;
elsifen='
=count+1;
endif;
endprocess;
q<
=count;
endbehave;
阅读下列VHDL程序,画出相应原理图(3道题)
ENTITYTRISIS
PORT(CONTROL:
INN:
Q:
INOUTSTD_LOGIC;
Y:
ENDTRIS;
ARCHITECTUREONEOFTRISIS
PROCESS(CONTROL,INN,Q)
IF(CONTROL='
)THEN
Y<
=Q;
Q<
Z'
ELSE
=INN;
ENTITYthreeIS
clk,d:
dout:
ARCHITECTUREbhvOFthreeIS
SIGNALtmp:
P1:
PROCESS(clk)
IFrising_edge(clk)THEN
Tmp<
=d;
dout<
=tmp;
ENDIF;
ENDPROCESSP1;
ENDbhv;
useieee.std_logic_1164.all;
entitylfsris
port(clk:
clr:
d:
mout:
endlfsr;
architecturertloflfsris
signalsreg:
shift_p:
process(clk,clr)
variables:
begin
ifclr='
thens:
=’0’;
elsifrising_edge(clk)then
s:
=sregxor(notd);
sreg<
=s;
mout<
=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 程序
![提示](https://static.bdocx.com/images/bang_tan.gif)