《电子设计自动化模拟试题3》山东大学20春测试答案
电子设计自动化模拟试题3一、填空题
1、EDA的英文全称是 ,EDA的基本设计流程包括:原理图/HDL文本输入→编译→ → →优化→ →下载。
2、综合是EDA设计流程的关键步骤,综合是
的过程。
3、GAL器件的OLMC包括 、 、 、 四种输出组态。
4、在实验过程中使用的是 系列的器件,该系列器件在结构上属于阵列型结构还是单元型结构 ,掉电后该系列器件的编程信息能否保持 。
5、变量和信号都属于VHDL程序的数据对象,但他们的应用范围却不相同,变量的范围是 ,信号的范围是 。
二、简答题
1、并行语句和顺序语句在使用位置和执行顺序上有何区别?
2、简述功能仿真和时序仿真的区别。
3、VHDL的端口模式通常有哪几种?各有什么特点?
三、改错题
要求:在程序中存在5处错误,找出其中的错误并改正之。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY CNT4 IS
PORT ( CLK : IN STD_LOGIC ;
Q: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
END CNT4;
ARCHITECTURE bhv OF CNT IS
VARIABLE Q1 : STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
PROCESS (CLK)
BEGIN
IF CLK’event and clk=’1’ THEN
IF Q1 < 15 THEN
Q1 <= Q1 + 1 ;
ELSE
Q1 <= (OTHERS => '0');
END IF;
END PROCESS ;
Q <= Q1;
END bhv;
四、综合题
1、用VHDL语言设计一个带有异步复位端和同步使能端的10进制加法计数器。
2、阅读下列VHDL程序,在下面的波形中填上temp1、temp2中的值,画出clk_out的波形并说明clk_out与clk_in的关系。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY three IS
PORT
(
clk_in :IN STD_LOGIC;
clk_out :OUT STD_LOGIC );
END;
ARCHITECTURE bhv OF three IS
SIGNAL temp1,temp2 : STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN
P1: PROCESS(clk_in)
BEGIN
IF clk_in’event and clk_in=’1’ THEN
CASE temp1 IS
WHEN "00" => temp1 <= "01";
WHEN "01" => temp1 <= "10";
WHEN "10" => temp1 <= "00";
WHEN OTHERS => temp1 <= "00";
END CASE;
END IF;
END PROCESS P1;
P2: PROCESS(clk_in)
BEGIN
IF clk_in’event and clk_in=’0’ THEN
CASE temp2 IS
WHEN "00" => temp2 <= "01";
WHEN "01" => temp2 <= "10";
WHEN "10" => temp2 <= "00";
WHEN OTHERS => temp2 <= "00";
END CASE;
END IF;
END PROCESS P2;
clk_out <= temp1(1) or temp2(1);
END bhv;
4、(20分)已知状态机的状态图如图a所示;in_a为输入信号,out_a为输出信号;完成下列各题:
图a
图b
试判断该状态机类型,并说明理由。
根据状态图,用VHDL语言写出对应于结构图b(分别由主控组合进程和主控时序进程组成)的有限状态机描述程序(clk为时钟信号,reset为高电平有效的异步复位信号)。
若已知输入信号如下图所示,分析状态机的工作时序,画出该状态机的状态转换值(现态)c_state和输出信号out_a的波形。
若状态机仿真过程中出现毛刺现象,应如何消除;试指出两种方法,并简单说明其原理。四、综合题参考答案
1、参考答案:
library ieee;
use ieee.std_logic_1164.all;
entity cnt10 is
port(rst,enable,clk: in std_logic;
qa: out integer);
end cnt10;
architecture behave of cnt10 is
begin
process( clk )
variablecnt: integer range 0 to 255:=0;
begin
if (rst=‘1’)then
elsif (clk’event and clk = ‘1’)then
if (enable = ‘1’)then
if(cnt=9)thencnt:=0;
elsecnt := cnt + 1;
end if;
end if;
end if;
endif;
qa <= cnt;
end process;
end behave;
2、参考答案:
4、
(1)该状态机为moore型状态机,输出数据outa和输入ina没有直接逻辑关系,outa是时钟clk的同步时序逻辑。
(2)程序如下:
Library ieee;
Use ieee.std_logic_1164.all;
Entity mooreb is
Port (clk, reset : in std_logic;
Ina : in std_logic_vector (1 downto 0);
Outa : out std_logic_vector (3 downto 0) );
End mooreb;
Architecture one of mooreb is
Type ms_state is (st0, st1, st2, st3);
Signal c_st, n_st : ms_state;
Begin
Process (clk, reset)
Begin
If reset = ‘1’ then c_st <= st0;
elsif clk’event and clk = ‘1’ then c_st <= n_st;
end if;
End process;
Process (c_st)
Begin
Case c_st is
When st0 => if ina = “00” then n_st <= st0;
Else n_st <= st1;
End if;
Outa <= “0101”;
When st1 => if ina = “00” then n_st <= st1;
Else n_st <= st2;
End if;
Outa <= “1000”;
When st2 => if ina = “11” then n_st <= st0;
Else n_st <= st3;
End if;
Outa <= “1100”;
When st3 => if ina = “11” then n_st <= st3;
Else n_st <= st0;
End if;
Outa <= “1101”;
When others => n_st <= st0;
End case;
End process;
end one;
(3)
(4)参考答案:
方法1,添加辅助进程对输出数据进行锁存
方法2,将双进程状态机改写为单进程状态机,其输出也是锁存过了,故能消除毛刺
方法3,使用状态位直接输出型状态机编码方式,其输出直接由当前状态输出,也没有毛刺www.ap5u.com
页:
[1]