EDA技术复习题

更新时间:2023-10-24 09:25:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

这是一份vhdl的复习题,考试题大多数都来自此处,

一、 EDA名词解释

1、 ASIC:专用集成电路(Application Specific Integrated Circuits) 2、 EDA:电子设计自动化(Electronic Design Automation) 3、 PROM:可编程只读存储器(Programmable Read Memory) 4、 IP:知识产权核(Intellectual Property ) 5、 SOC: 片上系统(System On Chip)

6、 VHDL:超高速集成电路硬件描述语言(VHSIC Hardware Description Language)。

7、 RTL: 寄存器传输级(Register Transport Level)

8、 SOPC:可编程片上系统(System On Programmable Chip) 9、 PLD:可编程逻辑器件(Programmable Logic Array) 10、 GAL:通用阵列逻辑(Geniric Array Logic)

11、 FPGA:现场可编程门阵列(Field Programmable Gate Array ) 12、 CPLD:复杂可编程逻辑器件(Complex Programmable Logic Device)

1

二、 简答题

1、 简述VHDL程序的基本结构。 库、程序包、实体、结构体、配置 2、 子程序分为那两类,其结构为什么。

子程序有两种类型,即过程(PROCEDURE)和函数(FUNCTION)。 FUNCTION 函数名(参数表) RETURN 数据类型 --函数首 FUNCTION 函数名(参数表)RETURN 数据类型 IS -- 函数体

[说明部分 ] BEGIN

顺序语句 ;

END FUNCTION 函数名;

PROCEDURE 过程名(参数表) -- 过程首 PROCEDURE 过程名(参数表) IS -- 过程体

[说明部分]

BIGIN

顺序语句;

END PROCEDURE 过程名;

3、 信号与变量的赋值有何区别?。

信号延时赋值,变量立即赋值;

信号的代入使用<=,变量的代入使用:=;

信号在实际的硬件当中有对应的连线,变量没有 4、 可编程器件分为哪些类?

答:一类是集成度较低的,早期出现的PROM、PLD、PAL、GAL,可用的逻辑门数大约在500门以下,称为简单PLD。

另一类是芯片集成度较高的,如现在大量使用的CPLD和FPGA器件,称为复杂PLD。

5、 CASE语句使用当中的注意事项。 (1)条件句中的选择值必在表达式的取值范围内。

(2)除非所有条件句中的选择值能完整覆盖CASE语句中表达式的取值,否则最末一个条件句中的选择必须用\表示,它代表己给的所有条件句中未能列出的其它可能的取值。关键词OTHERS只能出现一次,目只能作为最后一种条件取值。使用OTHERS的目的是为了使条件句中的所有选择值能涵盖表达式的所有取值,以免综合器会插入不必要的锁存器。这一点对于定义为STD_ LOGIC和STD_ LOGIC_VECTOR数据类型的值尤为重要,因为这些数据对象的取值除了1和0以外,还可能有其它的取值,如高阻态Z、不定态X等。

(3) CASE语句中每一条件句的选择值只能出现一次,不能有相同选择值的条件语句出现。

2

(4) CASE语句执行中必须选中,目只能选中所列条件语句中的一条。这表明CASE语句中至少要包含一个条件语句。 6、 赋值语句分哪些类,分别写出一句赋值语句。 信号赋值语句,S<= 变量赋值语句,V?

7、 数据对象有哪些种,分别写出定义这些数据对象的一般表述格式。 Constant(常量)在程序中不可以被赋值 Variable(变量)在程序中可以被赋值(用“:=”),赋值后立即变化为新值。 Signal(信号)在程序中可以被赋值(用“<=”),但不立即更新,当进程挂起后,才开始更新。

8、 简述进程语句的使用要点? [进程名:]

process[(触发信号列表)] [定义语句;] begin

[串行处理语句sequential statement;] end process

PROCESS...END PROCESS

9、 写出VHDL常用的顺序语句的名称。 赋值语句

流程控制语句 等待语句

子程序调用语句 返回语句 空操作语句

10、 VHDL语言中的逻辑操作符有那些?

