eda与vhdl复习资料 下载本文

选择题练习

一、VHDL基本结构

1. 一个项目的输入输出端口是定义在

A. 实体中 B. 结构体中 C. 任何位置 D. 进程中

2. 描述项目逻辑功能的是

A. 实体 B. 结构体 C. 配置 D. 进程

3. 关键字ARCHITECTURE定义的是 A. 结构体 B. 进程 C. 实体 D. 配置

4.VHDL语言共支持四种常用库,其中哪种库是用户的VHDL设计现行工作库: A.IEEE库 B.VITAL库

C.STD库 D.WORK工作库 5. VHDL语言是一种结构化设计语言;一个设计实体(电路模块)包括实体与结构体两部分,结构体描述是 A.器件外部特性; B.器件的内部功能; C.器件的综合约束;

D.器件外部特性与内部功能。

6. 在VHDL中,库可以包含一个或多个 A. 程序包 B. 结构体 C. 输入 D. 输出

7. 一个能为VHDL综合器接受,并能作为一个独立的设计单元的完整的VHDL程序成为 A. 设计输入 B. 设计输出 C. 设计实体 D. 设计结构

8. Q为输出信号,但内部设计会用到其反馈信号,其正确的端口说明是:

A. Q:IN BIT; B. Q:OUT BIT; C. Q:INOUT BIT; D. Q:BUFFER BIT;

9.VHDL语言程序结构的特点是把一个设计实体分成 A.外部和内部 B.实体和实体说明

C.结构体和结构体说明 D.图形部分和文本部分

10. VHDL设计文件的实体说明部分描述的是 A.电路系统的内部结构 B.电路系统的逻辑功能 C.电路系统的主要参数 D.电路系统的外部端口

11.VHDL语言程序结构中必不可少的部分是:

A.库 B.程序包 C.配置 D.实体和结构体

12. 下列选项中,哪些项在VHDL程序设计文件中属于可选部分 A.库和实体 B.实体和结构体 C.结构体和配置 D. 库、程序包和配置

13. 关于VHDL中实体说明的格式,以下叙述不正确的是

A.实体说明以“ENTITY 实体名 IS”开头,以“END 实体名”结束 B.实体说明中包含类属表和端口说明两部分 C.端口说明中只需要规定端口的模式即可 D.实体名一定要与设计文件同名

14. 在VHDL的实体说明中,端口名表的作用是 A.列出所有输入端口的名称 B.列出所有输出端口的名称

C.说明实体输入、输出端口的信号类型及端口模式 D.只定义输入、输出端口的数目

15. 在VHDL中,为了使已声明的数据类型、子程序、元件能被其他设计实体调用或共享,可以把它们汇集在 中。

A.设计实体 B.配置 C.结构体 D.库和程序包

16.在包含多个结构体的VHDL程序中,必须使用 来选择用于综合和仿真的结构体。 A.If语句 B.Case语句 C.Configuration语句 D.While语句

17.在VHDL的端口声明语句中,用 声明端口为双向方向 A.IN B.OUT C.INOUT D.BUFFER

18. 类属说明的正确格式是:

A.GENERIC(delay:TIME=20us); B.GENERIC(delay:TIME:=20us); C.GENERIC(delay TIME=20us); D.GENERIC(delay=TIME:=20us);

19. VHDL的设计实体可以被高层次的系统 ,成为系统的一部分 A.输入 B.输出 C.仿真 D.调用

20.VHDL常用的库是( )标准库

A.IEEE B.STD C.WORK D.PACKAGE

21.VHDL的实体声明部分用来指定设计单元的

A.输入端口 B.输出端口 C.引脚 D.以上均可

22.以下关于VHDL中的程序包,说法错误的是

A.程序包可定义一些子程序、常量和用户数据类型,供多个设计实体共享 B.用户只能使用VHDL预定义的标准程序包,不能由用户自己定义程序包 C.程序包由程序包声明单元和程序包体单元两部分构成

D.在实体中引用一个程序包的格式为:Use 库名.程序包名.项目名;

23.在VHDL中,为了使已声明的数据类型、子程序、元件能被其他设计实体调用或共享,可以把它们汇集在 中。

A.设计实体 B.程序库 C.结构体 D.程序包

24.如果信号a定义为标准逻辑矢量,要使a<=a+1;语句合法,则需要打开下面哪些程序包

① std_logic_1164 ② std_logic_unsigned ③ std_logic_arith ④ std_logic_signed

A. ①和② B. ②和③ C.①和③ D. ②和③

二、VHDL基本语法

(一) 标识符

1. 1987标准的VHDL语言对大小写是 A. 敏感的 B. 只能用小写 C. 只能用大写 D. 不敏感

2. 关于1987标准的VHDL语言中,对标识符描述正确的是 A. 必须以英文字母开头 B. 可以使用汉字开头 C. 可以使用数字开头 D. 任何字符都可以

3. 1987标准的VHDL语言中,对合法的标识符描述不正确的是 A. 下划线不能用在开头 B. 下划线不能连用 C. 不能使用下划线 D. 下划线不能用在结尾

4. 符合1987标准VHDL的标识符是 A. A_2 B. A+2 C. 2A D. 22

5. 符合1987VHDL标准的标识符是 A. a_2_3 B. a__ ___2 C. 2_2_a D. 2a

6. 不符合1987标准VHDL的标识符是 A. a_1_in B. a_in_2 C. 2_a D. asd_1

7. 不符合1987 标准VHDL的标识符是 A. a2b2 B. a1b1 C. ad12 D. P

8. 下列标识符中, 是不合法的标识符。

A. State0 B. 9moon C. Not_Ack_0 D. signall

9. 在VHDL的IEEE标准库中,预定义的标准逻辑位STD_LOGIC的数据类型中是用什么 表示的。

A. 小写字母和数字 B. 大写字母数字 C. 大或小写字母和数字 D. 全部是数字

10. 下面哪一个可以用作VHDL中的合法的实体名 。 A. OR B. VARIABLE C. SIGNAL D. OUT1

11. 以下关于VHDL中标识符的说法不正确的是

A.标识符由26个英文字母和数字0~9以及下划线组成 B.标识符必须由英文字母开始,且不能以下划线结束 C.标识符中可以包含空格

D.标识符不允许与VHDL中的关键字重合

(二)数据类型

1. 对于大多数主流的VHDL综合器,一般不支持哪个数据类型 A.TIME B.BIT C.STRING D.INTEGER

2. 在VHDL中,乘“*”和除“/”算术运算的操作数据是 数据类型 A. 整型 B. 实型 C. 整型和实型 D.比特型

3.如定义SIGNAL b:BIT_VECTOR(0 TO 0),则信号b的位宽是几位? A. 0 B. 1 C. 2 D. 非法语句

4. 下面哪个数据类型不能够被综合,仅能用于仿真。 A. STD_LOGIC B. INTEGER C. BIT D. REAL

5. 下面哪个数据类型只有“真”和“假”两种状态。

A. STD_LOGIC B. INTEGER C. BIT D. BOOLEAN

6. 关于VHDL数据类型,正确的是 A. 数据类型不同不能进行运算 B. 数据类型相同才能进行运算 C. 数据类型相同或相符就可以运算 D. 运算与数据类型无关

7. 下面数据中属于实数的是 A. 4.2 B. 3 C. ‘1’ D. “11011” 8. 下面数据中属于位矢量的是 A. 4.2 B. 3 C. ‘1’ D. “11011”

9. 有如下定义:

signal a: character 则下面哪个赋值语句是正确的

A. a<=” 11”; B. a<=” zz” C. a<=’z’ D.a<=’Z’;

10. 关于VHDL数据类型,不正确的是

A. “STD_LOGIC” 是IEEE预定义数据类型 B. “BIT_VECTOR”是IEEE预定义数据类型 C. 布尔型数据类型的取值是FALSE和TRUE D. 数据类型为字符型的标识符是区分大小写的。

11. 下列哪个数据类型不必事先声明而可以直接引用 A. STD_LOGIC B. STD_LOGIC_VECTOR C. BIT D. 前面三个答案都是错误的

12. STD_LOGIG_1164中定义的高阻是字符 A. X B. x C. z D. Z

13. 要使用std_logic数据类型,必须对IEEE中的 程序包进行声明。 A. std_logic_signed B. std_logic_unsigned C. std_logic_arith D. std_logic_1164

