EDA程序改错题

EDA程序改错题
EDA程序改错题

E D A程序改错题 Prepared on 24 November 2020

程序改错题

1.已知sel为STD_LOGIC_VECTOR(1 DOWNTO 0)类型的信号,而a、b、c、

d、q均为STD_LOGIC类型的信号,请判断下面给出的CASE语句程序片段:

●CASE sel IS

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

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

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

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

●END CASE;

●答案:CASE语句缺“WHEN OTHERS”语句。

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

●LIBRARY IEEE;

●USE ;

●ENTITY add IS

● PORT(data_in1, data_in2:IN INTEGER;

● data_out:OUT INTEGER);

●END add;

●ARCHTECTURE add_arch OF add IS

●CONSTANT a:INTEGER<=2;

●BEGIN

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

●END addsub_arch;

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

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

●ARCHITECTURE test_arch OF test IS

●BEGIN

●SIGNAL B:STD_LOGIC;

●Q<= B;

END test_arch

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

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

●ARCHITECTURE archtest OF test IS

●BEGIN

●CASE A IS

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

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

●END CASE;

●END archtest;

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

三.判断改错题(3分×6题)(评分标准:给出正确答案1分/题;答案基本正确分/题。)

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

ARCHITECTURE test OF test IS

BEGIN

CASE A IS

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

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

END CASE ;

END test ;

【参考答案】: CASE语句应该存在于进程PROCESS内。

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

PROCESS (start)

BEGIN

FOR i IN 1 TO 9 LOOP

sum := sum + i ;

END LOOP ;

END PROCESS ;

【参考答案】: sum是信号,其赋值符号应该由“:=”改为“<=”。

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

ARCHITECTURE test OF test IS

BEGIN

SIGNAL B :STD_LOGIC ;

Q <= B ;

END test ;

【参考答案】:信号SIGNAL的申明语句应该放在BEGIN语句之前。

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

A <= '0' ;

B <= 'x' ;

【参考答案】:不定态符号应该由小写的‘x’改为大写的‘X’。

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

ARCHITECTURE test OF test IS

BEGIN

B <= A ;

END test ;

【参考答案】: A和B的数据类型不一致,不能相互赋值。

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

CASE sel IS

WHEN “00” => q <= a ;

WHEN “01” => q <= b ;

WHEN “10” => q <= c ;

WHEN “11” => q <= d ;

END CASE ;

【参考答案】: CASE语句缺“WHEN OTHERS”语句。

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

1、SIGNAL A,EN:STD_LOGIC;

PROCESS(A,EN)

VARIABLE B:STD_LOGIC;

BEGIN

IF EN=‘1’ THEN

B<=A;

END ;

END PROCESS;

2、RCHITECTURE ONE OF SAMPLE IS

VARIABLE A,B,C:INTEGER;

BEGIN

C<=A+B;

END ;

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

LIBRARY IEEE;

USE zyt12 IS

PORT(R,EN,CP: IN bit;

Q: BUFFER STD_LOGIC_VECTOR(0 DOWNTO 3);

CO: OUT STD_LOGIC);

END zyt;

ARCHITECTURE c10 OF zyt12

BEGIN

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

'0';

PROCESS(R,CP)

BEGIN

IF R='1' THEN

Q<="0000";