逻辑运算符AND、OR、NAND、NOR、XOR、XNOR及NOT 11、 使用原理图输入设计功能的优势何优点?

与传统的数字电路实验相比,Quartus提供原理图设计功能具有不可比拟的优势和先进性:

1设计者不必具备许多诸如编程技术、硬件描述语言等知识就能迅速○

设计入门,完成大规模的电路系统设计

2能进行任意层次的数字系统设计(传统的数字电路实验只能完成单○一层次的设计);

3能对系统中的任一层次,或任一元件的功能进行精确的时序仿真 ○

4通过时序仿真,能迅速定位电路系统的错误所在,并随时纠正。 ○

3

5能对设计方案进行随时更改,并储存设计工程中所有电路和测试文○件入档;

6通过编译和下载,能在FPGA或CPLD上对设计项目随时进行硬件○测试验证;

7如果使用FPGA和配置编程方式,将不会有损坏和损耗的问题 ○

8符合现代电子设计技术规范。 ○

12、 VHDL的操作符有那几大类?每一类的操作符分别是什么?每一类操作符可以对那些数据进行操作(运算)?

在VHDL中有四类操作符即逻辑操作符(Logical Operator)、关系操作符(Relational Operator)、算术操作符(Arithmetic Operator)和符号操作符(Sign Operator)。前三类操作符是完成逻辑和算术运算的最基本的操作符单元。 13、 标准逻辑位数据类型常用的数值有哪几种? 'U'--Uninitialized未初始化的 'X'--Forcing Unknown强未知的 '0'--Forcing 0强0 '1'--Forcing 1强1

'Z'--High Impedance 高阻态

'W'--Weak Unknown弱未知的 'L'--Weak 0 弱0 'H'--Weak 1弱1 '-'--Don't care忽略

14、 在VHDL语言中常见的数据类型有那些? VHDL中的数据类型可以分成四大类。 标量型(Scalar Type)

复合类型(Composite Type) 存取类型(Access Type) 文件类型(Files Type)

15、 实体部分的端口模式有四个类型。

IN模式:IN定义的通道确定为输入端口,并规定为单向只读模式,可以通过此端口将变量(Variable)信息或信号(Signal)信息读入设计实体中。

OUT模式:OUT定义的通道确定为输出端口,并规定为单向输出模式,可以通过此端口将信号输出设计实体,或者说可以将设计实体中的信号向此端口赋值。

INOUT模式:INOUT定义的通道确定为输入输出双向端口,即从端口的内部看,可以对此端口进行赋值,也可以通过此端口读入外部的数据信息;而从端口的外部看,信号既可以从此端口流出,也可以向此端口输入信号。INOUT模式包含了IN,OUT和BUFFER二种模式,因此可替代其中任何一种模式,但为了明确程序中各端口的实际任务,一般不作这种替代。

4

BUFFER模式:BUFFER定义的通道确定为具有数据读入功能的输出端口,它与双向端口的区别在于只能接受一个驱动源。 16、 VHDL语句中顺序描述语句有哪几种? 赋值语句

流程控制语句 等待语句

子程序调用语句 返回语句 空操作语句

17、 用WAIT语句设置4种不同的条件分别是什么?

对于不同的结束挂起条件的设置,WAIT语句有以下四种不同的语句格式。

WAIT; -- 第一种语句格式 WAIT ON 信号表; -- 第二种语句格式 WAIT UNTIL 条件表达式; -- 第三种语句格式

WAIT FOR 时间表达式; -- 第四种语句格式, 超时等待语句

18、 常用的if语句有哪几种?写出其书写格式。

A. 门闩

IF条件句Then --第一种IF语句结构 顺序语句 END IF B. 二选一

IF条件句Then --第二种IF语句结构 顺序语句 ELSE 顺序语句 END IF C. 多选择

IF条件句Then --第三种IF语句结构 顺序语句

ELSIF条件句Then 顺序语句 ... ELSE 顺序语句 END IF

D. IF的嵌套 IF条件句Then IF条件句Then ...

END IF END IF

5

19、 如何描述时钟上升沿和下降沿?

