1、l LIBRARY IEEE;l USE IEEE、STD_LOGIC_1164、ALL;l ENTITY add ISl PORT(data_in1, data_in2:IN INTEGER;l data_out:OUT INTEGER);l END add; l ARCHTECTURE add_arch OF add ISl CONSTANT a:INTEGER=2;l BEGINl data_out=( data_in1+ data_in2)* a;l END addsub_arch;答案:常量声明时赋初值的“=”符号应改用“:=”符号。3、 已知Q为STD_LOGIC类型的输出端口,请
2、判断下面的程序片段:l ARCHITECTURE test_arch OF test ISl BEGINl SIGNAL B:STD_LOGIC;l QQ=0;l END archtest;CASE语句应该存在于进程PROCESS内。三、 判断改错题(3分6题)(评分标准:给出正确答案1分/题;答案基本正确0、5分/题。)1、已知A和Q均为BIT类型的信号,请判断下面的程序片断:ARCHITECTURE test OF test IS BEGIN CASE A IS WHEN 0 = Q = 0 ; END CASE ; END test ; 【参考答案】XXXXX:2、 已知start为ST
3、D_LOGIC类型的信号,sum是INTEGER类型的信号,请判断下面的程序片断:PROCESS (start)BEGIN FOR i IN1 TO9 LOOP sum := sum + i ; END LOOP ; END PROCESS ;sum是信号,其赋值符号应该由“:=”改为“=”。3、 已知Q为STD_LOGIC类型的输出端口,请判断下面的程序片断:ARCHITECTURE test OF test IS BEGIN SIGNAL B :STD_LOGIC ;= B ;信号SIGNAL的申明语句应该放在BEGIN语句之前。4、 已知A和B均为STD_LOGIC类型的信号,请判断下面
4、的语句:A B = x ;不定态符号应该由小写的x改为大写的X。5、 已知A为INTEGER类型的信号,B为STD_LOGIC类型的信号,请判断下面的程序片断:ARCHITECTURE test OF test IS BEGIN B q = b ; WHEN “10” = c ; WHEN “11” = d ;四、判断下面程序中是否有错误,若有错误请改正;1、SIGNAL A,EN:STD_LOGIC;PROCESS(A,EN)VARIABLE B:BEGIN IF EN=1 THEN B=A;END ;END PROCESS;2、 RCHITECTURE ONE OF SLE ISVARIA
5、BLE A,B,C:INTEGER;BEGIN C=A+B;五、判断下列程序是否有错误,如有则指出错误所在(10分)程序:LIBRARY IEEE;USE IEEE、STD_LOGIC_1164、ALL;USE IEEE、STD_LOGIC_ARITH、ALL;USE IEEE、STD_LOGIC_UNSIGNED、ALL;ENTITY zyt12 IS PORT(R,EN,CP: IN bit; Q: BUFFER STD_LOGIC_VECTOR(0 DOWNTO3); CO: OUT STD_LOGIC);END zyt;ARCHITECTURE c10 OF zyt12 BEGIN C
6、O=1 WHEN(EN=1 AND Q=1ELSE; 0; PROCESS(R,CP)BEGIN IF R=1 THEN Q=0000; ELSIF (CPEVENT AND CP=1)THEN IF EN=0 THEN Q=Q; ELSIF Q= THEN Q=0000; ELSE Q:=Q+1; END IF; END PROCESS; END one;六、VHDL程序改错:(10分)01 LIBRARY IEEE ;02 USE IEEE、STD_LOGIC_1164、ALL ;03 USE IEEE、STD_LOGIC_UNSIGNE04 ENTITY LED7CNT IS05 POR
7、T ( CLR : INSTD_LOGIC;06 CLK : IN STD_LOGIC;07 LED7S : OUT STD_LOGIC_VECTOR(6 DOWNTO 0)08 END LED7CNT; 09 ARCHITECTURE one OF LED7CNT IS10 SIGNAL TMP : STD_LOGIC_VECTOR(3 DOWNTO 0);11 BEGIN12 CNTROCESS(CLR,CLK)13 BEGIN14 IF CLR =1 THEN15 TMP = 0;16 ELSE IF CLKEVENT AND CLK =1 THEN17 TMP LED7S = (OTH
8、ERS = 0);34 END CASE;35 END PROCESS;36 END one; 在程序中存在两处错误,试指出,并说明理由:提示:在MAX+PlusII10、2上编译时报出的第一条错误为:Errorine15: File */led7cnt、vhd: Type error: type in waveform element must be “std_logic_vector”第 行, 错误:改正:第 行, 错误:七、判断下列程序是否有错误,如有则指出错误所在,并为以下两个程序配上相应的实体和结构体。(10分)(10分)程序1:ARCHITECTURE one OF sle IS
9、VARIABLE a,b,c:INTEGER;BEGINC=a+bEND;程序2:signal A,EN: std_logic;process(A,EN)variable B:beginif EN=1 then Bend if;end process;八、判断下列程序是否有错误,如有则指出错误所在,并为以下两个程序配上相应的实体和结构体。程序1:library ieee; use ieee、std_logic_1164、all;ENTITY sle is port(a,b:in integer; c:out integer); end sle;architecture one of sle i
10、s begin c=a+b; end one;ENTITY sle1 is port(a,en:in std_logic; b:out std_logic); end sle1;architecture one of sle1 is beginprocess(A,EN)beginif EN=1 then Bend one;九、程序改错题(仔细阅读下列程序后回答问题,12分)1 LIBRARY IEEE;2 USE IEEE、STD_LOGIC_113 USE IEEE、STD_LOGIC_UNSIGNE4 ENTITY gc IS5 PORT ( CLK : IN STD_LOGIC ;6 Q
11、 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)7 END gc;8 ARCHITECTURE bhv OF gc IS9 SIGNAL Q1 : RANGE 0 TO9;10 BEGIN11 PROCESS (clk,Q)12 BEGIN13 IF RISING_EDGE(CLK)THEN14 IF Q1 THEN15 Q1 = Q1 +1 ;16 ELSE17 Q1 19 END IF;20 END PROCESS ;21 Q out1 当value取时END CASE;程序段2:ARCHITECTURE bad OF ex ISSIGNAL a_vect: STD_
12、LOGIC_VECTOR(2 DOWNTO 0);SIGNAL b_vect:BEGIN0&a=b;END;程序段3:IF sel =1 THENC = “01”;ELSIF John =”100” THENC=”10”;ELSE c=”00”;ELSE C=”11”;END IF;第2题:判断下列VHDL标识符是否合法,如果有误则指出原因。(1)_Decoder_1;(2)2FFT;(3)Sig_#N;(4)RyY_RsT_;(5)data_ _BUS;第3题:下面的赋值语句执行之后矢量a ,b将分别得到什么值?ARCHITECTURE rtl OF ex IS SIGNAL a, b: S
13、TD_LOGIC_VECTOR (4 downto 0);SIGNAL c: STD)LOGIC_VECTOR (0 to2);BEGIN a 0,2=1,4=1, others=b(4);a的第一赋值为0,二四位赋值为1,其他位(0,3位)赋值为b的第四位0,其结果为00b 1,2=0,3=1,others=c(1); b的第0三位赋值为1,第二位赋值为0,其他位(1,4位)赋值为c的第一位0,结果为01001c =1 ; WHEN1 to5 = 0 ; WHEN7 to15 = NULL ; END CASE;ENTITY case_ex ISPORT(a: IN STD_LOGIC_VE
14、CTOR(4 DOWNTO 0);q:out STD_LOGIC_VECTOR(2 DOWNTO 0);ARCHITECTURE rtl OF case_ex ISBEGINP1:PROCESS(a)BEGINCASE a ISWHEN “00000” = ”011”;WHEN ”00001” TO “11110”= q= ”000”;END CASE;IF sel =”11” THEN IF td =1 THENC=“01”;ELSIF td =0 THENC ddIF sel =”01” THENC IF sel =”10” THENCARCHITECTURE bad OF ex ISSI
15、GNAL a:BIT_VECTOR(2 DOWNTO 0);SIGNAL b:BIT_LOGIC_VECTOR(2 DOWNTO1);BEGINa S_out ARCHITECTURE bhv OF ex ISSIGNAL a:STD_LOGIC_VECTOR(4 DOWNTO 0);STD_LOGIC_VECTOR(0 TO4); STD_LOGIC;BEGINa =”1”;b (4)=c;b (0 TO3)=a (3 DOWNTO 0);IF a =1 THENC = “111”;ELSIF b =”100” THENC=”110”;=”010”;四、VHDL程序改错:仔细阅读下列程序,回
16、答问题1LIBRARY IEEE;2USE IEEE、STD_LOGIC_1134ENTITY CNT10 IS5 PORT ( CLK :7END CNT10;8ARCHITECTURE bhv OF CNT10 IS9 SIGNAL Q1 :10BEGIN11 PROCESS (CLK)BEGIN12 IF RISING_EDGE(CLK)begin13 IF Q1 9 THEN14 Q1 15 ELSE16 Q1 17 END IF;19 END PROCESS ;20 Q 21END bhv;1、在MAX+PlusII中编译时,提示的第一条错误为: Line12:myworktestc
17、nt10、vhd: If statement must have THEN, but found BEGIN instead指出并修改相应行的程序(如果是缺少语句请指出大致的行数):错误1行号:程序改为:错误2行号:2、 若编译时出现如下错误,请分析原因。五、VHDL程序改错:本题程序为EDA实验中的示例程序sch、vhd,仔细阅读程序,回答问题。1、对该程序进行编译时出现错误提示:“VHDL Design File “sch” must contain an entity of the same name、”这是什么原因?如何修改?2、修改问题1的错误后,如果编译时出现“Cant open
18、VHDL “WORK” ”这样的错误提示。这又是什么原因,如何修改?-1use ieee、std_logic_11-2entity schk is-3port (din, clk, clr: in std_logic;- 串行输入数据位/工作时钟/复位信号-4ab: out std_logic_vector(3 downto 0)- 检测结果输出-5);-6end schk;-7architecture bhv of schk is-8signal q : integer range 0 to8;-9signal d : std_logic_vector(7 downto 0);-8位待检测预置数-10begin-11d = -8位待检测预置数-12process (clk, clr)-13begin-14if clr =1 then q if din = d(7)then q else q if din = d(6)=2;-19when2 = if din = d(5)=3;-20when3 = if din = d(4)=4;-21whe
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1