VHDL实验双向移位寄存器(完整版)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VHDL实验双向移位寄存器(完整版)
实验课名称:VHDL硬件描述语言实验项目名称:双向移位寄存器专业名称:电子科学与技术班级:电科二班
学号:***** 学生姓名:****
教师姓名:****
__2010__年_11_月_14_日
组别_____________________同组同学_______________________ 实验日期
_____年___月___日实验室名称______________成绩_____
一、实验名称:双向移位寄存器
二、实验目的与要求:
实验目的:设计一个双向移位寄存器,理解移位寄存器的工作原理,掌握
串入\并出端口控制的描述方法。
实验要求:通过VHDL编程,实现双向移位寄存器,要求有1个方向控制端、1个时钟脉冲输入、1个异步清零端、1个数据输入端以及8位的并行数据输出端,具体接口说明如下图所示。 clk:移位寄存器时钟脉冲输入,上升
沿有效;
din:串行数据输入端;
clr:异步清零信号,高电平有效;
dir:方向控制端,要求低电平左移,
高电平右移;
dout[7..0]:8位数据并行输出端;
首先在QuartusII上进行功能和时序仿真,之后通过器件及其端口配置下载程序
到SOPC开发平台中。在硬件实现中,要求:
1. 用实验平台的按键实现时钟控制(clk)、方向控制(dir)、清零(clr)以及数据
输入(din):
端口名按键名功能
clk 键7 时钟控制
din 键8 数据输入
clr 键1 异步清零
dir 键5 方向控制
2. 用实验平台的LED发光阵列的LED1,LED8显示并行数据的输出。
三、实验内容:
, 新建工程:
1、打开Quartus,新建工程,选择好路径,工程顶层名为d_reg ;
2、新建工程,如果包含已编好的文件则可以添加,如果无则可以略过 ;
3、选择我们的器件信息:型号为:EP2C36F484C8
4、单击Next>,指定第三方工具,这里我们不指定第三方EDA工具,单击Next>后结
束工程建立。
, 建立编译VHDL文件:
1单击File\New菜单项,选择弹出窗口中的VHDL File项,单击OK按钮以建立打
开空的VHDL文件,并以工程顶层文件名保存。
2、输入源代码完后单击Processing\Start Compilation开始编译,并修改其中的
错误直到没有为止。
的错误直到没有为止。
, 建立矢量波形文件
1、单击File\New命令,选择其中的Vector Waveform File项,点击OK建立空的
波形文件,打开矢量波形文件编辑窗口;
2双击窗口左边空白区域,打开Insert Node or Bus对话框;
1、单击Node Finder…按钮,打开以下对话框,选择Filter下拉列表中的Pins:
all,并点击List按酒以列出所有的端口,通过>>按钮把这些端口加入到右面的窗口中,单击OK完成端口的添加;
2、回到波形编辑窗口,对所有输入端口设置输入波形,具体可以通过左边的工
具栏,或通过对信号单击鼠标右键的弹出式菜单中完成操作,最后保存次波形文件。
, 进行仿真:
1、单击Assignments\Settings ,Simulation mode设置为Functional,即功能
仿真。指定仿真波形文件后单击OK完成设置;
2、单击Processing\Generate Functional Simulation Netlist以获得功能仿
真网络表;
3、单击Processing\Start Simulation完成功能仿真。
4、如果功能仿真无误后进行时序仿真:单击Assignments\Settings,在弹出对话框中Simulation mode设置为Timing,即时序仿真。指定仿真波形文件后单击OK完
成设置。
5、单击Processing\Start Simulation,完成时序仿真。
6、如果时序仿真也没错即可下载工作了。
四、实验条件:
1. WindowsXP操作系统
2. QuartusII EDA开发系统
3. 杭州康芯SOPC硬件开发平台
五、实验原理:
本实验依然带有异步清零功能,所以用if实现优先级最高,当clr为高电
平时异步清零,当clr为低电平时实现移位功能;此时利用if的嵌套功能,用dir端控制移位的方向,当dir为低电平时左移,高电平时右移。
开始
实现清零功能clr=‘1’?
非循环右移dir=’’0’?
非循环左移
关于移位可以运用&级联这个运算符,这样程序可以显得简洁,就不用其他
像循环之类的方法了。
六、源代码:
library ieee;
use ieee.std_logic_1164.all;
entity d_reg is
port(clk,din,clr,dir:in std_logic;
dout:buffer std_logic_vector(7 downto 0));
end entity;
architecture wen of d_reg is
begin
process(clk,din,clr,dir)
begin
if(clr='1')then
dout<="00000000";
elsif(clk'event and clk='1')then
if(dir='0')then
dout<=dout(6 downto 0)&din;