




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、VHDL程序设计教程习题参考解答第1章思考题解答1 什么是VHDL?简述VHDL的发展史。答: VHDL是美国国防部为电子项目设计承包商提供的,签定合同使用的,电子系统硬件描述语言。1983年成立VHDL语言开发组,1987年推广实施,1993年扩充改版。VHDL是IEEE标准语言,广泛用于数字集成电路逻辑设计。2 简述VHDL设计实体的结构。答:实体由实体名、类型表、端口表、实体说明部分和实体语句部分组成。根据IEEE标准,实体组织的一般格式为:ENTITY 实体名 IS GENERIC(类型表); -可选项 PORT(端口表); -必需项 实体说明部分; -可选项 BEGIN 实体语句部分
2、;END ENTITY 实体名;3 分别用结构体的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 ISSIGNAL count_4:STD_LOGIC_vector
3、 (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 = 0000; ELSIF (clkEVENT AND clk = 1 ) THEN IF (en = 1 ) THEN IF (count_4 = 1111) THEN count_4 = 0000; ELSE count_4 = count_4+ 1; END IF; END IF; END IF; END PROCE
4、SS;END example;第2章 思考题解答1 什么叫对象?对象有哪几个类型?答:在VHDL语言中,凡是可以赋于一个值的客体叫对象(object)。VHDL对象包含有专门数据类型,主要有4个基本类型:常量(CONSTANT)、信号(SIGNAL)、变量(VARIABLE)和文件(FILES)。2 VHDL语言定义的标准类型有哪些?答 VHDL语言标准所定义的标准数据类型(1) 整数类型(INTEGER TYPE)(2) 实数类型或浮点类型(REAL TYPE FLOATING TYPE)(3) 位类型(BIT TYPE)(4) 位矢量类型(BIT_VECTOR TYPE)(5) 布尔类型(
5、BOOLEAN TYPE)(6) 字符类型(CHARACTER TYPE)(7) 时间类型或物理类型(TIME TYPE PHYSICAL TYPE)(8) 错误类型(NOTE,WARNIING,ERROR,FAILURE TYPE)(9) 自然数、整数类型(NATURAL TYPE)(10) 字符串类型(TRING TYPE)3 简述VHDL语言操作符的优先级。答: 在表2.1中,取反和取绝对值优先级较高,与、或逻辑运算的优先级低于算术运算的优先级。4 哪3种方法可用来进行类型转换?答:进行不同类型的数据变换,有3种方法:类型标记法、函数转换法和常数转换法。第3章思考题解答1 什么叫进程?简
6、述进程的工作方式。答:进程(process)是由外部信号触发执行的一段程序。进程语句是并行处理语句,即各个进程是同时处理的,在结构体中多个Process语句是同时并发运行的。在进程内部是顺序执行的。Process语句在VHDL程序中,是描述硬件并行工作行为的最常用、最基本的语句。进程Process语句中一般带有几个信号量例表,称为该进程的敏感量表。这些信号无论哪一个发生变化都将启动Process进程。一旦启动,进程Process中的程序将从上到下顺序执行一遍,由新变化的量引导进程产生变化结果输出。当进程的最后一个语句执行完成后,就返回到进程开始处,等待敏感量的新变化,引发进程的再一次执行。周而
7、复始,循环往复,以至无穷。这就是进程的执行过程。2 什么叫模块?区分模块与进程。答:模块(Block)语句是结构体中积木化设计语言,适用于复杂项目设计。Block块是一个独立的子结构,可以包含PORT语句、GENERIC语句,允许设计者通过这两个语句将Block块内的信号变化传递给Block块的外部信号。同样,也可以将Block块的外部信号变化传递给Block块的内部信号。对VHDL语言中的Block模块进行仿真时,Block模块中所描述的各个语句是可以并发执行的,和模块中的语句书写顺序无关。进程语句是一段程序,这段程序是顺序执行的。3 用结构描述法和GENERATE语句设计一个8位移位寄存器
8、。答:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY shift_register ISPORT(a,clk: IN STD_LOGIC; b: OUT STD_LOGIC);END ENTITY shift_regester; ARCHITECTURE eight_BIT_shift_register OF shift_register ISCOMPONENT dff - dff元件调用 PORT(a,Clk: IN STD_LOGIC; b: OUT STD_LOGIC); END COMPONENT; SIGNAL X: STD_LOGIC
9、_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
10、 1.2 ns, Int_fall = 1.7 ns, Ext_rise = 2.6 ns, Ext_fall = 2.5 ns); END FOR; FOR I2 : inv USE ENTITY WORK.inv(inv_gen1) GENERIC MAP(int_rise = 1.3 ns, Int_fall = 1.4 ns, Ext_rise = 2.8 ns, Ext_fall = 2.9 ns); END FOR; FOR AN1 : and3 USE ENTITY WORK.and3(and3_gen1) GENERIC MAP(int_rise = 2.2 ns, Int_f
11、all = 2.7 ns, Ext_rise = 3.6 ns, Ext_fall = 3.5 ns); END FOR; FOR AN2 : and3 USE ENTITY WORK.and3(and3_gen1) GENERIC MAP(int_rise = 2.2 ns, Int_fall = 2.7 ns, Ext_rise = 3.1 ns, Ext_fall = 3.2 ns); END FOR; FOR AN3 : and3 USE ENTITY WORK.and3(and3_gen1) GENERIC MAP(int_rise = 2.2 ns, Int_fall = 2.7
12、ns, Ext_rise = 3.3 ns, Ext_fall = 3.4 ns); END FOR; FOR AN4 : and3 USE ENTITY WORK.and3(and3_gen1) GENERIC MAP(int_rise = 2.2 ns, Int_fall = 2.7 ns, Ext_rise = 3.0 ns, Ext_fall = 3.1 ns); END FOR; END FOR;END decode_gen1_con;4 计一个加法器,元件例化后放入库中备用。答:半加器及全加器VHDL程序设计(1)。LIBRARY IEEE;USE IEEE.STD_LOGIC_1
13、164.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 ISCOMPONENT 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_add
14、er 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 ISSIGNAL c,d:STD_LOGIC;BEGIN C = a OR b; D = a NAND b; Co = NOT
15、 d; S = c AND d;END half1;5 简述层次化设计的过程。答:层次化设计是指对于一个大型设计任务,将目标层层分解,在各个层次上分别设计的方法。有些设计,在一些模块的基础上,通过搭建积木的方法进行设计。有人称,在整个设计任务上进行行为描述的设计方法,称为高层次设计,而从事某一模块、某一元件行为设计称为底层设计方法。6 什么是库,程序包,子程序,过程调用,函数调用?答:库(libraries)和程序包(package)用来描述和保存元件、类型说明、函数、模块等,以便在其他设计中可随时引用它们。库(libraries)是用来存储和放置可编译的设计单元的地方,通过其目录可查询、调用
16、。设计库中的设计单元(实体说明、结构体、配置说明、程序包说明和程序包体)可以用作其他VHDL描述的资源。函数和过程统称为子程序。子程序由过程和函数组成。在子程序调用过程中,过程能返回多个变量,函数能返回一个变量。若子程序调用是一个过程,就称为过程调用;若子程序调用是一个函数,则称为函数调用。过程调用和函数调用都是子程序调用。函数的参数都是输入参数。过程的参数有输入、输出和双向参数。函数有顺序函数、并行函数。过程有顺序过程、并行过程。7. 编写一个OR函数,重载它,对不同的数据类型进行OR运算。答: 参考例4-24 读者自行编写。第5章思考题解答1 CLK信号怎样用VHDL语言描述?答:时钟信号
17、的上升沿的描述:if clkevent and clk = 1 then ;时钟信号的下降沿的描述: if clk event and clk = 1 then ;2 异步复位怎样用VHDL语言描述?答:当复位信号低电平有效时,VHDL的描述为:if reset = 0 then ;当复位信号高电平有效时, VHDL的描述为:if reset =1 then ;3 设计一个8位循环移位寄存器。答: 8位循环计寄存器的VHDL参考程序设计如下: LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY circleshift8 IS PORT (seldat
18、a: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 ISbeginprocess(clk,clr) Beginif (clr=1)then selselselselselselselsel sel=;end case; end if; end process;end sample;4. 设计一个六十进制计数器。答: 60进制计数器的VHDL参考程序设计
19、如下: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 coun
20、ter60 is signal q:std_logic_vector(6 downto 0); signal rst,dly:std_logic;begin process(rst,cp) begin if rst=1 then q=; - cy(60)=0; elsif cpevent and cp=1 then dly=q(5); if ec=1then 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 whe
21、n s=1 else ;End b;5. 设计一个八位编码器。答: 八位编码器的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
22、ISBEGIN 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
23、) 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 )
24、THEN Q = 111 ; GS = 1 ; E0 = 0 ; END IF; END PROCESS P1; END encoder;6. 设计一个三八译码器。答: 三八译码器的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 ISSIGNAL indata:
25、STD_LOGIC_VECTOR (2 DOWNTO 0);BEGIN Indata y y y y y y y y y = XXXXXXXX ; END CASE; ELSE Y = ; END IF; END PROCESS;END rtl;7. 设计一个N位通用加法器。答: 设N=8位时,通用加法器的VHDL参考程序设计如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY B8_adder IS PORT (a,b,cin:IN STD_LOGIC_VECTOR(7 DOWNTO 0); Sum,co:OUT STD_LOGIC_VECTO
26、R(7 DOWNTO 0);END B8_adder;ARCHITECTURE STRUCTURE OF B8_adder ISCOMPONENT full_adder PORT (a,b,cin:IN STD_LOGIC; Sum,co:OUT STD_LOGIC); END COMPONENT;BEGIN ga: for i in 0 to 7 generate adder: full_adder PORT MAP (a(i),b(i),cin(i),Sum(i),co(i); end generate;END STRUCTURE;LIBRARY IEEE;USE IEEE.STD_LOG
27、IC_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 ISCOMPONENT 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:hal
28、f_adder PORT MAP (u0_s,cin,sum,u1_co); Co = u0_co OR u1_co; END full1;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 ISSIGNAL c,d:STD_LOGIC;BEGIN C = a OR b; D = a NAND b; Co = NOT d; S = c AND
29、 d;END half1;8.为什么要层次化设计?答: 原因有二。第一,对于一个大型设计项目,层次分解后,由不同设计人员分别进行设计,可以大大提高设计效率。第二 层次分解后,各个层次由不同的设计模块构成,可以分别测试,验证。大大降低了项目的风险和难度。9Moore型状态机和Mealy型状态机有什么相同和不同?答: Moore型状态机的输出信号仅与现态相关,Moore 型状态机输出是现态的函数,Mealy型状态机输出是现态和输入的函数。10一位有效状态机有什么优点?答:一位有效编码,比顺序编码方式占用资源多,在目标器件具有较多寄存器资源,并且寄存器之间组合逻辑较少时,一位有效编码是一个比较合适的
30、方法。11设计一个3位8状态机。答: library ieee;use ieee.std_logic_1164.all;entity memory_controller is port ( reset, read_write, ready, burst, clk : in std_logic; bus_id : in std_logic_vector(7 downto 0); oe,we : out std_logic; addr : out std_logic_vector(1 downto 0);end memory_controller;architecture state_machin
31、e of memory_controller is type StateType is (idle, decision, read1, read2, read3, read4, write); signal present_state,next_state : StateType;beginstate_comb:process(reset, bus_id, present_state, burst, read_write, ready)begin if (reset = 1) then -复位处理 oe =-; addr =; next_state oe =0; we =0; addr =00
32、; if (bus_id) = ) then next_state = decision; else next_state oe =0; we =0; addr =00; if (read_write) = 0) then next_state = read1; else read_write=0next_state oe =1; we =0; addr =00; if (ready = 0) then next_state = read1; elsif (burst =0) then next_state = idle; else next_state oe =1; we =0; addr =01; if (ready = 1) then next_state = read3; else next_state oe =1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 危险化学品安全生产许可证
- 2020年安全生产培训资料
- 纳米技术在健康食品中的应用与效果评价研究-洞察阐释
- 剧本文本结构分析-洞察阐释
- 采购员安全隐患排查
- 物业安全生产奖惩制度内容
- 【正版授权】 IEC 60068-2-88:2025 EN-FR Environmental testing - Part 2-88: Tests – Test XD: Resistance of components and assemblies to liquid cleaning media
- 现代农业股东投资入股合作协议书
- 2025至2030中国皮革化学品行业深度研究及发展前景投资评估分析
- 2025至2030中国疏散标志灯行业市场现状分析及竞争格局与投资发展报告
- 注安2024注册安全工程师【法规】核心母题600题
- 临近既有线施工方案
- 药材基原鉴定技术-洞察分析
- 《文化人类学的方法》课件
- UL498标准中文版-2019插头插座UL标准中文版
- 初中心理课职业生涯规划:我的未来我做主
- 糖尿病合并肺结核
- 平安车辆保险合同电子版
- 天疱疮护理个案分享
- 律师事务所日常管理制度模版(3篇)
- 2024年高等教育文学类自考-00730中外音乐史考试近5年真题附答案
评论
0/150
提交评论