数字系统(课程)设计
实 验 报 告
课 程 名 称 :
数字系统设计
学生姓名:
学生学号:
学生专业:
开 课 学 期 :
1
电子与信息学院
2
实验三 数码管及分频器
地
点:
实验日期与时间:
预 习 检 查 纪 录 :
实验台号:
评
分:
批改教师:
一、实验要求
(1)利用硬件描述语言设计分频器模块和七段显示码模块;
(2)学习数码管驱动芯片 74HC595 的时序,请同学根据时序写出 VHDL 代码;
(3)设计数据产生模块,每秒输出数字加 1;
(4)设计顶层文件,驱动数码管模块,使(3)产生数据显示在数码管上。
二、实验内容
1、预期顶层设计图(可自行设计)
图 1 预期顶层设计图
说明:seg 模块实验直接提供 Verilog 版本(文档最后附有下载链接);实验
要求自行设计 divider 模块及 data_gen 模块和参考 Verilog 版本的 seg 模块编
写其 VHDL 版本。
2、Seg 模块(Verilog 版本)使用说明
数码管驱动模块已经写好译码时序及 74HC595 驱动时序,提供 clk,rst_n,
en 及 ids_data 四个接口供同学们使用。
(1) clk:输入系统时钟
(2) rst_n:复位按键,可为板卡上的 SW0~SW3
(3) en :模块使能端口,高定平有效
(4) ids_data 为十六位输入口,每 4bits 对应一个数码管,例如 ids_data 写
入 1111_1111_1111_1111 则 数 码 管 将 显 示 FFFF ; ids_data 写 入
1010_0101_1010_0101 则数码管将显示 E5E5。
三、实验设计原理
3
1、divider 模块
开发板的时钟频率为 50MHZ,查阅文献可知,人眼能够分辨的最高频率为
24HZ。开发板的时钟频率远远超出人眼分辨范围,因此需要对时钟信号进行分
频处理,以便后续计时模块产生的输出到数码管上可被人眼分辨。题目要求分频
器模块时钟周期为 1HZ,在代码实体中设置一个范围为 1-50M 的信号 count,当
count≥25M 时分频器输出为‘1’,反之输出为’0’,当 count=50M 时,count=1。以
此编程得到的输出时钟信号频率为 1HZ,每 1s 产生一个上升沿。
2、data_gen 模块
题目要求数据产生模块,每秒输出数字加 1,且数码管可显示 16 进制数,故
data-gen 模块的输出为一个 16 位二进制信号。该模块以 divider 模块输出的 1HZ
信号为时钟,模块内部有一信号 q,当时钟上升沿到来时 q=q+1。当 q 为’FFFF’
时,q 复位。最后将 q 值赋给 data_gen 模块的输出 odata_gen。
3、seg 模块
74HC595 是一个 8 位串行输入,8 位并行输出的位移缓存器。其 14 脚(DS)
为串行数据输入端。11 脚(SHCP)为数据输入时钟,上升沿时数据寄存器的数
据移位。12 脚(STCP)为输出存储器锁存时钟,上升沿时移位寄存器的数据进
入数据存储寄存器。基于以上特点,74HC595 需要三个信号进行控制。seg 模块
为 74HC595 的控制模块,以开发板时钟为时钟信号,输入为 data_gen 模块输出
的 16 位信号,seg 的输出为时钟 ds_shcp、ds_stcp、ds_data,以这三个信号来控
制两片 74HC595。在 seg 模块中,预先存储数码管的段码和位码。
表 1 74HC595 引脚功能图
两片 74HC595 级联控制 4 位数码管,一片控制段选,一片控制位选。开始
时,先将 seg 模块的并口输入数据转变为段码进行暂存,同时暂存四个位码。之
后在系统时钟的每个上升沿,seg 的数据输出口 ds_data 从高位到低位依次发送
4
段码的每一位。与此同时,ds_shcp 产生上升沿使段码移位,这样模块发送完段
码之后就从高位到低位一次发送位码。当段码和位码发送完毕之后,ds_stcp 产
生上升沿,将移位寄存器中的数据发送到数据存储寄存器,最后显示在数码管上。
每发送完一位数码管的段码和位码之后,要将 74HC595 的并口输入参数全部置
位,这样可以防止前后数据之间产生干扰,之后再显示后一位数码管。按照这种
方式,就可以点亮四位数码管。由于人的视觉暂留现象及发光二极管的余辉效应,
尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就
是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的。
在总体设计过程中,设置复位信号 rst。当复位信号为低电平时,设计的模块
中的输出和计时信号全部复位。设置复位信号是为了异步复位,达到重新计数的
目的。
各个模块的程序流程图见图 2。
4、程序仿真与下载
图 2 程序流程图
5
在 QuartusII 平台上新建工程,编写代码建立三个 VHDL 文件并设置为顶层
文件,之后生成对应模块。然后连接模块并添加输入输出口,编译之后分配引脚,
之后再进行编译,将程序下载至开发板中。最后通过硬件测试来验证程序功能。
四、实验过程记录
实验总体流程图如图 3 所示。
在 Quartus 中输入三个模块的 VHDL 代码,都设置为顶层文件,编译成功。
图 3 实验总体流程图
6
代码编译成功后生成三个模块的 block 块,添加输入输出口,连接模块为 bdf
图 4 编译结果
文件。
7
为测试模块是否能够正确工作,对 data_gen 模块添加输入输出口后建立波形仿真文件
进行时序仿真如图 6 所示,模块功能正常。
图 5 顶层模块连接图
图 6 data_gen 模块输出波形仿真图
bdf 文件编译成功后进行管脚分配,之后再编译文件,最后将程序通过下载
线下载到开发板中,管脚分配图如图 7 所示。
8