学 生 实 验 报 告
实 验 课 名 称:VHDL 硬件描述语言
实验项目名称:七段数码管译码扫描显示
专 业 名 称:电子科学与技术
班
学
级:电科二班
号:***
学 生 姓 名:***
教 师 姓 名:***
__2010__年_11_月_06_日
组别_____________________同组同学_______________________
实验日期_____年___月___日 实验室名称______________成绩_____
一、实验名称:七段数码管译码扫描显示
二、实验目的与要求:
实验目的:通过对译码和串行扫描电路的设计,理解多位数码管串行扫描输
出的工作原理以及七段数码管的译码以及串行扫描输出的设计方法。
实验要求:通过VHDL编程,实现7段数码管的译码输出,并通过所设计的串
行扫描控制,对8个7段数码管扫描输出,要求8个数码管从左到右分别显示“1”、
“2” 、“3” 、“4” 、“5” 、“6” 、“7” 、“8”,并且每一位都对
应有一个显示控制端,当控制端为高电平时,对应数码管点亮,否则熄灭。具体
接口如下所示:
clk:时钟输入端,此信号是 串行扫描的同步信号。
data_control[7..0]:8 个分别控制数码管显示的输入
信号;
led_addr[7..0]:对8个数码管进行串行扫描的输出控制信号;
seg7_data[6..0]:驱动 7 段数码管各显示段的输出信号;
首先在 QuartusII 上进行功能和时序仿真,之后通过器件及其端口配置下载
程序到 SOPC 开发平台中。在硬件实现中,要求:
1. 用实验平台的 8 个数码管输出显示(共阴接法),并且用其下方的 8 个按键分
别控制对应数码管的显示与否。
注:采用 I/O 模式 5 实现输入控制和输出显示方式。为了实现数码管的串行
扫描,必须把数码管连接成串行控制输出电路。
2. 扫描所用的时钟信号采用实验平台的 clock0 时钟资源:
可以通过跳线选择不同的时钟频率,此频率不能选择的太高或太低,频率太
低将不满足人眼视觉暂留特性的要求,频率太高,器件速度跟不上,地址和数据
无法在1个时钟周期大部分时间内对准,造成显示模糊不清。
注:开发平台的适配板上有 20MHz 时钟资源,通过适配板上的跳线可以选择采用
适配板的固定 20MHz 频率信号或者 I/O 板上的 clock0 时钟资源(此两类时钟在管
脚映射表中都称为 clock0),适配板上的跳线如下所示:
三、实验内容:
新建工程:
1、打开 Quartus,新建工程,选择好路径,工程顶层名为 Scan8led ;
2、新建工程,如果包含已编好的文件则可以添加,如果无则可以略过 ;
3、选择我们的器件信息:
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 对话框;
3 单击 Node Finder…按钮,打开以下对话框,选择 Filter 下拉列表中的 Pins:
all,并点击 List 按酒以列出所有的端口,通过>>按钮把这些端口加入到右面
的窗口中,单击 OK 完成端口的添加;
4 回到波形编辑窗口,对所有输入端口设置输入波形,具体可以通过左边的工具
栏,或通过对信号单击鼠标右键的弹出式菜单中完成操作,最后保存次波形文
件。
进行仿真:
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 硬件开发平台
五、实验原理:
见如下框图:
本实验需要实现数码管的控制与输出数据同时输出
扫描,其中需要用到移位累计等计算。
六、源代码:
library ieee;
use ieee.std_logic_1164.all;
entity scan8led is
port(clk:in std_logic;
data_contral:in std_logic_vector(7 downto 0);
led_adder:out std_logic_vector(7 downto 0);
seg7_data:out std_logic_vector(6 downto 0));
end entity;
architecture wen of scan8led is
signal data_temp:std_logic_vector(7 downto 0):="00000001";
begin
process(clk,data_contral)is
variable c: integer range 1 to 8 :=1;
begin
if(clk'event and clk='1')then
data_temp<=data_temp(6 downto 0)&data_temp(7);
led_adder<=data_temp;
case c is
when 1=>seg7_data<="0000110";
when 2=>seg7_data<="1011011";
when 3=>seg7_data<="1001111";
when 4=>seg7_data<="1100110";
when 5=>seg7_data<="1101101";
when 6=>seg7_data<="1111101";
when 7=>seg7_data<="0000111";
when 8=>seg7_data<="1111111";
end case;
c:=c+1;
if(c=9)then
c:=1;
end if;
end if;
end process;
end architecture wen;
七、实验结果与分析:
1、功能仿真:
2、时序仿真:
分析:经过仿真,刚开始时 led_ledder 和 seg7_data 每一位均为’0’,刚开始
还以为是程序出错了,但后来发现,只是起始时间是这样,因为 clk 的时钟脉冲
还没有到来,所以各位默认为’0’,只是虚惊一场。时序仿真虽噪声比较多,
但并不影响,所以可以下载进行实物仿真。