1、习 题3.1 比较常用硬件描述语言 VHDL、Verilog 和 ABEL 语言的优劣。1.VHDL:描述语言层次较高,不易控制底层电路,因而对综合器的性能要求较高。有多种EDA 工具选择,已成为 IEEE 标准。应用 VHDL 进行工程设计的优点是多方面的,具体如下:(1) 与其他的硬件描述语言相比,VHDL 具有更强的行为描述能力。 (2) VHDL 具有丰富的仿真语句和库函数,使得在任何大系统的设计早期,就能查验设计系统的功能可行性,随时可对系统进行仿真模拟,使设计者对整个工程的结构和功能可行性做出判断。(3) VHDL 语句的行为描述能力和程序结构,决定了它具有支持大规模设计的分解和已
2、有设计的再利用功能。 (4) 用 VHDL 完成一个确定的设计,可以利用 EDA 工具进行逻辑综合和优化,并自动把VHDL 描述设计转变成门级网表(根据不同的实现芯片)。(5) VHDL 对设计的描述具有相对独立性。 (6) VHDL 具有类属描述语句和子程序调用等功能,对于完成的设计,在不改变源程序的条件下,只需改变类属参量或函数,就能轻易地改变设计的规模和结构。2. Verilog:设计者需要了解电路的结构细节,对综合器的性能要求较低。有多种 EDA 工具选择,已成为 IEEE 标准。3.ABEL: 设计者需要了解电路的结构细节,对综合器的性能要求较低。支持 ABEL 的综合器只有一家,A
3、BEL 正朝国际化标准努力。3.2 VHDL 程序一般包括几个组成部分?每部分的作用是什么?(1 )三个基本组成部分:库、程序包使用说明,实体描述和实体对应的结构体描述。(2 )库、程序包使用说明:用于打开调用本设计实体将用到的库、程序包实体描述:用于描述该设计实体与外界的接口信号说明结构体描述:用于描述该设计实体内部的组成及内部工作的逻辑关系结构体配置语句主要用于层次化的方式对特定的设计实体进行元件的例化,或是为实体选定某个特定的结构体3.3 VHDL 语言中数据对象有几种?各种数据对象的作用范围如何?各种数据对象的实际物理含义是什么?(1 )数据对象有三种:变量、常量、信号(2 )常量的作
4、用范围取决于其所定义的位置。若在程序包中定义,则可以用在调用该程序包的所有设计实体中。若定义在实体中,则可在这个实体的所有结构体中使用。若定义在结构体中,则只能用于该结构体。若定义在进程/子程序中,则只能用于该进程/子程序。 变量属于局部量,作用范围仅限于所定义的进程或子程序内部。 信号属于全局量,作用范围取决于其所定义的位置。若在程序包中定义,则可以用在调用该程序包的所有设计实体中。若定义在实体中,则可在这个实体的所有结构体中使用。若定义在结构体中,则只能用于该结构体。(3 ) 信号表示硬件中的连线,用于各并行语句模块之间的通信。变量一般用于存储局部/临时数据。 常量表示电路中的恒定电平,可
5、使代码中常数易于阅读和修改。3.4 什么叫标识符?VHDL 的基本标识符是怎样规定的?(1 )标识符用来定义常量、变量、信号、端口、子程序或者参数的名字。(2 ) VHDL 的基本标识符就是以英文字母开头,不连续使用下划线,不以下划线结尾的,由 26 个英文大小写字母,数字 0-9 以及下划线组成的字符串。3.5 信号和变量在描述和使用时有哪些主要区别?(1 )变量只能在进程或子程序内部定义,用于存储局部/ 临时数据。信号只能在进程或子程序的外部定义,表示硬件中的连线,用于各并行语句模块之间的通信。 (2 )信号用 signal 关键字定义,赋值符号为” 顺序语句 ; when 选择值 2 =
6、 顺序语句 ; . end case; case 语句可根据一个表达式的不同取值执行不同的顺序语句。 使用时应注意:1.表达式的值可以是整型或枚举型的,或是这些数据类型构成的数组。2. 选择值可以是单个取值,如 4;也可以是一个取值范围,如 2 to 5;也可以是多个并列的取值,如 2|6;还可以是以上三种取值方式的混合。3.case 语句执行时,根据选择表达式的值来选择执行哪个顺序语句,选择的结果和每个选择值的顺序无关,只要求对于选择表达式的每个可能取值,有且仅有一个选择值与之匹配即可。4.常用 when others 表示其它未列出的选择值。5.“= ”后面的顺序语句可以有多个。 (3 )
7、 标号: for 循环变量 in 范围 loop 标号: while 条件 loop 顺序语句; 顺序语句; end loop 标号; end loop 标号;for 循环用于循环次数已知的情况; while 循环用于循环次数未知的情况。 使用时应注意:for 循环中的循环变量无需事先定义,可自动加 /减 1。 (4 ) next; 无条件中止当前循环,返回循环起点,开始下次循环。 exit; 无条件退出当前循环。 next loop 标号; 无条件中止 LOOP 标号标明的循环,返回 LOOP 标号处,开始下次循环。 exit loop 标号; 无条件退出 LOOP 标号标明的循环。 nex
8、t loop 标号 when 条件; 条件为真时中止 LOOP 标号标明的循环,返回 LOOP 标号处,开始下次循环。 exit loop 标号 when 条件; 条件为真时退出 LOOP 标号标明的循环。3.16 在 CASE 语句中在什么情况下可以不要 WHEN OTHERS 语句?在什么情况下一定要 WHEN OTHERS 语句?答:case 语句执行时,根据选择表达式的值来选择执行哪个顺序语句,要求对于选择表达式的每个可能取值,有且仅有一个选择值与之匹配。因此,当已列出的选择值能够覆盖选择表达式的所有可能取值时,可以不要 when others 语句。否则,要用 when others
9、 表示其它未列出的选择值。3.17 FORLOOP 语句应用于什么场合?循环变量怎样取值?是否需要事先在程序中定义?在重复的次数已知的情况下可以使用该语句。循环变量的取值是根据系统的功能要求给定 的,要事先在程序上定义。3.18 分别用 IF 语句、CASE 语句设计一个四十六译码器。a:用 IF 语句设计一个四十六译码器 PROCESS(G1,g2a,g2b,sel)beginif(g1=1and g2a=0and g2b=0)then if(sel=“0000“)then yyyyyyyyyyyyyyyyyy=“XXXXXXXXXXXXXXXX“;end case;3.19 WAIT 语句
10、有几种书写格式?哪些格式可以进行逻辑综合?wait until 结构 wait on 结构 其中 wait until 结构可以进行逻辑组合3.20 VHDL 的预定义属性的作用是什么?哪些项目可以具有属性?常用的预定义属性有哪几类?(1 ) 作用在于可对信号或其他的项目多种属性进行检测或统计。 (2 ) 具有属性的项目:类型,子类型,过程,函数,信号,变量,常量,实体,结构体,配置, 程序包,元件,语句标号。 (3 ) 常用的属性有信号类属性,数据区间类属性,数值类属性,数组属性 3.21 试用EVENT 属性描述一种用时钟 CLK 上升沿触发的 D 触发器及一种用时钟 CLK 下降沿触发的
11、 JK 触发器。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY dtrigger ISPORT(clk: IN STD_LOGIC;d : IN STD_LOGIC;q : OUT STD_LOGIC);END dtrigger;ARCHITECTURE behave OF dtrigger ISBEGINPROCESS(clk)BEGINIF clkEVENT AND clk=1 THENq:=d;END IF;END PROCESS;END behave;3.22 什么叫进程语句
12、?你是如何理解进程语句的并行性和顺序性的双重特性的?(1 )进程实际上是顺序语句描述的一种进程过程,进程是用于描述事件的,process 语句结构包含了一个代表实体中部分逻辑行为的独立的顺序语句描述的进程(2 )一个结构体中可以有多个并行进程结构,而有一个进程内部结构却是由一系列顺序语句来构成的,即进程语句间是并行执行的进程的内部是顺序执行的( 进程语句是一种描述硬件行为的语句,进程语句内部是由顺序语句构成的,内部执行时是顺 序性的,但进程语句属于并行语句,多个进程之间的执行并行运行。 )3.23 进程的启动条件是什么?如果进程有两个基本点敏感变量,其中一个由“0”变“1”,等待一段时间以后再
13、由“1”变“0”;而另一个只由 “1”变“0”改变一次,请问该进程将执行几遍?答:进程的启动条件:敏感信号列表中的任何一个敏感信号的值发生变化,或者 wait 语句中的条件为真。3 遍3.24 有人说,进程中的语句顺序颠倒一下并不会改变所描述电路的功能,这种说法对吗?为什么?不对。因为 PLC 的扫描过程是从左到右,从上到下进行的。同一进程中的逻辑描述语句是顺序运行的。3.25 并行信号赋值语句有几类?比较其异同。(1 ) 1.简单信号赋值语句 2.条件信号赋值语句 3.选择信号赋值语句(2 )共同点:赋值目标都是信号,都是并行语句,都相当于一个隐含的进程语句(信号赋值语句中的所有读入信号都作
14、为该进程的敏感信号)。 不同点:简单信号赋值语句是最简单的并行语句,执行时直接将表达式的值赋给信号。条件信号赋值语句的功能与 if 语句相同,在执行时按书写的先后顺序测试每个条件,一旦条件为真,则将表达式的值赋给信号。 选择信号赋值语句与 case 语句相似。当关键字 with 后的选择表达式的值发生变化时,就将该值和每个选择值进行比较,将选择值匹配的子句中的表达式的值赋给信号。 3.26 分别用条件信号赋值语句、选择信号赋值语句设计一个四十六译码器。LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.A
15、LL; ENTITY DECODER IS PORT(A, B, C,D:IN STD_LOGIC; Y: OUT BIT_VECTOR (15 DOWNTO 0); END ENTITY DECODER; ARCHITECTURE ART1 OF DECODER IS SIGNAL SR: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN SR= D Y(0)=1 WHEN SR=“0000“ ELSE 0; Y(1)=1 WHEN SR=“0001“ ELSE 0; Y(2)=1 WHEN SR=“0010“ ELSE 0; Y(3)=1 WHEN SR=“0011“
16、 ELSE 0; Y(4)=1 WHEN SR=“0100“ ELSE 0; Y(5)=1 WHEN SR=“0101“ ELSE 0; Y(6)=1 WHEN SR=“0110“ ELSE 0; Y(7)=1 WHEN SR=“0111“ ELSE 0; Y(8)=1 WHEN SR=“1000“ ELSE 0; Y(9)=1 WHEN SR=“1001“ ELSE 0; Y(10)=1 WHEN SR=“1010“ ELSE 0; Y(11)=1 WHEN SR=“1011“ ELSE 0; Y(12)=1 WHEN SR=“1100“ ELSE 0; Y(13)=1 WHEN SR=“1
17、101“ ELSE 0; Y(14)=1 WHEN SR=“1110“ ELSE 0; Y(15)=1 WHEN SR=“1111“ ELSE 0; END ARCHITECTURE ART1; ARCHITECTURE ART2 OF DECODER IS SIGNAL SR: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN WITH SR SELECT Y= “0000_0000_0000_0001” WHEN “0000”, “0000_0000_0000_0010” WHEN “0001”, “0000_0000_0000_0100” WHEN “0010”, “0000_0000_0000_1000” WHEN “0011”, “0000_0000_0001_0000” WHEN “0100”, “0000_0000_0010_0000” WHEN “0101”, “0000_0000_0100_0000” WHEN “0110”, “0000_0000_1000_0000” WHEN “0111”, “0000_0001_0000_0000” WHEN “1000”, “0000_0010_0000_0000” WHEN “1001”,