14. 在STD_LOGIG_1164中字符Z定义为 A. 高阻 B. 弱信号0 C. 弱信号1 D. 初始值

15. 使用STD_LOGIG_1164使用的数据类型时

A. 可以直接调用 B. 必须在库和包集合中声明 C. 必须在实体中声明 D. 必须在结构体中声明 16. 关于转化函数正确的说法是

A. 任何数据类型都可以通过转化函数相互转化 B. 只有特定类型的数据类型可以转化

C. 任何数据类型都不能转化 D. 前面说法都是错误的

17. 有如下定义:

TYPE week IS(sun,mon,tue,wed,thr,fri,sat); 则week的数据类型是

A.字符 B.BIT C.STD_LOGIC D.枚举

18. 关于VHDL中的数字,请找出以下数字中数值最小的一个: A. 2#1111_1110# B. 8#276# C. 10#170# D. 16#E#E1

19. 关于VHDL中的数字,请找出以下数字中最大的一个: 。 A.2#1110_1110# B.8#376# 10#170# D.16#E#E1

20. 在VHDL的IEEE标准库中,预定义的标准逻辑数据STD_LOGIC有 种逻辑值。 A. 2 B. 3 C. 9 D. 8

(三)运算符

1. 关于VHDL运算符优先级的说法正确的是

A. 逻辑运算的优先级最高 B. 关系运算的优先级最高 C. 逻辑运算的优先级最低 D. 关系运算的优先级最低

2. 关于VHDL运算符优先级的说法正确的是

A. NOT的优先级最高 B. AND和NOT属于同一个优先级 C. NOT的优先级最低 D. 前面的说法都是错误的

3. 关于VHDL运算符优先级的说法正确的是

A. 括号不能改变优先级 B. 不能使用括号

C. 括号的优先级最低 D. 括号可以改变优先级

4. 下面哪个不是VHDL运算符。

A.算术运算符 B. 连接运算符 C. 关系运算符 D.赋值运算符

5. 转换函数TO_BITVECTOR(A)的功能是

A. 将STDLOGIC_VECTOR转换为BIT_VECTOR B. 将REAL转换为BIT_VECTOR C. 将TIME转换为BIT_VECTOR D. 将INTEGER转换为BIT_VECTOR

6. 如果a=1,b=0,则逻辑表达式(a AND b) OR( NOT b AND a)的值是 A. 0 B. 1 C. 2 D. 不确定

7. 关于关系运算符的说法正确的是 如果a和b都是字符型数据,则不能用“=””关系运算符 B. 关系运算只用于整数类型的数据 C. 关系运算的数据类型必须相同 D. 关系运算的数据类型可以不相同

8. 布尔表达式Y=AB+C的正确VHDL表达式是 A.Y<=A AND B OR C; B.Y<= A AND (B OR C) C.Y<=AC+C D.Y<=A AND B +C

9. 执行下列语句后Q的值等于 。 ??

SIGNAL E: STD_LOGIC_VECTOR (2 TO 5); SIGNAL Q: STD_LOGIC_VECTOR (9 DOWNTO 2); ??

E<=(2=>’0’, 4=>’0’, OTHERS=>’1’);

Q<=(2=>E (2), 4=>E (3), 5=>’1’, 7=>E (5), OTHERS=>E (4)); ??

A. “11011011” B. “00110100” C. “11011001” D. “00101100”

10. 逻辑操作符XNOR表示 逻辑。

A. 异或 B. 或非 C.与非 D. 同或

11. 在VHDL中,不需要进行说明而可直接使用的数据类型是 A.标准定义的数据类型 B.用户自定义的数据类型 C.IEEE预定义标准数据类型 D.以上均不可以

12. 在VHDL中,45_234_287属于( )数据类型 A.整数型 B.比特型 C.实数 D.字符型

13. 在VHDL中,加“+”和减“一”算术运算的操作数据是 数据类型。 A.整型 B.实型 C.整型或实型 D.任意类型

14. 如果语句c<=a&b;合法,则c数据类型可能是

A.整数(Integer) B.Boolean类型 C.矢量(Vector)型 D.实型(Real)

15. 如果a=1,b=1,则逻辑表达式(a XOR b) OR( NOT b AND a)的值是 A. 0 B. 1 C. 2 D. 不确定

(四)顺序语句(IF/CASE/LOOP)

1. VHDL中顺序语句放置位置说法正确的是

A. 可以放在进程语句中 B. 可以放在子程序中 C. 不能放在任意位置 D. 前面的说法都正确

2. 下面哪个语句不属于顺序语句 A. IF语句 B. LOOP语句

C. PROCESS语句 D. CASE语句

3. 在VHDL中,可以用下面哪个语句来表示检测clock下降沿 A. if clock’ event then B. if clock’ event and clock=’1’ then C. if clock=’0’ then D. if clock’ event and clock=’0’ then

4.在VHDL语言中,下列对时钟边沿检测描述中,错误的是 A.if clk’event and clk = ‘1’ then B.if falling_edge(clk) then

C.if clk’event and clk = ‘0’ then

D.if clk’stable and not clk = ‘1’ then

5.下面哪个不是顺序语句使用的程序部分

A.进程内部 B.函数内部 C.过程内部 D.结构体内部

6.下面哪个不是顺序语句

A. process B. if C. case D. loop

7.下面哪个不是顺序语句 A. block B. if C. case D. wait

8.下面哪个不是顺序语句

A. component B. if C. case D. loop

9.在VHDL中,IF语句中至少应有1个条件句,条件句必须由 表达式构成。 A.BIT B.STD_LOGIC C.BOOLEAN D.LOGIC

10.在VHDL中,IF语句中至少应有1个条件句,条件句必须由哪个表达式构成。 A. BIT B. STD_LOGIC C. BOOLEAN D. INTEGER

11.在VHDL的CASE语句中,条件句中的“=>”不是操作符号,它只相当与 作用。 A. IF B. THEN C. AND D. OR

12.在VHDL的顺序语句中中,下面的哪个语句具有优先级。

A. IF B. CASE C. FOR_LOOP D.WHILE_LOOP

13.下列关于CASE语句的说法不正确的是 。

A. 条件句中的选择值或标识符所代表的值必须在表达式的取值范围内。 B. CASE语句中必须要有WHEN OTHERS=>NULL;语句。

C. CASE语句中的选择值只能出现一次,且不允许有相同的选择值的条件语句出现 。 D. CASE语句执行必须选中,且只能选中所列条件语句中的一条。

14.在VHDL的FOR_LOOP语句中的循环变量是一个临时变量,属于LOOP语句的局部;变量, 事先声明。

A.必须 B.不必 C.其类型要 D.其属性要

15.在VHDL中,语句”FOR I IN 0 TO 7 LOOP ”定义循环次数为几次。 A. 8 B. 7 C. 0 D.1

16. 过程调用前需要将过程的过程首和过程体装入 中。 A.源程序 B.结构体 C.程序包 D.设计实体

17. 使用下面哪个语句可以使FOR_LOOP语句跳到循环的起点。 A. next B. exit C. break D. continue

18. 使用下面哪个语句可以使FOR_LOOP语句跳到循环的终点。 A. next B. exit C. break D. continue

19. 下面有关while_loop语句说法正确的是 A. while_loop循环次数已知;

B. 一般综合工具都支持while_loop 语句; C. 循环变量不需要事先定义; D. 以上说法都不正确。

(五)并行语句

1. 在VHDL中,PROCESS结构内部是由 语句组成的。

A. 顺序 B. 顺序和并行 C. 并行 D.任何

2. 在VHDL中,PROCESS本身是 语句。

A. 顺序 B.顺序和并行 C.并行 D.任何

3. 在元件例化语句中,用哪个符号实现名称映射,将例化元件端口声明语句中的信号与PORT MAP()中的信号名关联起来。

A. = B. := C. <= D.=>

4. 在VHDL中,含WAIT语句的进程PROCESS的括弧中 再加敏感信号,否则则是非法的。

A. 可以 B.不能 C. 必须 D. 有时可以

5. 以下对于进程PROCESS的说法,正确的是: A. 进程之间可以通过变量进行通信

B. 进程内部由一组并行语句来描述进程功能 C. 进程语句本身是并行语句

D. 一个进程可以同时描述多个时钟信号的同步时序逻辑

