EDA程序改错题.docx

上传人:b****5 文档编号:14363796 上传时间:2023-06-22 格式:DOCX 页数:13 大小:17.66KB
下载 相关 举报
EDA程序改错题.docx_第1页
第1页 / 共13页
EDA程序改错题.docx_第2页
第2页 / 共13页
EDA程序改错题.docx_第3页
第3页 / 共13页
EDA程序改错题.docx_第4页
第4页 / 共13页
EDA程序改错题.docx_第5页
第5页 / 共13页
EDA程序改错题.docx_第6页
第6页 / 共13页
EDA程序改错题.docx_第7页
第7页 / 共13页
EDA程序改错题.docx_第8页
第8页 / 共13页
EDA程序改错题.docx_第9页
第9页 / 共13页
EDA程序改错题.docx_第10页
第10页 / 共13页
EDA程序改错题.docx_第11页
第11页 / 共13页
EDA程序改错题.docx_第12页
第12页 / 共13页
EDA程序改错题.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

EDA程序改错题.docx

《EDA程序改错题.docx》由会员分享,可在线阅读,更多相关《EDA程序改错题.docx(13页珍藏版)》请在冰点文库上搜索。

EDA程序改错题.docx

EDA程序改错题

程序改错题

1.已知sel为STD_LOGIC_VECTOR(1DOWNTO0)类型的信号,而a、b、c、d、q均为STD_LOGIC类型的信号,请判断下面给出的CASE语句程序片段:

●CASEselIS

●WHEN“00”=>q<=a;

●WHEN“01”=>q<=b;

●WHEN“10”=>q<=c;

●WHEN“11”=>q<=d;

●ENDCASE;

●答案:

CASE语句缺“WHENOTHERS”语句。

2.已知data_in1,data_in2为STD_LOGIC_VECTOR(15DOWNTO0)类型的输入端口,data_out为STD_LOGIC_VECTOR(15DOWNTO0)类型的输出端口,add_sub为STD_LOGIC类型的输入端口,请判断下面给出的程序片段:

●LIBRARYIEEE;

●USEIEEE.STD_LOGIC_1164.ALL;

●ENTITYaddIS

●PORT(data_in1,data_in2:

ININTEGER;

●data_out:

OUTINTEGER);

●ENDadd;

●ARCHTECTUREadd_archOFaddIS

●CONSTANTa:

INTEGER<=2;

●BEGIN

●data_out<=(data_in1+data_in2)*a;

●ENDaddsub_arch;

答案:

常量声明时赋初值的“<=”符号应改用“:

=”符号。

3.已知Q为STD_LOGIC类型的输出端口,请判断下面的程序片段:

●ARCHITECTUREtest_archOFtestIS

●BEGIN

●SIGNALB:

STD_LOGIC;

●Q<=B;

ENDtest_arch

答案:

信号SIGNAL的声明语句应该放在BEGIN语句之前。

4.已知A和Q均为BIT类型的信号,请判断下面的程序片段:

●ARCHITECTUREarchtestOFtestIS

●BEGIN

●CASEAIS

●WHEN‘0’=>Q<=‘1’;

●WHEN‘1’=>Q<=‘0’;

●ENDCASE;

●ENDarchtest;

答案:

CASE语句应该存在于进程PROCESS内。

