双向移位寄存器
学生实验报告
实验课名称:VHDL硬件描述语言 实验项目名称:双向移位寄存器
专业名称:电子科学与技术
班
学级: 号:
学生姓名:
教师姓名:
2010年__11__月__13__日
实验日期年日 实验室名称______________成绩_____
一、实验名称:
双向移位寄存器
二、实验目的与要求:
设计一个双向移位寄存器,理解移位寄存器的工作原理。掌握串
入/并出端口控制的描述方法。
在QuartusII上进行功能和时序仿真,之后通过器件及其端口配置
下载程序到SOPC开发平台中。
1,用实验平台的按键实现时钟控制(clk),方向控制(dir),清零
(clr)以及数据输入(din)。
2,用实验平台上的LED发光阵列的LED1~LED8显示并行数据的
输出。
三、实验内容:
通过VHDL编程,实现双向移位寄存器,要求有一个方向控制端,
一个脉冲输入,一个异步清零端,一个数据输入端以及8位的数
据输出端。
1. 打开QuartusII软件,建立一个新的工程。
2. 建立VHDL文件。
3. 建立矢量波形文件。
4. 进行功能仿真。
5. 进行时序仿真。
6. 器件的下载。
四、实验条件:
1. WindowsXP操作系统
2. QuartusII EDA开发系统
3. 杭州康芯SOPC硬件开发平台
五、实验原理:
通过VHDL编程,实现双向移位寄存器,要求有一个方向控制端,
一个脉冲输入,一个异步清零端,一个数据输入端以及8位的数
据输出端。
具体的接口如下所示:
clk:移位寄存器时钟脉冲输入,上升沿有效。
din:串行数据输入端。
clr:异步清零信号,高电平有效。
dir:方向控制端,要求高电平右移,低电平左移。
dout[7..0]:8位数据并行输入端。
硬件设置原理:
根据要求设置个端口,键7为时钟控制端,键8为数据输入端,键1为方向控制端,键5为异步清零。用LED发光阵列的LED1~LED8显示并行数据的输出,依次相对应为dout[7]……dout[0].根据模式7对应的开发系统I/O管脚映射表以及I/O模式7示意图为每一个端口指定引脚。
调试原理:
软件调试:
1、 当设置为左移时,低位依次将自己的值给高一位,最后将din给q[0],然后将q赋值给dout;
2、 当设置为右移时,高位依次将自己的值给低一位,最后将din给q[7],然后将q赋值给dout;
3、 观察结果是否符合结果。在验证结果时,首先进行功能仿真,观察结果,调试程序,在进行时序仿真。
硬件调试:
根据端口对应设置端口,设置dir值和输入,观察LED1~LED8改变是否和要求一致;再设置键5异步清零端,观察LED1~LED8的
变化。
六、源代码:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity d_reg is
port(clk,din,clr,dir:in std_logic;
dout:out std_logic_vector(7 downto 0)); end entity d_reg;
architecture one of d_reg is
begin
process(clr,clk)
variable q:std_logic_vector(7 downto 0);
begin
if(clr='1')then
dout
elsif(clk'event and clk='1')then
if(dir='1')then
for i in 1 to 7 loop
q(i-1):=q(i);
end loop;
q(7):=din;
dout
elsif(dir='0')then
for i in 6 downto 0 loop
q(i+1):=q(i);
end loop;
q(0):=din;
dout
end if;
end if;
end process;
end architecture one;
七、实验结果与分析:
1,功能仿真
2,时序仿真
说明:当输入为“1”,并且方向设置为“左”时,两次时钟脉冲控制之后的数据移位情况。
说明:输入为“0”时,再经过两个时钟脉冲移位之后的移位情况。
说明:再把方向设置为“右”时,一次时钟脉冲控制之后的数据移位情况。
八、讨论和回答问题及体会:
1.实验室的QuartusII在第一次不能进行下载调试。通过安装相应的证书文件解决了上述问题。
2.在进行编译的时候,使用了较多的if循环嵌套判断语句,会导致了仿真波形处出现了很大的延迟。改为使用case语句,降低了延迟,达到比较好的波形仿真效果。
3.安装驱动程序,此USB设备的驱动处于QuartusII安装目录中的\drivers\usb-blaster中,进行USB装载连接。
4通过使用VHDL对双向移位寄存器的编写可以更加深刻的了解其功能。在编写过程中对VHDL语言程序得到了加深和熟悉,巩固了所学的知识。