32位并进并出移位寄存器设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《EDA课程设计》
32位并进并出移位寄存器设计
学院:物理电气信息学院
专业:通信工程
姓名:杨小花
学号:12010245315
指导老师:杨泽林
完成日期:2012.12.11
32位并进并出移位寄存器设计
(杨小花12010245315 通信工程专业)
摘要:EDA技术作为现代电子设计技术的核心,它依赖强大的计算机,在EDA工具软件平台上,对以硬件描述语言VHDL为系统逻辑描述手段完成的设计文件,自动地完成逻辑编译、逻辑简化、逻辑分割、逻辑综合,以及逻辑优化和仿真测试,直至实现既定的电子线路系统功能。随着基于EDA技术的发展和应用领域的扩大与深入,EDA技术在电子信息、通信、自动控制及计算机应用等领域的重要性日益突出。关键字:EDA技术;VHDL语言;移位寄存器
一、实验原理
用一个8位移位寄存器,再增加一些电路,如4个8位锁存器等,设计成为一个能为32位二进制数进行不同方式移位的移位寄存器。8位是CPU设计中常用的移位寄存器模块,是用CASE语句设计的并行输入输出的移位寄存器模块。设计中有四种循环:带进位循环左移,带进位循环右移,自循环左移和自循环右移。其中带进位循环左移的原理是,每一次最高位移出进入输出进位,而最低位是设置的进位输入,带进位循环右移原理是,每一次最低位移出进入输出进位,而最高位是设置的进位输入,子循环左移的原理是,每一次循环,最高位进入到最低位,依次循环,自循环右移原理是,每一次最低位进入到最高位,依次循环。
二、实验步骤
1、建立一个工程项目,设置路径,项目名和顶层实体名一致;
2、设计一个8位移位寄存器电路;
3、设计一个8位锁存器电路;
4、运用元件调用声明语句和元件例化语句完成顶层设计。
三、实验程序
1、八位移位寄存器程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY SHIFTIS
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 SHIFT;
ARCHITECTURE behav OF SHIFT 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;
程序所生成符号:
仿真结果:
图一:带进位左移循环仿真波形
图三:带进位右移循环仿真波形
图二:自循环左移仿真波形
图四:自循环右移仿真波形
仿真分析:
1.信号说明
CLK是输入时钟信号,其当上升沿到来时进行移位;CO为进位输入,当为带进位循环时,可自行设置其值1或0,当为自循环时,其值为0;D为待加载移位数据;MD为移位模式控制字,控制循环方式;CN为输出进位;QB为移位输出结果。
2.仿真说明
MD=101时加载数据,其值为输入的D值
(1)带进位左移循环:MD=001,CO可设置为1或0,循环过程中寄存器的最低位始终为输入的进位位,既REG(0)=CO,而最
高位都会移出进入CN,剩下的几位进行左移。
(2)带进位位左移循环:MD=101,CO可设置为1或0,其最高位始终为输入的进位,既REG(7)=CO,最低位都会移出进入
CN,剩下几位进行右移。
(3)自循环左移:MD=010,CO=0,循环过程中REG(0)=REG(7) (4)自循环右移:MD=110,CO=0,循环过程中REG(7)=REG(0) 2、锁存器程序
LIBRARY IEEE
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY REG8B IS
PORT(d:INSTD_LOGIC_VECTOR(7 DOWNTO 0);
q : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
CLK:IN STD_LOGIC);
END REG8B;
ARCHITECTURE behav OF REG8B IS
SIGNAL q1:STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
PROCESS(CLK,q1);
BEGIN
IF CLK'EVENT AND CLK='1' THEN