EDA复习资料1 下载本文

※<习题三>

一、填空题

1、VHDL语言是_IEEE_______标准化语言。

2、一个完整的VHDL程序包含:实体、结构体 、库、 程序包、配置五个部分。 3、实体 部份说明了设计模块的输入/输出接口信号或引脚。 4、结构体 部份描述了设计模块的具体逻辑功能。

5、VHDL提供了四种端口模式:_IN_,OUT、INOUT、 BUFFER_____。 6、关键字实体的英文是:_ENTITY___。

7、关键字结构体的英文是:_ARCHITECTURE____。

8、VHDL语言常用的库有:__IEEE库、STD库、 WORK库。

9、结构体的描述方式主要有:_行为描述____和_数据流描述____。

10、IEEE库常用的程序包有:_STD_LOGIC_1164____、__STD_LOGIC_UNSIGNED_(计数器时使用)__、 __STD_LOGIC_ARITH___。 11、程序包由:_程序包首____和__程序包体___构成 二、选择题

1、VHDL语言程序结构中必不可少的部分是:( D )

(A)库 (B)程序包 (C)配置 (D)实体和结构体 2、VHDL语言端口模式中不允许内部引用该端口信号的是( B ): (A)IN (B)OUT (C)BUFFER (D)INOUT 3、下面哪种VHDL库使用时不需声明( C ):

(A)IEEE库 (B)ASIC库 (C)WORK 库 (D)ALTERA库 4、下面哪种VHDL库使用时不需声明(C ):

(A)IEEE库 (B)ASIC库 (C)STD 库 (D)ALTERA库 5、能反馈输出信号至内部的端口模式是( C ):

(A)IN (B)OUT (C)BUFFER (D)INOUT 6、CLK为输入信号,其正确的端口说明是:( A )

(A)CLK:IN BIT (B)CLK:OUT BIT (C)CLK:INOUT BIT (D)CLK:BUFFER BIT 7、Q0为输出信号,但内部设计会用到其反馈信号,其正确的端口说明是:( D ) (A)CLK:IN BIT (B)CLK:OUT BIT (C)CLK:INOUT BIT (D)CLK:BUFFER BIT

8、STD_LOGIC_1164程序包的正确声明方法是:( C )

(A)USE STD_LOGIC_1164 (B)USE IEEE.STD_LOGIC_1164 (C)USE IEEE.STD_LOGIC_1164.ALL (D)USE WORK.STD_LOGIC_1164.ALL

9、类属说明的正确格式是:( B )

(A)GENERIC(delay:TIME=20us); (B)GENERIC(delay:TIME:=20us); (C)GENERIC(delay TIME=20us); (D)GENERIC(delay=TIME:=20us); 10、使用STD_LOGIC数据类型,必须声明库( C ) (A)ALTERA (B)STD (C)IEEE (D)WORK 三、判断题

1、IEEE库使用时必须声明。 ( T )

2、实体(ENTITY)不是VHDL程序所必须的。 ( F ) 3、一个实体只能有一个结构体。 ( F )

4、OUT模式的信号也可在表达式的右边使用。 ( F )

5、INOUT是双向信号,在表达式的右边使用时信号来自外部。 ( T ) 6、BUFFER也可在表达式的右边使用,但其含义是指内部反馈信号 ( T ) 7、结构体内部定义的数据类型、常数、函数、过程只能用于该结构体。( T ) 8、STD库使用时也必须声明。 ( F )

9、库的好处是可使设计者共享设计成果。 ( T ) 10、库的说明语句必须放在实体前面。 ( T )

11、配置用于描述层与层之间的连接关系和实体与结构体之间的关系。( T ) 12、类属参量为实体和外部环境通信提供一种静态信息通道,类属的值可以由设计实体外部提供。 ( T )

答案:

一、填空题

1、IEEE 2、实体、结构体、库、程序包、配置 3、实体 4、结构体 5、IN、OUT、INOUT、BUFFER 6、ENTITY 7、ARCHITECTURE 8、IEEE库、STD库、WORK库 9、行为描述、数据流描述

