搜档网
当前位置:搜档网 › 32位移位寄存器

32位移位寄存器

32位移位寄存器
32位移位寄存器

8位数码扫描显示电路设计

一、实验目的

学习硬件扫描显示电路的设计;

二、实验原理

动态数码扫描显示方式是利用了人眼的视觉暂留效应,把八个数码管按一定顺序进行点亮,当点亮的频率不大时,我们看到的是数码管一个个的点亮,然而,当点亮频率足够大时,我们看到的不再是一个一个的点亮,而是全部同时显示,与传统方式得到的视觉效果完全一样。因此我们只要给数码管这样一个扫描频率,那么就可以实现两个以上的数码管同时点亮。而这个频率我们可以通过一个计数器来产生,只要计数频率足够大,就可以实现我们的要求。事实上,因为数码管点亮不是瞬间就可以的,它也需要一定的时间,该时间与数码管的选择有关系。为了折中这一对矛盾,实验中一般可将计数频率选择在100Hz左右。

图示8位数码扫描显示电路,其中每个数码管的8 个段:h、g、f、e、d、c、b、a(h 是小数点)都分别连在一起,8 个数码管分别由8 个选通信号k1、k2、… k8 来选择。被选通的数码管显示数据,其余关闭。如在某一时刻,k3 为高电平,其余选通信号为低电平,这时仅k3 对应的数码管显示来自段信号端的数据,而其它7 个数码管呈现关闭状态。根据这种电路状况,如果希望在8 个数码管显示希望的数据,就必须使得8 个选通信号k1、k2、… k8 分别被单独选通,并在此同时,在段信号输入口加上希望在该对应数码管上显示的数据,于是随着选通信号的扫变,就能实现扫描显示的目的。

实验参考扫描显示程序中clk 是扫描时钟;SG 为7 段控制信号,由高位至低位分别接g、f、e、d、c、b、a 7个段;BT 是位选控制信号,接图5-2 中的8 个选通信号:k1、k2、… k8 。程序中CNT8 是一个3 位计数器,作扫描计数信号,由进程P2 生成;进程P3 是7 段译码查表输出程序,进程P1 是对8 个数码管选通的扫描程序,例如当CNT8 等于

"001" 时,K2 对应的数码管被选通,同时,A 被赋值3,再由进程P3 译码输出"1001111",显示在数码管上即为“3”;当CNT8 扫变时,将能在8 个数码管上显示数据:13579BDF 。原理图如图1所示。

图1 八位数码管显示电路

三、实验步骤

1、建立一个工程项目,设置路径,项目名和顶层实体名一致;

2、、设计一个动态扫描显示电路,在8 个数码管上显示数据:13579BDF;并进行编译仿真与下载测试;

四、8位数码扫描显示电路的VHDL描述:

LIBRARY IEEE;

USE SCAN_LED IS

PORT ( CLK : IN STD_LOGIC;

SG : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);

BT: OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );

END;

ARCHITECTURE one OF SCAN_LED IS

SIGNAL CNT8 : STD_LOGIC_VECTOR(2 DOWNTO 0);

SIGNAL A : INTEGER RANGE 0 TO 15;

BEGIN

P1:PROCESS( CNT8 )

BEGIN

CASE CNT8 IS

WHEN "000" => BT <= "00000001" ; A <= 1 ;

WHEN "001" => BT <= "00000010" ; A <= 2 ;

WHEN "010" => BT <= "00000100" ; A <= 3 ;

WHEN "011" => BT <= "00001000" ; A <= 4 ;

WHEN "100" => BT <= "00010000" ; A <= 5 ;

WHEN "101" => BT <= "00100000" ; A <= 6 ;

WHEN "110" => BT <= "01000000" ; A <= 7 ;

WHEN "111" => BT <= "" ; A <= 8 ;

WHEN OTHERS => NULL ;

END CASE ;

END PROCESS P1;

P2:PROCESS(CLK)

BEGIN

IF CLK'EVENT AND CLK = '1' THEN CNT8 <= CNT8 + 1;

END IF;

END PROCESS P2 ;

P3:PROCESS( A )

BEGIN

CASE A IS

WHEN 0 => SG <= "0111111"; WHEN 1 => SG <= "0000110";

WHEN 2 => SG <= "1011011"; WHEN 3 => SG <= "1001111";

WHEN 4 => SG <= "1100110"; WHEN 5 => SG <= "1101101";

WHEN 6 => SG <= "1111101"; WHEN 7 => SG <= "0000111";

WHEN 8 => SG <= "1111111"; WHEN 9 => SG <= "1101111";

WHEN 10 => SG <= "1110111"; WHEN 11 => SG <= "1111100";

WHEN 12 => SG <= "0111001"; WHEN 13 => SG <= "1011110";

WHEN 14 => SG <= "1111001"; WHEN 15 => SG <= "1110001";

WHEN OTHERS => NULL ;

END CASE ;

END PROCESS P3;

END;

五、仿真波形

功能仿真波形