三.判断改错题(3分×6题)(评分标准:

给出正确答案1分/题;答案基本正确0.5分/题。

1.已知A和Q均为BIT类型的信号,请判断下面的程序片断:

ARCHITECTUREtestOFtestIS

BEGIN

CASEAIS

WHEN'0'=>Q<='1';

WHEN'1'=>Q<='0';

ENDCASE;

ENDtest;

【参考答案】:

CASE语句应该存在于进程PROCESS内。

2.已知start为STD_LOGIC类型的信号,sum是INTEGER类型的信号,请判断下面的程序片断:

PROCESS(start)

BEGIN

FORiIN1TO9LOOP

sum:

=sum+i;

ENDLOOP;

ENDPROCESS;

【参考答案】:

sum是信号,其赋值符号应该由“:

=”改为“<=”。

3.已知Q为STD_LOGIC类型的输出端口,请判断下面的程序片断:

ARCHITECTUREtestOFtestIS

BEGIN

SIGNALB:

STD_LOGIC;

Q<=B;

ENDtest;

【参考答案】:

信号SIGNAL的申明语句应该放在BEGIN语句之前。

4.已知A和B均为STD_LOGIC类型的信号,请判断下面的语句:

A<='0';

B<='x';

【参考答案】:

不定态符号应该由小写的‘x’改为大写的‘X’。

5.已知A为INTEGER类型的信号,B为STD_LOGIC类型的信号,请判断下面的程序片断:

ARCHITECTUREtestOFtestIS

BEGIN

B<=A;

ENDtest;

【参考答案】:

A和B的数据类型不一致,不能相互赋值。

6.已知sel是STD_LOGIC_VECTOR(1DOWNTO0)类型信号,而a、b、c、d、q均为STD_LOGIC类型信号,请判断下面给出的CASE语句:

CASEselIS

WHEN“00”=>q<=a;

WHEN“01”=>q<=b;

WHEN“10”=>q<=c;

WHEN“11”=>q<=d;

ENDCASE;

【参考答案】:

CASE语句缺“WHENOTHERS”语句。

四、判断下面程序中是否有错误,若有错误请改正;

1、SIGNALA,EN:

STD_LOGIC;

PROCESS(A,EN)

VARIABLEB:

STD_LOGIC;

BEGIN

IFEN=‘1’THEN

B<=A;

END;

ENDPROCESS;

2、RCHITECTUREONEOFSAMPLEIS

VARIABLEA,B,C:

INTEGER;

BEGIN

C<=A+B;

END;

五、判断下列程序是否有错误,如有则指出错误所在(10分)

程序:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYzyt12IS

PORT(R,EN,CP:

INbit;

Q:

BUFFERSTD_LOGIC_VECTOR(0DOWNTO3);

CO:

OUTSTD_LOGIC);

ENDzyt;

ARCHITECTUREc10OFzyt12

BEGIN

CO<='1'WHEN(EN='1'ANDQ="1011")ELSE;

'0';

PROCESS(R,CP)

BEGIN

IFR='1'THEN

Q<="0000";

ELSIF(CP'EVENTANDCP<='1')THEN

IFEN='0'THEN

Q<=Q;

ELSIFQ="1011"THEN

Q<=‘0000’;

ELSE

Q:

=Q+1;

ENDIF;

ENDPROCESS;

ENDone;

仔细阅读下列程序,回答问题

LIBRARYIEEE;--1

USEIEEE.STD_LOGIC_1164.ALL;--2

ENTITYLED7SEGIS--3

PORT(A:

INSTD_LOGIC_VECTOR(3DOWNTO0);--4

CLK:

INSTD_LOGIC;--5

LED7S:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));--6

ENDLED7SEG;--7

ARCHITECTUREoneOFLED7SEGIS--8

SIGNALTMP:

STD_LOGIC;--9

BEGIN--10

SYNC:

PROCESS(CLK,A)--11

BEGIN--12

IFCLK'EVENTANDCLK='1'THEN--13

TMP<=A;--14

ENDIF;--15

ENDPROCESS;--16

OUTLED:

PROCESS(TMP)--17

BEGIN--18

CASETMPIS--19

WHEN"0000"=>LED7S<="0111111";--20

WHEN"0001"=>LED7S<="0000110";--21

WHEN"0010"=>LED7S<="1011011";--22

WHEN"0011"=>LED7S<="1001111";--23

WHEN"0100"=>LED7S<="1100110";--24

WHEN"0101"=>LED7S<="1101101";--25

WHEN"0110"=>LED7S<="1111101";--26

WHEN"0111"=>LED7S<="0000111";--27

WHEN"1000"=>LED7S<="1111111";--28

WHEN"1001"=>LED7S<="1101111";--29

ENDCASE;--30

ENDPROCESS;--31

ENDone;--32

1.在程序中存在两处错误,试指出,并说明理由:

第14行TMP附值错误

第29与30行之间,缺少WHENOTHERS语句

2.修改相应行的程序:

错误1行号:

9程序改为:

TMP:

STD_LOGIC_VECTOR(3DOWNTO0);

错误2行号:

29程序改为:

该语句后添加WHENOTHERS=>LED7S<="0000000

1、LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

 USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCNT4BIS

PORT(CLK,RST,ENA:

INSTD_LOGIC;

OUTY:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

COUT:

OUTSTD_LOGIC);

ENDCNT4B;

ARCHITECTUREbehavOFCNT4BIS

SIGNALCQI:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

PROCESS(CLK,RST,ENA)

BEGIN

IFRST='1'THENCQI<='0000';       "0000"

ELSIFCLK'EVENTANDCLK='1'THEN

IFENA="1"THENCQI<=CQI+1;       '1'

ELSECQI<="0000";

ENDIF;                     ENDIF;

OUTY<=CQI;

ENDPROCESS;

COUT<=CQI(0)ANDCQI

(1)ANDCQI

(2)ANDCQI(3);

ENDbehav;

2、LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCLK_6DIS

PORT(CLK,RST:

INSTD_LOGIC;

CLK_OUT:

OUTSTD_LOGIC);

ENDCLK_6D;

ARCHITECTUREONEOFCLK_6DIS

VARIABLETEMP:

STD_LOGIC;SIGNAL

BEGIN

PROCESS(CLK)

VARIABLECNT6D:

INTEGERRANGE0TO3;

CONSTANTSIGN:

INTEGER:

=2;

BEGIN

IF(RST=“1”)THENTEMP<=“0”;    '1','0'

ELSIFCLK'EVENTANDCLK='1'THEN  (CLK'EVENTANDCLK='1')