10、STD_LOGIC_1164、STD_LOGIC_UNSIGNED、STD_LOGIC_ARITH 11、程序包首、程序包体 二、选择题

1、D 2、B 3、C 4、C 5、C 6、A 7、D 8、C 9、B 10、C 三、判断题

1、√ 2、X 3、X 4、X 5、√ 6、√ 7、√ 8、X 9、√ 10、√ 11、√ 12、√ ※<习题四>

一、填空题

1、布尔类型(BOOLEAN)的取值只有__TRUE___和__FALSE___。 2、位类型(BIT)的取值只有__0___和__1___。

3、SIGNAL b:BIT_VECTOR(6 TO 0),信号b被定义为__7___位位宽。 4、仅能用于仿真的数据类型有__时间类型___、__实数类型___。 5、‘A’,‘a’是不同的__字符___。

6、字符串是用__“”___括起来的一个字符序列。

7、错误等级类型用来表示系统的状态,共有四种错误等级:_NOTE____、__WARNING___、 __ERROR___、FAILURE____。

8、VHDL语言有4类操作符:_逻辑运算____、_关系运算____、__算术运算___、 __并值运算___。

9、算术运算符“/”、“MOD”、“REM”可综合的分母/底必须是__2___的乘方。 10、VHDL的数据对象有:__常量___、__变量___、 __信号___和 文件 。 二、选择题

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

(A)字符 (B)BIT (C)STD_LOGIC (D)枚举 2、VHDL语言优先级最高的运算符是( C ): (A)AND (B)OR (C)NOT (D)XOR

3、变量不能使用的程序结构部分是( A ):

(A)结构体 (B)进程 (C)函数 (D)过程 4、变量不能使用的程序结构部分是( A ):

(A)实体 (B)进程 (C)函数 (D)过程 5、能在进程之间传递信息的数据对象是( C ): (A)常量 (B)变量 (C)信号 (D)文件

6、a已定义为信号,b已定义为变量,下面正确的表达是:( B ) (A)a:=b (B)a<=b (C)b:=a (D)b<=a 7、signal a:bit; signal b:bit_vector(1 downto 0);下面正确的表达式是:( C) (A)b<=a (B)a<=b (C)a<=b(0) (D)a:=b(0)

8、signal a,b:bit; signal y:bit_vector(1 downto 0);下面正确的表达式是:( D)

(A)y<=a (B)y<=b (C)y<=b and a (D)y<=b&a 9、常量的正确格式是:( B )

(A)CONSTANT Vcc:REAL=5.0 ; (B)CONSTANT Vcc:REAL:=5.0 ; (C)CONSTANT Vcc REAL=5.0 ; (D)CONSTANT Vcc:=5.0 ;

10、a的初值为0;执行语句a<=a+1;a<=a+1; a<=a+1;后,a的值为( B ) (A)0 (B)1 (C)2 (D)3

11、a的初值为0;执行语句a:=a+1;a:=a+1; a:=a+1;后,a的值为( D ) (A)0 (B)1 (C)2 (D)3 三、判断题

1、布尔类型只能进行关系运算,不能进行算术运算。 ( T ) 2、整数类型使用时必须限定其范围。 ( T ) 3、实数类型不能用于逻辑综合。 ( T ) 4、时间类型可以用于逻辑综合。 ( F )

5、数组是将相同类型的数据集合在一起所形成的一个新的数据类型。 ( T) 6、TYPE定义的数据类型是一个“新”类型。( T )

7、SUBTYPE定义的数据类型是原类型的一个子集,仍属原类型。( T ) 8、VHDL语言是一种类型特性很强的语言,要求操作对象和操作数的数据类型必须一致,不能将不同类型的信号连接起来。( T ) 9、VHDL语言运算符没有优先级。(F )

10、使用算术运算时,应严格遵循赋值语句两边的数据的位长一致。( T ) 11、无论是什么样的运算表达式都能进行逻辑综合。( F )

12、常量的设置是为了使设计中的常数更容易阅读和修改。( T ) 13、变量能用于进程之间传递信号。(F )