6. 进程中的信号赋值语句,其信号更新是 。 A.按顺序完成; B.比变量更快完成; C.在进程的最后完成; D.以上都不对。

7. 下面有关进程中敏感信号的说法正确的是 A. 全部敏感信号的变化,才将启动进程。 B. 同步进程的敏感信号表中只有时钟信号。

C. 异步进程敏感信号表中除时钟信号外,还有其它信号。 D. 如果有 WAIT 语句,则不允许有敏感信号表。

8. 在下面程序结构 中执行的语句是并行语句: A.进程 B.函数 C.过程 D.结构体

9. 在VHDL中,条件信号赋值语句WHEN_ELSE属于 语句。 A. 并行和顺序 B. 顺序 C. 并行 D. 不存在的

10.下面有关块语句的说法不正确的是

A. 块语句本身是并行语句,并且块内部所包含的语句也是并行语句。 B. 块语句的使用不影响逻辑功能。

C. 块嵌套时,子块声明与父块声明的对象同名时,父块声明将忽略掉子块声明。 D. 块语句将一系列并行描述语句进行组合,目的是改善并行语句及其结构的可读性。

11. 进程内不能定义:

A.常量 B.变量 C.信号 D.子程序

12. 下列哪种语句不属于并列语句

A.块语句 B.进程语句 C.结构体配置语句 D.子程序调用语句

13. VHDL中对象属性的引用格式为( )。

A.对象:属性 B.对象<=属性 C.对象′属性 D.对象:=属性

14. 以下关于VHDL语言中顺序语句和并行语句的区别,不正确的是

A.顺序语句按语句的排列顺序执行;并行语句的执行顺序与书写顺序无关。 B.并行语句体现了硬件电路的并行性。

C.顺序语句可直接构成结构体;而并行语句则不能。

D.顺序语句可用于描述模块的算法;并行语句可用于描述模块间的连接关系。

15. 以下语句不属于并行语句的是

A.进程语句 B.元件例化语句 C.生成语句 D.循环控制语句

16. 在进程PROCESS的括弧中,如果已经有敏感信号,则不能含有 语句否则是非法的。

A.IF B. WAIT C.LOOP D.CASE

17. 在VHDL中,条件信号赋值语句WHEN_ELSE属于 语句。 A.并行兼顺序 B.顺序 C.并行 D.非法

18. 在元件例化(COMPONENT)语句中,用 符号实现名称映射,将例化元件端口声明语句中的信号名与PORT MAP( )中的信号名关联起来。 A.= B.:= C.<= D.=>

19. 在使用元件例化语句时,如采用的是位置关联的方式,则例化的端口表达式(信号)与元件声明语句中的端口。

A.名称必须一致,顺序可以不一致; B.名称可以不一致,顺序必须一致; C.名称必须一致,顺序也必须一致; D.名称可以不一致,顺序也可以不一致。

20. 进程语句中敏感信号列表的作用是

A.说明进程运行的结果 B.决定进程运行的先后顺序 C.决定进程语句的启动与否 D.实现进程语句的独立性

21. 元件例化语句的作用是 A.描述元件模块的算法

B.改善并行语句及其结构的可读性

C.产生一个与某元件完全相同的一组并行元件

D.在高层次设计中引用前面已经设计好的元件或电路模块

22. 关于元件例化语句的元件声明的作用,以下说法中正确的是 A.说明所引用元件的逻辑功能 B.说明所引用元件的端口信息 C.说明所引用元件的个数 D.说明所引用元件的存储位置

23. 下列语句中,不属于并行语句的是: A.进程语句 B.CASE语句

C.元件例化语句 D.WHEN?ELSE?语句

24. 进程语句中敏感信号列表的作用是 A.说明进程运行的结果 B.决定进程运行的先后顺序 C.决定进程语句的启动与否 D.实现进程语句的独立性

25. 在VHDL语言中,下列对进程(PROCESS)语句的语句结构及语法规则的描述中,正确的是

A.PROCESS为一无限循环语句;敏感信号发生更新时启动进程,执行完成后,等待下一次进程启动。

B.敏感信号参数表中,应列出进程中使用的所有输入信号;

C.进程由说明部分、结构体部分、和敏感信号参数表三部分组成; D.当前进程中声明的变量也可用于其他进程。

26. 下面有WITH_SELECT语句的说法不正确的是 A. 不能有重叠的条件分支。 B. 最后条件必须为 OTHERS。

C. 选择信号赋值语句与进程中的 CASE 语句等价。

D. 赋值目标必须是信号,与其它并行语句同时执行,与书写顺序无关。

27. 下面有WHEN_ELSE语句的说法不正确的是 A. 赋值目标必须是信号。 B. 不能有重叠的条件分支。

C. 选择信号赋值语句与进程中的 IF 语句等价。

D. 需要把表达式的所有可能取值都列举出来,否则最后条件必须为 OTHERS。

三、数据对象

1. VHDL语言中变量定义的位置是

A. 实体中中任何位置 B. 实体中特定位置 C. 结构体中任何位置 D. 结构体中特定位置

2. VHDL语言中信号定义的位置是

A. 实体中任何位置 B. 实体中特定位置 C. 结构体中任何位置 D. 结构体中特定位置

3. 变量是局部量可以定义在

A. 实体中 B. 进程中

C. 程序包中 D. 结构体中

4. 在VHDL的并行语句之间,可以用 来传送往来信息。 A.变量 B.变量和信号 C.信号 D.常量

5. 关于变量和信号的赋值符号描述正确的是 A. 变量赋值号是:= B. 信号赋值号是:= C. 变量赋值号是<= D. 二者没有区别

6. 关于变量和信号的描述正确的是

A. 变量可以带出进程 B. 信号可以带出进程 C. 信号不能带出进程 D. 二者没有区别

7. 对于信号和变量的说法,哪一个是不正确的:

A.信号用于作为进程中局部数据存储单元 B.变量的赋值是立即完成的 C.信号在整个结构体内的任何地方都能适用 D.变量和信号的赋值符号不一样

8. 下列关于变量的说法正确的是 。

A. 变量是一个局部量,它只能在进程和子程序中使用。 B. 变量的赋值不是立即发生的,它需要有一个δ延时。

C. 在进程的敏感信号表中,既可以使用信号,也可以使用变量。 D. 变量赋值的一般表达式为:目标变量名<= 表达式。

9. VHDL中,为目标变量赋值符号是 。

A. =: B. = C. <= D.:=

10. 在VHDL中 不能将信息带出对它定义的当前设计单元。 A. 信号 B. 常量 C. 数据 D. 变量

11. 在VHDL中,为定义的信号赋初值,应该使用哪个符号。 A. =: B. = C. := D. <=

12. 下列哪一项不属于VHDL中的数据对象

A.Constant B.Variable C.Signal D.Package

13. 以下关于VHDL中常量的声明正确的是 A.Constant Width :Integer=8; B.Constant Width :Integer := 8; C.Variable Width :Integer = 8; D.Variable Width :Integer := 8;

14. 下列关于信号的说法不正确的是 。 A . 信号相当于器件内部的一个数据暂存节点。

B. 信号的端口模式不必定义,它的数据既可以流进,也可以流出。

C. 在同一进程中,对一个信号多次赋值,其结果只有第一次赋值起作用。 D. 信号在整个结构体内的任何地方都能适用。

15. 下面正确给变量X赋值的语句是

A. X<=A+B; B. X:=A+b; C. X=A+B; D. 前面的都不正确

16. 在一个VHDL设计中,idata定义为一个信号,数据类型为std_logic_vector,试指出下面那个赋值语句是错误的 A.idata <= “00001111”; B.idata <= b”0000_1111”; C.idata <= X”AB” D.idata <= B”21”;

17. 在一个VHDL设计中idata是一个信号,数据类型为integer,数据范围0 to 127,下面哪个赋值语句是正确的 A.idata := 32;

B.idata <= 10#17#; C.idata <= 16#FE#; D.idata := B#1010#;

18.变量不能使用的程序结构部分是

A.结构体 B.进程 C.函数 D.过程

19. a已定义为信号,b已定义为变量,下面正确的表达是: A. a.=b B. a<=b C. b:=a D. b<=a

20. 有如下定义: signal a:bit;

signal b:bit_vector(1 downto 0); 下面正确的表达式是:

A. b<=a; B. a<=b; C. a<=b(0) ; D. a:=b(0);

