这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 高校专区 » 周师电子设计创新社区 » 第七次作业

共1条 1/1 1 跳转至

第七次作业

菜鸟
2014-12-16 14:37:45     打赏

5-1 在VHDL设计中,给时序电路清0(复位)有两种不同方法,它们是什么?如何实现?

5-1 答:两种不同的清零方法是同步清零和异步清零;

同步清零就是把清零信号和时钟信号与或者与非处理后输入到清零端,异步清零的清零信号直接输入到清零端。
同步清零可以保证状态在时钟的有效期内不会改变。

同步复位 D触发器:

IF clock‘event AND clock='1' THEN

IF reset_n='0' THEN q<=(others=>'0');

ELSE q<=d;

END IF;

END IF

异步复位触发器:

IF reset_n=’0‘ THEN q<=(OTHERS=>'0');

ELSIF clock'event AND clock ='1' THEN q<=d;

END IF;

5-7 用VHDL设计一个功能类似74LS160的计数器。

解:

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; 
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNT10 IS 
 PORT(CLK,RST,EN,LOAD : IN STD_LOGIC;    
      DATA : IN  STD_LOGIC_VECTOR(3 DOWNTO 0);
      DOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
      COUT : OUT STD_LOGIC);
 END CNT10;
 ARCHITECTURE behav OF CNT10 IS
 BEGIN    PROCESS(CLK,RST,EN,LOAD) 
           VARIABLE Q : STD_LOGIC_VECTOR(3 DOWNTO 0);
   BEGIN
     IF RST='0' THEN Q:=(OTHERS =>'0'); 
       ELSIF CLK'EVENT AND CLK='1' THEN  
        IF EN='1' THEN                  
         IF LOAD='0' THEN Q:=DATA;       
         ELSE     
         IF Q<9 THEN Q:=Q+1;
            ELSE Q:=(OTHERS=>'0');
           END IF
            END IF;
          END IF;   
        END IF;    
    IF Q=9 THEN COUT<='1';
     ELSE COUT<='0'; 
     END IF;    
     DOUT<=Q;           
    END PROCESS;
 END behav;

5-8 给出含有异步清0和计数使能的16位二进制加减可控计数器的VHDL描述。

解:

 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY ADD_SUB_LOAD_16 IS
   PORT (CLK,RST,ADD_EN,SUB_EN,LOAD :  IN STD_LOGIC;
                    DATA :  IN STD_LOGIC_VECTOR(15  DOWNTO  0);
                      CQ : OUT STD_LOGIC_VECTOR(15  DOWNTO  0);
                                  COUT : OUT STD_LOGIC);
    END ENTITY ADD_SUB_LOAD_16;
      ARCHITECTURE A_S_16 OF ADD_SUB_LOAD_16 IS
    BEGIN
      PROCESS(CLK,RST,ADD_EN,SUB_EN,LOAD)
        VARIABLE CQI: STD_LOGIC_VECTOR(15 DOWNTO 0);
             --VARIABLE LS_LOAD : STD_LOGIC;
      BEGIN
            --LS_LOAD:=LOAD;
        IF RST = '1' THEN CQI:=(OTHERS => '0');
        ELSIF LOAD = '1' THEN CQI:=DATA;   ;    
        ELSIF CLK'EVENT AND CLK='1' THEN   
          IF ADD_EN='1'THEN  
            IF CQI<16#FFFF# THEN  CQI:=CQI+1;   
            ELSE CQI:=(OTHERS => '0');   
            END IF;
            IF CQI=16#FFFF# THEN COUT<='1';   
            ELSE COUT <= '0';
            END IF;
          END IF;
          IF SUB_EN='1'THEN   
            IF CQI>0 THEN  CQI:=CQI-1;   
            ELSE CQI:=(OTHERS => '1');   
            END IF;
            IF CQI=0 THEN COUT<='1';  
            ELSE COUT <= '0';
            END IF;
          END IF;
        END IF;
        CQ<=CQI;  
      END PROCESS;
    END ARCHITECTURE A_S_16;






关键词: 作业    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]