14、变量是个局部量,其赋值是立即生效的。( T ) 15、信号是个全局量,其赋值是立即生效的。( F ) 16、VHDL仿真器允许变量和信号设置初值,但VHDL综合器则不会对其综合处理。( T )

答案:

一、填空题

1、TRUE FALSE 2、1、0 ; 3、7 4、时间类型、实数类型 5、字符 6、双引号 7、NOTE、WARNING、ERROR、FAILURE

8、逻辑运算、关系运算、算术运算、并值运算 9、2 10、常量、变量、信号、文件

二、选择题

1、D 2、C 3、A 4、A 5、C 6、B 7、C 8、D 9、B 10、B 11、D 三、判断题

1、√ 2、√ 3、√ 4、X 5、√ 6、√ 7、√ 8、√ 9、X 10、√ 11、X 12、√ 13、X 14、√ 15、X 16、√ ※<习题五>

一、填空题

1、顺序语句只能在__进程____、___函数____、__过程____内部使用。

2、VHDL语言常用顺序描述语句有:___IF___、__CASE_____、_LOOP_____。 3、wait _on_ a,b;

4、wait _until_clk’enent and clk=’1’; 5、if a>b _then__ y<=a; elseif__ c>d _then_ y<=b; End if;

6、CASE self_IS_

WHEN 0 => q<=i0; WHEN 1 => q<=i1;

WHEN __OTHERS__ => NULL; EDN __CASE___;

7、FOR i IN 0 _TO_9 LOOP tmp:=tmp+1; END __LOOP____;

8、BLOCK内的语句是__并行_语句。

9、进程由 _敏感信号参数表__、__说明部分__、__顺序描述语句部分_三部份构成。 10、并行信号赋值语句有三种__简单信号赋值语句___、__条件信号赋值语句___、__选择信号赋值语句__。

11、选择信号赋值语句的每一子句后是__逗___号,最后一句是__分____号。 12、元件例化语句有____关联和____关联两种方式。 13、GAL器件采用________擦除。

14、PAL和GAL器件________在系统编程。 15、PAL和GAL器件需要使用________编程。 二、选择题

1、不是顺序语句使用的程序部分是____D___: A:进程内部 B:函数内部 C:过程内部 D:结构体内部

2、不是顺序语句是___A____: A:process B:if C:case

D:loop

3、不是顺序语句是___A____: A:block B:if C:case D:wait

4、不是顺序语句是____A___: A:component B:if C:case D:loop

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

6、布尔表达式Y=AB+C的正确表达式是___A____: A:Y<=A AND B OR C; B:Y<= A AND (B OR C) C:Y<=AC+C

D:Y<=A AND B +C 7、进程内不能定义: C A:常量 B:变量 C:信号 D:子程序

8、进程之间通过__B_____传递信息: A:变量 B:信号 C:函数 D:过程

9、有优先级关系的语句是____A___: A:IF B:LOOP C:CASE D:NULL

10、有优先级关系的语句是__B_____:: A:简单赋值语句 B:条件赋值语句 C:选择赋值语句 D:元件例化语句 三、判断题

1、顺序语句按语句的先后顺序执行。( T )

2、进程语句本身是并行语句,但其内部是顺序执行的。( T )

3、函数内部也可以有并行描述语句。( F ) 4、进程内部也可有并行描述语句。(F )

5、case语句应将表达式的所有取值都列出来。( T ) 6、FOR …LOOP 循环中使用的变量需预先定义。( F ) 7、NEXT 语句只能跳出本次循环。( T ) 8、EXIT语句结束整个循环。( F )

9、WAIT FOR 20ns 也能进行综合。( F ) 10、并行语句在结构体中执行是同步的,其执行方式与程序书写顺序无关。(T ) 11、一个结构体只能有一个进程。( F ) 12、进程之间可以通过变量传递信息。( F )

13、进程只有在其敏感信号发生变化时才被执行。( T ) 14、进程内定义的是局部量。( T )

15、条件信号赋值语句有优先级的关系。( T )

16、选择信号赋值语句不允许有条件重叠现象。( T ) 17、条件信号赋值语句允许有条件涵盖不全现象。( T ) 18、元件例化语句位置关联时位置必须一一对应。( T )