时钟脉冲的上升沿的条件可以写为:

IF clock_signal=current_value AND clock_signal?LAST_VALUE AND clock_signal?EVENT

也可以简写为:

IF clock_signal= clock_signal?EVENT AND current_value 时钟脉冲的下降沿的条件可以写为:

IF clock_signal=current_value AND clock_signal?LAST_VALUE AND clock_signal?EVENT

20、 指出信号和变量有哪些区别? 简单的说,信号是全局的,用于结构体中并行语句间数据流的传递;变量则是局部的,他主要用于单个进程中中间变量的存储.

主要用于对暂时数据进行局部存储。

临时数据,没有物理意义只能在Process和Function中定义,并只在其内部有效要使其全局有效,先转换为Signal。

用 := 进行赋值

variable result : std_logic := '0'; 变量说明的格式:

VARIABLE 变量名:数据类型 约束条件:=表达式; 例:VARIABLE X,Y:INTEGER;

VARIABLE C:INTEGER RANGE 0 TO 255:=10;(表示变量C的数据类型是整型,变量范围从0到255,初始值为10。)

变量只能在进程语句、函数语句和过程语句结构中使用,它是一个局部量。在仿真过程中,它不像信号那样,到了规定的仿真时间才进行赋值,变量是立即生效的。

信号是抽象的电子电路内部硬件连接。它除了没有数据流动方向说明以外,其它性质几乎和前面所述的端口概念一致。信号通常在构造体、包集合和实体内说明。

信号说明的格式:

SIGNAL 信号名;数据类型 约束条件:=表达式; 例:SIGNAL a,b,c:STD_LOGIC;

SIGNAL COUNT_2:STD_LOGIC_VECTOR(1 DOWNTO 0); SIGNAL S_CLK:BIT:='0'; 信号(Signals)

代表连线,Port也是一种信号。

没有方向性,可给它赋值,也可当作输入 在Entity中和Architecture中定义

设定的初始值在综合时没有用,只是在仿真时在开始设定一个起始值。用<=进行赋值。

信号和变量值的代入不仅形式不同,而且其操作过程也不同。在变量的赋值语句中,该语句一旦被执行,其值立即被赋予变量。在执行下一条语句时,该变量的值就为上一句新赋的值。变量赋值符为“:=”。信号代入语句采用“<=”代入符,该语句即使被执行也不会使信号立即发生代入。下一条语句执行时,仍使用原来的信号值。由于信号代入语句是同时进行处理的,

6

因此,实际代入过程和代入语句的处理是分开进行的。

21、 信号赋值语句在什么情况下作为并行语句?在什么情况下作顺序语句?信号赋值和变量赋值符号分别是什么?两种赋值符号有什么区别? 信号赋值语句在进程外作并行语句,并发执行,与语句所处的位置无关。信号赋值语句在进程内或子程序内做顺序语句,按顺序执行,与语句所处的位置有关。

信号赋值符号为“<=”变量赋值用“:=”。信号赋值符号用于信号赋值动作,不立即生效。变量,赋值符号用于变量赋值动作,立即生效。

22、 进程的敏感信号表指的是什么?简述敏感信号表在进程中的作用? 进程的“敏感信号表”也称敏感表,是进程的激活条件,可由一个或多个信号组成,各信号间以“,”号分隔。当敏感信号表中的任一个信号有事件发生,即发生任意变化,此时,进程被激活,进程中的语句将从上到下逐句执行一遍,当最后一条语句执行完毕之后,进程即进入等待挂起状态,直到下一次敏感表中的信号有事件发生,进程再次被激活,如此循环往复。 23、 什么是库、程序包、子程序、过程调用和函数调用? 库和程序包用来描述和保存元件、类型说明和子程序等,以便在其它设计中通过其目录可查询、调用。子程序由过程和函数组成。在子程序调用过程中,过程能返回多个变量,函数只能返回一个变量。若子程序调用的是一个过程,就称为过程调用,若子程序调用的是一个函数,则称为函数调用。过程调用、函数调用都是子程序调用。

