可编程逻辑器件复习题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
可编程逻辑器件复习题
可编程逻辑习题
一、选择题
1. 一个项目的输入输出端口是定义在
A 。
A. 实体中
B. 结构体中
C. 任何位置
D. 进程体
2. 描述项目具有逻辑功能的是 B 。
A. 实体
B. 结构体
C. 配置
D. 进程
3. 关键字ARCHITECTURE定义的是 A 。
A. 结构体
B. 进程
C. 实体
D. 配置
4. MAXPLUSII中编译VHDL源程序时要求
C 。
A.文件名和实体可不同名
B.文件名和实体名无关
C. 文件名和实体名要相同
D. 不确定
5. 1987标准的VHDL语言对大小写是 D 。
A. 敏感的
B. 只能用小写
C. 只能用大写
D. 不敏感
6. 关于1987标准的VHDL语言中,标识符描述正确的是 A 。
A. 实体中任何位置
B. 实体中特定位置
C. 结构体中任何位置
D. 结构体中特定位置
14. 变量是局部量可以写在 B 。
A. 实体中
B. 进程中
C. 线粒体
D. 种子体中
15. 变量和信号的描述正确的是 A 。
A. 变量赋值号是:=
B. 信号赋值号是:=
C. 变量赋值号是<=
D. 二者没有区别
16. 变量和信号的描述正确的是 B 。
A. 变量可以带出进程
B. 信号可以带出进程
C. 信号不能带出进程
D. 二者没有区别
17. 关于VHDL数据类型,正确的是 D 。
A. 数据类型不同不能进行运算
B. 数据类型相同才能进行运算
C. 数据类型相同或相符就可以运算
D. 运算与数据类型无关
18. 下面数据中属于实数的是 A 。
A. 4.2
B. 3
C. ‘1’
D. “11011”
19. 下面数据中属于位矢量的是 D 。
A. 4.2
B. 3
C. ‘1’
D. “11011”
20. 关于VHDL数据类型,正确的是。
A. 用户不能定义子类型
B. 用户可以定义
子类型
C. 用户可以定义任何类型的数据
D. 前面三个
答案都是错误的
21. 可以不必声明而直接引用的数据类型是
C 。
A. STD_LOGIC
B. STD_LOGIC_VECTOR
C. BIT
D. 前面三个答案都是错误的
22. STD_LOGIG_1164中定义的高阻是字符
D 。
A. X
B. x
C. z
D.
Z
23. STD_LOGIG_1164中字符H定义的是
A 。
A. 弱信号1
B. 弱信号0
C. 没有这个
定义 D. 初始值
24. 使用STD_LOGIG_1164使用的数据类型时
B 。
A.可以直接调用
B.必须在库和包集合中声明
C.
必须在实体中声明 D. 必须在结构体中声明
25. 关于转化函数正确的说法是。
A. 任何数据类型都可以通过转化函数相互转化
B. 只有特定类型的数据类型可以转化
C. 任何数据类型都不能转化
D. 前面说法都是错误的
26. VHDL运算符优先级的说法正确的是
C 。
A. 逻辑运算的优先级最高
B. 关系运算的优先级最高
C. 逻辑运算的优先级最低
D. 关系运算的优先级最低
27. VHDL运算符优先级的说法正确的是
A 。
A. NOT的优先级最高
B. AND和NOT属于同一个优先级
C. NOT的优先级最低
D. 前面的说法都是错误的
28. VHDL运算符优先级的说法正确的是
D 。
A. 括号不能改变优先级
B. 不能使用括号
C. 括号的优先级最低
D. 括号可以改变优先级
29. 如果a=1,b=0,则逻辑表达式(a AND b) OR ( NOT b AND a)的值是 B 。
A. 0
B. 1
C. 2
D. 不确定
30. 关于关系运算符的说法正确的是。
A. 不能进行关系运算
B. 关系运算和数据类型无关
C. 关系运算数据类型要相同
D. 前面的说法都错误
31. 转换函数TO_BITVECTOR(A)的功能是。
A. 将STDLOGIC_VECTOR转换为BIT_VECTOR
B. 将REAL转换为BIT_VECTOR
C. 将TIME转换为BIT_VECTOR
D. 前面的说法都错误
32. VHDL中顺序语句放置位置说法正确的是。
A.可以放在进程语句中
B. 可以放在子程序中
C. 不能放在任意位置
D. 前面的说法都正确
33. 不属于顺序语句的是 B 。
A. IF语句
B. LOOP语句
C. PROCESS语句
D. CASE语句
34. 正确给变量X赋值的语句是 B 。
A. X<=A+B;
B. X:=A+b;
C. X=A+B;
D. 前面的都不正确
35. EDA的中文含义是 A 。
A. 电子设计自动化
B. 计算机辅助计算
C. 计算机辅助教学
D. 计算机辅助制造
36. 可编程逻辑器件的英文简称是。
A. FPGA B. PLA C. PAL D. PLD
37. 现场可编程门阵列的英文简称是。
A. FPGA
B. PLA
C. PAL
D. PLD
38. 基于下面技术的PLD器件中允许编程次数最多的是。
A. FLASH
B. EEROM
C. SRAM
D. PROM
39. 在EDA中,ISP的中文含义是。
A. 网络供应商
B. 在系统编程
C. 没有特定意义
D. 使用编程器烧写PLD芯片
40. 在EDA中,IP的中文含义是。
A. 网络供应商
B. 在系统编程
C. 没有特定意义
D. 知识产权核
41. EPF10K20TC144-4具有多少个管脚
A 。
A. 144个
B. 84个
C. 15个
D. 不确定
42. EPF10K20TC144-X器件,如果X的值越小表示。
A. 器件的工作频率越小
B. 器件的管脚越少
C. 器件的延时越小
D. 器件的功耗越小
43. 如果a=1,b=1,则逻辑表达式(a XOR b) OR ( NOT b AND a)的值是 A 。
A. 0
B. 1
C. 2
D. 不确定
44. 执行下列语句后Q的值等于 B 。
……
SIGNAL E: STD_LOGIC_VECTOR (2 TO 5);
SIGNAL Q: STD_LOGIC_VECTOR (9 DOWNTO 2);
……
E<=(2=>’1’, 4=>’0’, OTHERS=>’1’);
Q<=(2=>E (2), 4=>E (3), 5=>’1’, 7=>E
(5), OTHERS=>E (4));
……
A.“11011011” B. “00101101” C. “11011001” D. “00101100”
45. VHDL文本编辑中编译时出现如下的报错信息
Error: VHDL syntax error: signal
declaration must have ‘;’,but found begin
instead. 其错误原因是 A 。
A. 信号声明缺少分号。
B. 错将设计文件存入了
根目录,并将其设定成工程。
C. 设计文件的文件名与实体名不一致。
D. 程
序中缺少关键词。
46. VHDL文本编辑中编译时出现如下的报错信息
Error: VHDL syntax error: choice value
length must match selector expression
value length 其错误原因是 A 。
A. 表达式宽度不匹配。
B. 错将设计文件存入
了根目录,并将其设定成工程。
C. 设计文件的文件名与实体名不一致。
D. 程
序中缺少关键词。
47. MAX+PLUSII的设计文件不能直接保存在
B 。
A.硬盘 B. 根目录 C. 文件夹 D. 工程目录
48. MAXPLUSII是哪个公司的软件 A 。
A. ALTERA
B. ATMEL
C. LATTICE
D. XILINX
49. MAXPLUSII不支持的输入方式是 D 。
A. 文本输入
B. 原理图输入
C. 波形输
入 D. 矢量输入
50. MAXPLUSII中原理图的后缀是 B 。
A. DOC
B. GDF
C. BMP
D. JIF
51. 在一个VHDL设计中Idata是一个信号,数据
类型为std_logic_vector,试指出下面那个赋值语
句是错误的。
D 。
A.idata <= “00001111”;
B.idata <=
b”0000_1111”;
C.idata <= X”AB”
D. idata <= B”21”;
52. 在VHDL语言中,下列对时钟边沿检测描述中,
错误的是 D 。
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
53. 下面对利用原理图输入设计方法进行数字电
路系统设计的描述中,那一种说法是不正确的。
A.原理图输入设计方法直观便捷,但不适合完成较
大规模的电路系统设计;
B.原理图输入设计方法一般是一种自底向上的设计方法;
C.原理图输入设计方法无法对电路进行功能描述;
D.原理图输入设计方法也可进行层次化设计。
54. 在一个VHDL设计中idata是一个信号,数据类型为integer,数据范围0 to 127,下面哪个赋值语句是正确的。
C 。
A.idata := 32;
B.idata <= 16#A0#;
C.idata <= 16#7#E1;
D.idata := B#1010#;
55. 下列那个流程是正确的基于EDA软件的FPGA / CPLD设计流程: A 。
A.原理图/HDL文本输入→功能仿真→综合→适配→编程下载→硬件测试
B.原理图/HDL文本输入→适配→综合→功能仿真→编程下载→硬件测试;
C.原理图/HDL文本输入→功能仿真→综合→编程下载→→适配硬件测试;
D.原理图/HDL文本输入→功能仿真→适配→编程下载→综合→硬件测试
56. 在VHDL语言中,下列对进程(PROCESS)语句的语句结构及语法规则的描述中,正确的是。
A.PROCESS为一无限循环语句;敏感信号发生更新时启动进程,执行完成后,等待下一次进程启动。
B.敏感信号参数表中,应列出进程中使用的所有输入信号;
C.进程由说明部分、结构体部分、和敏感信号参数表三部分组成;
D.当前进程中声明的信号也可用于其他进程。
57. 对于信号和变量的说法,哪一个是不正确的:
A 。
A.信号用于作为进程中局部数据存储单元
B.变量的赋值是立即完成的
C.信号在整个结构体内的任何地方都能适用
D.变量和信号的赋值符号不一样
58. VHDL语言共支持四种常用库,其中哪种库是用户的VHDL设计现行工作库:。
A.IEEE库
B.VITAL库
C.STD库
D.WORK工作库
59. 下列语句中,不属于并行语句的是:
B 。
A.进程语句
B.CASE语句
C.元件例化语句
D.WHEN…ELSE…语句
60. 下面哪一条命令是MAX+PLUSII在时序仿真时执行加载节点的命令? C 。
A. file—>set project to current file
B. assign—>pin/location chip
C. node—>enter node from SNF
D. file —>create default symbol
61. 在EDA工具中,能将硬件描述语言转换为硬件
电路的重要工具软件称为 D 。
A.
仿真器 B.综合器 C.适配器 D.下载器
62. VHDL文本编辑中编译时出现如下的报错信息Error: Can’t open VHDL“WORK”其错误原因是 B 。
A. 错将设计文件的后缀写成.tdf,而非.vhd 。
B. 错将设计文件存入了根目录,并将其设定成工程。
C. 设计文件的文件名与实体名不一致。
D. 程序中缺少关键词。
63. 在VHDL的CASE语句中,条件句中的“=>”不是操作符号,它只相当与 B 作用。
A. IF
B. THEN
C. AND
D. OR
64. 下面哪一条命令是MAXPLUSII软件中引脚锁定的命令 C 。
A.file—>set project to current file B.node—>enter node from SNF
C. assign—>pin/location chip D. file —>create default symbol]
65. 下列关于信号的说法不正确的是 C 。
A . 信号相当于器件内部的一个数据暂存节点。
B. 信号的端口模式不必定义,它的数据既可以流进,也可以流出。
C. 在同一进程中,对一个信号多次赋值,其结果只有第一次赋值起作用。
D. 信号在整个结构体内的任何地方都能适用。
66. 下面哪一个可以用作VHDL中的合法的实体名
D 。
A. OR
B. VARIABLE
C. SIGNAL
D. OUT1
67. VHDL文本编辑中编译时出现如下的报错信息Error:Line1,File e:\muxfile\mux21.tdf: TDF syntax error…其错误原因是 A 。
A. 错将设计文件的后缀写成.tdf 而非.vhd 。
B. 错将设计文件存入了根目录,并将其设定成工程。
C. 设计文件的文件名与实体名不一致。
D. 程序中缺少关键词。
68. 下列关于变量的说法正确的是 A 。
A. 变量是一个局部量,它只能在进程和子程序中使用。
B. 变量的赋值不是立即发生的,它需要有一个δ延时。
C. 在进程的敏感信号表中,既可以使用信号,也可以使用变量。
D. 变量赋值的一般表达式为:目标变量名<= 表达式。
69. 下列关于CASE语句的说法不正确的是
B 。
A. 条件句中的选择值或标识符所代表的值必须在表达式的取值范围内。
B. CASE语句中必须要有WHEN OTHERS=>NULL;语句。
C. CASE语句中的选择值只能出现一次,且不允许有相同的选择值的条件语句出现。
D. CASE语句执行必须选中,且只能选中所列条件语句中的一条。
70. VHDL中,为目标变量赋值符号是 D 。
A. =:
B. =
C. <=
D.:=
71. 在VHDL中,可以用语句 D 表示检测clock下降沿。
A. clock’event
B. clock’event and clock=’1’
C. clock=’0’
D. clock’event and clock=’0’
72.在VHDL的FOR_LOOP语句中的循环变量是一个临时变量,属于LOOP语句的局部量, B 事先声明。
A. 必须 B. 不必 C. 其类型要 D.其属性要
73. 在VHDL中,语句”FOR I IN 0 TO 7 LOOP ”定义循环次数为 A 次。
A. 8
B. 7
C. 0
D.1
74. 在VHDL中,PROCESS结构内部是由 B 语句组成的。
A. 顺序
B. 顺序和并行
C. 并行
D.任何
75. 执行MAX+PLUSII的 C 命令,可以对设计的电路进行仿真。
A.Creat Default Symbol
piler
C.Simulator
D.Programmer
76. 在VHDL中,PROCESS本身是 C 语句。
A. 顺序
B.顺序和并行
C.并行
D.任何
77. 下面哪一个是VHDL中的波形编辑文件的后缀名 B 。
A. gdf
B. scf
C. sys
D. tdf
78. 在元件例化语句中,用 D 符号实现名称映
射,将例化元件端口声明语句中的信号与PORT MAP()中的信号名关联起来。
A. =
B. :=
C. <=
D.=>
79.在VHDL中,含WAIT语句的进程PROCESS的括
弧中 B再加敏感信号,否则则是非法
的。
A. 可以
B.不能
C. 必须
D.
有时可以
80.在MAX+PLUSII集成环境下为图形文件产生一个
元件符号的主要作用是 D 。
A. 综合
B. 编译
C. 仿真
D.
被高层次电路设计调用
81.在MAX+PLUSII工具软件中,完成网表提取、数
据库建立、逻辑综合、逻辑分割、适配、延时
网表提取和编程文件汇编等操作,并检查设计
文件是否正确的过程称为。
A. 编辑
B. 编译
C. 综合
D. 编程
82. VHDL文本编辑中编译时出现如下的报错信息
Error: VHDL Design File “mux21” must contain an entity of the same name
其错误原因是 C 。
A. 错将设计文件的后缀写成.tdf 而非.vhd 。
B. 错将设计文件存入了根目录,并将其设定成工程。
C. 设计文件的文件名与实体名不一致。
D. 程序中缺少关键词。
83. 执行下列语句后Q的值等于 D 。
……
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”
84. 综合是EDA设计流程的关键步骤,综合就是把抽象设计层次中的一种表示转化成另一种表示的过程;在下面对综合的描述中,是错误的。
A. 综合就是将电路的高级语言转化成低级的,可与FPGA / CPLD的基本结构相映射的网表文件;
B. 为实现系统的速度、面积、性能的要求,需要对综合加以约束,称为综合约束;
C. 综合可理解为,将软件描述与给定的硬件结构用电路网表文件表示的映射过程,并且这种映射关系不是唯一的。
D. 综合是纯软件的转换过程,与器件硬件结构无关;
85. 关于VHDL中的数字,请找出以下数字中数值最小的一个:
A. 2#1111_1110#
B. 8#276#
C. 10#170#
D. 16#E#E1
86. 以下对于进程PROCESS的说法,正确的是:
C 。
A. 进程之间可以通过变量进行通信
B. 进程内部由一组并行语句来描述进程功能
C. 进程语句本身是并行语句
D.一个进程可以同时描述多个时钟信号的同步时序逻辑
87. 进程中的信号赋值语句,其信号更新
是。
A.按顺序完成;
B.比变量更快完成;
C.在进程的最后完成;
D.以上都不对。
88.关于VHDL中的数字,请找出以下数字中最大
的一个:。
A.2#1111_1110# B.8#276# C. 0#170#
D.6#E#E1
89.VHDL语言是一种结构化设计语言;一个设计实
体(电路模块)包括实体与结构体两部分,结构体
描述。
A.器件外部特性; B.器件的内
部功能;C.器件的综合约束;
C.器件外部特性与内部功能。
90.下列标识符中, B 是不合法的标识符。
A. State0
B. 9moon
C. Not_Ack_0
D.
signal
91.在VHDL中,IF语句中至少应有1个条件句,
条件句必须由表达式构成。
A. BIT
B. STD_LOGIC
C. BOOLEAN
D.
INTEGER
92. 在VHDL中 D 不能将信息带出对它定义的
当前设计单元。
A. 信号
B. 常量
C. 数据
D. 变量
93.在VHDL中,为定义的信号赋初值,应该使用__D___ 符号。
A. =:
B. =
C. :=
D. <=
94.在VHDL中,一个设计实体可以拥有一个或多个
D
A. 设计实体
B. 结构体
C. 输入
D. 输出
95. 执行下列语句后Q的值等于 A 。
……
SIGNAL E: STD_LOGIC_VECTOR (2 TO 5);
SIGNAL Q: STD_LOGIC_VECTOR (9 DOWNTO 2);
E<=(2=>’1’, 4=>’1’, OTHERS=>’0’);
Q<=(2=>E (2), 4=>E (3), 5=>’1’, 7=>E
(5), OTHERS=>E (4)); ……A.“11011011” B. “00110100” C. “11011001” D. “00101100”
96. 在VHDL的IEEE标准库中,预定义的标准逻辑位STD_LOGIC的数据类型中是用表示的。
A.小写字母和数字 B. 大写字母数字 C.大或小写字母和数字 D. 全部是数字
97. 执行MAX+PLUSII的 A 命令,可以为设
计电路建立一个元件符号。
A. create default symbol B. simulator
C. compiler
D. timing analyzer
98. 在VHDL中,条件信号赋值语句WHEN_ELSE属
于语句。
A.并行和顺序 B. 顺序 C. 并行
D. 不存在的
99. 在VHDL的IEEE标准库中,预定义的标准逻辑
数据STD_LOGIC有 C 种逻辑值。
A. 2 B. 3 C. 9 D. 8 100.一个能为VHDL综合器接受,并能作为一个独
立的设计单元的完整的VHDL程序成为。
A.设计输入 B. 设计输出 C. 设计实体
D. 设计结构
二、填空题
1.EDA设计流程包括设计输入、设计实现、实际
设计检验和下载编程四个步骤。
2.EDA设计输入主要包括图形输入、HDL文本输入
和状态机输入。
3.时序仿真是在设计输入完成之后,选择具体器件并完成布局、布线之后进行的时序关系仿真,因此又称为功能仿真。
4.VHDL的数据对象包括变量、常量和信号,它们是用来存放各种类型数据的容器。
5.图形文件设计结束后一定要通过仿真,检查设计文件是否正确。
6.以EDA方式设计实现的电路设计文件,最终可以编程下到FPGA和CPLD芯片中,完成硬件设计和验证。
7.MAX+PLUS的文本文件类型是(后缀名).VHD。
8.在PC上利用VHDL进行项目设计,不允许在根目录下进行,必须在根目录为设计建立一个工程目录。
9.VHDL源程序的文件名应与实体名相同,否则无法通过编译。
三、名词解释题:(本大题共3题,每小题3分,共计9分)
1.A SIC 专用集成电路
2.F PGA 现场可编程门阵列
3.C PLD 复杂可编程逻辑器件
4.E DA 电子设计自动化
5.I P 知识产权核
6.S OC 单芯片系统
7.V HDL和FPGA: 超高速硬件描述语言现
场可编程门阵列
四、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
-- 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
S IGNAL TMP : STD_LOGIC;
-- 9
BEGIN
-- 10
S YNC : PROCESS(CLK, A)
-- 11
B EGIN
-- 12
IF CLK'EVENT AND CLK = '1' THEN -- 13
TMP <= A;
-- 14
END IF;
-- 15
E ND PROCESS;
-- 16
O UTLED : PROCESS(TMP)
-- 17
B EGIN
-- 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
E ND 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";
五、阅读下列VHDL程序,画出原理图(RTL级)
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY HAD IS
PORT ( a : IN STD_LOGIC;
b : IN STD_LOGIC;
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 描述
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY TRI_STATE IS
e a
b y
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’时允许写入数据。
试分别回答问题
放大
采样/保持
AnalogIn
信号预处理FPGA采集控制
adram
(lpm_ram_dp)
Control
AD574
CS ADData 12
CE A0
RC K12_8
地址计数器
CLK
ClkInc Cntclr
wraddr
10
wren
rddata
12
rddata rdaddr
10
12
1
STATUS 下面列出了AD574的控制方式和控制时序图
AD574逻辑控制真值表(X 表示任意) CE CS RC K12_8
A0 工 作 状 态
0 X X X X 禁止 X 1 X X X
禁止
1 0 0 X 0 启动12位转换 1 0 0 X 1 启动8位转换 1 0 1 1 X 12位并行输出
有效
1 0 1 0 0 高8位并行输
出有效
1 0 1 0 1 低4位加上尾
随4个0有效
AD574工作时序:
1.要求AD574工作在12位转换模式,K12_8、A0在control中如何设置
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
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;
八、EDA知识补充
名词解释,写出下列缩写的中文(或者英文)含义:1. FPGA Field-Programmable Gate Array 现场可编程门阵列
2 VHDL Very-High-Speed Integrated Circuit Hardware Description Language)甚高速集成电路硬件描述语言
3 HDL Hardware Description Language硬件描述语言
5 CPLD Complex Programmable Logic Device
复杂可编程逻辑器件
6 PLD Programmable Logic Device 可编程逻辑器件
7 GAL generic array logic通用阵列逻辑
8. LAB Logic Array Block逻辑阵列块 9.
CLB Configurable Logic Block 可配置逻辑模块
10 EABEmbedded Array Block 嵌入式阵列块11SOPC System-on-a-Programmable-Chip 可编程片上系统
12. LUT Look-Up Table 查找表 13. JTAG Joint Test Action Group 联合测试行为组织14.IPIntellectual Property 知识产15ASIC Application Specific Integrated Circuits 专用集成电路
16 ISP In System Programmable 在系统可编程17 ICR In Circuit Re-config 在电路可重构
18 RTL Register Transfer Level 寄存器传输19EDA Electronic Design Automation 电子设计自动化
信号与变量的区别:
信号赋值语句在进程外作为并行语句,并发执行,与语句所处的位置无关。
变赋值语句在进程内或子程序内作为顺序语句,按顺序执行,与语句所处的位置有关。
信号赋值符号为 <=,变量赋值符号位 := 。
信号赋值符号用于信号赋值动作,不立
即生效,变量赋值符号用于变量赋值动作,立即生效。
1、 FPGA结构一般分为三部分:可编程逻辑块(CLB)、可编程I/O模块和可编程内部连线。
2、 CPLD的内部连线为连续式布线互连结构,任意一对输入、输出端之间的延时是固定;FPGA的内部连线为分段式布线互连结构,各功能单元间的延时不定(不可预测)。
3、大规模可编程器件主要有CPLD和FPGA两类,其中CPLD通过可编程乘积项逻辑实现其逻辑功能。
基于SRAM的FPGA器件,每次上电后必须进行一次配置。
FPGA内部阵列的配置一般采用在电路可重构技术,编程数据保存在静态存储器(SRAM) ,掉电易失。
4、目前世界上有十几家生产CPLD/FPGA的公司,最大的两家是:Altera,Xilinx。
5、硬件描述语言(HDL)是EDA技术的重要组成部分,是电子系统硬件行为描述、结构描述、数据流描述的语言,它的种类很多,如VHDL、Verilog HDL、AHDL
6、 WHEN_ELSE条件信号赋值语句和 IF_ELSE顺序语句的异同:
* WHEN_ELSE条件信号赋值语句中无标点,只有最后有分号;必须成对出现;是并行语句,必须放在结构体中。
* IF_ELSE顺序语句中有分号;是顺序语句,必须放在进程中
7、可编程逻辑器件设计输入有原理图输入、硬件描述语言输入和波形输入三种方式。
原理图输入方式是一种最直接的设计描述方式,波形设计输入适用于时序逻辑和有重复性的逻辑函数。
硬件描述语言的突出优点是:
* 语言与工艺的无关性;语言的公开可利用性,便于实现大规模系统的设计;
* 具有很强逻辑描述和仿真功能,而且输入效率高,在不同设计输入库之间的转换非常方便,用不着对底层的电路和PLD结构的熟悉。
8、用VHDL/Veilog HDL语言开发可编程逻辑电路的完整流程:文本编辑→功能仿真→逻辑综合→布局布线→时序仿真。
*所谓综合,就是根据设计功能和实现该设计的约束条件(如面积、速度、功耗和成本等),将设计输入转换成满足要求的电路设计方案,该方案必须同时满足与其的功能和约束条件。
综合的过程也是设计目标的优化过程,其目的是将多个模块化设计文件合并为一个网表文件,供布局布线使用,网表中包含了目标器件中的逻辑单元和互连的信息。
*布局布线就是根据设计者指定的约束条件(如面积、延时、时钟等)、目标器件的结构资源和工艺特性,以最优的方式对逻辑元件布局,并准确地实现元件间的互连,完成实现方案(网表)到使实际目标器件(FPGA或CPLD)的变换。
9、基于EDA软件的FPGA / CPLD设计流程为:原理图/HDL文本输入→功能仿真→综合→适配→时序仿真→编程下载→硬件测试。
* 综合是EDA设计的关键步骤,综合就是将电路的高级语言转换成低级的,可与FPGA/CPLD相映射的功能网表文件。
为实现系统的速度、面积、性能的要求,需要对综合加以约束,称为综合约束。
10、构成一个完整的VHDL语言程序的五个基本结构:
实体(ENTITY)、结构体(ARCHITECURE)、配置(CONFIGURATION) 、库(LIBRARY) 、程序包(PACKAGE) 。
*实体的由实体说明和结构体两部分组成。
实体说明部分用于描述所设计系统的外部端口信号和参数的属性和设置,而结构体部分则定义了设计单元的具体功能、行为、数据流程或内部结构。
*结构体的三种描述方式,即行为级描述、数据流级描述和结构级描述。
*结构体通常由结构体名称、定义语句和并行处理语句构成。
*程序包用于存放各设计模块能共享的数据类型、常数、子程序等。
*库用于存放已编译的实体、结构体、程序包和配置,可以通过其目录进行查询和调用。
在VHDL 语言中,可以存在多个不同的库,但是库与库之间是独立的,不能互相嵌套。
它可由用户生成或由ASIC芯片制造商提供,以便于在设计中为大家所共享。
*库用于存放已编译的实体、结构体、程序包和配置,可以通过其目录进行查询和调用。
在VHDL 语言中,可以存在多个不同的库,但是库与库之间是独立的,不能互相嵌套。
它可由用户生成或由ASIC芯片制造商提供,以便于在设计中为大家所共享。
常用库:
(1)IEEE库:IEEE库主要包括std_logic_1164、numeric_bit、numeric_std等程序包,还有一些程序包非IEEE标准,但并入IEEE库,如
std_logic_arich、std_logic_unsigned、
std_logic_signed。
使用IEEE程序包,必须声明。
(2) std库:包含 standard textio程序包。
Std 库符合IEEE标准,应用中不必声明。
(3) work库:用户的VHDL设计先行工作库。
(4) vital 库:包含时序程序包vital_timing和vital_primitives。
设计开发过程通常不用,每个设计实体都必须有各自完整的库说明语句和use语句。
Use语句的使用将使说明的程序包对本设计实体部分全部开放,即是可视的。