在线作业 发表于 2020-2-5 10:51:27

《电子设计自动化模拟试题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]
查看完整版本: 《电子设计自动化模拟试题3》山东大学20春测试答案