24、 简述WHEN_ELSE条件信号赋值语句和IF_ELSE顺序语句的异同。 答:WHEN_ELSE条件信号赋值语句中无标点,只有最后有分号;必须成对出现;是并行语句,必须放在结构体中。

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

三、 综合题

1、 完成

A. 解释带有下划线的语句。 B. 画出该程序的原理图符号。 C. 说明该程序逻辑功能。

D. 改用WITH_SELECT_WHEN语句编写下列程序。

Library ieee;

Use ieee.std_logic_1164.all; 定义元件库 entity qk_11 is

port( a,b,c,d,en:in std_logic;

s:in std_logic_vector(1 downto 0); 输入信号s是两位的输入总线 op:out std_logic ); end qk_11;

architecture ar_1 of qk_11 is

signal f:std_logic_vector(2 downto 0);

7

begin

f<=en&s; 将输入信号en和s连接赋值给f

process (f) 敏感信号f的变化将启动进程 process begin

case f is

when\ when\ when\

when others=>op<=d; 其他情况,将输入信号d赋值给op end case; end process; end ar_1;

逻辑功能是:带有使能端en的四选一数据选择器。 用WITH_SELECT_WHEN语句编写上述程序: Library ieee;

Use ieee.std_logic_1164.all; entity qk_11 is

port( a,b,c,d,en:in std_logic;

s:in std_logic_vector(1 downto 0); op:out std_logic ); end qk_11;

architecture ar_1 of qk_11 is

signal f:std_logic_vector(2 downto 0); begin f<=en&s;

with f select

op<=a when \ b when \ c when \ d when others; end ar_1;

2、 以下是一个模为24(0~23)的8421BCD码加法计数器VHDL描述,请补充完整

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY tb IS

PORT ( CLK : IN STD_LOGIC ;

8

SHI, GE : OUT INTEGER RANGE 0 TO 9 ) ; END ;

ARCHITECTURE bhv OF tb IS

SIGNAL SHI1,GE1 : INTEGER RANGE 0 TO 9; BEGIN

PROCESS (CLK) BEGIN

IF CLK'EVENT AND CLK='1' then IF GE1 = 9 THEN GE1 <= 0 ;

SHI1<=SHI1+1;

ELSIF SHI1=2 AND GE1=3 THEN SHI1<=0; GE1<=0; ELSE

GE1 <= GE1+1; END IF; END IF;

END PROCESS ; GE <= GE1; SHI <=SHI1; END bhv;

3、 下面程序是参数可定制带计数使能异步复位计数器的VHDL描述,试补充完整。

-- N-bit Up Counter with Load, Count Enable, and -- Asynchronous Reset library ieee;

use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all; use IEEE.std_logic_arith.all;

entity counter_n is

generic (width : integer := 8);

port(data : in std_logic_vector (width-1 downto 0); load, en, clk, rst : in std_logic; q : out std_logic_vector (width - 1 downto 0)); end counter_n;

architecture behave of counter_n is

signal count : std_logic_vector (width-1 downto 0); begin

process(clk, rst) begin if rst = '1' then

9

count <= (others => ?0?); ―― 清零 elsif clk?event and clk = ?1? then ―― 边沿检测 if load = '1' then count <= data; elsif en = '1' then count <= count + 1; end if; end if; end process; q <= count; end behave;

4、 补全下列六进制计数器cnt6程序 (10分)

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY cnt6 IS

PORT (reset,en,clk:IN STD_LOGIC; carry:OUT STD_LOGIC;

q:OUT STD_ULOGIC_VECTOR(2 DOWNTO 0)); END cnt6;

ARCHITECTURE rtl OF cnt6 IS

SIGNAL qs:STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL ca:STD_LOGIC; BEGIN

PROCESS(clk)

VARIABLE q6:INTEGER; BEGIN

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

END IF;

qs<=CONV_STD_LOGIC_VECTOR(q6,3); q<=TO_STDULOGICVECTOR(qs); END PROCESS; PROCESS(ca,en) BEGIN

carry<=ca AND en; END PROCESS; END rtl;

5、 补全以下二选一VHDL程序(本题10分) Entity mux is