21. 有如下定义: signal a,b:bit;

signal y:bit_vector(1 downto 0); 下面正确的表达式是:

A. y<=a; B. y<=b; C. y<=b and a; D. y<=b&a;

22. 常量的正确格式是:

A.CONSTANT Vcc: REAL=5.0 ; B.CONSTANT Vcc:REAL:=5.0 ; C.CONSTANT Vcc REAL=5.0 ; D.CONSTANT Vcc:=5.0 ;

23. a的初值为0;执行语句a<=a+1;a<=a+1; a<=a+1;后,a的值为 A.0 B.1 C.2 D.3

24. a的初值为0;执行语句a:=a+1;a:=a+1; a:=a+1;后,a的值为 A.0 B.1 C.2 D.3

四、EDA基本概念

1. EDA的中文含义是

A. 电子设计自动化 B. 计算机辅助计算 C. 计算机辅助教学 D. 计算机辅助制造

2. 可编程逻辑器件的英文简称是 A. FPGA B. PLA C. PAL D. PLD

3. 现场可编程门阵列的英文简称是 A. FPGA B. PLA C. PAL D. PLD

4. 基于下面技术的PLD器件中允许编程次数最多的是 A. FLASH B. EEROM C. SRAM D. PROM

5. 在EDA中,ISP的中文含义是 A. 网络供应商 B. 在线系统可编程

C. 没有特定意义 D. 使用编程器烧写PLD芯片

6. 在EDA中,IP的中文含义是 A. 网络供应商 B. 在系统编程 C. 网络协议 D. 知识产权核

7. 芯片EPF10K20TC144-4具有多少个管脚 A. 144个 B. 84个 C. 10个 D. 20个

8. EPF10K20TC144-X器件,如果X的值越小表示

A. 器件的工作频率越小 B. 器件的速度越快 C. 器件的延时越小 D. 器件的功耗越小

9. 下面对利用原理图输入设计方法进行数字电路系统设计,那一种说法是不正确的 A.原理图输入设计方法直观便捷,但不适合完成较大规模的电路系统设计; B.原理图输入设计方法一般是一种自底向上的设计方法; C.原理图输入设计方法无法对电路进行功能描述; D.原理图输入设计方法也可进行层次化设计。

10. 下列那个流程是正确的基于EDA软件的FPGA / CPLD设计流程: A.原理图/HDL文本输入→综合→适配→编程下载→硬件测试 B.原理图/HDL文本输入→适配→综合→编程下载→硬件测试; C.原理图/HDL文本输入→综合→编程下载→→适配硬件测试; D.原理图/HDL文本输入→适配→编程下载→综合→硬件测试

11. 在EDA工具中,能将硬件描述语言转换为硬件电路的重要工具软件称为 。 A.仿真器 B.综合器 C.适配器 D.下载器

12. 综合是EDA设计流程的关键步骤,综合就是把抽象设计层次中的一种表示转化成另一种表示的过程;在下面对综合的描述中,哪个是错误的。

A.综合就是将电路的高级语言转化成低级的,可与FPGA / CPLD的基本结构相映射的网表文件;

B. 为实现系统的速度、面积、性能的要求,需要对综合加以约束,称为综合约束;

C. 综合可理解为,将软件描述与给定的硬件结构用电路网表文件表示的映射过程,并且这种映射关系不是唯一的。

D. 综合是纯软件的转换过程,与器件硬件结构无关;

13. 将设计的系统或电路按照EDA开发软件要求的某种形式表现出来,并送入计算机的过程称为:

A.设计输入 B.设计输出 C.仿真 D.综合

14. 在EDA工具中,能完成在目标系统器件上布局布线软件称为 A.仿真器 B.综合器 C.适配器 D.下载器

15. 在EDA工具中,能将硬件描述语言转换为硬件电路的重要工具软件称为 A.仿真器 B.综合器 C.适配器 D.下载器

16. 当前最流行的并成为IEEE标准的硬件描述语言包括VHDL和 A.Verilog HDL语言 B.ABEL语言 C.AHDL语言 D.C语言

17. 基于硬件描述语言HDL的数字系统设计,目前最常用的设计方法称为 方法。 A.自底向上 B.自顶向下 C.积木式 D.顶层

18. 基于可编程器件EDA技术主要包括四大要素:大规模可编程器件、硬件描述语言、实验开发系统和

A.软件开发工具 B.监控程序模块 C.模拟器件及接口 D.硬件电路仿真器件测试

19. VHDL属于 描述语言。

A. 硬件 B.行为 C.高级 D.低级

20. VHDL的设计文体可以被高层次的系统 ,成为系统的—部分。 A. 调用 B.输入 C.输出 D.仿真

21. 下面哪个不是VHDL常用的描述风格。 A. 行为 B. 结构化 C. 数据流 D. 逻辑

22. 下面可以多次编程的器件是_______: A.PROM B.PLA C.PAL D.GAL

23. 对CPLD器件特点描述正确的是:

A.不能多次编程 B.集成度低于PAL和GAL C.内部触发器少 D.可以加密

24. 对FPGA器件特点描述正确的是: A.采用EEPROM工艺 B.采用SRAM工艺

C.集成度比PAL和GAL低 D.断电后配置数据不丢失

25. 下面只能一次编程的器件是: A.PAL B.GAL C.CPLD D.FPGA

26. 可以进行在系统编程的器件是: A.EPROM B.PAL C.GAL D.FPGA

27. 在系统可编程器件一般使用计算机的( )编程: A.串口 B.并口 C.USB口 D.VGA口

判断题练习

1. VHDL属于强数据类型语言。 ( ) 3. 在进程中任意交换语句的顺序,对执行结果有影响。 ( ) 5. 数100在VHDL语言中既可以表示整数又可以表示实数。 ( ) 6. WAIT FOR 语句后面要求接敏感信号。 ( )

( )

8. 过程中的输入输出参数都应列在紧跟过程名的括号内。 ( )

( )

10. 在端口方向的描述中,BUFFER定义的信号不能供构造体再使用,而OUT定义的信号

则可以再供构造体使用 ( )

11. 在vhdl语言中,端口输入信号在程序中不仅能被引用,而且能被赋值。 ( ) 12. VHDL语言中,逻辑运算左右有优先级别,且是从左至右运算( ) 13. 进程(process)本身是并行语句,但进程内部语句是顺序执行语句。 ( ) 14. 构造体描述电路端口,实体描述具体内部电路。 ( )

16. 在元件例化语句中,用=>符号实现名称映射,将例化元件端口声明语句中的信号与17. 在vhdl语言中的顺序语句只能出现在进程和过程子程序中。 ( ) 18. 当一个源程序中具有多个实体时,每个实体前都应加库说明语句 ( ) 19. s’STABLE属性不可以用来判断信号有没有事件发生。 ( ) 20. 变量的使用范围不仅限于定义在的进程和子程序中,还包括在整个结构体中 ( ) 21. 字符串由单引号括起来的一个字符序列,它也称字符矢量或字符串数组。

( )

22. vhdl 可以采用层次化的设计,一个高层的结构体中可以调用低层的实体

2. 一个结构体中有且只能有一个进程(process) ( )

4. 进程中敏感信号列表可以不用包含进程中用到的所有输入信号( )

7. 在IF语句的条件表达式中只能使用关系运算操作及逻辑运算操作的组合表达式

9. 在进程中,可以允许同一个信号有多个驱动源,但其结果只有最后一个驱动源被启动。

15. 并行简单信号赋值语句的书写格式:赋值目标:=表达式。 ( )

PORT MAP( )中的信号名关联起来。 ( )

( )

23. 不确定状态“X”在VHDL源程序中只能用大写,而不能用小写。

( )

24. 信号是全局变量,可是使用在定义实体的整个结构体中 ( ) 25. SIGNAL t2:std_logic <= '0’; ( ) 26. 一条信号代入语句,不能用一个进程来描述。 ( ) 27.并行条件信号赋值语句的表达格式:赋值目标<=表达式 when 赋值条件;

Else表达式 赋值条件;

?

表达式; ( )

填空练习

1、一个完整的VHDL语言程序通常包含 实体(entity) , 构造体(architecture), 配置(configuration), 包集合(package)和 库(library) 5各部分。 2、在一个实体的端口方向说明时,输入使用in表示,那么构造体内部不能再使用的输出是用 out 表示;双向端口是用 inout 表示;构造体内部可再次使用的输出是用 buffer 表示;

