一、 判断对错(并改正)
1、CONSTANT T2:std_logic <= ?0?; ( 错 ) 改正:把<= 换为 := 。
2、若某变量被定义为数值型变量,未赋初始值时默认值为‘0’。 ( 错 ) 改正:把‘0’的单引号去掉。
3、在结构体中定义一个全局变量(VARIABLES),可以在所有进程中使用。 ( 错 ) 改正:“变量(VARIABLES)”改为“信号”。
4、语句 type wr is (wr0,wr1,wr2,wr3,wr4,wr5); 定义了一个状态机变量wr,
可以直接对wr赋值。
( 错 ) 改正:语句 type wr is (wr0,wr1,wr2,wr3,wr4,wr5); 定义了一个状态机类型wr,需要定义一个该类型的对象,才可以对该对象赋值。
5、进程语句中,不管在何时,process语句后面必须列出敏感信号 ( × )
包含wait语句的进程语句可不列出敏感信号。
6、VHDL语言与计算机 C语言的没有差别。 ( × )
? 运行的基础
– 计算机语言是在CPU+RAM构建的平台上运行
– VHDL设计的结果是由具体的逻辑、触发器组成的数字电路
? 执行方式
– 计算机语言基本上以串行的方式执行 – VHDL在总体上是以并行方式工作
? 验证方式
– 计算机语言主要关注于变量值的变化 – VHDL要实现严格的时序逻辑关系
7、在结构体中定义一个全局变量(VARIABLES),可以在所有进程中使用。 ( × )
“变量(VARIABLES)”改为“信号”。
8、Moore状态机输出只是状态机当前状态的函数,Mealy状态机输出为有限状态机当前值和输入值的函数
9、传统的系统硬件设计方法是采用自上而下(top down)的设计方法,利用硬件描述语言(HDL)的硬件电路设计方法采用自下而上(bottom up)的设计方法。 ( × ) 传统的系统硬件设计方法是采用自下而上(bottom up)的设计方法,利用硬件描述语言(HDL)的硬件电路设计方法采用自上而下(top down)的设计方法
10、VHDL可以采用层次化的设计,一个高层的结构体中可以调用低层的实体 ( √ )
11、一个VHAL程序中仅能使用一个进程(process)语句。 ( × )
可以使用多个进程语句。
12、VHDL语言的预算操作包括了逻辑运算符、关系运算符、乘法运算符等,它们三者的优先级是相同的。 ( × )
逻辑运算符<关系运算符<乘法运算
二.改错题
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 IEEE.STD_LOGIC_1164.ALL;
( √ )
1
? 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分/题;答案基本正确0.5分/题。)
1. 已知A和Q均为BIT类型的信号,请判断下面的程序片断: ARCHITECTURE test OF test IS BEGIN CASE A IS
WHEN '0' => Q <= '1' ; WHEN '1' => Q <= '0' ;
END CASE ;
2
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
3
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 ;
4