EDA练习

  • 格式:doc
  • 大小:4.30 MB
  • 文档页数:11

EDA练习一、名词解释及回答问题:写出下列缩写的中文(或者英文)含义:1.VHDL2.FPGA3.RTL4.SOPC5.EDA6. CPLD7.HDL8.LUT9.ASIC 10.SOC 11.JTAG 12.IP 13.LPM14.EDA与传统设计方法的区别?15.硬件描述语言编译综合后的结果是什么?16.时序仿真与功能仿真的区别?二、程序填空:(仅以一例说明题型)下面程序是参数可定制带计数使能异步复位计数器的VHDL描述,试补充完整。

三、程序改错:(仅以一例说明题型)1 LIBRARY IEEE;2 USE IEEE.STD_LOGIC_1164.ALL; 34 ENTITY CNT10 IS5 PORT ( CLK : IN STD_LOGIC ;6 Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)) ;7 END CNT10;8 ARCHITECTURE bhv OF CNT10 IS9SIGNAL Q1 : STD_LOGIC_VECTOR(3 DOWNTO 0);10 BEGIN11 PROCESS (CLK) BEGIN12 IF RISING_EDGE(CLK) begin 13 IF Q1 < 9 THEN 14 Q1 <= Q1 + 1 ; 15 ELSE16 Q1 <= (OTHERS => '0'); 17 END IF; 18 END IF; 19 END PROCESS ; 20 Q <= Q1; 21 END bhv;指出并修改相应行的程序(如果是缺少语句请指出大致的行数): 错误1 行号:程序改为: 错误2 行号: 程序改为:2. 若编译时出现如下错误,请分析原因。

四、VHDL 程序设计:1、设计一数据选择器MUX,其系统模块图和功能表如下图所示。

试采用下面三种方式中的两种来描述该数据选择器MUX 的结构体。

SEL COUT 00011011OTHERSA xorB A or B A nor B A nand B “XX ”(a) 用if语句。

(b) 用case语句。

(c) 用when else语句。

(d) 用with select语句。

2、课本4-23、课本例6-18、例6-19用其他方式实现。

4、设计一个3-8译码器输入端口:din 输入端,位宽为3位EN 译码器输出使能,高电平有效输出端口:xout 译码器输出,低电平有效5、试描述一个带进位输入、输出的8位全加器端口:A、B为加数,CIN为进位输入,S为加和,COUT为进位输出五、根据原理图写出相应的VHDL程序:1、2、3、4、六、综合题(状态机)1、用VHDL设计交通灯控制器图a是一个十字路口交通灯控制示意图,H公路和V公路在路口各有两个红绿灯指示道路通行状况。

图a 十字路口交通灯控制示意图对应图a的交通灯控制器,拟用VHDL语言设计一电路模拟其控制逻辑,图b为该VHDL 电路的设计模块图。

图b 交通灯控制器电路设计模块图图b中Timer模块为一定时电路,其实体说明如下:Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Entity timer isPort ( clk, reset, start_timer : in std_logic; -- 时钟、复位、启动信号Long, short : out std_logic); -- 20秒、4秒定时完成信号End timer;图c为Timer模块仿真波形,输入信号clk为频率1KHz的时钟信号,当复位信号reset高电平时定时器复位,启动信号start_timer为低电平时定时器清零,高电平时开始定时,定时4秒后short信号输出高电平,定时20秒后long信号输出高电平,定时器不再计数。

图c Timer模块仿真波形问题1,请完成Timer模块的VHDL设计:(实体说明部分已有,可不写)图b中Controller模块的实体说明如下:Library ieee;Use ieee.std_logic_1164.all;Entity controller isPort ( clk, reset : in std_logic; -- 时钟、复位信号long, short : in std_logic; -- 20秒、4秒定时完成信号start_timer : out std_logic; -- 启动定时信号h_light, v_light : out std_logic(1 downto 0) ); -- H路、V路交通灯控制信号End controller;其中H路、V路交通灯控制信号输出“00”表示绿灯、“01”表示黄灯、“11”表示红灯。

问题2:Controller模块中状态迁移图如图d所示,请完成Controller模块的VHDL设计:long /= ‘1’图d Controller模块状态迁移图问题3:根据图b的系统模块结构,完成整个交通灯电路顶层模块VHDL设计。

library ieee;use ieee.std_logic_1164.all;entity jtd isport ( clk, reset : in std_logic;h_light, v_light : out std_logic_vector(1 downto 0) );end jtd;问题4:在图e所示的交通灯顶层模块仿真波形图中完成输出信号h_light、v_light和controller 中状态机当前状态信号c_s的仿真波形。

图e 交通灯仿真波形图2、根据如下所示状态图及其状态机结构图,回答问题ina="101" / outa="0010" ina="111" / outa="1100"outa="1001"outa="1111"ina="101" / outa="1101" ina="011" / outa="1110"(a)(b)(c)(1)试判断该状态机类型,并说明理由。