3、一个构造体可以使用几个子结构,即相对比较独立的几个模块来构成。VHDL语言可以有以下3种形式的子结构描述语句: BLOCK 语句结构; PROCESS 语句结构和SUBPROGRAMS结构。

4、VHDL的客体,或称数据对象包括了常数、 变量variable 和 信号signal 。 5、请列出三个VHDL语言的数据类型,如实数、位等。 位矢量 , 字符 , 布尔量 。

6、设D0为'0', D1为'0', D2为'1', D3为'0', D0 & D1 & D2 & D3的运算结果是“0010”, D3 & D2 & D1 & D0的运算结果是“0100”。

7、构造体的描述方式包括三种,分别是 寄存器传输(RTL)描述方法或称数据流 ; 构造体的结构描述方式 和 构造体的行为描述方式 。

8、试举出两种可编程逻辑器件 CPLD 、 FPGA 。

9、VHDL程序的基本结构包括 库 、 程序包 、 实体 和 结构体 。

10、more_ _11标识符合法吗? 不合法 。8bit标识符合法吗? 不合法 。

variable标识符合法吗? 不合法 。 11、信号的代入通常用 <= ,变量用 := 。

12、表示‘0’‘1’;两值逻辑的数据类型是 bit(位) ,表示‘0’‘1’‘Z’等九值逻辑的数据类型是 std_logic(标准逻辑),表示空操作的数据类型是 NULL 。 13、定义一个信号a,数据类型为4位标准逻辑向量 signal a : std_logic_vector(3 downto 0) 定义一个变量b,数据类型为2位位向量 variable b : bit_vector(1 downto 0) 。

14、<=是 小于等于 关系运算符,又是 赋值运算 操作符。 15、VHDL程序的基本结构至少应包括 实体 、 结构体 两部分和对 库 的引用声明。

16、1_Digital标识符合法吗? 否 , \\12 @ +\\ 呢? 合法 。 17、在VHDL的常用对象中, 信号 、 变量 可以被多次赋予不同的值, 常量 只能在定义时赋值。

18、实体的端口模式用来说明数据、信号通过该端口的传输方向,端口模式有 in 、 Out 、 inout 、 buffer 。 19、VHDL语言中std_logic类型取值 ‘Z’ 表示高阻,取值 ‘X’ 表示不确定。

20、整型对象的范围约束通常用 range 关键词,位矢量用 downto/to 关键词。 21、位类型的初始化采用(字符/字符串) 字符 、位矢量用 字符串 。 22、进程必须位于 结构体 内部,变量必须定义于 进程/包/子程序 内部。 23、并置运算符 & 的功能是 把多个位或位向量合并为一个位向量 。 24、进程执行的机制是敏感信号 发生跳变 。

25、判断CLK信号上升沿到达的语句是 if clk’event and clk = ‘1’ then . 26、 IF 语句各条件间具有不同的优先级。

27、任何时序电路都以 时钟 为驱动信号,时序电路只是在 时钟信号的边沿 到来时,

其状态才发生改变。

28、 Moore 状态机输出只依赖于器件的当前状态,与 输入信号 无关。 29、VHDL是否区分大小写? 不区分 。

30、digital_ _8标识符合法吗? 不合法 。12_bit标识符合法吗? 不合法 。

signal标识符合法吗? 不合法 。

31、结构体有三种描述方式,分别是 数据流 、 行为 、 和 结构化 。

32、请分别列举一个常用的库和程序包 library ieee 、 use ieee.std_logic_1164.all 。

33、一个信号处于高阻(三态)时的值在‘Z’ 。

34、将一个信号width定义为一个4位标准逻辑向量为

VHDL中描述为

signal width : std_logic_vector(3 downto 0) 。

35、/=是 不相等 操作符,功能是 在条件判断是判断操作符两端不相等 。 36、设D0为'0', D1为'1', D2为'1', D3为'0', D3 & D2 & D1 & D0的运算结果是 “0110” ,(D3 or D2)and(D1 and not D0)的运算结果是: ‘1’ 。 37、赋值语句是(并行/串行) 并行 执行的,if语句是(并行/串行) 串行 执行的。

38、请列举三种可编程逻辑器件: EEPROM 、 GAL 、 FPGA 。

39、早期的可编程逻辑器件包括 PLA 、 PAL 、 GAL 。

40、基于乘积项技术构造的可编程逻辑器件叫做 CPLD ,基于查找表技术构造的可编程逻辑器件叫做 FPGA 。

41、VHDL程序的基本结构包括 库 、 程序包 、 实体 和 结构体 。

42、8digital标识符合法吗? 不合法 。 43、信号的代入通常用 <= ,变量用 := 。

44、 标准逻辑(std_logic) 是一个具有九值逻辑的数据类型。

45、定义一个变量a,数据类型为4位位向量 variable a : bit_vector(3 downto 0) 。

46、<=是 小于等于 关系运算符,又是 赋值运算 操作符。 47、设D0为'1', D1为'1', D2为'1', D3为'0',“1110”是 D3 & D2 & D1 & D0的运算结果 。

48、IF语句根据指定的条件来确定语句执行顺序,共有3种类型: 用于门闩控制的IF语句、用于二选一控制的IF语句、用于多选择控制的IF语句。

简答题练习

1.什么是VHDL?简述VHDL的发展史。

答: VHDL是美国国防部为电子项目设计承包商提供的,签定合同使用的,电子系统硬件描述语言。1983年成立VHDL语言开发组,1987年推广实施,1993年扩充改版。VHDL是IEEE标准语言,广泛用于数字集成电路逻辑设计。

2.简述VHDL设计实体的结构。

答:实体由实体名、类型表、端口表、实体说明部分和实体语句部分组成。根据IEEE标准,实体组织的一般格式为: ENTITY 实体名 IS

[GENERIC(类型表);] --可选项 [PORT(端口表);] --必需项 实体说明部分; --可选项 [BEGIN

实体语句部分;]

END [ENTITY] [实体名];

3.什么叫对象?对象有哪几个类型?

答:在VHDL语言中,凡是可以赋于一个值的客体叫对象(object)。VHDL对象包含有专门数据类型,主要有4个基本类型:常量(CONSTANT)、信号(SIGNAL)、变量(VARIABLE)和文件(FILES)。

4.VHDL语言定义的标准类型有哪些?

答 VHDL语言标准所定义的标准数据类型 (1) 整数类型(INTEGER TYPE)

(2) 实数类型或浮点类型(REAL TYPE & FLOATING TYPE) (3) 位类型(BIT TYPE)

(4) 位矢量类型(BIT_VECTOR TYPE) (5) 布尔类型(BOOLEAN TYPE) (6) 字符类型(CHARACTER TYPE)

(7) 时间类型或物理类型(TIME TYPE & PHYSICAL TYPE) (8) 错误类型(NOTE,WARNIING,ERROR,FAILURE TYPE) (9) 自然数、整数类型(NATURAL TYPE) (10) 字符串类型(TRING TYPE)

5.简述VHDL语言操作符的优先级。

答:取反和取绝对值优先级较高,与、或逻辑运算的优先级低于算术运算的优先级。

6.哪3种方法可用来进行类型转换?

答:进行不同类型的数据变换,有3种方法:类型标记法、函数转换法和常数转换法。

7.什么叫进程?简述进程的工作方式。

答:进程(process)是由外部信号触发执行的一段程序。进程语句是并行处理语句,即各个进程是同时处理的,在结构体中多个Process语句是同时并发运行的。在进程内部是顺序执行的。Process语句在VHDL程序中,是描述硬件并行工作行为的最常用、最基本的语句。

进程Process语句中一般带有几个信号量例表,称为该进程的敏感量表。这些信号无论哪一个发生变化都将启动Process进程。一旦启动,进程Process中的程序将从上到下顺序执行一遍,由新变化的量引导进程产生变化结果输出。当进程的最后一个语句执行完成后,就返回到进程开始处,等待敏感量的新变化,引发进程的再一次执行。周而复始,循环往复,以至无穷。这就是进程的执行过程。

8.什么叫模块?区分模块与进程。

答:模块(Block)语句是结构体中积木化设计语言,适用于复杂项目设计。

