数字电路第四次实验

 

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;

ENTITY NBITSHIFT IS
GENERIC(N:INTEGER:=8);
PORT(
        CLK,DIN:IN STD_LOGIC;
        QOUT:OUT STD_LOGIC_VECTOR(N-1 DOWNTO 0)
);
END NBITSHIFT;

ARCHITECTURE RTL OF NBITSHIFT IS
SIGNAL TEMP:STD_LOGIC_VECTOR(N-1 DOWNTO 0);
BEGIN
 PROCESS(CLK)
  BEGIN
    IF CLK'EVENT AND CLK='1' THEN
    TEMP(0)<=DIN;
    TEMP(N-1 DOWNTO 1)<=TEMP(N-2 DOWNTO 0);
/*还有一种方法,如下:
    FOR I IN 0 TO N-2 LOOP
    TEMP(I+1)<=TEMP(I);
    END LOOP;
*/
    END IF;
 END PROCESS;
QOUT<=TEMP;
END RTL;

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;

ENTITY GENSIGANL IS
PORT(
	CLK:IN STD_LOGIC;
	YOUT:OUT STD_LOGIC
);
END GENSIGNAL;

ARCHITECTURE RTL OF GENSIGANL IS
SIGNAL Q1,Q2,Q3,Q4:STD_LOGIC;
SIGNAL D1,D2,D3,D4:STD_LOGIC;
BEGIN
YOUT<=Q4;
D1<=((Q3)XOR(Q4))OR((NOT Q1)AND(NOT Q2)AND(NOT Q3)AND(NOT Q4));
D2<=Q1;
D3<=Q2;
D4<=Q3;
PROCESS(CLK)
BEGIN
    IF CLK'EVENT AND CLK='1' THEN 
    Q1<=D1;
    Q2<=D2;
    Q3<=D3;
    Q4<=D4;
    END IF;
END PROCESS;
END RTL;



 

LIBRARY IEEE;
IEEE.STD_LOGIC_1164.ALL;

ENTITY BISHIFT IS
PORT(
        CLR,DIR,CLK,LOAD:IN STD_LOGIC;
        DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
        QOUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)
);
END BISHIFT;

ARCHITECTURE RTL OF BISHIFT IS
SIGNAL DREG:STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
    PROCESS(CLR,CLK)
    BEGIN
    IF CLR='0' THEN DREG<="00000000";
    ELSIF CLK'EVENT AND CLK='1' THEN
        IF LOAD='0' THEN DREG<=DIN;
        ELSE 
            IF DIR='0' THEN 
                DREG(0)<=DREG(7);
                FOR I IN 0 TO 6 LOOP
                DREG(I+1)<=DREG(I);
                END LOOP;
            ELSE DREG(7)<=DREG(0);
                 DREG(6 DOWNTO 0)<=DREG(7 DOWNTO 1);
            END IF;
        END IF;
    END IF;
    END PROCESS;
QOUT<=DREG;
END RTL;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沙福林学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值