答案:

一、填空题

1、进程、函数、过程 2、if、case、loop 3、on 4、until

5、then elsif then 6、IS OTHERS CASE 7、TO LOOP 8、并行

9、敏感信号参数表、说明部分、顺序描述语句部分

10、简单信号赋值语句、条件信号赋值语句、选择信号赋值语句 11、逗、分

12、位置、名字 二、选择题

1、D 2、A 3、A 4、A 5、D 6、A 7、C 8、B 9、A 10、B 三、判断题

1、√ 2、√ 3、X 4、X 5、√ 6、X 7、√ 8、√ 9、X 10、√ 11、X 12、X 13、√ 14、√ 15、√ 16、√ 17、√ 18、√

EDA試卷答案 一、单项选择题

1、2. 基于EDA软件的FPGA/CPLD设计流程为:原理图/HDL文本输入→__A__→综合→

适配→____B____→编程下载→硬件测试。P14 A. 功能仿真 B. 时序仿真 C. 逻辑综合 D. 配置

3. IP核在EDA技术和开发中具有十分重要的地位;提供用VHDL等硬件描述语言描述的功能块,但不涉及实现该功能块的具体电路的IP核为__A___。P25 A. 软IP B. 固IP C. 硬IP D. 全对

4. 综合是EDA设计流程的关键步骤,在下面对综合的描述中,_____D____是错误的。P15 A. 综合就是把抽象设计层次中的一种表示转化成另一种表示的过程。 B. 综合就是将电路的高级语言转化成低级的,可与FPGA / CPLD的基本结构相映射的网表文件。

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

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

5. 大规模可编程器件主要有FPGA、CPLD两类,其中CPLD通过___A__实现其逻辑功能。P42

A. 可编程乘积项逻辑 B. 查找表(LUT) C. 输入缓冲 D. 输出缓冲 6. VHDL语言是一种结构化设计语言;一个设计实体(电路模块)包括实体与结构体两部分,结构体描述_____B___。P274 A. 器件外部特性 B. 器件的内部功能 C. 器件外部特性与内部功能 D. 器件的综合约束

7. 电子系统设计优化,主要考虑提高资源利用率减少功耗(即面积优化),以及提高运行速度(即速度优化);下列方法中___A___不属于面积优化。P238 A. 流水线设计 B. 资源共享 C. 逻辑优化 D. 串行化

8. 进程中的信号赋值语句,其信号更新是___B____。P134 A. 立即完成 B. 在进程的最后完成 C. 按顺序完成 D. 都不对

9. 不完整的IF语句,其综合结果可实现__A__。P147 A. 时序逻辑电路 B. 组合逻辑电路 C. 双向电路 D. 三态控制电路

10. 状态机编码方式中,其中__A__占用触发器较多,但其简单的编码方式可减少状态译码组合逻辑资源,且易于控制非法状态。P221 A. 一位热码编码 B. 顺序编码 C. 状态位直接输出型编码 D. 格雷码编码

二、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; USE IEEE.STD_LOGIC_1164.ALL; 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 \

-- 1

-- 2 -- 3 -- 4 -- 5 -- 6 -- 7 -- 8 -- 9 -- 10 -- 11 -- 12 -- 13 -- 14 -- 15 -- 16 -- 17 -- 18 -- 19 -- 20 -- 21 -- 22 -- 23 -- 24 -- 25 -- 26

WHEN \ WHEN \ WHEN \ END CASE; END PROCESS; END one;

-- 27 -- 28 -- 29 -- 30 -- 31 -- 32

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; 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 时钟信号

输出端口:

LIBRARY IEEE;

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

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

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY CNT1024 IS

ARCHITECTURE ONE OF CNT1024 IS BEGIN

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

VARIABLE Q1 : STD_LOGIC_VECTOR (9 DOWNTO 0); IF RST = '1' THEN

Q <= Q1;

Q1 := (OTHERS => '0'); IF LOAD = '1' THEN

Q1 := DATA; IF EN = '1' THEN