ELSIF (CP'EVENT AND CP<='1') THEN

IF EN='0' THEN

Q<=Q;

ELSIF Q="1011" THEN

Q<=‘0000’;

ELSE

Q:=Q+1;

END IF;

END PROCESS;

END one;

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

LIBRARY IEEE;

-- 1

USE -- 2

ENTITY LED7SEG IS

-- 3

PORT ( A : IN STD_LOGIC_VECTOR(3 DOWNTO 0);

-- 4

CLK : IN STD_LOGIC;

-- 5

LED7S : OUT STD_LOGIC_VECTOR(6 DOWNTO 0));

-- 6

END LED7SEG;

-- 7

ARCHITECTURE one OF LED7SEG IS

-- 8

SIGNAL TMP : STD_LOGIC;

-- 9

BEGIN

-- 10

SYNC : PROCESS(CLK, A)

-- 11

BEGIN

-- 12

IF CLK'EVENT AND CLK = '1' THEN

-- 13

TMP <= A;

-- 14

END IF;

-- 15

END PROCESS;

-- 16

OUTLED : PROCESS(TMP)

-- 17

BEGIN

-- 18

CASE TMP IS

-- 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

END CASE;

-- 30

END PROCESS;

-- 31

END one;

-- 32

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

第14行 TMP附值错误

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

2.修改相应行的程序:

错误1 行号:9程序改为:

TMP : STD_LOGIC_VECTOR(3 DOWNTO 0);

错误2 行号: 29 程序改为:

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

1、LIBRARY IEEE;

USE

USE ENTITY CNT4B ISPORT (CLK,RST,ENA: IN STD_LOGIC;OUTY : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT : OUT STD_LOGIC );END CNT4B; ARCHITECTURE behav OF CNT4B IS

SIGNAL CQI : STD_LOGIC_VECTOR(3 DOWNTO 0);

BEGIN

PROCESS(CLK, RST, ENA)

BEGIN

IF RST = '1' THEN CQI <= '0000';"0000" ELSIF CLK'EVENT AND CLK = '1' THEN

IF ENA = "1" THEN CQI <= CQI + 1;'1'

ELSE CQI <= "0000";

END IF;END IF; OUTY <= CQI ;

END PROCESS;

COUT<=CQI(0) AND CQI(1) AND CQI(2) AND CQI(3);

END behav;

2、LIBRARY IEEE;

USE

USE

USE CLK_6D ISPORT (CLK,RST: IN STD_LOGIC; CLK_OUT: OUT STD_LOGIC);END CLK_6D;

ARCHITECTURE ONE OF CLK_6D IS

VARIABLE TEMP:STD_LOGIC; SIGNAL

BEGIN

PROCESS(CLK)

VARIABLE CNT6D: INTEGER RANGE 0 TO 3;

CONSTANT SIGN: INTEGER:=2;

BEGIN

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

ELSIF CLK'EVENT AND CLK='1' THEN (CLK'EVENT AND CLK='1') IF (CNT6D = SIGN) THEN

CNT6D := 0;

TEMP <= NOT TEMP;

ELSE CNT6D := CNT6D+1;

END IF;

END IF;

END PROCESS;

CLK_OUT <= TEMP;

END ONE;

3、library ieee;

use encoder is

port(b: in std_logic(7 downto 0);b:in std_logic_vector(7 downto 0)

y: out std_logic(2 downto 0)); y:out std_logic_vector(2 downto 0)end encoder;

architecture one of encoder is

begin

process (b)

begin

case b is

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

when others => null;

end case;

end process;

end one;

4、LIBRARY IEEE;

USE

ENTITY counter IS

PORT ( reset: IN STD_LOGIC;

clock: IN STD_LOGIC;

num: buffer integer range 0 to 3;多一个“;” ); END; ARCHITECTURE behav OF jishu IS jishu改为 counter Begin

Process(reset,clock)

Begin

If reset=’1’ then

num<=0;

Elsif rising_edge(clock) then

If num=3 then

num<=0;

else

num<=num+1;

少end if;end if;end process;end;

5、LIBRARY IEEE;

USE

USE ;

ENTITY LX3_2 IS

PORT(CLK,CLR,OE:IN BIT;

D:IN STD_LOGIC_VECTOR(7 DOWNTO 0);

Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));

END LX3_2;

ARCHITECTURE struc OF LX3_2 IS

VARIABLE Q_TEMP:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL

BEGIN

PROCESS(CLR) PROCESS(CLK)

BEGIN

IF CLR='0' THEN Q_TEMP<='00000000';"00000000"

ELSIF CLK='1' THEN

Q_TEMP<=D;

ELSE Q_TEMP<=Q_TEMP;

END IF;

END PROCESS;

Q<=Q_TEMP WHEN OE='1' ELSE

"ZZZZZZZZ";

END struc;

6、LIBRARY IEEE;

USE

USE ;USE

ENTITY LX3_2 IS

PORT( A :IN STD_LOGIC_VECTOR(3 DOWNTO 0);

B :IN STD_LOGIC(3 DOWNTO 0);STD_LOGIC_VECTOR

GT,LT,EQ: OUT STD_LOGIC);

END LX3_2;

ARCHITECTURE one OF LX8_2 IS LX3_2

BEGIN

PROCESS(A,B)

BEGIN

GT<='0';

LT<='0';

EQ<='0';

IF A>B THEN GT<=”0”;'0'

ELSIF A

ELSE EQ<=”0”;'0'

END IF;

END PROCESS;END one;

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

错误1原因:case顺序语句必须放在进程语句Process内。程序改为:process(A)

begin

case A is

错误2原因:还有存在其他组合的可能。

程序改为: when others => null;

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

相关主题