Block块是一个独立的子结构,可以包含PORT语句、GENERIC语句,允许设计者通过这两个语句将Block块内的信号变化传递给Block块的外部信号。同样,也可以将Block块的外部信号变化传递给Block块的内部信号。

对VHDL语言中的Block模块进行仿真时,Block模块中所描述的各个语句是可以并发执行的,和模块中的语句书写顺序无关。进程语句是一段程序,这段程序是顺序执行的。 进程的敏感信号表指的是什么?简述敏感信号表在进程中的作用? 进程的敏感信号表指的是什么?简述敏感信号表在进程中的作用?

进程的“敏感信号表”也称敏感表,是进程的激活条件,可由一个或多个信号组成,各信号间以“,”号分隔。当敏感信号表中的任一个信号有事件发生,即发生任意变化,此时,进程被激活,进程中的语句将从上到下逐句执行一遍,当最后一条语句执行完毕之后,进程即进入等待挂起状态,直到下一次敏感表中的信号有事件发生,进程再次被激活,如此循环往复。

9.简述层次化设计的过程。

答:层次化设计是指对于一个大型设计任务,将目标层层分解,在各个层次上分别设计的方法。有些设计,在一些模块的基础上,通过搭建积木的方法进行设计。有人称,在整个设计任务上进行行为描述的设计方法,称为高层次设计,而从事某一模块、某一元件行为设计称为底层设计方法。

10.什么是库,程序包,子程序,过程调用,函数调用?

答:库(libraries)和程序包(package)用来描述和保存元件、类型说明、函数、模块等,以便在其他设计中可随时引用它们。

库(libraries)是用来存储和放置可编译的设计单元的地方,通过其目录可查询、调用。设计库中的设计单元(实体说明、结构体、配置说明、程序包说明和程序包体)可以用作其他VHDL描述的资源。 函数和过程统称为子程序。

子程序由过程和函数组成。在子程序调用过程中,过程能返回多个变量,函数能返回一个变量。若子程序调用是一个过程,就称为过程调用;若子程序调用是一个函数,则称为函数调用。过程调用和函数调用都是子程序调用。 函数的参数都是输入参数。

过程的参数有输入、输出和双向参数。

函数有顺序函数、并行函数。 过程有顺序过程、并行过程。

11.简述Top-Down设计方法及其基本步骤。 【参考答案】: 所谓Top-Down的设计过程是指从系统硬件的高层次抽象描述向最底层物理描述的一系列转换过程。具体讲这一过程由功能级、行为级描述开始;寄存器传输(RTL)级描述为第一个中间结果;再将RTL级描述由逻辑综合得到网表(Net-list)或电路图;由网表即可自动生成现场可编程门阵列(FPGA)/复杂可编程逻辑器件(CPLD)或专用集成电路(ASIC),从而得到电路与系统的物理实现。

12.请从申明格式、赋值符号、赋值生效时间、作用范围等方面对信号和变量进行比较分析。

【参考答案】: ① 申明时关键字不一样,变量为:VARIABLE;信号为:SIGNAL。但申明时赋初值均用“:=”符号。

②赋值符号不同:信号赋值用“﹤=”;变量赋值用“:=”。 ③赋值生效时间:信号赋值△延时后生效;变量赋值立即生效。

④声明引用范围:信号在构造体内(进程外)申明,整个构造体内有效;变量主要在进程内申明,只在进程内有效。

13.为什么要层次化设计?

答: 原因有二。第一,对于一个大型设计项目,层次分解后,由不同设计人员分别进行设计,可以大大提高设计效率。第二 层次分解后,各个层次由不同的设计模块构成,可以分别测试,验证。大大降低了项目的风险和难度。

14.Moore型状态机和Mealy型状态机有什么相同和不同? 答: Moore型状态机的输出信号仅与现态相关,Moore 型状态机输出是现态的函数,Mealy型状态机输出是现态和输入的函数。

15.一位有效状态机有什么优点?

答:一位有效编码,比顺序编码方式占用资源多,在目标器件具有较多寄存器资源,并且寄存器之间组合逻辑较少时,一位有效编码是一个比较合适的方法。

16.简述WHEN_ELSE条件信号赋值语句和IF_ELSE顺序语句的异同。

答:WHEN_ELSE条件信号赋值语句中无标点,只有最后有分号;必须成对出现; 是并行语句,必须放在结构体中。

IF_ELSE顺序语句中有分号;是顺序语句,必须放在进程中。

17.配置语句的书写格式是怎样的? 答:配置语句的书写形式为:

CONFIGURAT10N 配置名 OF 实体名 IS FOR 选配构造体名 END FOR; END 配置名;

18.CLK信号怎样用VHDL语言描述? 答:时钟信号的上升沿的描述:

if clk‘event and clk = ‘1’ then ?; 时钟信号的下降沿的描述:

if clk ‘event and clk = ‘1’ then ?;

19.异步复位怎样用VHDL语言描述?

答:当复位信号低电平有效时,VHDL的描述为: if reset = ‘0’ then ?;

当复位信号高电平有效时, VHDL的描述为: if reset =‘1’ then ?;

判断改错题

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”语句。

VHDL程序填空

1. 下面程序是1位十进制计数器的VHDL描述,试补充完整。 LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT10 IS

PORT ( CLK : IN STD_LOGIC ;

Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)) ; END CNT10;

ARCHITECTURE bhv OF CNT10 IS

SIGNAL Q1 : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN

PROCESS (CLK) BEGIN

IF CLK'EVENT AND CLK = '1' THEN -- 边沿检测 IF Q1 > 10 THEN

Q1 <= (OTHERS => '0'); -- 置零 ELSE

Q1 <= Q1 + 1 ; -- 加1 END IF; END IF; END PROCESS ; Q <= Q1; END bhv;

2. 下面是一个多路选择器的VHDL描述,试补充完整。

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY bmux IS

PORT ( sel : IN STD_LOGIC;

A, B : IN STD_LOGIC_VECTOR(7 DOWNTO 0); Y : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)) ; END bmux;

ARCHITECTURE bhv OF bmux IS BEGIN

y <= A when sel = '1' ELSE B; END bhv;

三、VHDL程序改错

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

LIBRARY IEEE; -- 1 USE IEEE.STD_LOGIC_1164.ALL; -- 2