Q1 := Q1 + 1; END IF; ELSE

ELSIF CLK = '1' AND CLK'EVENT THEN BEGIN

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;

END IF;

END IF;

END PROCESS;

END ONE;

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

e

aby

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'; B <= 'Z'; Y <= A;

ELSE

END IF;

END PROCESS;

END BEHAV;

一、填空题(本大题共10小题,每空1分,共20 分)

1.一般把EDA技术的发展分为 MOS时代 、 CMOS时代 和 ASIC 三个阶段。

2.EDA设计流程包括 设计输入 、 设计实现 、 实际设计检验 和 下载编程 四个步骤。

3.EDA设计输入主要包括 图形输入 、 HDL文本输入 和 状态机输入 。

4.时序仿真是在设计输入完成之后,选择具体器件并完成布局、布线之后进行的时序关系仿真,因此又称为 功能仿真 。

5.VHDL的数据对象包括 变量 、 常量 和 信号 ,它们是用来存放各种类型数据的容器。

6.图形文件设计结束后一定要通过 仿真 ,检查设计文件是否正确。

7.以EDA方式设计实现的电路设计文件,最终可以编程下载

到 FPGA 和 CPLD 芯片中,完成硬件设计和验证。 8.MAX+PLUS的文本文件类型是(后缀名) .VHD 。

9.在PC上利用VHDL进行项目设计,不允许在 根目录 下进行,必须在根目录为设计建立一个工程目录(即文件夹)。

10.VHDL源程序的文件名应与 实体名 相同,否则无法通过编译。

二、选择题:(本大题共5小题,每小题3分,共15 分)。

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

12. 在执行MAX+PLUSⅡ的(d )命令,可以精确分析设计电路输入与输出波形间的延时量。

A .Create default symbol B. Simulator C.Compiler D.Timing Analyzer 13.VHDL常用的库是(A )

A. IEEE B.STD C. WORK D. PACKAGE 14.下面既是并行语句又是串行语句的是( C )

A.变量赋值 B.信号赋值 C.PROCESS语句 D.WHEN?ELSE语句 15.在VHDL中,用语句(D )表示clock的下降沿。 A.clock’EVENT B.clock’EVENT AND clock=’1’ C. clock=‘0’ D. clock’EVENT AND clock=’0’

1. VHDL 超高速集成电路硬件描述语言 2. FPGA 现场可编程门阵列 课后题 第三章作业 3-5

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY count IS

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

CQ : OUT STD_LOGIC_VECTOR(15 DOWNTO 0) ); END ENTITY count;

ARCHITECTURE arch OF count IS BEGIN

PROCESS(CLK,RST,EN,updn)

VARIABLE CQI: STD_LOGIC_VECTOR(15 DOWNTO 0); BEGIN

IF RST = '1' THEN CQI:=(OTHERS => '0'); ELSIF CLK'EVENT AND CLK='1' THEN IF EN='1'THEN

IF updn='1' THEN CQI:=CQI+1; ELSE CQI:=CQI-1; END IF; END IF; END IF; CQ<=CQI; END PROCESS;

END ARCH; 3-6

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY dff2 IS

PORT (CL,CLK0: IN STD_LOGIC; OUT1: OUT STD_LOGIC); END ENTITY dff2;

ARCHITECTURE arch OF dff2 IS SIGNAL Q : STD_LOGIC; BEGIN

PROCESS(CLK0) BEGIN

IF CLK0'EVENT AND CLK0='1' THEN Q <= NOT(Q OR CL); END IF;

END PROCESS; OUT1 <= NOT Q; END ARCH; 3-7

x y diff s_out 0 0 0 0 0 1 1 1 1 0 1 0

半减器

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY h_suber IS

PORT( x,y: IN STD_LOGIC; diff,s_out: OUT STD_LOGIC); END ENTITY h_suber;

ARCHITECTURE arch OF h_suber IS BEGIN

Diff <= x XOR y;

s_out <= (NOT x) AND y; END ARCH;

1 1 0 0

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY f_suber IS