port(d0,d1,sel:in bit;

10

q:out BIT );

end mux;

architecture connect of MUX is signal tmp1, TMP2 ,tmp3:bit; begin

cale:block begin

tmp1<=d0 and sel;

tmp2<=d1 and (not sel)

tmp3<= tmp1 and tmp2; q <= tmp3; end block cale;

end CONNECT ;

6、 根据下表填写完成一个3-8线译码器的VHDL程序(10分)。

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY decoder_3_to_8 IS

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

y:OUT STD_LOGIC_VECTOR (7 DOWNTO 0)); END decoder_3_to_8;

ARCHITECTURE rtl OF decoder_3_to_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 \ WHEN \ WHEN \11111011\ WHEN \

11

WHEN \ WHEN \ WHEN \110\ WHEN \

WHEN OTHERS=> y <= \XXXXXXXX\ END CASE; ELSE

y <= \11111111\ END IF; END PROCESS; END rtl;

7、 填写完成一个8-3线编码器的VHDL程序(16分)。 Library ieee;

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

entity eight_tri is port( b: in std_logic_vector(7 downto 0); en: in std_logic; y: out std_logic_vector(2 downto 0) );

end eight_tri;

architecture a of eight_tri is

signal sel: std_logic_vector(8 downto 0); begin

sel<=en & b;

y<= “000” when (sel=”100000001”)else “001” when (sel=”100000010”)else “010” when (sel=”100000100”)else “011” when (sel=”100001000”)else “100” when (sel=”100010000”)else “101” when (sel=”100100000”)else “110” when (sel=”101000000”)else “111” when (sel=”110000000”)else “zzz”; end a;

12