(2)请问如何消除状态机输出信号毛刺?试列出至少两种方法,并说明理由。

(3)试由b 、c 两图中任选一图写出其完整的VHDL 程序。

(4)已知一个简单的波形发生器的数字部分系统框图如下图所示:图中DOWNCNT 、MYROM 都是在MAX+PlusII 中使用MegaWizard 调用的LPM 模块,其试用VHDL描述该系统的顶层设计(使用例化语句)。

3、已知状态机状态图如图(a)所示;完成下列各题:(1)试判断该状态机类型,并说明理由。

(2)根据状态图,写出对应于结构图(b),分别由主控组合进程和主控时序进程组成的VHDL 有限状态机描述(3)若已知输入信号如下图所示,分析状态机的工作时序,画出该状态机的状态转换值(current_state)和输出控制信号(outa);(4)若状态机仿真过程中出现毛刺现象,应如何消除;试指出两种方法,并简单说明其原理。

4、用VHDL设计两层升降平台控制器图a是一个两层的升降平台示意图,一层和二层各有一个按钮用来呼叫升降机。

图a 两层升降平台示意图对应图a的升降平台控制器,拟用VHDL语言设计一个电路模拟其控制逻辑,图b为该VHDL电路的设计模块图。

door up downclk rst call arr图b 两层升降平台控制器设计模块图图b中的cnt100模块用来控制升降台开关门延时,elev2为升降平台状态控制器。

升降台闸门由打开到关闭或由关闭到打开时,elev2模块向cnt100模块输出一个en计数使能信号(高电平有效)。

cnt100模块计数溢出(≥100)时cnt100输出cout信号为高电平,同时cnt100计数停止。

cnt100模块的实体描述如下所示:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT100 ISPORT ( CLK, EN : IN STD_LOGIC; -- 时钟、使能信号COUT : OUT STD_LOGIC ); -- 溢出信号END CNT100;问题1,请完成cnt100模块的VHDL设计(实体部分已给出,不用写),参考的仿真波形如图c所示。

图c cnt100仿真波形图问题2,以下是elev2模块的VHDL描述:请根据elev2的VHDL描述画出其状态迁移图。

library ieee;use ieee.std_logic_1164.all;entity elev2 isport ( clk, rst : in std_logic; -- 时钟、复位信号cout : in std_logic; -- 定时溢出信号call : in std_logic_vector(2 downto 1); -- 呼叫信号arr : in std_logic_vector(2 downto 1); -- 到达信号door : out std_logic; -- 门控信号,低电平开门up : out std_logic; -- 上升信号down : out std_logic; -- 下降信号en : out std_logic); -- 延时计数清零、使能信号end elev2;architecture behav of elev2 isconstant CL1 : std_logic_vector(2 downto 0) := "000";-- 一楼关门constant OP1 : std_logic_vector(2 downto 0) := "100";-- 一楼开门constant UP1 : std_logic_vector(2 downto 0) := "010";-- 一楼上升constant DN2 : std_logic_vector(2 downto 0) := "001";-- 二楼下降constant CL2 : std_logic_vector(2 downto 0) := "011";-- 二楼关门constant OP2 : std_logic_vector(2 downto 0) := "111";-- 二楼开门signal control : std_logic_vector(2 downto 0); -- 状态控制信号begindoor <= not control(2); up <= control(1); down <= control(0);process (clk, rst, arr, call)variable ven : std_logic;beginif rst = '1' then control <= CL1;elsif clk'event and clk = '1' thencase control iswhen CL1 => if cout = '1' then -- 关门已完毕if call(1) = '1' then control <= OP1; en <= '0';elsif call(2) = '1' then control <= UP1; en <= '1';else control <= CL1; en <= '1'; end if;else control <= CL1; en <= '1'; end if;when OP1 => if cout = '1' then -- 开门已完毕if call(1) = '1' then control <= OP1; en <= '1';else control <= CL1; en <= '0'; end if;else control <= OP1; en <= '1'; end if;when UP1 => if arr(2) = '1' then control <= CL2;else control <= UP1; end if;when DN2 => if arr(1) = '1' then control <= CL1;else control <= DN2; end if;when CL2 => if cout = '1' then -- 关门已完毕if call(2) = '1' then control <= OP2; en <= '0';elsif call(1) = '1' then control <= DN2; en <= '1';else control <= CL2; en <= '1'; end if;else control <= CL2; en <= '1'; end if;when OP2 => if cout = '1' then -- 开门已完毕if call(2) = '1' then control <= OP2; en <= '1';else control <= CL2; en <= '0'; end if;else control <= OP2; en <= '1'; end if;when others => control <= CL1;end case;end if;end process;end behav;问题3,根据图b所示升降平台模块图,写出升降平台控制器ELEV_TOP的VHDL顶层描述:。