PORT(x,y,sub_in:IN STD_LOGIC;

diffr,sub_out:OUT STD_LOGIC); END ENTITY;

ARCHITECTURE arch OF f_suber IS COMPONENT h_suber

PORT(x,y:IN STD_LOGIC;

diff,s_out:OUT STD_LOGIC); END COMPONENT;

SIGNAL e,f,g:STD_LOGIC; BEGIN

u1:h_suber PORT MAP(x=>x,y=>y,diff=>e,s_out=>g);

u2:h_suber PORT MAP(x=>e,y=>sub_in,diff=>diffr,s_out=>f); sub_out<=f or g; END arch; 8位加法器

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY suber_8 IS

PORT(x: IN STD_LOGIC_vector(7 downto 0); sin: IN STD_LOGIC;

y: in STD_LOGIC_vector(7 downto 0); diff: OUT STD_LOGIC_vector(7 downto 0); sout: OUT STD_LOGIC); END ENTITY suber_8;

ARCHITECTURE arch OF suber_8 IS

COMPONENT f_suber --调用全减器声明语句 PORT(x,y,sub_in: IN STD_LOGIC; sub_out,diffr: OUT STD_LOGIC); END COMPONENT;

SIGNAL a: STD_LOGIC_vector(6 downto 0); --定义1个信号作为内部的连接线。

BEGIN

u0:f_suber PORT MAP(x=>x(0),y=>y(0),diffr=>diff(0),sub_in=>sin,sub_out=>a(0)); u1:f_suber PORT MAP(x=>x(1),y=>y(1),diffr=>diff(1),sub_in=>a(0),sub_out=>a(1)); u2:f_suber PORT MAP(x=>x(2),y=>y(2),diffr=>diff(2),sub_in=>a(1),sub_out=>a(2)); u3:f_suber PORT MAP(x=>x(3),y=>y(3),diffr=>diff(3),sub_in=>a(2),sub_out=>a(3)); u4:f_suber PORT MAP(x=>x(4),y=>y(4),diffr=>diff(4),sub_in=>a(3),sub_out=>a(4)); u5:f_suber PORT MAP(x=>x(5),y=>y(5),diffr=>diff(5),sub_in=>a(4),sub_out=>a(5)); u6:f_suber PORT MAP(x=>x(6),y=>y(6),diffr=>diff(6),sub_in=>a(5),sub_out=>a(6)); u7:f_suber PORT MAP(x=>x(7),y=>y(7),diffr=>diff(7),sub_in=>a(6),sub_out=>sout); END ARCHITECTURE arch; 3-9

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT16 IS

PORT(CLK,RST,EN : IN STD_LOGIC;

DATA : IN STD_LOGIC_VECTOR(15 DOWNTO 0); --4位预置数 DOUT : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);--计数值输出 COUT : buffer STD_LOGIC); --计数进位输出 END CNT16;

ARCHITECTURE behav OF CNT16 IS signal load : std_logic; BEGIN

Load<=cout;

PROCESS(CLK,RST,EN,LOAD)

VARIABLE Q : STD_LOGIC_VECTOR(15 DOWNTO 0); BEGIN

IF RST='0' THEN Q:=(OTHERS =>'0'); --计数器异步复位 ELSIF CLK'EVENT AND CLK='1' THEN --检测时钟上升沿

IF EN='1' THEN --检测是否允许计数或加载(同步使能) IF LOAD='1' THEN Q:=DATA; --允许加载 ELSE

Q:=Q+1; --允许计数

END IF; END IF; END IF;

IF Q=\计数大于9,输出进位信号 ELSE COUT<='0'; END IF;

DOUT<=Q; --将计数值向端口输出 END PROCESS; END behav;

3-10 74ls160真值表

library ieee;

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

port(clr,ld,ce,pe,clk : in std_logic;

q :out std_logic_vector(3 downto 0); p: in std_logic_vector(3 downto 0) );

end t74ls160;

architecture arch of t74ls160 is signal m : std_logic_vector(3 downto 0); begin

process(clr,ld,ce,pe,clk) begin if(clr='0') then m<=\

