BCD计数器、移位寄存器的实现

一、实验内容

  1. 熟悉quartus开发环境
  2. BCD计数器的实现
  3. 移位寄存器的实现
  • 实验目的

1)熟悉quartus开发环境

2)BCD计数器的实现

3)移位寄存器的实现

三、软件流程(硬件连接)

①新建工程

②创建半加器原理图

③将设计项目设置成可调用的元件

④尝试运行代码

⑤新建文件输出代码的波形

 四、代码

1)BCD计数器

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;        --库程序包使用说明
ENTITY bcd IS
PORT(CLK,RST,EN:IN STD_LOGIC;
     LED7SA,LED7SB,LED7SC:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));
END bcd;                              --实体说明
ARCHITECTURE behav OF bcd  IS        --基本结构体
SIGNAL CLK2,FULL,FOUT:STD_LOGIC
SIGNAL A,B,C:INTEGER RANGE 9 DOWNTO 0;
BEGIN
CLK0:PROCESS(CLK)
VARIABLE CNT23:STD_LOGIC_VECTOR(23 DOWNTO 0);
BEGIN
IF CLK'EVENT AND CLK='1' THEN
CNT23:=CNT23+1;
END IF;
IF CNT23(15)='1' THEN
CLK2<='1';
ELSE CLK2<='0';
END IF;
END PROCESS CLK0;
PROCESS(CLK2,RST,EN)                           --基本结构体
variable CQ1,CQ2:INTEGER;
BEGIN
IF RST='1' THEN A<=0;B<=0;C<=0;               --复位
   ELSIF CLK2'EVENT AND CLK2='1' THEN
     IF EN='1' THEN
        IF A<9 THEN A<=A+1;
        ELSE
        A<=0;B<=B+1;
        IF B=9 THEN
        B<=0;C<=C+1;
        END IF;
        IF C=9 THEN
        C<=0;B<=0;A<=0;
        END IF;
        END IF;
     END IF;
END IF;
END PROCESS;
PROCESS(A)                                --结构体A    
BEGIN
CASE A IS                                  --实现CASE语句
WHEN 0 => LED7SA<="1000000";
WHEN 1 => LED7SA<="1111001";
WHEN 2 => LED7SA<="0100100";
WHEN 3 => LED7SA<="0110000";
WHEN 4 => LED7SA<="0011001";
WHEN 5 => LED7SA<="0010010";
WHEN 6 => LED7SA<="0000011";
WHEN 7 => LED7SA<="1111000";
WHEN 8 => LED7SA<="0000000";
WHEN 9 => LED7SA<="0011000";
WHEN OTHERS=>NULL;
END CASE;
END PROCESS;
PROCESS(B)                               --结构体B
BEGIN
CASE B IS                                 --实现CASE语句
WHEN 0 => LED7SB<="1000000";
WHEN 1 => LED7SB<="1111001";
WHEN 2 => LED7SB<="0100100";
WHEN 3 => LED7SB<="0110000";
WHEN 4 => LED7SB<="0011001";
WHEN 5 => LED7SB<="0010010";
WHEN 6 => LED7SB<="0000011";
WHEN 7 => LED7SB<="1111000";
WHEN 8 => LED7SB<="0000000";
WHEN 9 => LED7SB<="0011000";
WHEN OTHERS=>NULL;
END CASE;
END PROCESS;
PROCESS(C)                                   --结构体C
BEGIN
CASE C IS                                     --实现CASE语句
WHEN 0 => LED7SC<="1000000";
WHEN 1 => LED7SC<="1111001";
WHEN 2 => LED7SC<="0100100";
WHEN 3 => LED7SC<="0110000";
WHEN 4 => LED7SC<="0011001";
WHEN 5 => LED7SC<="0010010";
WHEN 6 => LED7SC<="0000011"
WHEN 7 => LED7SC<="1111000";
WHEN 8 => LED7SC<="0000000";
WHEN 9 => LED7SC<="0011000";
WHEN OTHERS=>NULL;
END CASE;
END PROCESS;
END behav;

2)移位寄存器

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY shuyiwei IS                               --调用库、程序包
PORT (
       din,clk:IN STD_LOGIC;
		 dout:OUT STD_LOGIC);
END ENTITY shuyiwei;                              --实体引用
ARCHITECTURE art OF shuyiwei IS
COMPONENT dff                                    --元件结构体说明
PORT(
      d,clk:IN STD_LOGIC;
		q:OUT STD_LOGIC);
END COMPONENT;
SIGNAL Z:STD_LOGIC_VECTOR(4 DOWNTO 0);           --信号结构体说明
BEGIN
z(0)<=din;dout<=z(4);
g1:FOR i IN 0 TO 3 GENERATE
  dffx:dff PORT MAP(z(i),clk,z(i+1));
  END GENERATE g1;
 END ARCHITECTURE art;

五、实验结果及分析

1)BCD计数器

 

异步递增二进制计数器递增计数器就是每输入一个脉冲就进行一次加1运算,而二进制计数是输入脉冲个数与自然二进制数有对应关系。异步计数器是在做加1计数时是采取从低位到高位逐位进位的方式工作的。因此其中的各个触发器不是同步翻转的。按照二进制加法计数规则,每一位如果已经是1,则再计入1时应变为0, 同时向高位发出进位信号,使高位翻转。若使用下降沿动作的触发器组成计数器,只要将低位触发 器的Q端接到高位触发器的时钟输入端即可。当低位由 时,Q端的下降沿正好可以作为高位的时钟信号CP。

2)移位寄存器

移位寄存器不仅能寄存数据,而且能在时钟信号的作用下使其中的数据依次左移或右移。四位移位寄存器的原理图如图所示。因为从时钟信号CP的上升沿加到触发器上开始到输出端新状态稳定地建立起来有一段延迟时间,所以当时钟信号同时加到四个触发器上时,每个触发器接收的都是左边一个触发器中原来的数据。寄存器中的数据依次右移一位。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值