一、判断对错(并改正)1、CONSTANTT2:std_logic=’0’;(错)改正:把=换为:=。2、若某变量被定义为数值型变量,未赋初始值时默认值为‘0’。(错)改正:把‘0’的单引号去掉。3、在结构体中定义一个全局变量(VARIABLES),可以在所有进程中使用。(错)改正:“变量(VARIABLES)”改为“信号”。4、语句typewris(wr0,wr1,wr2,wr3,wr4,wr5);定义了一个状态机变量wr,可以直接对wr赋值。(错)改正:语句typewris(wr0,wr1,wr2,wr3,wr4,wr5);定义了一个状态机类型wr,需要定义一个该类型的对象,才可以对该对象赋值。5、进程语句中,不管在何时,process语句后面必须列出敏感信号(×)包含wait语句的进程语句可不列出敏感信号。6、VHDL语言与计算机C语言的没有差别。(×)运行的基础–计算机语言是在CPU+RAM构建的平台上运行–VHDL设计的结果是由具体的逻辑、触发器组成的数字电路执行方式–计算机语言基本上以串行的方式执行–VHDL在总体上是以并行方式工作验证方式–计算机语言主要关注于变量值的变化–VHDL要实现严格的时序逻辑关系7、在结构体中定义一个全局变量(VARIABLES),可以在所有进程中使用。(×)“变量(VARIABLES)”改为“信号”。18、Moore状态机输出只是状态机当前状态的函数,Mealy状态机输出为有限状态机当前值和输入值的函数(√)9、传统的系统硬件设计方法是采用自上而下(topdown)的设计方法,利用硬件描述语言(HDL)的硬件电路设计方法采用自下而上(bottomup)的设计方法。(×)传统的系统硬件设计方法是采用自下而上(bottomup)的设计方法,利用硬件描述语言(HDL)的硬件电路设计方法采用自上而下(topdown)的设计方法10、VHDL可以采用层次化的设计,一个高层的结构体中可以调用低层的实体(√)11、一个VHAL程序中仅能使用一个进程(process)语句。(×)可以使用多个进程语句。12、VHDL语言的预算操作包括了逻辑运算符、关系运算符、乘法运算符等,它们三者的优先级是相同的。(×)逻辑运算符关系运算符乘法运算二.改错题1.已知sel为STD_LOGIC_VECTOR(1DOWNTO0)类型的信号,而a、b、c、d、q均为STD_LOGIC类型的信号,请判断下面给出的CASE语句程序片段:CASEselISWHEN“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;2ENTITYaddISPORT(data_in1,data_in2:ININTEGER;data_out:OUTINTEGER);ENDadd;ARCHTECTUREadd_archOFaddISCONSTANTa:INTEGER=2;BEGINdata_out=(data_in1+data_in2)*a;ENDaddsub_arch;答案:常量声明时赋初值的“=”符号应改用“:=”符号。3.已知Q为STD_LOGIC类型的输出端口,请判断下面的程序片段:ARCHITECTUREtest_archOFtestISBEGINSIGNALB:STD_LOGIC;Q=B;ENDtest_arch答案:信号SIGNAL的声明语句应该放在BEGIN语句之前。4.已知A和Q均为BIT类型的信号,请判断下面的程序片段:ARCHITECTUREarchtestOFtestISBEGINCASEAISWHEN‘0’=Q=‘1’;WHEN‘1’=Q=‘0’;ENDCASE;ENDarchtest;答案:CASE语句应该存在于进程PROCESS内。三.判断改错题(3分×6题)(评分标准:给出正确答案1分/题;答案基本正确0.5分/题。)1.已知A和Q均为BIT类型的信号,请判断下面的程序片断:ARCHITECTUREtestOFtestISBEGINCASEAISWHEN'0'=Q='1';WHEN'1'=Q='0';ENDCASE;3ENDtest;【参考答案】:CASE语句应该存在于进程PROCESS内。2.已知start为STD_LOGIC类型的信号,sum是INTEGER类型的信号,请判断下面的程序片断:PROCESS(start)BEGINFORiIN1TO9LOOPsum:=sum+i;ENDLOOP;ENDPROCESS;【参考答案】:sum是信号,其赋值符号应该由“:=”改为“=”。3.已知Q为STD_LOGIC类型的输出端口,请判断下面的程序片断:ARCHITECTUREtestOFtestISBEGINSIGNALB:STD_LOGIC;Q=B;ENDtest;【参考答案】:信号SIGNAL的申明语句应该放在BEGIN语句之前。4.已知A和B均为STD_LOGIC类型的信号,请判断下面的语句:A='0';B='x';【参考答案】:不定态符号应该由小写的‘x’改为大写的‘X’。5.已知A为INTEGER类型的信号,B为STD_LOGIC类型的信号,请判断下面的程序片断:ARCHITECTUREtestOFtestIS4BEGINB=A;ENDtest;【参考答案】:A和B的数据类型不一致,不能相互赋值。6.已知sel是STD_LOGIC_VECTOR(1DOWNTO0)类型信号,而a、b、c、d、q均为STD_LOGIC类型信号,请判断下面给出的CASE语句:CASEselISWHEN“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;BEGINIFEN=‘1’THENB=A;END;ENDPROCESS;2、RCHITECTUREONEOFSAMPLEISVARIABLEA,B,C:INTEGER;BEGINC=A+B;END;5五、判断下列程序是否有错误,如有则指出错误所在(10分)程序:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYzyt12ISPORT(R,EN,CP:INbit;Q:BUFFERSTD_LOGIC_VECTOR(0DOWNTO3);CO:OUTSTD_LOGIC);ENDzyt;ARCHITECTUREc10OFzyt12BEGINCO='1'WHEN(EN='1'ANDQ=1011)ELSE;'0';PROCESS(R,CP)BEGINIFR='1'THENQ=0000;ELSIF(CP'EVENTANDCP='1')THENIFEN='0'THENQ=Q;ELSIFQ=1011THENQ=‘0000’;ELSEQ:=Q+1;ENDIF;ENDPROCESS;ENDone;六、VHDL程序改错:(10分)01LIBRARYIEEE;02USEIEEE.STD_LOGIC_1164.ALL;03USEIEEE.STD_LOGIC_UNSIGNED.ALL;04ENTITYLED7CNTIS05PORT(CLR:INSTD_LOGIC;06CLK:INSTD_LOGIC;07LED7S:OUTSTD_LOGIC_VECTOR(6DOWNTO0));08ENDLED7CNT;09ARCHITECTUREoneOFLED7CNTIS610SIGNALTMP:STD_LOGIC_VECTOR(3DOWNTO0);11BEGIN12CNTROCESS(CLR,CLK)13BEGIN14IFCLR='1'THEN15TMP=0;16ELSEIFCLK'EVENTANDCLK='1'THEN17TMP=TMP+1;18ENDIF;19ENDPROCESS;20OUTLEDROCESS(TMP)21BEGIN22CASETMPIS23WHEN0000=LED7S=0111111;24WHEN0001=LED7S=0000110;25WHEN0010=LED7S=1011011;26WHEN0011=LED7S=1001111;27WHEN0100=LED7S=1100110;28WHEN0101=LED7S=1101101;29WHEN0110=LED7S=1111101;30WHEN0111=LED7S=0000111;31WHEN1000=LED7S=1111111;32WHEN1001=LED7S=1101111;33WHENOTHERS=LED7S=(OTHERS='0');34ENDCASE;35ENDPROCESS;36ENDone;在程序中存在两处错误,试指出,并说明理由:提示:在MAX+PlusII10.2上编译时报出的第一条错误为:Errorine15:File***/led7cnt.vhd:Typeerror:typeinwaveformelementmustbe“std_logic_vector”第行,错误:改正:第行,错误:改正:7七、判断下列程序是否有错误,如有则指出错误所在,并为以下两个程序配上相应的实体和结构体。(10分)(10分)程序1:ARCHITECTUREoneOFsampleISVARIABLEa,b,c:INTEGER;BEGINC=a+bEND;程序2:signalA,EN:std_logic;process(A,EN)variableB:std_logic;beginifEN=1thenB=A;endif;endprocess;八、判断下列程序是否有错误,如有则指出错误所在,并为以下两个程序配上相应的实体和结构体。程序1:libraryieee;useieee.std_logic_1164.all;ENTITYsampleisport(a,b:ininteger;c:outinteger);endsample;architectureoneofsampleisbeginc=a+b;endone;程序2:ENTITYsample1isport(a,en:instd_logic;b:outstd_logic);endsample1;8architectureoneofsample1isbeginprocess(A,EN)beginifEN='1'thenB=A;endif;endprocess;endone;九、程序改错题(仔细阅读下列程序后回答问题,12分)1LIBRARYIEEE;2USEIEEE.STD_LOGIC_1164.ALL;3USEIEEE.STD_LOGIC_UNSIGNED.ALL;4ENTITYgcIS5PORT(CLK:INSTD_LOGIC;6Q:OUTSTD_LOGIC_VECTOR(3DOWNTO0));7ENDgc;8ARCHITECTUREbhvOFgcIS9SIGNALQ1:RANGE0TO9;10BEGIN11PROCESS