elsif(clk'event and clk='1') then if(ld='0') then m<=p; else

if (ce='1' and pe='1') then m<=m+1; end if;

end if; end if; q<=m;

end process; end arch;

第五章作业

5-7 (1) 7人投票表决器 LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY vote7 IS

PORT( DIN: IN STD_LOGIC_VECTOR(6 DOWNTO 0);--7位表决输入(1:同意,0:不同意)

G_4: OUT STD_LOGIC; --超过半数指示

CNTH: OUT STD_LOGIC_VECTOR(2 DOWNTO 0));--表决结果统计数 END vote7 ;

ARCHITECTURE BHV OF vote7 IS BEGIN

PROCESS(DIN)

VARIABLE Q: STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN

Q:=\

FOR n IN 0 TO 6 LOOP -- n是LOOP的循环变量 IF(DIN(n)='1') THEN Q:=Q+1; END IF; END LOOP; CNTH<=Q;

IF Q>=4 THEN G_4<='1'; ELSE G_4<='0'; END IF; END PROCESS;

END BHV;

(2)4位4输入最大数值检测电路

library ieee;

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

port(a,b,c,d : in std_logic_vector(3 downto 0); q : out std_logic_vector(3 downto 0)); end max1;

architecture arch of max1 is begin

process(a,b,c,d)

variable temp : std_logic_vector(3 downto 0); begin temp:=\ for n in 0 to 3 loop

if temp(n)

if temp(n)

if temp(n)

if temp(n)

5-9

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY code9 IS

PORT( data_in : IN STD_LOGIC_VECTOR(7 DOWNTO 0);--原码输入 data_out : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));--补码输出 END code9;

ARCHITECTURE BHV OF code9 IS BEGIN

PROCESS(data_in) BEGIN

IF(data_in(7)='0') THEN data_out<=data_in; else

data_out<=data_in(7)&(not data_in(6 DOWNTO 0))+1; END IF;

END PROCESS; END BHV;

5-11 移位寄存器实现 LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY reg11 IS

PORT(CLK,load: IN STD_LOGIC; --工作时钟/复位信号 S_out: OUT STD_LOGIC);--序列输出位 END reg11;

ARCHITECTURE behav OF reg11 IS

SIGNAL D: STD_LOGIC_VECTOR(10 DOWNTO 0); --11位循环移位寄存器 BEGIN

PROCESS(CLK,load) BEGIN

IF CLK'EVENT AND CLK='1' THEN --时钟到来时,逐位左移循环输出序列位

IF load='1' THEN D<=\复位操作,产生11位待输出序列 ELSE

D(10 DOWNTO 1)<=D(9 DOWNTO 0); D(0)<=D(10); S_out<=D(10); END IF; END IF; END PROCESS; END behav; 同步时序逻辑实现 LIBRARY IEEE;

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

PORT(CLK: IN STD_LOGIC; --工作时钟/复位信号 Sout: OUT STD_LOGIC);--序列输出位 END reg12;

ARCHITECTURE behav OF reg12 IS signal m : std_logic_vector(3 downto 0); BEGIN

PROCESS(CLK) BEGIN

IF CLK'EVENT AND CLK='1' THEN --时钟到来时,逐位左移循环输出序列位

if m<\ else m<=\ end if; end if;

END PROCESS; process(m) begin case m is

when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when \ when others =>null; end case; end process; END behav; 5-13

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY shift13 IS --8位左移寄存器 PORT(CLK,LOAD: IN STD_LOGIC;

DIN: IN STD_LOGIC_VECTOR(7 DOWNTO 0); QB:OUT STD_LOGIC); END shift13;

ARCHITECTURE behav OF shift13 IS BEGIN

PROCESS (CLK,LOAD)

VARIABLE REG8: STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN

IF CLK'EVENT AND CLK='1'THEN

IF LOAD='1'THEN REG8:=DIN; --由(LOAD='1')装载新数据 ELSE REG8(7 DOWNTO 1):=REG8(6 DOWNTO 0); --左移 END IF; END IF;

QB<=REG8(7); --输出最高位 END PROCESS ; END behav ;