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

共1条 1/1 1 跳转至

第七次EDA作业

菜鸟
2014-12-13 22:42:36     打赏

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

5-1  f两种方法为同步清零和异步清零。
同步清零是指与时钟同步,即时钟触发条件满足时检测清零信号是否有效,有效则在下一个时间周期的触发条件下,执行清零。
异步清零是清零信号有效时,无视触发脉冲,立即清零。

同步清零信号必须在时钟边沿信号到来时,才能实现清零功能。

同步复位是指与时钟同步,当复位信号有效之后,出现时钟有效边沿时才对电路模块进行复位操作;而异步复位时钟信号无关,只要复位信号有效,无论这时时钟信号是什么样,都对电路模块进行复位操作

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

5-7

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); --4位预置数          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; --允许计数,检测是否小于9             ELSE Q:=(OTHERS=>'0'); --大于等于9时,计数值清零            END IF;          END IF;        END IF;      END IF;          IF Q=9 THEN COUT<='1'; --计数大于9,输出进位信号      ELSE COUT<='0';      END IF;       DOUT<=Q;              --将计数值向端口输出    END PROCESS;  END behav; 

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

5-8


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;--LS_LOAD:='0';     --计数器异步复位
         ELSIF CLK'EVENT AND CLK='1' THEN    --检测时钟上升沿
           IF ADD_EN='1'THEN    --检测是否允许计数(同步他能)
              IF CQI<16#FFFF# THEN  CQI:=CQI+1;    --允许计数,检测是否小于65535
             ELSE CQI:=(OTHERS => '0');    --大于65535,计数值清零
             END IF;
              IF CQI=16#FFFF# THEN COUT<='1';    --计数大于9,输出进位信号
             ELSE COUT <= '0';
             END IF;
           END IF;
            IF SUB_EN='1'THEN    --检测是否允许计数(同步他能)
              IF CQI>0 THEN  CQI:=CQI-1;    --允许计数,检测是否小于65535
             ELSE CQI:=(OTHERS => '1');    --大于65535,计数值清零
             END IF;
              IF CQI=0 THEN COUT<='1';    --计数大于9,输出进位信号
             ELSE COUT <= '0';
             END IF;
           END IF;
         END IF;
          CQ<=CQI;    --将计数值向端口输出
       END PROCESS;
      END ARCHITECTURE A_S_16; 

共1条 1/1 1 跳转至

回复

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