时序仿真波形

32位并进/并出移位寄存器设计

一、实验原理

用一个8位移位寄存器,再增加一些电路,如4个8位锁存器等,设计成为一个能为32位二进制数进行不同方式移位的移位寄存器。

二、实验步骤

1、建立一个工程项目,设置路径,项目名和顶层实体名一致;

2、设计一个8位移位寄存器电路;

3、设计一个8位锁存器电路;

4、运用元件调用声明语句和元件例化语句完成顶层设计。

三、实验程序

1、八位移位寄存器程序

LIBRARY IEEE;

USE jicun IS

PORT ( CLK,CO: IN STD_LOGIC;

MD : IN STD_LOGIC_VECTOR(2 DOWNTO 0);

D : IN STD_LOGIC_VECTOR(7 DOWNTO 0);

QB : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);

CN : OUT STD_LOGIC);

END jicun;

ARCHITECTURE behav OF jicun IS

SIGNAL REG : STD_LOGIC_VECTOR(7 DOWNTO 0);

SIGNAL CY : STD_LOGIC;

BEGIN

PROCESS(CLK,CO,MD)

BEGIN

IF CLK'EVENT AND CLK='1' THEN

CASE MD IS

WHEN "001"=> REG(0)<=CO;

REG(7 DOWNTO 1)<= REG(6 DOWNTO 0);CY<=REG(7); WHEN "010" => REG(0)<=REG(7); ---自循环左移

REG(7 DOWNTO 1)<= REG(6 DOWNTO 0);

WHEN "011"=>REG(7)<=REG(0); ---自循环右移

REG(6 DOWNTO 0)<=REG(7 DOWNTO 1);

WHEN "100" =>REG(7)<=CO; ---带进位循环右移

REG(6 DOWNTO 0)<=REG(7 DOWNTO 1);CY<=REG(0);

WHEN "101" =>REG(7 DOWNTO 0)<=D(7 DOWNTO 0); --加载待移数 WHEN OTHERS=>REG<=REG;CY<=CY;--保持

END CASE;

END IF;

END PROCESS;

QB(7 DOWNTO 0)<=REG(7 DOWNTO 0);CN<=CY;

END behav;

2、锁存器程序

library ieee ;

use ;

entity suocun is

port(d : in std_logic_vector(7 downto 0) ;

q: out std_logic_vector(7 downto 0);

clk : in std_logic );

end suocun ;

architecture one of suocun is

signal q1: std_logic_vector(7 downto 0);

begin

process(clk,q1)

begin

if clk'event and clk='1'

then

q1<=d;

end if;

end process;

q<=q1;

end one;

3、顶层设计程序

LIBRARY IEEE;

USE jicun32 IS

PORT ( clk0,co: IN STD_LOGIC;

md : IN STD_LOGIC_VECTOR(2 DOWNTO 0);

db : IN STD_LOGIC_VECTOR(31 DOWNTO 0);

qb : OUT STD_LOGIC_VECTOR(31 DOWNTO 0);

cn : OUT STD_LOGIC);

END jicun32;

ARCHITECTURE one OF jicun32 IS

COMPONENT jicun

PORT ( CLK,CO: IN STD_LOGIC;

MD : IN STD_LOGIC_VECTOR(2 DOWNTO 0);

D : IN STD_LOGIC_VECTOR(7 DOWNTO 0);

QB : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);

CN : OUT STD_LOGIC);

END COMPONENT;

COMPONENT suocun

port(d : in std_logic_vector(7 downto 0) ;

q: out std_logic_vector(7 downto 0);

clk : in std_logic );

END COMPONENT;

SIGNAL e,f,g,h : STD_LOGIC_VECTOR(7 DOWNTO 0);

SIGNAL l,m,n : STD_LOGIC;

BEGIN

u1: suocun PORT MAP(d=>db(7 DOWNTO 0),q=>e,clk=>clk0);

u2: jicun PORT MAP (D=>e,QB=>qb(7 DOWNTO 0),

CLK=>clk0,CO=>co,CN=>l,MD=>md);

u3: suocun PORT MAP(d=>db(15 DOWNTO 8),q=>f,clk=>clk0); u4: jicun PORT MAP(D=>f,QB=>qb(15 DOWNTO 8),

CLK=>clk0,CO=>l,CN=>m,MD=>md);

u5: suocun PORT MAP(d=>db(23 DOWNTO 16),q=>g,clk=>clk0); u6: jicun PORT MAP(D=>g,QB=>qb(23 DOWNTO 16),

CLK=>clk0,CO=>m,CN=>n,MD=>md);

u7: suocun PORT MAP(d=>db(31 DOWNTO 24),q=>h,clk=>clk0); u8: jicun PORT MAP(D=>h,QB=>qb(31 DOWNTO 24),

CLK=>clk0,CO=>n,CN=>cn,MD=>md);

END ARCHITECTURE one;

四、仿真结果

1、锁存器仿真

2、八位寄存器仿真

3、顶层设计仿真

相关主题