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

共1条 1/1 1 跳转至

EDA作业

菜鸟
2014-12-11 21:38:51     打赏

5.1 

--15-1【例5-4】含异步复位和时钟使能的D触发器     LIBRARY IEEE; 

    USE IEEE.STD_LOGIC_1164.ALL;     ENTITY DFF1 IS 

      PORT(CLK,RST,EN,D: IN  STD_LOGIC;                       Q: OUT STD_LOGIC);     END; 

    ARCHITECTURE bhv OF DFF1 IS 

      SIGNAL Q1:STD_LOGIC;  --类似于在芯片内部定义一个数据的暂存节点     BEGIN 

      PROCESS (CLK,Q1,RST,EN)       BEGIN 

        IF RST='1' THEN Q1<='0'; 

        ELSIF CLK'EVENT AND CLK='1' THEN           IF EN='1' THEN              Q1<=D;            END IF;         END IF; 

      END PROCESS; 

      Q<=Q1;    --将内部的暂存数据向端口输出     END bhv;  

--25-15-5】含同步复位控制的D触发器     LIBRARY IEEE; 

    USE IEEE.STD_LOGIC_1164.ALL;     ENTITY DFF1 IS 

      PORT(CLK,RST,D: IN  STD_LOGIC;                    Q: OUT STD_LOGIC);     END; 

    ARCHITECTURE bhv OF DFF1 IS 

    SIGNAL Q1:STD_LOGIC;  --类似于在芯片内部定义一个数据的暂存节点     BEGIN 

      PROCESS(CLK,Q1,RST)         BEGIN 

          IF CLK'EVENT AND CLK='1' THEN 

           IF RST='1' THEN Q1<='0';ELSE Q1<=D;END IF;           END IF;       END PROCESS; 

      Q<=Q1;    --将内部的暂存数据向端口输出     END bhv;

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; --允许计数,检测是否小于

          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

  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 跳转至

回复

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