ENTITY LED7SEG IS PORT ( A : IN STD_LOGIC_VECTOR(3 DOWNTO 0); CLK : IN STD_LOGIC; LED7S : OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END LED7SEG; ARCHITECTURE one OF LED7SEG IS SIGNAL TMP : STD_LOGIC; BEGIN SYNC : PROCESS(CLK, A) BEGIN IF CLK'EVENT AND CLK = '1' THEN TMP <= A; END IF; END PROCESS; OUTLED : PROCESS(TMP) BEGIN CASE TMP IS WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ END CASE; END PROCESS; END one; 1. 在程序中存在两处错误,试指出,并说明理由: 第14行 TMP附值错误

第29与30行之间,缺少WHEN OTHERS语句 2. 修改相应行的程序:

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

TMP : STD_LOGIC_VECTOR(3 DOWNTO 0); 错误2 行号: 29 程序改为:

该语句后添加 WHEN OTHERS => LED7S <= \四、阅读下列VHDL程序,画出原理图(RTL级)

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY HAD IS

PORT ( a : IN STD_LOGIC; b : IN STD_LOGIC;

-- 3 -- 4 -- 5 -- 6 -- 7 -- 8 -- 9 -- 10 -- 11 -- 12 -- 13 -- 14 -- 15 -- 16 -- 17 -- 18 -- 19 -- 20 -- 21 -- 22 -- 23 -- 24 -- 25 -- 26 -- 27 -- 28 -- 29 -- 30 -- 31 -- 32

c : OUT STD_LOGIC; d : OUT STD_LOGIC); END ENTITY HAD;

ARCHITECTURE fh1 OF HAD IS BEGIN

c <= NOT(a NAND b);

d <= (a OR b)AND(a NAND b); END ARCHITECTURE fh1;

五、请按题中要求写出相应VHDL程序 1. 带计数使能的异步复位计数器

输入端口: clk 时钟信号

rst 异步复位信号 en 计数使能 load 同步装载

data (装载)数据输入,位宽为10

输出端口: q 计数输出,位宽为10 LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT1024 IS

PORT ( CLK, RST, EN, LOAD : IN STD_LOGIC;

DATA : IN STD_LOGIC_VECTOR (9 DOWNTO 0); Q : OUT STD_LOGIC_VECTOR (9 DOWNTO 0) ); END CNT1024;

ARCHITECTURE ONE OF CNT1024 IS BEGIN

PROCESS (CLK, RST, EN, LOAD, DATA)

VARIABLE Q1 : STD_LOGIC_VECTOR (9 DOWNTO 0); BEGIN

IF RST = '1' THEN

Q1 := (OTHERS => '0');

ELSIF CLK = '1' AND CLK'EVENT THEN IF LOAD = '1' THEN Q1 := DATA; ELSE

IF EN = '1' THEN

Q1 := Q1 + 1; END IF; END IF; END IF; Q <= Q1; END PROCESS; END ONE;

2. 看下面原理图,写出相应VHDL描述

e

ab

y

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY TRI_STATE IS

PORT ( E, A : IN STD_LOGIC; Y : INOUT STD_LOGIC; B : OUT STD_LOGIC); END TRI_STATE;

ARCHITECTURE BEHAV OF TRI_STATE IS BEGIN

PROCESS (E, A, Y) BEGIN

IF E = '0' THEN B <= Y; Y <= 'Z'; ELSE

B <= 'Z'; Y <= A; END IF; END PROCESS; END BEHAV; 六、综合题

下图是一个A/D采集系统的部分,要求设计其中的FPGA采集控制模块,该模块由三个部分构成:控制器(Control)、地址计数器(addrcnt)、内嵌双口RAM(adram)。控制器(control)是一个状态机,完成AD574的控制,和adram的写入操作。Adram是一个LPM_RAM_DP单元,在wren为’1’时允许写入数据。试分别回答问题

信号预处理放大采样/保持AD574ADDataSTATUSCSCEA012rddata112wrenadram(lpm_ram_dp)12rddatardaddr10Control10wraddrCntclrAnalogInRCK12_8CLKClkInc地址计数器FPGA采集控制

下面列出了AD574的控制方式和控制时序图

AD574逻辑控制真值表(X表示任意)

CE 0 X 1 1 1 1 1

AD574工作时序:

1. 要求AD574工作在12位

中如何设置 K12_8为‘1’,A0为‘0’

2. 试画出control的状态机的状态图 类似书上图8-4

3. 对地址计数器模块进行VHDL描述

输入端口:clkinc 计数脉冲 cntclr 计数器清零 输出端口:rdaddr RAM读出地址,位宽10位 library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity addr_cnt is

port ( clkinc, cntclr : in std_logic;

wraddr : out std_logic_vector (9 downto 0) ); end addr_cnt;

architecture one of addr_cnt is

signal tmp : std_logic_vector (9 downto 0); begin

process (clkinc, cntclr) begin

if clkinc'event and clkinc = '1' then

转换模式,K12_8、A0在control

CS X 1 0 0 0 0 0 RC X X 0 0 1 1 1 K12_8 X X X X 1 0 0 A0 X X 0 1 X 0 1 工 作 状 态 禁止 禁止 启动12位转换 启动8位转换 12位并行输出有效 高8位并行输出有效 低4位加上尾随4个0有效 if cntclr = '1' then

tmp <= (others => '0'); else

tmp <= tmp + 1; end if; end if; end process; wraddr <= tmp; end one;

4. 根据状态图,试对control进行VHDL描述 library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity control is

port ( addata : in std_logic_vector (11 downto 0); status, clk : in std_logic;

cs, ce, a0, rc, k12_8, clkinc : out std_logic; rddata : out std_logic_vector (11 downto 0) ); end control;

architecture behav of control is

type con_st is (s0, s1, s2, s3, s4); signal cst, nst : con_st; signal lock : std_logic;

signal reg12 : std_logic_vector (11 downto 0); begin

a0 <= '0'; k12_8 <= '1'; ce <= '1'; cs <= '0';

REGP : process (clk) begin

if clk'event and clk = '1' then cst <= nst; end if; end process;

COMP : process (cst, status, addata) begin

case (cst) is

when s0 => rc <= '1'; lock <= '0'; nst <= s1; when s1 => rc <= '0'; lock <= '0'; nst <= s2;

when s2 => if status = '1' then nst <= s3; end if; rc <= '1'; lock <= '0';

when s3 => rc <= '1'; lock <= '1'; nst <= s4;

when s4 => rc <= '1'; lock <= '0'; nst <= s0; when others => nst <= s0; end case; end process;

LOCKP : process (lock) begin

if lock = '1' and lock'event then reg12 <= addata; end if; end process; rddata <= reg12;

clkinc <= lock; --(或者为NOT LOCK,延后半个时钟) end behav;

5. 已知adram的端口描述如下 ENTITY adram IS

PORT (

data : IN STD_LOGIC_VECTOR (11 DOWNTO 0); -- 写入数据 wraddress: IN STD_LOGIC_VECTOR (9 DOWNTO 0); -- 写入地址 rdaddress: IN STD_LOGIC_VECTOR (9 DOWNTO 0); -- 读地址 wren : IN STD_LOGIC := '1'; -- 写使能

q : OUT STD_LOGIC_VECTOR (11 DOWNTO 0) -- 读出数据 );

END adram;

试用例化语句,对整个FPGA采集控制模块进行VHDL描述 library ieee;

use ieee.std_logic_1164.all; entity daco is

port ( clk, cntclr, status : in std_logic;

addata : in std_logic_vector (11 downto 0); rdaddr : in std_logic_vector (9 downto 0); cs, ce, a0, rc, k12_8 : out std_logic;

rddata : out std_logic_vector (11 downto 0) ); end daco;

architecture one of daco is component control is

port ( addata : in std_logic_vector (11 downto 0); status, clk : in std_logic;

cs, ce, a0, rc, k12_8, clkinc : out std_logic; rddata : out std_logic_vector (11 downto 0) ); end component;

component addr_cnt is

port ( clkinc, cntclr : in std_logic;

wraddr : out std_logic_vector (9 downto 0) ); end component;

component adram IS PORT

(data : IN STD_LOGIC_VECTOR (11 DOWNTO 0); -- 写入数据 wraddress: IN STD_LOGIC_VECTOR (9 DOWNTO 0); -- 写入地址 rdaddress: IN STD_LOGIC_VECTOR (9 DOWNTO 0); -- 读地址 wren : IN STD_LOGIC := '1'; -- 写使能

q : OUT STD_LOGIC_VECTOR (11 DOWNTO 0) -- 读出数据 ); END component;

signal rds : std_logic_vector (11 downto 0); signal clkinc : std_logic;

signal wraddr : std_logic_vector (9 downto 0); begin

u1 : control port map (addata => addata, status => status, clk => clk, cs => cs, ce => ce, a0 => a0, rc => rc, k12_8 => k12_8, clkinc => clkinc, rddata => rds); u2 : addr_cnt port map (clkinc => clkinc, cntclr => cntclr, wraddr => wraddr);

u3 : adram port map (data => rds, wraddress => wraddr, rdaddress => rdaddr, wren => '1', q => rddata); end one;

VHDL程序练习题

1. 分别用结构体的3种描述法设计一个4位计数器。

答: 用行为描述方法设计一个4位计数器如下,其它描述方法,读者可自行设计。 LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; use ieee.std_logic_unsigned.all; ENTITY countA IS

PORT (clk,clr,en:IN STD_LOGIC; Qa,qb,qc,qd:OUT STD_LOGIC); END countA;

ARCHITECTURE example OF countA IS

SIGNAL count_4:STD_LOGIC_vector (3 DOWNTO 0); BEGIN

Qa <= count_4(0); Qb <= count_4(1); Qc <= count_4(2); Qd <= count_4(3); PROCESS (clk,clr) BEGIN

IF (clr = '1' ) THEN Count_4 <= \

ELSIF (clk'EVENT AND clk = '1' ) THEN IF (en = '1' ) THEN

IF (count_4 = \ count_4 <= \ ELSE

count_4 <= count_4+ '1'; END IF; END IF; END IF; END PROCESS; END example;

2.用结构描述法和GENERATE语句设计一个8位移位寄存器。 答:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY shift_register IS PORT(a,clk: IN STD_LOGIC; b: OUT STD_LOGIC); END ENTITY shift_regester;

ARCHITECTURE eight_BIT_shift_register OF shift_register IS

COMPONENT dff -- dff元件调用 PORT(a,Clk: IN STD_LOGIC; b: OUT STD_LOGIC); END COMPONENT;

SIGNAL X: STD_LOGIC_VECTOR(0 TO 4); BEGIN

X(0) <= a;

dff1:dff PORT MAP (X(0),clk,Z(1)); dff2:dff PORT MAP (X(1),clk,Z(2)); dff3:dff PORT MAP (X(2),clk,Z(3)); dff4:dff PORT MAP (X(3),CLK,Z(4)); dff5:dff PORT MAP (X(4),CLK,Z(5)); dff6:dff PORT MAP (X(5),CLK,Z(6)); dff7:dff PORT MAP (X(6),CLK,Z(7)); dff4:dff PORT MAP (X(7),CLK,Z(8)); B<=X(8);

END ARCHITECTURE eight_bit_shift_register;

3.设计一个加法器,

答:半加器及全加器VHDL程序设计(1)。

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY full_adder IS

PORT (a,b,cin:IN STD_LOGIC; Sum,co:OUT STD_LOGIC); END full_adder;

ARCHITECTURE full1 OF full_adder IS COMPONENT half_adder

PORT (a,b:IN STD_LOGIC; S,co:OUT STD_LOGIC); END COMPONENT;

SIGNAL u0_co,u0_s,u1_co:STD_LOGIC; BEGIN

U0:half_adder PORT MAP (a,b,u0_s,u0_co); U1:half_adder PORT MAP (u0_s,cin,sum,u1_co); Co <= u0_co OR u1_co; END full1;

半加器及全加器VHDL程序设计(2)。

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY half_adder IS

PORT (a,b:IN STD_LOGIC; S,co:OUT STD_LOGIC); END half_adder;

ARCHITECTURE half1 OF half_adder IS SIGNAL c,d:STD_LOGIC; BEGIN

C <= a OR b; D <= a NAND b; Co <= NOT d;

S <= c AND d; END half1;

4.设计一个8位循环移位寄存器。

答: 8位循环计寄存器的VHDL参考程序设计如下: LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY circleshift8 IS

PORT (seldata:in std_logic_vector(2 downto 0); clr,clk: IN STD_LOGIC;

sel: OUT STD_LOGIC_vector(7 downto 0)); END circleshift8;

ARCHITECTURE sample OF circleshift8 IS begin

process(clk,clr) Begin

if (clr='1')then sel<=\ elsif clk'event and clk='1' then case seldata is

when \ sel<=\ when \ sel<=\ when \ sel<=\ when \ sel<=\ when \ sel<=\ when \ sel<=\ when \ sel<=\ when others => sel<=\ end case; end if; end process; end sample;

5.设计一个六十进制计数器。

答: 60进制计数器的VHDL参考程序设计如下: Library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all;

--******************************************************* Entity counter60 is port(

cp:in std_logic;

bin:out std_logic_vector(6 downto 0); s:in std_logic; clr:in std_logic; ec:in std_logic;

cy60:out std_logic );

End counter60;

--******************************************************* Architecture b of counter60 is

signal q:std_logic_vector(6 downto 0); signal rst,dly:std_logic; begin

process(rst,cp) begin

if rst='1' then q<=\ elsif cp'event and cp='1' then dly<=q(5); if ec='1'then

if q=59 then q<=\ else q<=q+1; end if; else q<=q; end if;

end if; end process;

cy60<= not q(5) and dly; rst<= clr;

bin<=q when s='1' else \End b;

6.设计一个八位编码器。

答: 八位编码器的VHDL参考程序设计如下: LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY priotyencoder IS

PORT (d : IN Std_Logic_Vector (7 Downto 0); E1: IN Std_Logic;

GS,E0: OUT BIT STD_LOGIC;

Q : OUT Std_Logic_Vector(2 Downto 0); END priotyencoder;

ARCHITECTURE encoder OF prioty encoder IS BEGIN

P1: PROCESS ( d ) BEGIN

IF ( d(0) = 0 AND E1 = 0 ) THEN Y <= 111; GS <= 0 ; E0 <= 1 ;

ELSIF (d(1) = 0 AND E1 = 0 ) THEN Q <= 110;

GS <= 0 ; E0 <= 1 ;

ELSIF (d(2) = 0 AND E1 = 0 ) THEN Q <= 101 ; GS <= 0 ; E0 <= 1 ;

ELSIF (d(3) = 0 AND E1= 0 ) THEN Q <= 100 ; GS <= 0 ; E0 <= 1 ;

ELSIF (d(4) = 0 AND E1= 0 ) THEN Q <= 011 ; GS <= 0 ; E0 <= 1 ;

ELSIF (d(5) = 0 AND E1= 0 ) THEN Q <= 010 ; GS <= 0 ; E0 <= 1 ;

ELSIF (d(6) = 0 AND E1 = 0 ) THEN Q <= 001 ; GS<= 0 ; E0<= 1 ;

ELSIF (d(7) = 0 AND E1 = 0 ) THEN Q <= 000 ; GS <= 0 ; E0 <= 1 ;

ELSIF (E1 = 1 ) THEN Q <= 111 ; GS <= 1 ; E0 <= 1 ;

ELSIF (d = 1111 1111 AND E1 = 0 ) THEN Q <= 111 ; GS <= 1 ; E0 <= 0 ; END IF;

END PROCESS P1; END encoder;

7.设计一个三八译码器。

答: 三八译码器的VHDL参考程序设计如下:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY decoder3_8 IS

PORT (a,b,c,g1,g2a,g2b:IN STD_LOGIC;

Y:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END decoder3_8;

ARCHITECTURE rtl OF decoder3_8 IS

SIGNAL indata:STD_LOGIC_VECTOR (2 DOWNTO 0); BEGIN

Indata <= c & b & a;

PROCESS (indata,g1,g2a,g2b)

BEGIN

IF (g1 = 1 AND g2a = 0 AND g2b = 0 ) THEN CASE indata IS

WHEN 000 => y <= 11111110 ;

WHEN 001 => y <= 11111101 ; WHEN 010 => y <= 11111011 ; WHEN 011 => y <= 11110111 ; WHEN 100 => y <= 11101111 ; WHEN 101 => y <= 11011111 ; WHEN 110 => y <= 10111111 ; WHEN 111 => y <= 01111111 ; WHEN OTHERS=> y <= XXXXXXXX ; END CASE; ELSE

Y <= 11111111 ; END IF; END PROCESS;

END rtl;

8.数据选择器MUX,其系统模块图和功能表如下图所示。设计一数据选择器MUX,其系统模块图和功能表如下图所示。试采用下面三种方式中的两种来描述该数据选择器MUX的结构体。

(a) 用if语句。 (b) 用case 语句。 (c) 用when else 语句。

SEL(1:0)SEL00COUTA or BA xor BA and BA nor B“XX”

AIN(1:0)BIN(1:0)MUXCOUT(1:0)011011OTHERSLibrary ieee;

Use ieee.std_logic_1164.all;

Entity mymux is

Port ( sel : in std_logic_vector(1 downto 0);-- 选择信号输入 Ain, Bin : in std_logic_vector(1 downto 0); -- 数据输入 Cout : out std_logic_vector(1 downto 0) ); End mymux;

Architecture one of mymux is Begin

Process (sel, ain, bin) Begin

End process; End one;

Architecture two of mymux is Begin

Process (sel, ain, bin) Begin

End process; End two;

Architecture three of mymux is Begin

9.根据右图提示,试写出具有异步复位和进位功能的十进制计数器。

说明:

(1) 复位信号 rst;

(2) 端口名如图所示; clkosrstcount[3..0]cnt10(3) 中间计数信号自己定义。

10.试用用vhdl语言描述下面的原理图电路

inst15

ab INPUTVCCINPUTVCCAND2OR2inst6AND2NOR2OUTPUTfcde

INPUTVCCINPUTVCCINPUTVCCinst9inst10inst7

11.试用case语句描述3-8译码器的逻辑功能

说明:

(1)输出低电平有效; (2)中间信号自己定义;

(3)一个输入使能端EN,当EN信号低电平时,译码器工作,否则译码器被禁止,

所有输出端被封为高电平;

12.看下面原理图,写出相应VHDL描述。

xinINPUTblock_nameENY[6..0]ABCinst11

DFFORDFFDclkINPUTQDQOUTPUTyout