IF(CNT6D=SIGN)THEN

CNT6D:

=0;

TEMP<=NOTTEMP;

ELSECNT6D:

=CNT6D+1;

ENDIF;

ENDIF;

ENDPROCESS;

CLK_OUT<=TEMP;

ENDONE;

3、libraryieee;

useieee.std_logic_1164.all;

entityencoderis

port(b:

instd_logic(7downto0);b:

instd_logic_vector(7downto0)

y:

outstd_logic(2downto0));y:

outstd_logic_vector(2downto0)

endencoder;

architectureoneofencoderis

begin

process(b)

begin

casebis

when"01111111"=>y<="111";

when

when

when

when

when

when

when

whenothers=>null;

endcase;

endprocess;

endone;

4、LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYcounterIS

PORT(reset:

INSTD_LOGIC;

clock:

INSTD_LOGIC;

num:

bufferintegerrange0to3;多一个“;”

);

END;

ARCHITECTUREbehavOFjishuISjishu改为counter

Begin

Process(reset,clock)

Begin

Ifreset=’1’then

num<=0;

Elsifrising_edge(clock)then

Ifnum=3then

num<=0;

else

num<=num+1;

                     少endif;

endif;

endprocess;

end;

5、LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED;    STD_LOGIC_UNSIGNED.ALL

ENTITYLX3_2IS

PORT(CLK,CLR,OE:

INBIT;

D:

INSTD_LOGIC_VECTOR(7DOWNTO0);

Q:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDLX3_2;

ARCHITECTUREstrucOFLX3_2IS

VARIABLEQ_TEMP:

STD_LOGIC_VECTOR(7DOWNTO0);   SIGNAL

BEGIN

PROCESS(CLR)          PROCESS(CLK)

BEGIN

IFCLR='0'THENQ_TEMP<='00000000';   "00000000"

ELSIFCLK='1'THEN

Q_TEMP<=D;

ELSEQ_TEMP<=Q_TEMP;

ENDIF;

ENDPROCESS;

Q<=Q_TEMPWHENOE='1'ELSE

"ZZZZZZZZ";

                         ENDstruc;

6、LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED;    USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYLX3_2IS

PORT(A:

INSTD_LOGIC_VECTOR(3DOWNTO0);

B:

INSTD_LOGIC(3DOWNTO0);    STD_LOGIC_VECTOR

GT,LT,EQ:

OUTSTD_LOGIC);

ENDLX3_2;

ARCHITECTUREoneOFLX8_2IS         LX3_2

BEGIN

PROCESS(A,B)

BEGIN

GT<='0';

LT<='0';

EQ<='0';

IFA>BTHENGT<=”0”;       '0'

ELSIFA

ELSEEQ<=”0”;       '0'

ENDIF;

ENDPROCESS;

ENDone;

1、在程序中存在两处错误,试指出,并说明理由:

错误1原因:

case顺序语句必须放在进程语句Process内。

程序改为:

process(A)

begin

caseAis

错误2原因:

还有存在其他组合的可能。

程序改为:

whenothers=>null;

附:

自动化123江西理工大学王显聪

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2