16)(

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

entity full_add is port ( a,b: in std_logic_vector (3 downto (2)

carr: inout std_logic_vector (4 downto 0); sum: out std_logic_vector (3 downto 0) );

end full_add;

architecture full_add_arch of full_add is component adder port ( a,b,c: in std_logic; carr: inout std_logic; sum: out std_logic );

end component; begin

carr(0)<='0';

u0:adder port map(a(0),b(0),carr(0),carr(1),sum(0)); u1:adder port map(a(1) , b(1),carr(1),carr(2),sum(1)); u2:adder port map(a(2),b(2),carr(2),carr(3),sum(2)); u3:adder port map(a(3),b(3),carr(3),carr(4) , sum(3)); end full_add_arch;

8、 补充完整如下代码,使之完成4状态不断循环。(本题10分) ARCHITECTURE arc OF ss IS

type states is ( st0,st1,st2,st3 ); signal outc: states; BEGIN

PROCESS(clk) BEGIN IF reset='1' then outc <=st0 ;

13

0);

elsif clk'event and clk='1' then CASE outc IS

WHEN st0 => outc <= st1; WHEN st1 => outc <= st2; WHEN st2 => outc <= st3; WHEN st3 => outc <= st0; WHEN OTHERS => outc <=st0; END CASE; end if; END PROCESS; END arc;

9、 根据一下四选一程序的结构体部分,完成实体程序部分(本题8分) LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; entity MUX4 is

port( s: in std_logic_vector(1 downto 0); d: in std_logic_vector(3 downto 0); y: out std_logic ); end MUX4; architecture behave of MUX4 is begin process(s) begin

if (s=\ y<=d(0); elsif (s=\ y<=d(1); elsif (s=\ y<=d(2); elsif (s=\ y<=d(3); else null; end if; end process; end behave;

14

四、 编程题

1、 用IF语句编写一个二选一电路,要求输入a、b, sel为选择端,输出q。(本题10分)

Entity sel2 is Port (

a,b : in std_logic; sel : in std_logic; q : out std_logic );

End sel2;

Architecture a of sel2 is begin

if sel = ?0? then q <= a; else q <= b; end if; end a;

2、 填写完成一个8-3线编码器的真值表(5分),并写出其VHDL程序(10分)。

en 1 1 1 1 1 1 1 1 0 8 -3线编码器真值表 b 00000000 00000010 00000100 00001000 00010000 00100000 01000000 10000000 xxxxxxxx y0y1y2 000 001 010 011 100 101 110 111 高阻态

entity eight_tri is port( b: in std_logic_vector(7 downto 0); en: in std_logic; y: out std_logic_vector(2 downto 0) );

end eight_tri;

15

architecture a of eight_tri is

signal sel: std_logic_vector(8 downto 0); begin

sel<=en & b;

y<= “000” when (sel=”100000001”)else “001” when (sel=”100000010”)else “010” when (sel=”100000100”)else “011” when (sel=”100001000”)else “100” when (sel=”100010000”)else “101” when (sel=”100100000”)else “110” when (sel=”101000000”)else “111” when (sel=”110000000”)else “zzz”; end a;

3、 试用VHDL描述一个外部特性如图所示的D触发器。(10分)

参考程序如下: LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY mydff IS

PORT(CLK:IN STD_LOGIC; D:IN STD_LOGIC; Q:OUT STD_LOGIC); END;

ARCHITECTURE bhv OF mydff IS BEGIN

PROCESS(CLK) BEGIN

IF CLK'EVENT AND CLK='1' THEN Q<=D; END IF; END PROCESS; END;

4、 下图为某一状态机对应的状态图,试用VHDL语言描述这一状态机。(18分)

16

其它/00001/1001S0S1其它/10010/0000其它/1111S30/1100其它/11001/1111S2

参考程序如下: LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY FSM2 IS

PORT ( clk,reset,in1 : IN STD_LOGIC;

out1 : OUT STD_LOGIC_VECTOR(3 downto 0)); END;

ARCHITECTURE bhv OF FSM2 IS TYPE state_type IS (s0, s1, s2, s3); SIGNALcurrent_ state,next_state: state_type; BEGIN

P1:PROCESS(clk,reset) BEGIN

IF reset = ‘1’ THEN current_state <= s0; ELSIF clk='1' AND clk'EVENT THEN

current_state <=next_state; END IF;

END PROCESS;

P2:PROCESS(current_state) BEGIN

case current_state is

WHEN s0 => IF in1=‘1’THEN next_state<=s1; ELSE next_state<=s0; END IF;

WHEN s1 => IF in1='0'THEN next_state<=S2; ELSE next_state<=s1; END IF;

WHEN s2 => IF in1='1'THEN next_state<=S3; ELSE next_state<=s2; END IF;

WHEN s3 => IF in1='0'THEN next_state<=S0;

ELSE next_state<=s3; END IF;

end case;

END PROCESS;

17

p3:PROCESS(current_state) BEGIN

case current_state is

WHEN s0 => IF in1=‘1’THEN out1<=“1001”; ELSE out1<=\ END IF; WHEN s1 => IF in1='0'THEN out1<=\ ELSE out1<=\ END IF; WHEN s2 => IF in1='1'THEN out1<=\ ELSE out1<=\ END IF; WHEN s3 => IF in1='1'THEN out1<=\ ELSE out1<=\ END IF; end case; END PROCESS; end bhv;

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

SEL(1:0)SEL00AIN(1:0)BIN(1:0)COUTA or BA xor BA and BA nor B“XX”MUXCOUT(1:0)011011OTHERS

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

Library 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 If sel = “00” then cout <= ain or bin; Elsif sel = “01” then cout <= ain xor bin; Elsif sel = “10” then cout <= ain and bin; Else cout <= ain nor bin; End if; End process;

18

End one;

Architecture two of mymux is Begin

Process (sel, ain, bin) Begin Case sel is when “00” => cout <= ain or bin; when “01” => cout <= ain xor bin; when “10” => cout <= ain and bin; when others => cout <= ain nor bin; End case; End process; End two;

6、 根据下面原理图,写出相应VHDL描述

Library ieee;

Use ieee.std_logic_1164.all; Entity mycir is

Port (ain , bin , clk : in std_logic; Cout : out std_logic); End mycir;

Architecture one of mycir is Signal tb, tc; Begin

Process (clk) begin If clk?event and clk = ?1? then tb <= bin; end if; End process;

Process (clk, tc) begin

If clk = ?1? then cout <= tc;end if; End process; Tc <= ain xor tb; End one;

7、 用两种以上的按照下图设计一个四选一多路选择器

19

8、 使用元件例化语句编写下图所示的顶层文件,其中adder_1为一个由原理图输入法设计的完整的设计实体。

3、已知4位全加器电路原理图如下,请用元件例化语句编写其程序。

9、 在数字显示中,经常使用LED数码管,下面是采用共阳极的7段显示。BCD码输入与LED显示器对应的关系如下表:

D0D1D2D3a(X6)b(X5)c(X4)d(X3)e(X2)f(X1)g(X0)七段数码管afedgbc七段译码器

10、 在数字显示中,经常使用LED数码管,下面是采用共阳极的7段显示。BCD码输入与LED显示器对应的关系如下表:

D0D1D2D3a(X6)b(X5)c(X4)d(X3)e(X2)f(X1)g(X0)七段数码管afedgbc七段译码器

BCD码 0000 0001 0010 0011 0100

数字 0 1 2 3 4 20

显示段 g f e d c b a 1 0 0 O 0 O 0 1 1 l l 0 0 1 0 1 O 0 1 0 0 0 1 1 O O O 0 0 0 1 1 0 0 1

\\ \others; end a;

26、 根据已给出的二-十(BCD)进制优先权编码器功能表,试写出其VHDL程序。(本题15分)

二-十(BCD)进制优先权编码器功能表 输 入 输出 I4 I5 I6 I7 I8 I9 Y3 Y2 Y1 Y0 1 1 1 1 1 1 1 1 1 1 X X X X X 0 0 1 1 0 X X X X 0 1 0 1 1 1 X X X 0 1 1 1 0 0 0 X X 0 1 1 1 1 0 0 1 X 0 1 1 1 1 1 0 1 0 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 I1 1 X X X X X X X X 0 I2 I3 1 1 X X X X X X X X X X X X X 0 0 1 1 1 entity prior is port( d : in std_logic_vector(9 downto 1); q : out std_logic_vector(3 downto 0) ); end prior;

architecture behavior of prior is begin

process(d) begin if d = \ q <= \ elsif d(9) = '0' then q <= \ elsif d(8) = '0' then q <= \ elsif d(7) = '0' then q <= \ elsif d(6) = '0' then q <= \ elsif d(5) = '0' then q <= \ elsif d(4) = '0' then q <= \

26

elsif d(3) = '0' then q <= \ elsif d(2) = '0' then q <= \ elsif d(1) = '0' then q <= \ end if; end process;

五、 程序

1)实验程序

2)课本例题

27

0101 5 0110 6 0111 7 1000 8 1001 9 其它 11、 带允许端的十进制计数器 0 0 1 0 O 1 O O 0 0 0 0 1 0 0 1 0 0 l 1 1 0 0 0 0 0 0 O 0 0 1 O 0 0 0 1 1 1 1 1 1 1 带允许端的十进制计数器真值表 输入端 输出端 clr en clk qd qc qb qa 1 X X 0 0 0 0 0 0 X 不变 不变 不变 不变 0 1 上升沿 计数值加1 12、 用VHDL设计一个三位十进制的,带有使能控制端口enable、异步清零端口rst、同步预置控制端口load和预置数据输入端口date的计数器。

13、 编写一个D触发器的硬件描述语言程序,要求实现上升沿触发。 14、 使用IF语句设计一个带有异步复位和置位、同步预置的4位2进制加法计数器。

15、 带有复位和时钟使能的十进制计数器 16、 设计四选一电路。 17、 设计一个一位全加器。

18、 用VHDL设计四选一多路选择器,其真值表如下表所示。 四选一多路选择器真值表 输 入 端 输 出 端 S1 S0 Q 0 0 D0(8位位宽二进制数) 0 1 D1(8位位宽二进制数) 1 0 D2(8位位宽二进制数) 1 1 D3(8位位宽二进制数) × × 高阻 19、 设计带异步复位和计数使能控制的8位二进制减法计数器。 20、 具有清零端的4位二进制计数器如下图所示,请用VHDL语言编写其程序。

程序: library ieee;

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

21

entity cnt4 is

port(clk:in std_logic; clr:in std_logic;

q:buffer std_logic_vector(3 downto 0)); end cnt4;

architecture behav of cnt4 is begin

process(clr,clk) begin

if clr='1' then q<=\

elsif (clk'event and clk='1') then q<=q+1; end if;

end process; end behav;

21、 用元件例化语句设计如图所示电路。元件为2输入与非门。

LIBRARY ieee;

USE ieee.std_logic_1164.ALL; ENTITY yf4 IS

PORT( A,B,C,D: IN std_logic; Z: OUT std_logic); END yf4;

ARCHITECTURE a OF yf4 IS COMPONENT yf2

PORT (A1,B1: IN std_logic;

C1: OUT std_logic); END COMPONENT; SIGNAL X,Y: std_logic ;

BEGIN

U1:yf2 PORT MAP (A,B,X); U2:yf2 PORT MAP (C,D,Y);

U3:yf2 PORT MAP (A1 => X, C1=>Z, B1 => Y); END a;

22、 编写一个2输入与门的VHDL程序,请写出库、程序包、实体、构造体相关语句,将端口定义为标准逻辑型数据结构(本题10分)

22

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; (2) ENTITY nand2 IS

PORT (a,b:IN STD_LOGIC; (4) y:OUT STD_LOGIC); (6) END nand2;

ARCHITECTURE nand2_1 OF nand2 IS (8) BEGIN

y <= a NAND b; --与y <=NOT( a AND b);等价 (10) END nand2_1; 23、 设计异或门逻辑:(本题20分) 如下异或门,填写右边的真值表。(此项5分)

A 0 0 1 1 B 0 1 0 1 Y 0 1 1 0 其表达式可以表示为:(此项5分) 这一关系图示如下:

b&ab&a

+y试编写完整的VHDL代码实现以上逻辑。可以采用任何描述法。(此项10分)

library ieee;

use ieee.std_logic_1164.all; entity yihuo1 is port( a,b :in std_logic; y :out std_logic ); end yihuo1;

architecture yihuo1_behavior of yihuo1 is begin

23

process(a,b) begin if a=b then y<='0'; else y<='1'; end if;

end process; end yihuo1_behavior; (第2种写法) y<=a xor b;

24、 用IF语句编写一个四选一电路,要求输入d0~d3, s为选择端,输出y。

entity MUX4 is port( s: in std_logic_vector(1 downto 0); d: in std_logic_vector(3 downto 0); y: out std_logic );

end MUX4;

architecture behave of MUX4 is

begin process(s) begin

if (s=\ y<=d(0); elsif (s=\ y<=d(1); elsif (s=\ y<=d(2); elsif (s=\ y<=d(3);

else null; end if; end process;

end behave;

2、编写一个数值比较器VHDL程序的进程(不必写整个结构框架),要求使能信号g低电平时比较器开始工作,输入信号p = q,输出equ为‘0’,否则为‘1’。(本题10分) process(p,q) begin if g='0' then

24

if p = q then equ_tmp <= '0'; else equ_tmp <= '1'; end if; else equ_tmp <= '1'; end if; end process;

25、 填写完成一个3-8线译码器的真值表(5分),并写出其VHDL程序(10分)。

en 1 1 1 1 1 1 1 1 0 3-8译码器的真值表 a2a1a0 y 000 00000001 001 00000010 010 00000100 011 00001000 100 00010000 101 00100000 110 01000000 111 10000000 xxx 00000000

entity tri_eight is port( a: in std_logic_vector (2 downto 0); en: in std_logic; y: out std_logic_vector (7 downto 0) );

end tri_eight;

architecture a of tri_eight is

signal sel: std_logic_vector (3 downto 0); begin

sel(0) <= a(0); sel(1) <= a(1); sel(2) <= a(2); sel(3) <= en; with sel select y <= \ \ \ \\ \\ \\ \\

25

本文来源:https://www.bwwdw.com/article/x1c2.html

Top