You are on page 1of 177

前言

近十年来,由于超大规模集成电路和软件技术的快速发展,使数字系统集成
到一片集成电路内成为可能,Intel 公司推出的新型 Cyclone V 器件集成了 FPGA
和 ARM 应用处理器,降低了功耗和成本,减小了电路板面积。采用 Intel 的 SOC、
处理器和工具,设计人员能够在硬件(LE 和 DSP 模块)和软件(ARM CortexA9 或者
NioslI 处理器)之间划分实时算法,很好地满足目标应用的性能、功耗、成本和抖
动要求。
VEEK-SOC-II 实验开发系统提供了以 Intel System-on-Chip (SoC) FPGA 建立的
强大的硬件设计平台,结合了最新的嵌入式双核 Cortex-A9 和业界领先的可编程
逻辑,无缝接合诸如高速 DDR 内存、ADC 功能、以太网络等功能硬件,以满足
终极设计的灵活性,使用者可以彻底的利用这个兼具高性能和低功率处理系统的
可重构性的强大平台。
本实验指导书旨在帮助读者学会设计数字系统,熟悉 Intel 公司硬件和软件的
使用,将 SOPC Builder 的嵌入式系统升级到 Qsys 系统集成开发工具,增加了 SoC
FPGA 基于 ARM Cortex-A9 的硬核处理器系统(HPS)设计内容。
本实验指导书的内容从简单的组合电路的设计到复杂的数字系统的设计,详
细的介绍了系统的设计方法和软件的各种操作,能够引导读者进入新一代 SoC
FPGA 嵌入式系统设计的大门,帮助读者掌握最新技术,让读者了解最热门的技
术,为将来能更好的步入工业界打下坚实的基础。
本实验指导书选编了具有代表性的二十多个实验,分为基础实验、综合应用
实验、ARM SoC FPGA 嵌入式系统实验等。实验内容从简单到复杂,读者能够快
速入手,同时本实验指导书还可以作为电子技术的加深课程或作为电子技术工程
师参考用书。
本实验指导书配合 VEEK-SOC-II 实验开发系统系列产品使用。
电子技术发展迅速,应用领域不断扩大。由于掌握的资料和水平有限,加之
时间仓促,书中难免有不妥之处,恳请读者批评指正。
书中相关软件和技术资料以及技术支持可以通过下面的网站、电子信箱或电
话获得:
中文网站:http://www.hbxhxkj.com/
电子信箱:hexin@whhexin.com
电话:027-87538900

编者
2017 年 9 月
目录

第 1 章 VEEK-SOC-II 系统开发平台概述...............................................................................1

1.1 综述.................................................................................................................................. 1

1.2 系统各模块介绍.............................................................................................................. 1

1.2.1 核心板模块说明....................................................................................................... 1

1.2.2 实验开发平台模块说明........................................................................................... 3

1.3 软件安装.......................................................................................................................... 5

1.3.1 概述........................................................................................................................... 5

1.3.2 QuarutsⅡ 13.1 软件安装........................................................................................ 5

1.3.3 DS-5 软件安装........................................................................................................... 9

1.4 USB 驱动的安装与使用................................................................................................. 14

1.5 QuarutsⅡ 13.1 软件介绍............................................................................................. 16

1.5.1 概述......................................................................................................................... 16

1.5.2 软件的界面及功能介绍......................................................................................... 16

第 2 章 基础硬件实验部分.................................................................................................. 18

2.1 基于 Quartus II 图形输入电路的设计.......................................................................... 18

2.2 基于 Verilog 的格雷码编码器的设计...........................................................................39

2.3 含异步清零和同步使能的计数器的设计.................................................................... 42

2.4 六位七段数码管显示电路的设计................................................................................ 45

2.5 数控分频器的设计........................................................................................................ 49

2.6 图形和 Verilog 混合输入的电路设计...........................................................................51

2.7 步长可变的加减计数器的设计.................................................................................... 56

2.8 基本触发器的设计........................................................................................................ 59

2.9 可控脉冲发生器的设计................................................................................................ 61

2.10 基于 Verilog 的抢答器的设计.....................................................................................64

2.11 基于 Verilog 的表决器的设计.....................................................................................66

2.12 正负脉宽信号发生器的设计...................................................................................... 68

2.13 基于并行 AD 的信号发生器的设计............................................................................70

2.14 序列检测器的设计...................................................................................................... 76
2.15 矩阵键盘显示接口电路的设计.................................................................................. 79

2.16 AUDIO 电子音乐实验.................................................................................................. 84

2.17 直流电机测速控制...................................................................................................... 86

2.18 步进电机驱动控制...................................................................................................... 91

2.19 交通灯控制设计.......................................................................................................... 95

2.20 LCD 液晶显示实验....................................................................................................... 98

第 3 章 综合应用实验部分.................................................................................................. 101

3.1 数字频率计的设计...................................................................................................... 101

3.2 多功能数字钟的设计.................................................................................................. 106

3.3 数字秒表的设计.......................................................................................................... 110

3.4 出租车计费器的设计.................................................................................................. 113

3.5 基于 Verilog 的温度测量的设计................................................................................. 116

3.6 IIC 存储模块的设计..................................................................................................... 119

3.7 基于 Verilog 的 SDRAM 测试的设计...........................................................................123

3.8 基于 Qsys 的 SDRAM 测试的设计...............................................................................126

第 4 章 ARM SoC FPGA 嵌入式系统实验部分................................................................... 130

4.1 ARM SoC FPGA 快速入门............................................................................................. 130

4.1.1 MSEL 设置..............................................................................................................130

4.1.2 连接设定............................................................................................................... 131

4.1.3 安装 USB-Blaster II 驱动....................................................................................... 131

4.1.4 制作 microSD Card Image..................................................................................... 133

4.1.5 设定串口终端....................................................................................................... 134

4.1.6 在 DE1_SoC 上运行 Linux..................................................................................... 136

4.2 搭建 ARM SoC FPGA 硬件平台...................................................................................138

4.2.1 创建 Quartus II 工程............................................................................................. 138

4.2.2 配置 HPS 系统....................................................................................................... 140

4.2.3 添加并配置 LED 组件........................................................................................... 149

4.2.4 编译生成 Qsys 系统..............................................................................................155

4.2.5 编辑并编译 QUARTUS II 工程.............................................................................. 156

4.2.6 生成 Preloader...................................................................................................... 160


4.3 搭建 ARM SoC FPGA 软件平台....................................................................................169

4.3.1 软件开发流程....................................................................................................... 169

4.3.2 创建工程文件夹................................................................................................... 169

4.3.3 hps_0.h 头文件......................................................................................................169

4.3.4 创建 main.c 文件...................................................................................................171

4.3.5 创建 Makefile 文件............................................................................................... 172

4.3.6 编译工程............................................................................................................... 173

4.3.7 运行工程............................................................................................................... 174


第 1章 VEEK-SOC-II 系统开发平台概述

第 1 章 VEEK-SOC-II 系统开发平台概述

1.1 综述

本教材内容是基于台湾友晶 DE1-SOC 开发板的 EDA 实验箱,FPGA 中内嵌双核


ARM Cortex-A9 硬核处理器,可以用来进行高性能、低功耗处理器系统设计,Altera
基于 ARM 的硬核处理器系统(HPS)包括处理器、外设以及存储器接口,通过高带宽
互联总线与 FPGA 硬件部分无缝连接。DE1-SOC 开发板上集成了高速 DDR3 存储器、
音视频部件、以太网接口等硬件部分,同时提供了丰富的 SoC FPGA 参考设计实例与
资料。可从 http://DE1-SOC.terasic.com 下载相关文档资料。

1.2 系统各模块介绍

1.2.1 核心板模块说明
图 1.1 和 1.2 分别给出了 DE1-SOC 开发板的资源布局,并标出了所包括的接口和关
键器件的位置。DE1-SOC 开发板提供了丰富的设计资源,可以完成从简单的电路设计
到各种复杂多媒体工程设计。

图 1.1 DE1-SOC 开发板正面

1
第 1章 VEEK-SOC-II 系统开发平台概述

图 1.2 DE1-SOC 开发板背面

DE1-SOC 开发板提供的硬件资源包括:

FPGA 部分

 Cyclone V SoC 5CSEMA5F31C6N 芯片;


 Altera 系统配置器件 EPCQ256;
 板上 USB-BlasterⅡ用于编程,支持 JTAG 模式。
 64MB SDRAM (16 位数据总线);
 4 个按键;
 10 个滑动开关;
 10 个 LED 灯;
 6 个七段数码管;
 时钟发生器提供了 4 个 50MHz 的时钟源;
 24 位音质的音频编解码器;
 VGA 解码芯片,带有 VGA-out 接口;
 TV 编码器和 TV 输入接口;
 PS/2 鼠标/键盘接口;
 IR 收发器;
 2 个 40pin 的扩展接口,带二极管保护;
 A/D 转换器,连接 FPGA 的 4 引脚 SPI 接口;

硬核处理器系统(HPS)部分

 800MHz 双核 ARM Cortex-A9 MPCore 处理器;


 1GB DDR3 SDRAM(32 位数据总线);

2
第 1章 VEEK-SOC-II 系统开发平台概述

 一个千兆以太网 PHY,带 RJ45 接口;


 2 端口 USB Host,标准 A 型 USB 接口;
 Micro SD 卡插座;
 重力传感器(IC 接口+中断);
 UART to USB(USB mini-B 接口);
 热复位和冷复位按钮;
 一个用户按键和一个用户 LED;
 LTC 2*7 扩展接口。

DE1-SOC 开发板结构框图
图 1.3 所示为 DE1-SOC 开发板的结构框图。为了给设计者提供最大的灵活性,所
有接口连接都是通过 Cyclone V Soc FPGA 来完成的,这样设计者可以通过配置 FPGA
来完成任何系统的设计。

图 1.3 DE1-SOC 开发板的结构框图

1.2.2 实验开发平台模块说明
本实验箱是以 DE1-SOC 开发板为核心,通过 2 个 40pin 的扩展接口与外围器件进
行连接,图 1.4 对实验箱各模块内容进行了标注,主要包括以下模块:

3
第 1章 VEEK-SOC-II 系统开发平台概述

 TFT 显示触摸屏;
 直流电机;
 步进电机;
 4 个 BCD 码七段数码管;
 交通红绿灯;
 4*4 按键模块;
 数模转换;
 模数转换;
 RTC;
 RS232 接口;
 喇叭;
 IIC EEPROM;
 温度传感器;
 时钟模块;
 IC 座及面包板;

图 1.4 实验箱和模块说明

4
第 1章 VEEK-SOC-II 系统开发平台概述

1.3 软件安装

1.3.1 概述
QuartusⅡ开发软件是 Altera 公司的可编程逻辑器件集成开发环境,提供从设计输入
到器件编程的全部功能。QuartusⅡ可以产生并识别通用的 EDIF 网表文件、Verilog 网
表文件和 Verilog 网表文件,可以将设计、综合、布局和布线以及系统验证全部整合到
一个无缝的环境之中,并为其他 EDA 工具提供了方便的接口,可以在 QuartusⅡ集成
环境中自动运行其他 EDA 工具。

1.3.2 QuarutsⅡ 13.1 软件安装


QuartusⅡ软件分为订购版和网络版,订购版需要支付一定的费用购买软件许可
(License)才可以使用,而网络版可免费使用(注:无法生成可执行文件),读者可
以到 Altera 官网 http://www.altera.com.cn 中下载中心进行下载。
安装步骤:(1)将 QuartusⅡ设计软件的光盘放入光驱或者将下载的 ISO 镜像文件
加载到虚拟光驱,或用鼠标左键双击 QuartusSetup 文件,弹出如图 1.5 所示安装向导界
面。

图 1.5 安装时的界面
(2)下一步选择接受许可,下一步进行安装目录的选择,建议安装在 C 盘,并且
不要安装到中文目录下。如图 1.6 所示。

5
第 1章 VEEK-SOC-II 系统开发平台概述

图 1.6 安装路径的选择
(3)下面是安装内容的选择,勾选部分为必选项,其它选项只有在需要进行 DSP 的
开发或者 C 语言软件人员进行开发,勾选 DSPBuilder AlteraSDKforOpenCL。
如图 1.7 所示。

图 1.7 安装内容的选择

6
第 1章 VEEK-SOC-II 系统开发平台概述

(4)点击 Next 按钮,如果上一步勾选安装 DSP Builder 组件,则需要已安装 Matlab,


可使用安装向导检测出 Matlab 的安装路径,也可自行指定安装路径。
(5)点击 Next 按钮,即可开始进行 QuartusⅡ软件的安装。如图 1.8 所示的安装进
度界面,等待安装完毕。

图 1.8 安装进度界面

注:器件库安装
默认的在 QuarutsⅡ软件安装完后,没有包含任何器件,如要开发则需要根据需
要安装不同的器件包,可在安装光盘或者到官网进行下载,器件库的安装如下步骤:
(1) 在 tools 菜单中选择 Install devices 进行器件安装,如图 1.9 所示。

图 1.9 器件安装入口
(2) 将目录定位到下载的器件包文件目录,即存放 .qdz 文件的目录,点击
Next,如图 1.10 所示。

7
第 1章 VEEK-SOC-II 系统开发平台概述

图 1.10 选择器件目录
(3) 安装软件将自动识别器件安装包中的器件,根据需要在器件前进行勾选
安装,点击 Next,如图 1.11 所示。

图 1.11 选择相对应的器件
(4) 出现器件安装进度条,等待安装完毕,如图 1.12 所示。

图 1.12 器件安装程序进程

8
第 1章 VEEK-SOC-II 系统开发平台概述

(5) 器件安装完如图 1.13 所示,点击 Finish 完成安装。

图 1.13 器件安装程序完成

1.3.3 DS-5 软件安装


Altera 公司的嵌入式系统设计套件(SystemonaChipEmbededDesignSuite,SoC EDS)
是针对 Altera SoC 器件的综合软件设计工具。应用 SoC EDS 能够进行高效软件开发,
提升软件质量,加快产品上市时间。Altera SoC EDS 开发套件的核心是 Altera 版 ARM
Development Studio 5(DS-5)工具包。ARM DS-5 高级多核调试功能与 FPGA 自适应
功能相结合,无缝链接到 Altera 的 SignalTap 嵌入式逻辑分析器。SoC EDS 套件结合了
业界增强型 ARM DS-5 工具套装以及 Altera SoC 器件,为嵌入式开发人员提供了前
所未有的全芯片可视化控制功能。
其安装步骤如下:
(1) 在 Altera 官方网站下载安装程序 SoCEDSSetup-13.1.0.162.exe 或更高
版本。下载完成后双击运行,如图 1.14 界面所示。

1.14 EDS 软件安装界面

9
第 1章 VEEK-SOC-II 系统开发平台概述

(2)点击 Next,选择 I accept the agreement,点击 Next,如图 1.15


所示。

图 1.15 接受授权协议
(3)选择安装路径,点击 Next,如图 1.16 所示。

图 1.16 安装路径选择

10
第 1章 VEEK-SOC-II 系统开发平台概述

(4)继续点击 Next,如图 1.17 所示,继续点击 Next,SoC EDS 进行安装,出现


安装进度图。

图 1.17 安装进度
(5)安装完成后点 Finish,如图 1.18 所示。

图 1.18 安装完成
(6) 点击 Finish 后,自动弹出 ARM DS-5 安装程序,如图 1.19 所示。

11
第 1章 VEEK-SOC-II 系统开发平台概述

图 1.19 接受 License Agreement


(7)点击 Next,可按照默认路径安装,也可点击 Browse 更改安装路径,
如图 1.20 所示。

图 1.20 更改安装路径
(8)点击 Install 进行安装,如图 1.21 所示。

12
第 1章 VEEK-SOC-II 系统开发平台概述

图 1.21 更改安装路径
(9)安装完成后,进行设备驱动程序安装,点击下一步进行安装,如图 1.22
所示。

图 1.22 设备驱动程序安装界面
(10)设备驱动安装完成后,出现如图 1.23 所示界面,表示 DS-5 软件安装完
成。

13
第 1章 VEEK-SOC-II 系统开发平台概述

1.23 安装完成界面

1.4 USB 驱动的安装与使用

QuarutsⅡ软件安装完成后,要安装 USB BlasterⅡ的驱动程序,通过电脑 USB


接口与开发板相连,第一次启动会弹出如图 1.24 所示界面。点击下一步进行安装
驱动程序。

14
第 1章 VEEK-SOC-II 系统开发平台概述

图 1.24 USB BlasterⅡ驱动程序安装界面


系统自动自动完成驱动安装,如果系统找不到相应驱动,请手动定位到 Altera
安装目录下,如 C:\altera\13.1\quartus\drivers\usb-blaster-ii 下即可进行安装。安装完
成后界面如图 1.25 所示。

图 1.25 USB BlasterⅡ驱动程序安装完成

15
第 1章 VEEK-SOC-II 系统开发平台概述

1.5 QuarutsⅡ 13.1 软件介绍

1.5.1 概述
本章主要介绍 Altera 公司的 EDA 开发软件的功能及使用方法,然后结合具体
设计实例,可以了解 Altera 开发工具的具体操作方法和设计流程。

1.5.2 软件的界面及功能介绍
QuarutsⅡ 13.1 图形用户界面如图 3.1 所示,由上到下主要分为标题栏、菜单栏、
工具栏、资源管理窗口、工程工作区、编译状态显示窗口、信息显示窗口及状态栏
8 个部分。如图 1.26 所示

图 1.26 图形用户界面
下图 1.27 说明了 Altera FPGA 的基本开发流程。

图 1.27 开发流程

16
第 1章 VEEK-SOC-II 系统开发平台概述

为了让初学者能直观了解 FPGA 设计流程、快速入门,本书简化了一些步骤,


但上图已经基本完整了。上图分为左右两个虚线框,其中左侧虚线框内的步骤是必
须步骤,右侧虚线框内的步骤是可选步骤。需要特别说明的是,“可选步骤”并非
“不重要步骤”,相反,它很重要,至于为什么重要,你将在以后的章节中逐步了
解。通常,对任何事物的理解都是从框架开始的,然后再逐步细分、深入。对于
FPGA 设计,我们也先从认识它的大概框架(基本设计步骤)开始,然后再详细介
绍这些步骤。
下面简要介绍必须步骤的概念:
 创建工程
创建工程的目的是告诉工具软件(QuartusⅡ)一些基本的信息,比如你打算使
用的 FPGA 型号等。此外,工程文件将帮你管理一系列与该工程有关的文件和设置
(或约束)。
 设计输入
把 FPGA 内部电路的详细设计,输入给 QuartusⅡ工具。输入方法有很多种,
有原理图方式输入(如 pspice 通过拖放元器件并进行连接),还可以用 HDL 语言
设计如 Verilog、VHDL 等硬件描述语言等。由于目前 verilog 在设计领域的主流性,
本书以 Verilog 输入方式为主!
 综合、布局布线
本书将两个步骤合在一起。是因为这两个步骤是 QuartusⅡ软件帮我们完成的,
一般不需要我们做什么。综合、布局布线后会生成“报告”,里面一般会有 Warnings
和 Errors。这些报告信息会辅助你修改你设计中的 bug。
 配置
“配置”在一些嵌入式系统中也叫做“下载”或者“烧写”。但是在 FPGA 中,
“配置”的方式的多种,我们主要介绍主要的三种配置方式!
上面介绍的这些只是最基本的步骤(大概框架),使读者对 FPGA 的整个设计
流程有个基本认识,有了这些概念,下面就通过大量的实例来进行 FGPA 的设计。

17
第 2章 基础硬件实验部分

第 2 章 基础硬件实验部分

2.1 基于 Quartus II 图形输入电路的设计

一、实验目的
1、通过一个简单的 3-8 译码器的设计,掌握组合逻辑电路的设计方法。
2、初步了解 Quartus II 原理图输入设计的全过程。
3、掌握组合逻辑电路的静态测试方法。

二、实验原理
3-8 译码器三输入,八输出。当输入信号按二进制方式的表示值为 N 时,输出
端标号为 N 的输出端输出高电平表示有信号产生,而其它则为低电平表示无信号
产生。因为三个输入端能产生的组合状态有八种,所以输出端在每种组合中仅有一
位为高电平的情况下,能表示所有的输入组合。其真值表如表 1-1 所示:
输入 输出

A B C D7 D6 D5 D4 D3 D2 D1 D0
0 0 0 0 0 0 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1 0
0 1 0 0 0 0 0 0 1 0 0
1 1 0 0 0 0 0 1 0 0 0
0 0 1 0 0 0 1 0 0 0 0
1 0 1 0 0 1 0 0 0 0 0
0 1 1 0 1 0 0 0 0 0 0
1 1 1 1 0 0 0 0 0 0 0
表 1-1 三-八译码器真值表
译码器不需要像编码器那样用一个输出端指示输出是否有效。但可以在输入中
加入一个输出使能端,用来指示是否将当前的输入进行有效的译码,当使能端指示
输入信号无效或不用对当前信号进行译码时,输出端全为低电平,表示无任何信号。
本例设计中没有考虑使能输入端,自己设计时可以考虑加入使能输入端时,程序如
何设计。

三、实验内容

18
第 2章 基础硬件实验部分

在本实验中,用三个拨动开关来表示三八译码器的三个输入(A、B、C);用
八个 LED 来表示三八译码器的八个输出(D0-D7)。通过输入不同的值来观察输
出的结果与三八译码器的真值表(表 1-1)是否一致。实验箱中的拨动开关与 FPGA
的接口电路如下图 1-1 所示,当拨动开关的档位在下方时其输出为低电平,反之输
出高电平。其电路与 FPGA 的管脚连接如表 1-2 所示

图 1-1 拨动开关与 FPGA 接口电路


对应FPGA
信号名称 信号说明
(EP5CSEMA5F31)管脚名
SW0 PIN_AB12 Slide Switch[0]
SW1 PIN_AC12 Slide Switch[1]
SW2 PIN_AF9 Slide Switch[2]
SW3 PIN_AF10 Slide Switch[3]
SW4 PIN_AD11 Slide Switch[4]
SW5 PIN_AD12 Slide Switch[5]
SW6 PIN_AE11 Slide Switch[6]
SW7 PIN_AC9 Slide Switch[7]
SW8 PIN_AD10 Slide Switch[8]
SW9 PIN_AE12 Slide Switch[9]
表 1-2 拨码开关与 FPGA 管脚连接表

LED 灯与 FPGA 的接口电路如图 1-2 所示,当 FPGA 与其对应的端口为高电平时


LED 就会发光,反之 LED 灯灭。其与 FPGA 对应的管脚连接如表 1-所示。

19
第 2章 基础硬件实验部分

图 1-2 LED 灯与 FPGA 接口电路


对应FPGA
信号名称 信号说明
(EP5CSEMA5F31)管脚名
LEDR0 PIN_V16 LED [0]
LEDR1 PIN_W16 LED [1]
LEDR2 PIN_V17 LED [2]
LEDR3 PIN_V18 LED [3]
LEDR4 PIN_W17 LED [4]
LEDR5 PIN_W19 LED [5]
LEDR6 PIN_Y19 LED [6]
LEDR7 PIN_W20 LED [7]
LEDR8 PIN_W21 LED [8]
LEDR9 PIN_Y21 LED [9]
表 1-3 LED 灯与 FPGA 管脚连接表

四、实验步骤
下面将通过这个实验,向读者介绍 Quartus II 的项目文件的生成、编译、管脚
分配以及时序仿真等的操作过程。
1、建立工程文件
1)选择开始>程序>Altera>Quartus II 13.1,运行 Quartus II 软件。或者双击桌面
上的 Quartus II 的图标运行 Quartus II 软件,出现如图 1-3 所示,如果是第一次打
开 Quartus II 软件可能会有其它的提示信息,使用者可以根据自己的实际情况进行
设定后进入图 1-3 所示界面。

20
第 2章 基础硬件实验部分

图 1-3 Quartus II 软件运行界面


2)选择软件中的菜单 File>New Project Wizard,新建一个工程。如图 1-4 所示。

图 1-4 新建工程选项
3)点击图 1-5 中的 NEXT 进入工作目录,工程名的设定对话框如图 1-6 所示。
第一个输入框为工程目录输入框,用户可以输入如 e:/eda 等工作路径来设定工程的
目录,注意:目录不能设置为中文目录。设定好后,所有的生成文件将放入这个工
作目录。第二个输入框为工程名称输入框,第三个输入框为顶层实体名称输入框。
用户可以设定如 decode,一般情况下工程名称与实体名称相同。使用者也可以根据
自已的实际情况来设定。

21
第 2章 基础硬件实验部分

图 1-5 新建工程对话框

图 1-6 指定工程名称及工作目录
4)点击 NEXT,进入下一个设定对话框,按默认选项直接点击 NEXT 进行器
件选择对话框。如图 1-7 所示。这里我们以选用 Cyclone V 系列芯片
EP5CSEMA5F31 为例进行介绍。用户可以根据使用的不同芯片来进行设定,其方
法基本一致。

22
第 2章 基础硬件实验部分

图 1-7 器件选择界面
首先在对话框的左上方的 Family 下拉菜单中选取 Cyclone V(E/GX/GT/
SX/SE/ST),在中间右边的 Speed grade 下拉菜单中选取 6,在左下方的 Available
devices 框中选取 EP5CSEMA5F31C6,点击 NEXT 完成器件的选取,进入 EDA
TOOL 设定界面如图 1-8 所示。

图 1-8 EDA TOOL 对话框


5)按默认选项,点击 NEXT 出现新建工程以前所有的设定信息,如图 1-9
所示,点击 FINISH 完成新建工程的建立。

23
第 2章 基础硬件实验部分

图 1-9 新建工程信息

2、建立图形设计文件
1)在创建好设计工程后,选择 File>NEW…菜单,出现图 1-10 所示的新建
设计文件类型选择窗口。这里我们以建立图形设计文件为例进行说明,其它设计输
入方法与之基本相同。

图 1-10 新建设计文件选择窗口
2)在 New 对话框(图 1-10)中选择 Design Files 页下的 Block Diagram/
Schematic File,点击 OK 按钮,打开图形编辑器对话框,如图 1-11 所示。图中标
明了常用的每个按钮的功能。

24
第 2章 基础硬件实验部分

图 1-11 Quartus II 图形编辑器对话框


Quartus II 图形编辑器也称块编辑器(Block Editor),用于以原理图(Sche
matics)和结构图(Block Diagrams)的形式输入和编辑图形设计信息。Quartus II
图形编辑器可以读取并编译结构图设计文件(Block Design File)和 MAXPL
USII 图形设计文件(Graphic Design Files),可以在 Quartus II 软件中打开图形设
计文件并将其另存为结构图设计文件。
在 Quartus II 图形编辑器窗口(图 1-11)中,根据个人爱好,可以随时改变 Block
Editor 的显示选项,如导向线和网格间距、橡皮筋功能、颜色以及基本单元和块的
属性等。
3)在这里以用原理图输入设计一个三八译码器为例,介绍基本单元符号输入
方法的步骤。在图 1-11 所示的图形编辑器窗口的工件区双击鼠标的左键,或点击
图中的符号工具按钮,或选择菜单 Edit>Insert Symbol…,则弹出如图 1-12 所示的
Symbol 对话框。

图 1-12 Symbol 对话框

25
第 2章 基础硬件实验部分

4)用鼠标点击单元库前面的“+”号,展开单元库,用户可以选择所需要的图
元或符号,该符号则显示在右边的显示符号窗口,用户也可以在符号名称里输入你
所需要的符号名称,点击 OK 按钮,所选择的符号将显示在图形编辑器的工作区域。
5)参考图 1-13 所示,将要选择的器件符号放置在图形编辑器的工件区域,用
正交节点工具将原件边接起来,然后定义端口的名称。在这个例子里,定义三个输
入为 A、B、C,定义八个输出为 D0、D1、D2、D3、D4、D5、D6、D7。用户也
可以根据自己的习惯来定义这些端口名称。
6)完成图形编辑的输入之后,需要保存设计文件或重新命名设计文件。选择
File>Save As…项,出现如图 1-14 所示对话框,选择好文件保存目录,并在文件名
栏输入设计文件名。如需要将设计文件添加到当前工程中,则选择对话框下面的
Add file to current project 复选框,单击保存按钮即可保存文件。需要注意的是,在
整个设计文件保存的过程当中,都需要遵循设计输入法的一般规则。

图 1-13 设计文件的输入

图 1-14 保存设计文件对话框

26
第 2章 基础硬件实验部分

3、对设计文件进行编译
Quartus II 编译器窗口包含了对设计文件处理的全过程。在 Quartus II 软件中选
择 Processing>Start Compliation,则出现 Quartus II 的编译器窗口,如图 1-15 所示。

图 1-15 Quartus II 编译器窗口

4、管脚分配
在前面选择好一个合适的目标器件(在这个实验中选择为 EP5CSEMA
5F31C6),完成设计的分析综合过程,得到工程的数据文件以后,需要对设计中
的输入、输出引脚指定到具体的器件管脚号码,指定管脚号码称为管脚分配或管脚
锁定。这里介绍两种方法进行管脚锁定。
1)点击 Assignments 菜单下面的 Assignment Editor,进入到引脚分配窗口。
如图 1-16 所示。

图 1-16 进入引脚分配界面
首先将要分配管脚的信号放置在 To 下方。双击 To 下方的 Node Finder,
如图 1-13 所示输入/输出引脚则会出现如图 1-17 所示界面。

27
第 2章 基础硬件实验部分

图 1-17 信号选择对话框
选择 Node Finder…进入如图 1-18 所示的 Node Finder 对话框界面。按图
1-18 中样例设置参数。在 Filter 窗口选择 Pins:all,在 Named 窗口中输入“*”,
点击 List 在 Nodes Found 窗口出现所有信号的名称,点击中间的按钮则 Selected
Nodes 窗口下方出现被选择的端口名称。双击 OK 按钮,完成设置。进入管脚分
配窗口,如图 1-19 所示。

图 1-18 Node Finder 对话框

28
第 2章 基础硬件实验部分

图 1-19 管脚分配
在图 1-19 中以锁定端口 A 的管脚为例,其它端口的管脚锁定与其基
本一致。选择端口 A 的对应 Assignment Name 待其变为蓝色,双击之,出现下拉
菜单选取如图 1-19 所示的 Location(Accepts wildcards/groups)选项。选择端口 A
的对应 Value 栏,待其变为蓝色,依照表 1-2 和表 1-3 所示的硬件与 FPGA 的管脚
连接表,输入对应的管脚名 PIN_AB12,按回车键,软件将自动将其改为 PIN_AB12,
同时蓝色选择条会自动跳转到 Value 栏的下一行,这表明软件已经将输入端口 A
分配到 FPGA 的 AB12 引脚上,如图 1-20 所示。

图 1-20 给 A 端口进行管脚分配
用同样的方法,依照表 1-1 和表 1-2 所示的硬件与 FPGA 的管脚连接表,对其
它端口进行管脚分配,如图 1-21 所示。

图 1-21 所有引脚全部分配结束后的软件窗口

29
第 2章 基础硬件实验部分

2)点击 Assignments 菜单下面的 Pin Planner(也可直接点击工具栏上的引脚分


配按钮)出现如图 1-22 所示的所选目标芯片的管脚分布图。

图 1-22 目标芯片的管脚分布图
与上面的方法相同,依照表 1-2 和表 1-3 所示的硬件与 FPGA 的管脚连接表,
如端口 SW0 对应的管脚为 PIN_AB12,则单击 PIN_AB12 管脚出现如图 1-23 所示
对话框。

图 1-23 管脚分配对话框
在图 1-23 对话框中的 Node Name 框中输入对应的端口名 A 或者通过下拉菜单
选取对应的端口名称 A,点击 OK 按钮,完成对端口 A 的管脚分配。
用相同的方法,依照下表 1-4 对其它端口进行管脚分配,管脚分配完后,
如下图 1-24 所示。

图 1-24 所有引脚全部分配结束后的软件窗口

30
第 2章 基础硬件实验部分

端口名 使用模块信号 管脚 说明
A 拨动开关 SW0 PIN_AB12
译码器的
B 拨动开关 SW1 PIN_AC12
三位输入
C 拨动开关 SW2 PIN_AF9
D0 LED 灯 LEDR0 PIN_V16
D1 LED 灯 LEDR1 PIN_W16
D2 LED 灯 LEDR2 PIN_V17
D3 LED 灯 LEDR3 PIN_V18 译码器的
D4 LED 灯 LEDR4 PIN_W17 八位输出
D5 LED 灯 LEDR5 PIN_W19
D6 LED 灯 LEDR6 PIN_Y19
D7 LED 灯 LEDR7 PIN_W20
表 1-4 端口管脚分配表
在图 1-24 中,棕色标出的管脚为已被分配锁定的管脚。值得注意的是,
当管脚分配完之后一定要进行再进行一次全编译,以使分配的管脚有效。

5、对设计文件进行仿真
1)创建一个仿真波形文件,选择 Quartus II 软件 File>New,进行新建
文件对话框。如图 1-25 所示。选取对话框的 Verification/Debugging Files 标签页,
从中选取 University Program VWF,点击 OK 按钮,则打开了一个空的波形编辑器
窗口,如图 1-26 所示。

图 1-25 新建文件对话框

31
第 2章 基础硬件实验部分

图 1-26 波形编辑器
2)设置仿真结束时间,波形编辑器默认的仿真结束时间为 1μS,根据仿真需
要,可以自由设置仿真的结束时间。选择 Quartus II 软件的 Edit>EndTime 命令,弹
出线路束时间对话框,在 Time 框办输入仿真结束时间,点击 OK 按钮完成设置。
3)加入输入、输出端口,在波形编辑器窗口左边的端口名列表区点击鼠
标右键,在弹出的右键菜单中选择 Insert Node or Bus…命令,在弹出的 Insert
Node or Bus…对话框如图 1-27 所示界面中点击 Node Finder 按钮。

图 1-27 Insert Node or Bus 对话框


在出现的 Node Finder 界面中,如图 1-28 所示,在 Filter 列表中选择 Pins:all,
在 Named 窗口中输入“*”,点击 List 在 Nodes Found 窗口出现所有信号的名称,
点击中间的按钮则 Selected Nodes 窗口下方出现被选择的端口称。双击 OK 按钮,
完成设置,回到图 1-27 所示的 Insert Node or Bus 对话框,双击 OK 按钮,所有的
输入、输出端口将会在端口名列表区内显示出来,如图 1-29 所示。

32
第 2章 基础硬件实验部分

图 1-28 Node Finder 对话框

图 1-29 在波形编辑器中加入端口
4)编辑输入端口波形,即指定输入端口的逻辑电平变化,在如图 1-29 所示的
波形编辑窗口中,选择要输入波形的输入端口如 A 端口,在端口名显示区左边的
波形编辑器工具栏中有要输入的各种波形,其按钮说明如图 1-30 所示。根据仿真
的需要输入波形。完成后如图 1-31 所示。最后选择软件的 File>Save 进行保存。

图 1-30 波形编辑器工具栏

33
第 2章 基础硬件实验部分

图 1-31 编辑输入端口波形
5)指定仿真器设置,在仿真过程中有时序仿真和功能仿真之分,在这里介绍
功能仿真。选择 Simulation>Run Function Sinulation 命令,打开仿真器工具窗口,
如图 1-32 所示。

图 1-32 仿真器工具窗口
自动开始进行仿真,完成仿真时。自动弹出仿真报告窗口,观察仿真波形。如
图 1-33 所示。

34
第 2章 基础硬件实验部分

图 1-33 仿真波形

6、从设计文件到目标器件的加载
完成对器件的加载有两种形式,一种是对目标器件进行加载文件,一种是
对目标器件的配置芯片进行加载。这里我们介绍对目标器件
EP5CSEMA5F31C6 进行加载的方法。
1)用户将计算机和 DE1-SOC 开发板上的 USB Blaster 接口(J13)通过 USB
下载线连接。打开 Quartus II 软件并且选择 Tools>Programmer。Programmer 将
会出现如下图 1-34 窗口。

图 1-34 检测到 USB-Blaster 下载线


2)确认 Hardware Setup 按钮旁是否有出现 DE-SoC[USB-1]。若呈现 No Hardware
的状态,请按下 Hardware Setup。在 Hardware Setup 窗口下,双击 Hardware 栏内
的 DE-SoC 让 Current selected hardware 出现 DE-SoC[USB-1]。按下 Close 离开。
如图 1-35 所示

35
第 2章 基础硬件实验部分

图 1-35 检测到 USB-Blaster 下载线


若用户的 Hardware Setup 窗口下还是为出现 DE-SoC,请确认 DE1-SOC
Blaster 接口有正确跟计算机连接,且 USB-Blaster II 且驱动已经正确安装。
3)点击“Auto Detect”如下图 1-36 所示:

图 1-36 检测 JTAG Chain 上器件


8)选择 FPGA 装置“5CSEMA5”,如图 1-37 所示。

图 1-37 选择 FPGA 器件
9)FPGA 和 HPS 器件会出现在 JTAG Chain 内,如图 1-38 所示:

36
第 2章 基础硬件实验部分

图 1-38 检测到 FPGA 和 HPS 器件


10)点选 FPGA 装置。按下鼠标的右键会出现一个菜单,选择 Change File
会出现.sof 文件路径的窗口如图 1-39 所示。

图 1-39 检测到 FPGA 和 HPS 器件


11)先选择.sof 文件。点选“Program/configure”check box,然后点“Start”
按钮后,.sof 文件将会被加载到 FPGA 中。如图 1-40 所示

37
第 2章 基础硬件实验部分

图 1-40 下载.sof 文件

五、实验现象与结果
文件加载到目标器件后,拨动拨动开关,LED 灯会按表 1-1 所示的真值表对应
的点亮。

六、实验报告
1、进一步熟悉和理解 Quartus II 软件的使用方法。
(实验参考程序见光盘 decoder
文件夹)。
2、试用 Verilog 实现上述功能,并与图形输入进行比较,谈谈自己
对两种方式实验电路的认识。

38
第 2章 基础硬件实验部分

2.2 基于 Verilog 的格雷码编码器的设计

一、实验目的
1 、了解格雷码变换的原理。
2 、进一步熟悉 Quartus II 软件的使用方法和 Verilog 输入的全过程。
3 、进一步掌握实验系统的使用。

二、实验原理
格雷(Gray)码是一种可靠性编码,在数字系统中有着广泛的应用。其特点是
任意两个相邻的代码中仅有一位二进制数不同,因而在数码的递增和递减运算过程
中不易出现差错。但是格雷码是一种无权码,要想正确而简单的和二进制码进行转
换,必须找出其规律。
根据组合逻辑电路的分析方法,先列出其真值表再通过卡诺图化简,可以很快
的找出格雷码与二进制码之间的逻辑关系。其转换规律为:高位同,从高到低看异
同,异出‘1’,同出‘0’。也就是将二进制码转换成格雷码时,高位是完全相同
的,下一位格雷码是‘1’还是‘0’,完全是相邻两位二进制码的“异”还是“同”
来决定。下面举一个简单的例子加以说明。
假如要把二进制码 10110110 转换成格雷码,则可以通过下面的方法来完成,方
法如图 2-1。

图 2-1 格雷码变换示意图
因此,变换出来的格雷码为 11101101。

三、实验内容
本实验要求完成的任务是变换十位的二进制码为十位的格雷码。实验中用十位
拨动开关模块的 SW0~SW9 表示十位二进制输入,用 LED 模块的 LEDR0~LEDR9
来表示转换的实验结果 10 位格雷码。实验 LED 亮表示对应的位为‘1’,LED 灭
表示对应的位为‘0’。通过输入不同的值来观察输入的结果与实验原理中的转换
规则是否一致。实验箱中的拨动开关、与 FPGA 的接口电路,LED 灯与 FPGA 的
接口电路以及拨动开关、LED 与 FPGA 的管脚连接在实验一中都做了详细说明,
这里不在赘述。

四、实验步骤
39
第 2章 基础硬件实验部分

1、打开 Quartus II 软件,新建一个工程。


2、建完工程之后,再新建一个 Verlog HDL File。新建一个 Verilog 文
件的过程如下:
1) 选择 Quartus II 软件中的 File>New 命令,出现 New 对话框。
如图 2-2 所示。

图 2-2 新建设计文件选择窗口
2)在 New 对话框(图 2-2)中选择 Design Files 页下的 Verlog HDL File,
点击 OK 按钮,打开 Verlog HDL File 编辑器对话框,如图 2-3 所示。

图 2-3 Verlog HDL File 编辑窗口


3)按照实验原理和自己的想法,在 Verilog HDL 编辑窗口编写 Verilog 程序,
用户可参照光盘中提供的示例程序。
4)编写完 Verilog 程序后,保存起来。方法同实验一。
5)对自己编写的 Verilog 程序进行编译并仿真,对程序的错误进行修改。
6)编译仿真无误后,依照拨动开关、LED 与 FPGA 的管脚连接表进行管脚分

40
第 2章 基础硬件实验部分

配,表 2-1 是示例程序的管脚分配表。分配完成后,再进行全编译一次,以使管脚


分配生效。
端口名 使用模块信号 对应 FPGA 管脚 说明
i_10binary[0] 拨动开关 SW0 PIN_AB12
i_10binary[1] 拨动开关 SW1 PIN_AC12
i_10binary[2] 拨动开关 SW2 PIN_AF9
i_10binary[3] 拨动开关 SW3 PIN_AF10
i_10binary[4] 拨动开关 SW4 PIN_AD11 格雷编码器
i_10binary[5] 拨动开关 SW5 PIN_AD12 的数据输入
i_10binary[6] 拨动开关 SW6 PIN_AE11
i_10binary[7] 拨动开关 SW7 PIN_AC9
i_10binary[8] 拨动开关 SW8 PIN_AD10
i_10binary[9] 拨动开关 SW9 PIN_AE12
o_10gram[0] LED 灯 LEDR0 PIN_V16
o_10gram[1] LED 灯 LEDR1 PIN_W16
o_10gram[2] LED 灯 LEDR2 PIN_V17
o_10gram[3] LED 灯 LEDR3 PIN_V18
o_10gram[4] LED 灯 LEDR4 PIN_W17 格雷编码器
o_10gram[5] LED 灯 LEDR5 PIN_W19 的编码输出
o_10gram[6] LED 灯 LEDR6 PIN_Y19
o_10gram[7] LED 灯 LEDR7 PIN_W20
o_10gram[8] LED 灯 LEDR8 PIN_W21
o_10gram[9] LED 灯 LEDR9 PIN_Y21
表 2-1 端口管脚分配表
7)用下载电缆通过 JTAG 口将对应的 sof 文件加载到 FPGA 中。观察实验结果
是否与自己的编程思想一致。

五、实验现象与结果
以设计的参考示例为例,当设计文件加载到目标器件后,拨动拨动开关,
LED 会按照实验原理中的格雷码输入一一对应的亮或者灭。

六、实验报告
1 、绘出仿真波形,并作说明。
2、进一步熟悉 Quartus II 软件。将实验原理、设计过程、编译仿真波形和分析
结果、硬件测试结果记录下来。(实验参考程序见光盘 graycode 文件夹)

41
第 2章 基础硬件实验部分

2.3 含异步清零和同步使能的计数器的设计

一、实验目的
1 、了解二进制计数器的工作原理。
2、进一步熟悉 Quartus II 软件的使用方法和 Verilog 输入。
3、时钟在编程过程中的作用。

二、实验原理
二进制计数器中应用最多、功能最全的计数器之一,含异步清零和同步使能的
加法计数器的具体工作过程如下:在时钟上升沿的情况下,检测使能端是否允许计
数,如果允许计数(定义使能端高电平有效)则开始计数,否则一直检测使能端信
号。在计数过程中再检测复位信号是否有效(低电平有效),当复位信号起作用时,
使计数值清零,继续进行检测和计数。其工作时序如图 3-1 所示:

时钟
复位

使能
进位
计数

图 3-1 计数器的工作时序

三、实验内容
本实验要求完成的任务是在时钟信号的作用下,通过使能端和复位信号来完成
加法计数器的计数。实验中时钟信号使用板载 50MHZ 信号,用一位拨动开 SW0
表示使能端信号,用复位开关 KEY1 表示复位信号,用 LED 模块的 LEDR0~LEDR3
来表示计数的二进制结果。实验 LED 亮表示对应的位为‘1’,LED 灭表示对应的
位为‘0’。通过输入不同的值模拟计数器的工作时序,观察计数的结果。实验箱
中的拨动开关、与 FPGA 的接口电路,LED 灯与 FPGA 的接口电路以及拨动开关、
LED 与 FPGA 的管脚连接在实验一中都做了详细说明,这里不在赘述。
表 3-1 是其时钟输出与 FPGA 的管脚连接表。

42
第 2章 基础硬件实验部分

信号名称 对应 FPGA 管脚名 说明

clk AF14 数字时钟信号送至 FPGA 的 AF14


表 3-1 数字时钟输出与 FPGA 的管脚连接表
按键开关模块的电路原理如图 3-3 所示,表 3-2 是按键开关的输出与 FPGA 的
管脚连接表。

图 3-2 按键开关模块电路原理
信号名称 对应 FPGA 管脚名 说明
KEY0 PIN_AA14 S1 信号输出至 FPGA 的 AA14
KEY1 PIN_AA15 S2 信号输出至 FPGA 的 AA15
KEY2 PIN_W15 S3 信号输出至 FPGA 的 W15
KEY3 PIN_Y16 S4 信号输出至 FPGA 的 Y16
表 3-2 按键开关与 FPGA 的管脚连接表

四、实验步骤
1、打开 Quartus II 软件,新建一个工程。
2、建完工程之后,再新建一个 Verilog File,打开 Verilog 编辑器对话框。
3、按照实验原理和自己的想法,在 Verilog File 编辑窗口编写 Verilog File 程序,
用户可参照光盘中提供的示例程序。
4、编写完 Verilog 程序后,保存起来。方法同实验一。
5、对自己编写的 Verilog 程序进行编译并仿真,对程序的错误进行修改。
6、编译仿真无误后,依照拨动开关、LED 与 FPGA 的管脚连接表进行管脚分
配。表 3-3 是示例程序的管脚分配表。
端口名 使用模块信号 对应 FPGA 管脚 说明
clk 数字信号源 PIN_AF14 时钟为 50MHZ

43
第 2章 基础硬件实验部分

cnt_en 拨动开关 SW0 PIN_AB12 使能信号使


rst_n 按键开关 KEY1 PIN_AA15 复位信号
o_led[0] LED 灯 LEDR0 PIN_V16
o_led[1] LED 灯 LEDR1 PIN_W16
计数输出
o_led[2] LED 灯 LEDR2 PIN_V17
o_led[3] LED 灯 LEDR3 PIN_V18
COUT 为进位信
o_cout LED 灯 LEDR4 PIN_W17

表 3-3 端口管脚分配表
7、用下载电缆通过 JTAG 口将对应的 sof 文件加载到 FPGA 中。观察实验结果
是否与自己的编程思想一致。

五、实验现象与结果
以设计的参考示例为例,当设计文件加载到目标器件后,将数字信号源的时钟
选择为 50MHZ,使拨动开关 SW0 置为高电平(使拨动开关向上),四位 LED 会
按照实验原理中依次被点亮,当加法器加到 F 时,LEDR4(进位信号)被点亮。当
复位键(按键开关的 KEY1 键)按下后,计数被清零。如果拨动开关 SW0 置为低
电平(拨动开关向下)则加法器不工作。

六、实验报告
1 、绘出仿真波形,并作说明。
2、写出在 Verilog 编程过程中需要说明的规则。
3 、将实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记录下
来。改变时钟频率,看实验现象会有什么改变,试解释这一现象。(实验参考程序
见光盘 count 文件夹)

44
第 2章 基础硬件实验部分

2.4 六位七段数码管显示电路的设计

一、实验目的
1 、了解数码管的工作原理。
2 、学习七段数码管显示译码器的设计。
3、学习 Verilog 的 CASE 语句及多层次设计方法。

二、实验原理
七段数码管是电子开发过程中常用的输出显示设备。在实验系统中使用的是两
个四位一体、共阳极型七段数码管。其单个静态数码管如下图 4-1 所示。

图 4-1 静态七段数码管
由于七段数码管公共端连接到 VCC(共阳极型),当数码管的中的那一个段被
输入低电平,则相应的这一段被点亮。反之则不亮。共阴极性的数码管与之相反。

三、实验内容
本实验要求完成的任务是在时钟信号的作用下,通过输入的键值在数码管上显
示相应的键值。在实验中时,数字时钟选择 50MHZ 作为扫描时钟,用四个拨动开
关做为输入,当四个拨动开关置为一个二进制数时,在数码管上显示其十六进制的
值。实验箱中的拨动开关与 FPGA 的接口电路,以及拨动开关与 FPGA 的管脚连接
在实验一中都做了详细说明,这里不在赘述。数码管显示模块的电路原理如图 4-2
所示,表 4-1 是其数码管的输入与 FPGA 的管脚连接表。

45
第 2章 基础硬件实验部分

图 4-2 数字时钟信号模块电路原理
端口名 对应FPGA引脚 说明
clk_sys PIN_AF14 50MHz时钟
HEX0[0] PIN_AE26 数码管0段
HEX0[1] PIN_AE27 数码管1段
HEX0[2] PIN_AE28 数码管2段
HEX0[3] PIN_AG27 数码管3段
HEX0[4] PIN_AF28 数码管4段
HEX0[5] PIN_AG28 数码管5段
HEX0[6] PIN_AH28 数码管6段
HEX1[0] PIN_AJ29 数码管0段
HEX1[1] PIN_AH29 数码管1段
HEX1[2] PIN_AH30 数码管2段
HEX1[3] PIN_AG30 数码管3段
HEX1[4] PIN_AF29 数码管4段
HEX1[5] PIN_AF30 数码管5段
HEX1[6] PIN_AD27 数码管6段
HEX2[0] PIN_AB23 数码管0段
HEX2[1] PIN_AE29 数码管1段
HEX2[2] PIN_AD29 数码管2段
HEX2[3] PIN_AC28 数码管3段
HEX2[4] PIN_AD30 数码管4段
HEX2[5] PIN_AC29 数码管5段
HEX2[6] PIN_AC30 数码管6段

46
第 2章 基础硬件实验部分

HEX3[0] PIN_AD26 数码管0段


HEX3[1] PIN_AC27 数码管1段
HEX3[2] PIN_AD25 数码管2段
HEX3[3] PIN_AC25 数码管3段
HEX3[4] PIN_AB28 数码管4段
HEX3[5] PIN_AB25 数码管5段
HEX3[6] PIN_AB22 数码管6段
HEX4[0] PIN_AA24 数码管0段
HEX4[1] PIN_Y23 数码管1段
HEX4[2] PIN_Y24 数码管2段
HEX4[3] PIN_W22 数码管3段
HEX4[4] PIN_W24 数码管4段
HEX4[5] PIN_V23 数码管5段
HEX4[6] PIN_W25 数码管6段
HEX5[0] PIN_V25 数码管0段
HEX5[1] PIN_AA28 数码管1段
HEX5[2] PIN_Y27 数码管2段
HEX5[3] PIN_AB27 数码管3段
HEX5[4] PIN_AB26 数码管4段
HEX5[5] PIN_AA26 数码管5段
HEX5[6] PIN_AA25 数码管6段
sw0 PIN_AB12 拨码开关0
sw1 PIN_AC12 拨码开关1
sw2 PIN_AF9 拨码开关2
sw3 PIN_AF10 拨码开关3
表 4-1 数码管与 FPGA 的管脚连接表

四、实验步骤
1、打开 Quartus II 软件,新建一个工程。
2、建完工程之后,再新建一个 Verilog HDL File,打开 Verilog 编辑器对话框。
3、按照实验原理和自己的想法,在 Verilog 编辑窗口编写 Verilog 程序,用户可
参照光盘中提供的示例程序。

47
第 2章 基础硬件实验部分

4、编写完 Verilog 程序后,保存起来。方法同实验一。


5、对自己编写的 Verilog 程序进行编译并仿真,对程序的错误进行修改。
6、编译仿真无误后,依照拨动开关、数码管与 FPGA 的管脚连接表(表
1-1、表 4-1)或参照附录进行管脚分配。分配完成后,再进行全编译一次,以使管
脚分配生效。
7、用下载电缆通过 JTAG 口将对应的 sof 文件加载到 FPGA 中。观察实验结果
是否与自己的编程思想一致。

五、实验现象与结果
以设计的参考示例为例,当设计文件加载到目标器件后,数字信号源使用板载
50MHZ,拨动四位拨动开关,使其为一个数值,则六个数码管均显示拨动开关所
表示的十六进制的值。

六、实验报告
1 、绘出仿真波形,并作说明。
2 、说明扫描时钟是如何工作的,改变扫描时钟会有什么变化。
3 、实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记录下来。
(实验参考程序见光盘 smg 文件夹)

48
第 2章 基础硬件实验部分

2.5 数控分频器的设计

一、实验目的
1、学习数控分频器的设计、分析和测试方法。
2、了解和掌握分频电路实现的方法。
3、掌握 EDA 技术的层次化设计方法。

二、实验原理
数控分频器的功能就是当输入端给定不同的输入数据时,将对输入的时钟信号
有不同的分频比,数控分频器就是用计数值可并行预置的加法计数器来设计完成
的,方法是将计数溢出位与预置数加载输入信号相接得到。

三、实验内容
本实验要求完成的任务是在时钟信号的作用下,通过输入十位的拨动开关输入
不同的数据,改变分频比,使输出端口输出不同频率的时钟信号,起到数控分频的
效果。在实验中时,数字时钟选择板载 50MHZ 作为输入的时钟信号后进行分频到
10KHZ(频率过高观察不到 LED 的闪烁快慢),用十个拨动开关做为数据的输入,
当十个拨动开关置为一个二进制数时,在输出端口输出对应频率的时钟信号:

用户可以用示波器接信号输出模块观察频率的变化。示波器接入引脚如图 5-1 所示。

图 5-1 示波器信号观察接入引脚(方框内引脚左侧为信号输出,右侧为地)
也可以使输出端口接 LED 灯来观察频率的变化。在此实验中我们把输入接入
LED 灯模块。实验箱中的拨动开关、LED 与 FPGA 的接口电路,以及拨动开关、
LED 与 FPGA 的管脚连接在实验一中都做了详细说明,这里不在赘述。

四、实验步骤
1、打开 Quartus II 软件,新建一个工程。
2、建完工程之后,再新建一个 Verilog HDL File,打开 Verilog 编辑器对话框。
3、按照实验原理和自己的想法,在 Verilog 编辑窗口编写 Verilog 程序,用户可

49
第 2章 基础硬件实验部分

参照光盘中提供的示例程序。
4、编写完 Verilog 程序后,保存起来。方法同实验一。
5、对自己编写的 Verilog 程序进行编译并仿真,对程序的错误进行修改。
6、编译仿真无误后,依照拨动开关、LED 与 FPGA 的管脚连接表进行管脚分
配。表 5-1 是示例程序的管脚分配表。分配完成后,再进行全编译一次,以使管脚
分配生效。
端口名 使用模块信号 对应FPGA管脚 说明

clk_sys 数字信号源 PIN_AF14 50MHZ时钟输入

SW0 拨动开关SW0 PIN_AB12

SW1 拨动开关SW1 PIN_AC12

SW2 拨动开关SW2 PIN_AF9

SW3 拨动开关SW3 PIN_AF10

SW4 拨动开关SW4 PIN_AD11


分频比数据
SW5 拨动开关SW5 PIN_AD12

SW6 拨动开关SW6 PIN_AE11

SW7 拨动开关SW7 PIN_AC9

SW8 拨动开关SW8 PIN_AD10

SW9 拨动开关SW9 PIN_AE12

o_led LED 灯 LED0 PIN_V16 分频输出

FOUT 示波器观察点 PIN_AD20 分频输出

表 5-1 端口管脚分配表
7、用下载电缆通过 JTAG 口将对应的 sof 文件加载到 FPGA 中。观察实验结果
是否与自己的编程思想一致。

五、实验现象与结果
以设计的参考示例为例,当设计文件加载到目标器件后,数字信号源时钟选择
为板载 50MHZ,拨动十位拨动开关,使其为一个数值,则输入的时钟信号使 LED
灯开始闪烁,改变拨动开关,LED 的闪烁快慢会按一定的规则发生改变。用示波
器观测 FPGA 输出观察点可以看到波形会随十位拨动开关的改变而变化。

六、实验报告
1、输入不同的 DATA 值绘出仿真波形,并作说明。
2、将实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记录下
来。(实验参考程序见光盘 fre_div 文件夹)

50
第 2章 基础硬件实验部分

2.6 图形和 Verilog 混合输入的电路设计

一、实验目的
1 、学习在 Quartus II 软件中模块符号文件的生成与调用。
2 、掌握模块符号与模块符号之间的连线规则与方法。
3 、掌握从设计文件到模块符号的创建过程。

二、实验原理
在层次化的设计文件中,经常需要将已经设计好的工程文件生成一个模块符号
文件作为自己的功能模块符号在顶层调用,该符号就像图形设计文件中的任何其它
宏功能符号一样可被高层设计重复调用。本实验的实验原理就是将前面设计的实验
三、四、五通过 Quartus II 软件合并成一个设计文件。实现实验三、四、五中的
所有功能。

三、实验内容
本实验要求完成的任务与实验三、四、五的实验内容基本一致。在实验中,时
钟信号选取板载 50MHz 做为数码管的扫描时钟,拨动开关输入一个预置的十位数
据,经过数控分频电路(实验五)分频后得到一个较低的频率做为加法计数器(实
验三)的时钟频率进行计数器的加法运算。得到的值给数码显示译码电路(实验四)
在数码管上显示出来。实验箱中的数字时钟模块、拨动开关、按键开关、数码管、
LED 与 FPGA 的接口电路,以及拨动开关、按键开关、数码管、LED 与 FPGA 的
管脚连接在实验三、四、五中都做了详细说明,这里不在赘述。

四、实验步骤
1、打开 Quartus II 软件,新建一个工程。
2、将以前编写的实验三、四、五的源程序代码复制到当前工作目录下保存。
3、选择 File>Open 命令,如图 6-1 所示,打开复制到当前工作目录下和其中一
个源程序代码,如 count.v 程序。

图 6-1 打开一个设计文件

51
第 2章 基础硬件实验部分

注:在 count.v 程序中去掉如下代码(freq_divid.v 中已做分频,count.v 中如下


代码重复分频)

4、在 File 菜单中选择 Create/Update 项,进而选择 Create Symbol for Current File,
点击确定按钮,即可创建一个代表刚才打开的设计文件功能的符号(.bsf),如图 6-2
所示。如果该文件对应的符号文件已经创建过,则执行该操作时会弹出提示信息,
询问是否要覆盖现存的符号文件。用户可以根据自己的意愿进行选择。

图 6-2 从现行文件创建模块符号文件
5、用同样的方法对其它设计文件(seg.v、freq_divid.v)进行模块符号文
件的创建。
6 、模块符号文件创建完成后,再新建一个图形编辑文件,打开图形编辑器对
话框。在图形编辑器窗口的工件区双击鼠标的左键,或点击图中的符号工具按钮,
或选择菜单 Edit>Insert Symbol…,则弹出如图 6-3 所示的 Symbol 对话框。

图 6-3 Symbol 对话框

52
第 2章 基础硬件实验部分

7、在 Symbol 对话框(图 6-3)中的 Project 项下会出现前面创建的模块符号


文件(count、freq_divid、smg),我们现在就可以任意调用这些功能模块符号文件。
8 、选取这些模块符号文件放置到工作区,调入需要的模块符号以后,进行符
号之间的连线,以及放置输入、输出或双向引脚。需要说明的是,在这个实验中,
因为输入的数据占用了十二位的拨动开关,所以做为同步使能端的信号 EN 我们加
入了一个 VCC 信号,使使能端信号 EN 有效。所有设计完成后的电路如图 6-4 所

图 6-4 设计图形符号文件
9 、对自己编写的图形符号输入文件程序进行保存,然后编译并仿真,对程序
的错误进行修改。
10、编译仿真无误后,依照拨动开关、LED 与 FPGA 的管脚连接表(表 1-1、
表 1-2)或参照附录进行管脚分配。表 6-1 是示例程序的管脚分配表。分配完成后,
再进行全编译一次,以使管脚分配生效。
端口名 对应 FPGA 管脚 说明
clk_sys PIN_AF14 50MHZ 时钟输入
rst_n PIN_AA14 复位信号
HEX0[0] PIN_AE26
HEX0[1] PIN_AE27
HEX0[2] PIN_AE28
HEX0[3] PIN_AG27
HEX0[4] PIN_AF28
HEX0[5] PIN_AG28
数据显示
HEX0[6] PIN_AH28
HEX1[0] PIN_AJ29
HEX1[1] PIN_AH29
HEX1[2] PIN_AH30
HEX1[3] PIN_AG30
HEX1[4] PIN_AF29
HEX1[5] PIN_AF30

53
第 2章 基础硬件实验部分

HEX1[6] PIN_AD27
HEX2[0] PIN_AB23
HEX2[1] PIN_AE29
HEX2[2] PIN_AD29
HEX2[3] PIN_AC28
HEX2[4] PIN_AD30
HEX2[5] PIN_AC29
HEX2[6] PIN_AC30
HEX3[0] PIN_AD26
HEX3[1] PIN_AC27
HEX3[2] PIN_AD25
HEX3[3] PIN_AC25
HEX3[4] PIN_AB28
HEX3[5] PIN_AB25
HEX3[6] PIN_AB22
HEX4[0] PIN_AA24
HEX4[1] PIN_Y23
HEX4[2] PIN_Y24
HEX4[3] PIN_W22
HEX4[4] PIN_W24
HEX4[5] PIN_V23
HEX4[6] PIN_W25
HEX5[0] PIN_V25
HEX5[1] PIN_AA28
HEX5[2] PIN_Y27
HEX5[3] PIN_AB27
HEX5[4] PIN_AB26
HEX5[5] PIN_AA26
HEX5[6] PIN_AA25
sw[0] PIN_AB12
sw[1] PIN_AC12
sw[2] PIN_AF9
sw[3] PIN_AF10 显示时钟控制数据输
sw[4] PIN_AD11 入信号
sw[5] PIN_AD12
sw[6] PIN_AE11
sw[7] PIN_AC9

54
第 2章 基础硬件实验部分

sw[8] PIN_AD10
sw[9] PIN_AE12
Led[0] PIN_V16 进位
表 6-1 端口管脚分配表
11、用下载电缆通过 JTAG 口将对应的 sof 文件加载到 FPGA 中。观察实验结
果是否与自己的编程思想一致。

五、实验现象与结果
以设计的参考示例为例,当设计文件加载到目标器件后,将数字信号源模块的
时钟选择为 50MHz,拨动十位拨动开关,使其为一个数值,则六位数码管按一定
的速率开始显示“0-F”,当数码管显示 F 时 LED 灯 LED0 开始被点亮,显示其它
数值时熄灭。按 KEY[0]键显示的数值又从 0 开始,拨动十位拨动开关,置于其它
数据,数码管的显示速率会发生改变。
六、实验报告
1 、出仿真波形,并作说明。
2 、自己设计文件,然后通过设计文件到模块符号文件的转换,设计自己的电
路并在实验系统中验证。进一步掌握这种方法。
3 、写出在软件中通过其它方法从设计文件到模块符号文件的转换过程。
将实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记录下来。(实
验参考程序见光盘 ex6 文件夹)

55
第 2章 基础硬件实验部分

2.7 步长可变的加减计数器的设计

一、实验目的
1 .加深对计数器的认识。
2.了解用 Verilog 语言实验计数器的过程。

二、实验原理
计数器的步长是指计数器每次的改变量,比如 74LS169 器件,它每次改变的时
候要么加 1,要么减 1,因此,我们就说该计数器的步长为 1。在很多应用领域,
都希望计数器的步长可变。所谓步长可变,也就是计数器的步长是一个不定值,具
体是多少要靠外部来干预。比如外部给定其步长为 5,
那么该计数器每次要么加 5,要么减 5,也就是说计数器每次改变的量是 5。这种
步长可变的计数器才具有一定的实际意义,比如在 DDSF 中的地址累加器就是一
个步长可变的递增计数器。

三、实验内容
本实验的任务是实现一个简单的 3 位十进制计数器,步长的改变量要求从 0 至
15 可变,在设计中用拨动开关的 SW0-SW3 来作为步长改变量的输入,用 SW4 来
控制计数器的加减。具体要求为:当 SW4 输入为高电平时,计数器为步长可变的
加法计数器;当 SW4 输入为低电平时,计数器为步长可变的减法计数器。计数器
的输出用 3 位数码管显示。实验中的计数器的时钟频率为了便用观察用把板载
50MHZ 分频到 1HZ 作为步进的频率。实验箱中的数字时钟、拨动开关、LED 与
FPGA 的接口电路,以及数字时钟、拨动开关、LED 与 FPGA 的管脚连接在以前的
实验中都做了详细说明,这里不在赘述。

四、实验步骤
1、打开 Quartus II 软件,新建一个工程。
2、建完工程之后,再新建一个 Verilog HDL File,打开 Verilog 编辑器对话框。
3、按照实验原理和自己的想法,在 Verilog 编辑窗口编写 Verilog 程序,用户可
参照光盘中提供的示例程序。
4、编写完 Verilog 程序后,保存起来。方法同实验一。
5、对自己编写的 Verilog 程序进行编译并仿真,对程序的错误进行修改。
6、编译仿真无误后,依照数字时钟、拨动开关、LED 灯与 FPGA 的管脚连接
表进行管脚分配。表 7-1 是示例程序的管脚分配表。分配完成后,再进行全编译一
次,以使管脚分配生效。
端口名 对应 FPGA 管脚 说明
clk_sys PIN_AF14 时钟输入

56
第 2章 基础硬件实验部分

rst_n PIN_AA15 复位信号


step_key[0] PIN_AB12
step_key[1] PIN_AC12
步长的输入数据
step_key[2] PIN_AF9
step_key[3] PIN_AF10
up_down PIN_AD11 计数器加减控制
HEX0[0] PIN_AE26
HEX0[1] PIN_AE27
HEX0[2] PIN_AE28
HEX0[3] PIN_AG27
HEX0[4] PIN_AF28
HEX0[5] PIN_AG28
HEX0[6] PIN_AH28
HEX1[0] PIN_AJ29
HEX1[1] PIN_AH29
HEX1[2] PIN_AH30
HEX1[3] PIN_AG30 计数器输出显示
HEX1[4] PIN_AF29
HEX1[5] PIN_AF30
HEX1[6] PIN_AD27
HEX2[0] PIN_AB23
HEX2[1] PIN_AE29
HEX2[2] PIN_AD29
HEX2[3] PIN_AC28
HEX2[4] PIN_AD30
HEX2[5] PIN_AC29
HEX2[6] PIN_AC30
表 7-1 端口管脚分配表
7、用下载电缆通过 JTAG 口将对应的 sof 文件加载到 FPGA 中。观察实验结果
是否与自己的编程思想一致。

五、实验现象与结果
以设计的参考示例为例,当设计文件加载到目标器件后,数字时钟为 50MHZ
板载时钟,拨动拨动开关 SW0-SW3,输入一个四位的数据做为一个可变的步长,
观察 3 位数码管的变化是不是按这个可变的步长在进行加减。拨动拨动开关 SW4
观察数码管是不是按设计的思想在进行加法和减洗计数器的切换。
六、实验报告
1、给出不同的乘数和被乘数,绘仿真波形,并作说明。

57
第 2章 基础硬件实验部分

2、在这个程序的基础上设计一个四位的并行乘法器。
3、在这个程序的基础上,用数码管来显示相乘结果的十进制值。
4、实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记录下来。
(实验参考程序见光盘 var_counter 文件夹)

58
第 2章 基础硬件实验部分

2.8 基本触发器的设计

一、实验目的
1 、了解基本触发器的工作原理。
2、进一步熟悉在 Quartus II 中基于原理图设计的流程。

二、实验原理
基本触发器的电路如下图 8-1 所示。它可以由两个与非门交叉耦合组成,也可

图 8-1 基本触发器电路
以由两个或非门交叉耦合组成。现在以两个与非门组成的基本触发器为例,来
分析其工作原理。根据与非逻辑关系,可以得到基本触发器的状态转移真值表及简
化的真值表,如下表 8-1 所示:

表 8-1 基本触发器状态转移真值表

根据真值表,不难写出其特征方程:

其中式(2)为约束条件。

59
第 2章 基础硬件实验部分

三、实验内容
本实验的任务就是利用 Quartus II 软件的原理图输入,产生一个基本触发器,
触发器的形式可以是与非门结构的,也是可以或非门结构的。实验中用按键模块的
用 SW0 和 SW1 来分别表示 NR 和 NS,用 LED 模块的 LED0 和 LED1 分别表
示 Q 和 NQ。在 R 和 S 满足式(2)的情况下,观察 Q 和 Q 的变化。
实验箱中的拨动开关、LED 与 FPGA 的接口电路,以及拨动开关、LED 与 FPGA
的管脚连接在以前的实验中都做了详细说明,这里不在赘述。

四、实验步骤
1.打开 Quartus II 软件,新建一个工程。
2.建完工程后再新建一个图形符号输入文件,打开图形符号编辑器对话框。
3.按照实验原理和自己的想法,在图形符号编辑窗口编写设计程序,用户可参
照光盘中提供的示例程序。
4.设计好设计电路程序后,保存起来。方法同实验一。
5.对自己编写的设计电路程序进行编译并仿真,对程序的错误进行修改。
6.编译仿真无误后,依照拨动开关、LED 与 FPGA 的管脚连接表进行管脚分配。
表 8-2 是示例程序的管脚分配表。分配完成后,再进行全编译一次,以使管脚分配
生效。
端口名 使用模块信号 对应 FPGA 管脚 说明
NR 拨动开关 SW0 PIN_AB12
NS 拨动开关 SW1 PIN_AC12
Q LED 灯 LEDR0 PIN_V16
NQ LED 灯 LEDR1 PIN_W16
表 8-2 端口管脚分配表
7.用下载电缆通过 JTAG 口将对应的 sof 文件加载到 FPGA 中。观察实验结果是
否与自己的编程思想一致。

五、实验现象与结果
以设计的参考示例为例,当设计文件加载到目标器件后,拨动相应的拨动开关
(即 NR、NS),则通过 LED 灯上的亮和灭来显示这个触发器的输入结果。将输
入与输出和表 8-1 基本触发器状态转移真值表进行比较,看是否一致。

六、实验报告
1、绘出不同 R、S 值的仿真波形,并作说明。
2、试设计一个其它的功能触发器如 D 触发器、JK 触发器等
3 、将实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记录下
来。(实验参考程序见光盘 RS_test 文件夹)

60
第 2章 基础硬件实验部分

2.9 可控脉冲发生器的设计

一、实验目的
1、了解可控脉冲发生器的实现机理。
2、学会用示波器观察 FPGA 产生的信号。
3、学习用 Verilog 编写复杂功能的代码。

二、实验原理
脉冲发生器就是要产生一个脉冲波形,而可控脉冲发生器则是要产生一个周期
和占空比可变的脉冲波形。可控脉冲发生器的实现原理比较简单,可以简单的理解
为一个计数器对输入的时钟信号进行分频的过程。通过改变计数器的上限值来达到
改变周期的目的,通过改变电平翻转的阈值来达到改变占空比的目的。下面举个简
单的例子来说明其工作原理。
假如有一个计数器 T 对时钟分频,其计数的范围是从 0~N,另取一个
M(0≤M≤N),若输出为 Q,那么 Q 只要满足条件

时,通过改变 N 值,即可改变输出的脉冲波的周期;改变 M 值,即可改变脉


冲波的占空比。这样输出的脉冲波的周期和占空比分别为:

三、实验内容
本实验的任务就是要设计一个可控的脉冲发生器,要求输出的脉冲波的周期和
占空比都可变。具体的实验过程中,时钟信号为板载 50MHz 时钟,然后再使用按
键 KEY2 和 KEY3 来控制脉冲波的频率,每按下 KEY3,N 会在慢速时钟作用下不
断地递减 1,频率增加,按下 KEY2,N 会在慢速时钟作用下不断地递增 1,频率
减小;用 KEY0 和 KEY1 来控制脉冲波的占空比,每按下 KEY1,M 会在慢速时
钟作用下不断地递增 1,占空比增加,每按下 KEY0,M 会在慢速时钟作用下不
断地递减 1,占空比减小。脉冲波的输出直接输出到实验箱的观测引脚,如图 9-1
所示,以便用示波器观察输出波形的改变。

61
第 2章 基础硬件实验部分

图 9-1 示波器信号观察接入引脚(方框内引脚左侧为信号输出,右侧为地)

四、实验步骤
1、打开 Quartus II 软件,新建一个工程。
2、建完工程之后,再新建一个 Verilog HDL File,打开 Verilog
编辑器对话框。
3、按照实验原理和自己的想法,在 Verilog 编辑窗口编写 Verilog
程序,用户可参照光盘中提供的示例程序。
4、编写完 Verilog 程序后,保存起来。方法同实验一。
5、对自己编写的 Verilog 程序进行编译并仿真,对程序的错误进行修改。
6、编译仿真无误后,依照拨动开关、LED 与 FPGA 的管脚连接表进行管脚分
配。表 9-1 是示例程序的管脚分配表。分配完成后,再进行全编译一次,以使管脚
分配生效。
端口名 使用模块信号 对应 FPGA 管脚 说明
clk_sys 数字信号源 PIN_AF14 时钟为 50MHZ
duty_down 按键开关 KEY0 PIN_AA14 频率控制/增加
duty_up 按键开关 KEY1 PIN_AA15 频率控制/减少
freq_down 按键开关 KEY2 PIN_W15 占空比控制/增加
freq_up 按键开关 KEY3 PIN_Y16 占空比控制/减少
o_clk 输出观测模块 PIN_AD20 示波器观测点
表 9-1 端口管脚分配表
7、用下载电缆通过 JTAG 口将对应的 sof 文件加载到 FPGA 中。观察实验结果
是否与自己的编程思想一致。

五、实验结果与现象
以设计的参考示例为例,当设计文件加载到目标器件后,系统输入时钟 50MHz,
在输出观测模块通过示波器可能观测到一个频率约为 1KHZ、占空比为 50%的矩形
波。按下 KEY0 键或者 KEY1 键,这个矩形波的占空比会发生相应的增加或者减少。
按下 KEY2 键或者 KEY3 键,这个矩形波的频率会相应的增加或减少。

62
第 2章 基础硬件实验部分

六、实验报告
1 、绘出仿真波形,并作说明。
2 、在这个实验的基础上重新设计,使程序改变频率的时候不会影响占空比的
改变。
3 、将实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记录下
来。(实验参考程序见光盘 pulse_generator 文件夹)

63
第 2章 基础硬件实验部分

2.10 基于 Verilog 的抢答器的设计

一、实验目的
1、熟悉四人抢答器的工作原理。
2、加深对 Verilog 语言的理解。
3、掌握 EDA 开发的基本流程。

二、实验原理
抢答器在各类竞赛性质的场合得到了广泛的应用,它的出现,消除了原来由于
人眼的误差而未能正确判断最先抢答的人的情况。抢答器的原理比较简单,首先必
须设置一个抢答允许标志位,目的就是为了允许或者禁止抢答者按按钮;如果抢答
允许位有效,那么第一个抢答者按下的按钮就将其清楚,同时记录按钮的序号,也
就是对应的按按钮的人,这样做的目的是为了禁止后面再有人按下按钮的情况。总
的说来,抢答器的实现就是在抢答允许位有效后,第一个按下按钮的人将其清除以
禁止再有按钮按下,同时记录清楚抢答允许位的按钮的序号并显示出来,这就是抢
答器的实现原理。

三、实验内容
本实验的任务是设计一个四人抢答器,用拨码开关的 SW0 来作抢答允许开关,
用 KEY0~KEY3 来表示 1 号抢答者~4 号抢答者,同时用 LED 模块的 LED0~
LED3 分别表示于抢答者对应的位子。具体要求为:将 SW0 拨到高电平,允许一
次抢答,这时 KEY0~KEY3 中第一个按下的按键将抢答允许位清除,同时将对应
的 LED 点亮,用来表示对应的按键抢答成功。数码管显示对应抢答成功者的号码。
在此实验中数码管、LED、按键开关与 FPGA 的连接电路和管脚连接在以前的实
验中都做了详细说明,这里不在赘述。

四、实验步骤
1、打开 Quartus II 软件,新建一个工程。
2、建完工程之后,再新建一个 Verilog HDL File,打开 Verilog 编辑器对话框。
3、按照实验原理和自己的想法,在 Verilog 编辑窗口编写 Verilog 程序,用户可
参照光盘中提供的示例程序。
4、编写完 Verilog 程序后,保存起来。方法同实验一。
5、对自己编写的 Verilog 程序进行编译并仿真,对程序的错误进行修改。
6、编译仿真无误后,依照按键开关、LED、数码管与 FPGA 的管脚连接表
或参照附录进行管脚分配。表 10-1 是示例程序的管脚分配表。分配完成后,
再进行全编译一次,以使管脚分配生效。

64
第 2章 基础硬件实验部分

端口名 使用模块信号 对应 FPGA 管脚 说明


answer_start 拨码开关 SW0 PIN_AB12 开始抢答按键
player0 按键开关 KEY0 PIN_AA14 表示 1 号抢答者
player1 按键开关 KEY1 PIN_AA15 表示 2 号抢答者
player2 按键开关 KEY2 PIN_W15 表示 3 号抢答者
player3 按键开关 KEY3 PIN_Y16 表示 4 号抢答者
o_led0 LED 模块 LEDR0 PIN_V16 1 号抢答者灯
o_led1 LED 模块 LEDR1 PIN_W16 2 号抢答者灯
o_led2 LED 模块 LEDR2 PIN_V17 3 号抢答者灯
o_led3 LED 模块 LEDR3 PIN_V18 4 号抢答者灯
seg_out0 数码管模块 A 段 PIN_AE26
seg_out1 数码管模块 B 段 PIN_AE27
seg_out2 数码管模块 C 段 PIN_AE28
抢答成功者
seg_out3 数码管模块 D 段 PIN_AG27
号码显示
seg_out4 数码管模块 E 段 PIN_AF28
seg_out5 数码管模块 F 段 PIN_AG28
seg_out6 数码管模块 G 段 PIN_AH28
表 10-1 端口管脚分配表
7、用下载电缆通过 JTAG 口将对应的 sof 文件加载到 FPGA 中。观察实验结
果是否与自己的编程思想一致。

五、实验结果与现象
以设计的参考示例为例,当设计文件加载到目标器件后,向上拨动拨码开关
SW0,表示开始抢答,向下拨动拨码开关 SW0,表示复位。然后,同时按下
KEY0-KEY3,首先按下的键的键值被数码管显示出来,对应的 LED 灯被点亮。与
此同时,其它按键失去抢答作用。

六、实验报告
1 、绘出仿真波形,并作说明。
2 、将实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记录下
来。(实验参考程序见光盘 getanswer 文件夹)

65
第 2章 基础硬件实验部分

2.11 基于 Verilog 的表决器的设计

一、实验目的
1 、熟悉 Verilog 的编程。
2 、熟悉七人表决器的工作原理。
3 、进一步了解实验系统的硬件结构。

二、实验原理
所谓表决器就是对于一个行为,由多个人投票,如果同意的票数过半,就认为
此行为可行;否则如果否决的票数过半,则认为此行为无效。
七人表决器顾名思义就是由七个人来投票,当同意的票数大于或者等于 4 时,
则认为同意;反之,当否决的票数大于或者等于 4 时,则认为不同意。实验中用 7
个拨动开关来表示七个人,当对应的拨动开关输入为‘1’时,表示此人同意;否
则若拨动开关输入为‘0’,则表示此人反对。表决的结果用一个 LED 表示,若
表决的结果为同意,则 LED 被点亮;否则,如果表决的结果为反对,则 LED 不会
被点亮。同时,数码管上显示通过的票数。

三、实验内容
本实验就是利用实验系统中的拨动开关模块和 LED 模块以及数码管模块来实
现一个简单的七人表决器的功能。拨动开关模块中的 SW0~SW6 表示七个人,当
拨动开关输入为‘1’时,表示对应的人投同意票,否则当拨动开关输入为‘0’时,
表示对应的人投反对票;LED 模块中 LEDR0 表示七人表决的结果,当 LEDR0 点
亮时,表示此行为通过表决;否则当 LEDR0 熄灭时,表示此行为未通过表决。同
时通过的票数在数码管上显示出来。在此实验中数码管、LED、拨动开关与 FPGA
的连接电路和管脚连接在以前的实验中都做了详细说明,这里不在赘述。

四、实验步骤
1、打开 Quartus II 软件,新建一个工程。
2、建完工程之后,再新建一个 Verilog HDL File,打开 Verilog 编辑器对话框。
3、按照实验原理和自己的想法,在 Verilog 编辑窗口编写 Verilog 程序,用户可
参照光盘中提供的示例程序。
4、编写完 Verilog 程序后,保存起来。方法同实验一。
5、对自己编写的 Verilog 程序进行编译并仿真,对程序的错误进行修改。
6、编译仿真无误后,依照拨动开关、LED、数码管与 FPGA 的管脚连接表进
行管脚分配。表 11-1 是示例程序的管脚分配表。分配完成后,再进行全编译一次,
以使管脚分配生效。

66
第 2章 基础硬件实验部分

端口名 使用模块信号 对应FPGA管脚 说明


Key0 拨动开SW0 PIN_AB12
Key1 拨动开关SW1 PIN_AC12
Key2 拨动开关SW2 PIN_AF9
七位投票人
Key3 拨动开关SW3 PIN_AF10
的表决器
Key4 拨动开关SW4 PIN_AD11
Key5 拨动开关SW5 PIN_AD12
Key6 拨动开关SW6 PIN_AE11
o_led LED模块LEDR0 PIN_V16 表决结果亮为通过
o_smg0 数码管模块A段 PIN_AE26
o_smg1 数码管模块B段 PIN_AE27
o_smg2 数码管模块C段 PIN_AE28
o_smg3 数码管模块D段 PIN_AG27 表决通过的票数
o_smg4 数码管模块E段 PIN_AF28
o_smg5 数码管模块F段 PIN_AG28
o_smg6 数码管模块G段 PIN_AH28
表 11-1 端口管脚分配表
7、用下载电缆通过 JTAG 口将对应的 sof 文件加载到 FPGA 中。观察实验结果
是否与自己的编程思想一致

五、实验结果与现象
以设计的参考示例为例,当设计文件加载到目标器件后,拨动实验系统中拨动
开关模块的 SW0-SW6 七位拨动开关,如果拨动开关的值为“1”(即拨动开关的
开关置于上端,表示此人通过表决)的个数大于或等于四时 LED 模块的 LEDR0 被
点亮,否则 LEDR0 不被点亮。同时数码管上显示通过表决的人数。

六、实验报告
1、绘出仿真波形,并作说明。
2 、将实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记录下
来。
3 、试在此实验的基础上增加一个表决的时间,只的在这一时间内的表决结果
有效。(实验参考程序见光盘 voter)

67
第 2章 基础硬件实验部分

2.12 正负脉宽信号发生器的设计

一、实验目的
1 、在掌握可控脉冲发生器的基础上了解正负脉宽数控调制信号发生的原理。
2 、熟练的运用示波器观察实验箱上的探测点波形。
3 、掌握时序电路设计的基本思想。

二、实验原理
首先详细说明一下正负脉宽数控的原理。所以正负脉宽数控就是直接直接输入
脉冲信号的正脉宽数和负脉宽数,当然,正负脉宽数一旦定下来,脉冲波的周期也
就确定下来了。其次是调制信号,调制信号有很多种,有频率调制、相位调制、幅
度调制等等,本实验中仅对输出的波形进行最简单的数字调制,另外为了 EDA 设
计的灵活性,实验中要求可以输出非调制波形、正脉冲调制和负脉冲调制。非调制
波形就是原始的脉冲波形;正脉冲调制就是在脉冲波输出‘1’的期间用输出另一
个频率的方波,而在脉冲波为‘0’器件还是原始波形;负脉冲调制正好与正脉冲
调制相反,要求在脉冲波输出为‘0’期间输出另外一个频率的方波,而在‘1’期
间则输出原始波形。为了简化实验,此处的调制波形(另外一个频率的方波)就用
原始的时钟信号。其具体的波形如下图 12-1 所示:

图 12-1 调制波形

三、实验内容
本实验的任务是设计一个正负脉宽数控调制信发生器。要求能够输出正负脉宽
数控的脉冲波、正脉冲调制的脉冲波和负脉冲调制的脉冲波形。实验中的时钟信号
选择板载 50MHZ 时钟,用拨码开关 SW0 选择模式,当开关输入为高电平输入时,
输出正脉冲调制波形,当开关输入为低电平时,输出负脉宽调制波形。波形输出至
实验箱观测模块的探针,如图 12-2 所示,以便示波器观察。

图 12-2 示波器信号观察接入引脚(方框内引脚左侧为信号输出,右侧为地)

68
第 2章 基础硬件实验部分

在此实验中拨动开关、按键开关、输出观测端与 FPGA 的连接电路和管脚连接


在以前的实验中都做了详细说明,这里不在赘述。

四、实验步骤
1、打开 Quartus II 软件,新建一个工程。
2、建完工程之后,再新建一个 Verilog HDL File,打开 Verilog 编辑器对话框。
3、按照实验原理和自己的想法,在 Verilog 编辑窗口编写 Verilog 程序,用户可
参照光盘中提供的示例程序。
4、编写完 Verilog 程序后,保存起来。方法同实验一。
5、对自己编写的 Verilog 程序进行编译并仿真,对程序的错误进行修改。
6、编译仿真无误后,依照拨动开关、按键开关、输出观测点与 FPGA 的脚连
接表进行管脚分配。表 12-1 是示例程序的管脚分配表。分配完成后,再进行全编
译一次,以使管脚分配生效。
端口名 使用模块信号 对应FPGA管脚 说明

CLK 数字信号源 PIN_AF14 系统时钟50MHz

MODE 拨码开关SW0 PIN_AB12 输出模式选择

FOUT 观测模块输出 PIN_AD20 调制信号输出

表 12-1 端口管脚分配表
7、用下载电缆通过 JTAG 口将对应的 sof 文件加载到 FPGA 中。观察实验结果
是否与自己的编程思想一致。

五、实验结果及现象
以设计的参考示例为例,当设计文件加载到目标器件后,系统输入时钟 50MHz,
拨动拨码开关,此时输出观测模块用示波器可以观测到一个矩形波。拨码开关 SW0
输入为高电平是,输出波形为正脉冲调制波形,SW0 输入为低电平时,输出波形
为负脉冲调制波形。输出如图 12-1 所示的调制波形

六、实验报告
1 、绘出仿真波形,并作说明。
2 、将实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记录下
来。(实验参考程序见光盘文件夹 signalgenerator)

69
第 2章 基础硬件实验部分

2.13 基于并行 AD 的信号发生器的设计

一、实验目的
1、了解高速 DA 芯片 TLC5602 的工作原理。
2、了解用 DDS 的工作原理。
3、了解对内部 LPM-ROM 模块的调用。

二、实验原理
DA 转换器相对于 AD 转换器在时序上要求相对较低,使用比较简单,在此处
不作详细叙述。本实验要求使用开发平台上现有的并行 D/A 转换器 TLC5602 来产
生四种频率可调的波形:正弦波、方波、三角波。
三角波产生的原理比较简单我们可以采用 0-255-0 的循环加减法计数器来实
现。方波产生的原理是让计数器在 0 和 255 时各保持输出半个周期。正弦波的产
生比较复杂,一般采用查表法来实现,正弦表值可以用 MATLAB,C 等程序语言
生成。在一个周期取样点越多则输出的波形失真度越小,但是点越多存储正弦波表
值所需要的空间就越大,编写就越复杂。在要求不是很严格的情况下取 64 个点就
可以了。
正弦波波形数据 ROM 可以由多种方式实现,如逻辑方式在 FPGA 中实现,或
利用 LPM-ROM 来实现。相比之下, LPM-ROM 实现起来更快,更方便。LPM-ROM
模块只有在含有 EAB 的器件上才能使用。
在这个实验中我们将这三种波形的数据均放入 LPM-ROM 内,我们只需要对
每种波形的起始地址进行控制即可实现对四种波形的控制输出。其实现的框图如图
13-1 所示。

图 13-1 DDS 信号发生器框图

三、实验内容
本实验要求完成的任务是通过对 AD 转换芯片 TLC5602 的控制,输出我们想
要的正弦波、三角波和方波信号。通过按键 KEY0 和 KEY1 对输出波形的频率进
行控制,通过拨动开关 SW0 和 SW1 对输出的波形类别进行控制。
在此实验中按键、拨动开关与 FPGA 的连接电路和管脚连接在以前的实验中都
做了详细说明,这里不在赘述。本实验箱上的 DA 转换电路原理如图 13-2 所示,

70
第 2章 基础硬件实验部分

与 FPGA 的管脚连接如表 13-1 所示。关于 DA 转换器 TLC5602 的详细资料请参考


其数据手册。

图 13-2 DA 转换器 TLC5602 电路原理图

四、实验步骤
1、打开 Quartus II 软件,新建一个工程。
2、建完工程之后,再新建一个 Verilog HDL File,打开 Verilog 编辑器对话框。
3、按照实验原理和自己的想法,在 Verilog 编辑窗口编写 Verilog 程序,用户
可参照光盘中提供的示例程序。示例程序共提供两个 Verilog 源程序。和一个
LPM-ROM 模块。每一个源程序完成一定的功能。其具体的功能如下表 13-1:
文件名称 完成功能

key_ctl.v 在时钟的作用下生成频率的控制信号。

adder.v 通过对地址的控制来控制输出的波形信号的类别

sin.mif 正弦波的波形数据

ramp.mif 三角波的波形数据

squr.mif 方波的波形数据

表 13-1 示例程序功能表
4、编写完两个 Verilog 程序后,保存起来。并生成其功能符号文件,便于以后
调用。方法同实验六。
5、新建一个图形编辑文件,双击工作区,进入 Symbol 对话框,点选 megafunctions
文件夹。如图 13-3 所示。进入如图 13-4 所示的设置界面。

71
第 2章 基础硬件实验部分

图 13-3 Symbol 对话框


6、首先展开 storage 项目下的菜单,选取 LPM-ROM 选项。在右上边选取芯片
的种类和行成的语言的种类和生成文件的文件名,如上图中标记的位置。设置完后
点选“NEXT”按钮进入下一个设置对话框,如图 13-4 所示。

图 13-4 MegaWizard Plug-in Manager 对话框


7、在图 13-4 所示的设置对话框中,在图中标记的位置根据设计的要求进行设
置。本实验中选取的数据为 8 位,共 256 个数据。设置完成后点选“NEXT”按钮,
进入下一个设置对话框,如图 13-5 所示。

72
第 2章 基础硬件实验部分

图 13-5 MegaWizard Plug-in Manager 对话框


8、在图 13-5 所示的设置对话框中,根据设计的需要对其输入、输出端口进行
定义。在本实验中按其默认设置即可,点选“ NEXT”按钮进入下一个设置对话框,
如图 13-6 所示:

图 13-6 MegaWizard Plug-in Manager 对话框


9、图 13-6 是对 LPM-ROM 内的数据文件进行设置。按图中标记的位置,首
先选取“Yes,use this file for memory content data”,这时下方的“File name”由灰
色变成可选的黑色。在“File name”对话框中输入数据文件的路径和文件名称,
也可以通过边上的“Browse”来选择输入的波形数据文件。设置完成后,点选
“NEXT”进入下一个设置对话框,如图 13-7 所示。

73
第 2章 基础硬件实验部分

图 13-7 MegaWizard Plug-in Manager 对话框


10、图 13-7 是设置完成后,软件自动生成的文件,点选“Finish”完成一个
LPM-ROM 宏功能模块的设计与定义。
11、所有模块生成后,在图形编辑工作区,双击工作区会看到已经生成的功能
模块,如图 13-8 所示。

图 13-8 Symbol 对话框


12、按照设计的思想,将三个功能模块连接起来,如图 13-9 所示。

图 13-9 信号发生器的电路图
13、编译仿真无误后,依照按键、拨动开关、数字时钟以及 DA 转换器 TLC5602

74
第 2章 基础硬件实验部分

与 FPGA 的管脚连接表进行管脚分配。表 13-2 是示例程序的管脚分配表。分配完


成后,再进行全编译一次,以使管脚分配生效。
端口名 使用模块信号 对应FPGA管脚 说明
Clk_sys 数字信号源 PIN_AF14 系统时钟50MHz
Rst_n 按键KEY3 PIN_Y16 频率复位
KEY0 按键KEY0 PIN_AA14 波形频率增加
KEY1 按键KEY1 PIN_AA15 波形频率减少
SW0 拨动开关SW0 PIN_AB12 波形选择
SW1 拨动开关SW1 PIN_AC12
Dac_clk DA转换时钟CLK PIN_AA20 DA转换时钟
DATA0 DA转换数据D0 PIN_AK22 DA 转换数据
DATA1 DA转换数据D1 PIN_AJ22
DATA2 DA转换数据D2 PIN_AH22
DATA3 DA转换数据D3 PIN_AG22
DATA4 DA转换数据D4 PIN_AF24
DATA5 DA转换数据D5 PIN_AF23
DATA6 DA转换数据D6 PIN_AE22
DATA7 DA转换数据D7 PIN_AD21
表 13-2 端口管脚分配表
14、用下载电缆通过 JTAG 口将对应的 sof 文件加载到 FPGA 中。察实验结果
是否与自己的编程思想一致。

五、实验结果与现象
以设计的参考示例为例,当设计文件加载到目标器件后,系统的输入时钟为
50MHz,按下按键开关 KEY3,用示波器观察 DA 输入端,会观察到有波形输出。
拨动拨动开关使其改变,输出的波形会发生变化。按动按键开关 SW0 或 SW1,输
出的波形的频率会随按键的按动增加或减少。
SW0 SW1 波形
0 0 正弦波
1 0 三角波
0 1 方波

六、实验报告
1 、绘出仿真波形,并作说明。
2 、将实验原理、设计过程、编译仿真波形和分析结果、硬件测试结记录下来。
(实验参考程序见光盘 DDS 文件夹)

75
第 2章 基础硬件实验部分

2.14 序列检测器的设计

一、实验目的
1、了解序列检测器的工作原理。
2、掌握时序电路设计中状态积的应用。
3、进一步掌握用 Verilog 语言实现复杂时序电路的设计过程。

二、实验原理
序列检测器在很多数字系统中都不可缺少,有其是在通信系统当中。序列检测
器的作用就是从一系列的码流中找出用户希望出现的序列,序列可长可段。比如在
通信系统中,数据流帧头的检测就属于一个序列检测器。序列检测器的类型有很多
种,有逐比特比较的,有逐字节比较的,也有其他的比较方式,实际应用中需要采
用何种比较方式,主要是看序列的多少以及系统的延时要求。现在就逐比特比较的
原理简单的介绍一下。
逐比特比较的序列检测器是在输入一个特定波特率的二进制码流中,每进一个
二进制码,预期望的序列相比较。首先比较第一个码,如果第一个码与期望的序列
的第一个码相同,那么下一个进来的二进制码再和期望的序列的第二个码相比较,
依次比较下去,直到所有的码都和期望的序列相一致,就认为检测到一个期望的序
列。如果检测过程中出现一个码与期望的序列当中对应的码不一样,则从头开始比
较。

三、实验内容
本实验就是要设计一个序列检测器,要求检测的序列长度为 8 位,实验中用拨
挡开关的 SW0~SW7 来作为外部二进制码流的输入,在 FPGA 内部则是逐个比较。
同时用按键模块的 KEY0 来作为一个启动检测信号,每按下 KEY0 一次,检测器
检测一次,如果 SW0~SW7 输入的序列与 Verilog 设计时期望的序列(示例程序
为“00110011”)的一致,则认为检测到一个正确的序列,否则如果有一个不同,
则认为没有检测到正确的序列。另外为了便于观察,序列检测结果用一个 LED 显
示,本实验中用 LED 模块的 LEDR0 来显示,如果检测到正确的序列,则 LED 亮
起,否则 LED 熄灭;用数码管来显示错误码的个数。另外就是序列检测时钟信号
的输入,本实验使板载 50MHZ 时钟。
实验箱中用到的数字时钟、按键开关、LED、数码管与 FPGA 的接口电路,以
及数字时钟源、按键开关、LED、数码管与 FPGA 的管脚连接在以前的实验中都
做了详细说明,这里不在赘述。

四、实验步骤
1、打开 Quartus II 软件,新建一个工程。

76
第 2章 基础硬件实验部分

2、建完工程之后,再新建一个 Verilog HDL File,打开 Verilog 编辑器对


话框。
3、按照实验原理和自己的想法,在 Verilog 编辑窗口编写 Verilog 程序,用户可
参照光盘中提供的示例程序。
4、编写完 Verilog 程序后,保存起来。方法同实验一。
5、对自己编写的 Verilog 程序进行编译并仿真,对程序的错误进行修改。
6、编译仿真无误后,依照拨动开关、LED 与 FPGA 的管脚连接表进行管脚分
配。表 14-1 是示例程序的管脚分配表。分配完成后,再进行全编译一次,以使管
脚分配生效。
端口名 使用模块信号 对应FPGA管脚 说明
Clk_sys 数字信号源 PIN_AF14 时钟为 50MHZ
Rst_n 按键开关KEY0 PIN_AA14 开始检测
key0 拨动开关K1 PIN_AB12 检测数据输入
key1 拨动开关K2 PIN_AC12
key2 拨动开关K3 PIN_AF9
key 3 拨动开关K4 PIN_AF10
key 4 拨动开关K5 PIN_AD11
key 5 拨动开关K6 PIN_AD12
key 6 拨动开关K7 PIN_AE11
key 7 拨动开关K8 PIN_AC9
O_led LED灯LED0 PIN_V16 检测结果输出
O_smg0 数码管A段 PIN_AE26 检测个数显示
O_smg1 数码管B段 PIN_AE27
O_smg2 数码管C段 PIN_AE28
O_smg3 数码管D段 PIN_AG27
O_smg4 数码管E段 PIN_AF28
O_smg5 数码管F段 PIN_AG28
O_smg6 数码管G段 PIN_AH28
表 14-1 端口管脚分配表
7、用下载电缆通过 JTAG 口将对应的 sof 文件加载到 FPGA 中。观察实验
结果是否与自己的编程思想一致。

五、实验结果与现象
以设计的参考示例为例,当设计文件加载到目标器件后,拨动八位拨动开关,
使其为一个数值,按下按键开关的 KEY0 键开始检测。如果与程序设定的值相同,
则 LED 灯模块的 LEDR0 会亮,在数码管上显示“0”。如果与程序设定的值不同,
则 LED 灯模块的 LEDR0 不会亮,在数码管上显示错误的个数。

77
第 2章 基础硬件实验部分

六、实验报告
1、绘出仿真波形,并作说明。
2、将实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记录下
来。
3、增加其它功能,试采用其它方法编写 Verilog 程序。(实验参考程序见光盘
seqcheck 文件夹)

78
第 2章 基础硬件实验部分

2.15 矩阵键盘显示接口电路的设计

一、实验目的
1、了解普通 4×4 键盘扫描的原理。
2、进一步加深七段码管显示过程的理解。
3、了解对输入/输出端口的定义方法。

二、实验原理
实现键盘有两种方案:一是采用现有的芯片实现键盘扫描,如 CH451;再就是
用软件实现键盘扫描。作为一个嵌入系统设计人员,总是会关心产品成本。目前有
很多芯片可以用来实现键盘扫描,但是键盘扫描的软件实现方法有助于缩减一个系
统的重复开发成本,且只需要很少的 CPU 开销。嵌入式控制器的功能能强,可能
充分利用这一资源,这里就介绍一下软键盘的实现方案。

图 15-1 简单键盘电路
通常在一个键盘中使用了一个瞬时接触开关,并且用如图 15-1 所示的简单电
路,微处理器可以容易地检测到闭合。当开关打开时,通过处理器的 I/O 口的一个
上拉电阻提供逻辑 1;当开关闭合时,处理器的/IO 口的输入将被拉低得到逻辑
0。可遗憾的是,开关并不完善,因为当它们被按下或者被释放时,并不能够产生
一个明确的 1 或者 0。尽管触点可能看起来稳定而且很快地闭合,但与微处理器快
速的运行速度相比,这种动作是比较慢的。当触点闭合时,其弹起就像一个球。弹
起效果将产生如图 15-2 所示的好几个脉冲。弹起的持续时间通常将维持在 5ms~
30ms 之间。如果需要多个键,则可以将每个开关连接到微处理器上它自己的输入
端口。然而,当开关的数目增加时,这种方法将很快使用完所有的输入端口。

图 15-2 按键抖动

79
第 2章 基础硬件实验部分

键盘上阵列这些开关最有效的方法(当需要 5 个以上的键时)就形成了一个如
图 15-3 所示的二维矩阵。当行和列的数目一样多时,也就是方型的矩阵,将产生
一个最优化的布列方式(I/O 端被连接的时候)。一个瞬时接触开关(按钮)放置
在每一行与线一列的交叉点。矩阵所需的键的数目显然根据应用程序而不同。每一
行由一个输出端口的一位驱动,而每一列由一个电阻器上拉且供给输入端口一位。

图 15-3 矩阵键盘
键盘扫描的实现过程如下:对于 4×4 键盘,通常连接为 4 行、4 列,因此要
识别按键,只需要知道是哪一行和哪一列即可,为了完成这一识别过程,我们的思
想是,首先固定输出 4 行为高电平,然后输出 4 列为低电平,在读入输出的 4 行的
值,通常高电平会被低电平拉低,如果读入的 4 行均为高电平,那么肯定没有按
键按下,否则,如果读入的 4 行有一位为低电平,那么对应的该行肯定有一个按键
按下,这样便可以获取到按键的行值。同理,获取列值也是如此,先输出 4 列为高
电平,然后在输出 4 行为低电平,再读入列值,如果其中有哪一位为低电平,那么
肯定对应的那一列有按键按下。
获取到行值和列值以后,组合成一个 8 位的数据,根据实现不同的编码在对每
个按键进行匹配,找到键值后在 7 段码管显示。

三、实验内容
本实验要求完成的任务是通过编程实现对 4X4 矩阵键盘按下键的键值的读取。
按键盘的定义,按下“*”键则在数码管是显示“E”键值。按下“#”键在数码管
上显示“F”键值。其它的键则按键盘上的标识进行显示。在此实验中数码管与 FPGA
的连接电路和管脚连接在以前的实验中都做了详细说明,这里不在赘述。本实验箱
上的 4X4 矩阵键盘的电路原理如图 15-4 所示。与 FPGA 的管脚连接如表 15-1 所示。

80
第 2章 基础硬件实验部分

图 15-4 4X4 矩阵键盘电路原理图


信号名称 对应 FPGA 管脚名 说明
Column0 PIN_AK27 钜阵键盘的第 1 列选择
Column 1 PIN_AK28 钜阵键盘的第 2 列选择
Column 2 PIN_AK29 钜阵键盘的第 3 列选择
Column 3 PIN_AG25 钜阵键盘的第 4 列选择
Row0 PIN_AJ27 钜阵键盘的第 1 行选择
Row 1 PIN_AH27 钜阵键盘的第 2 行选择
Row 2 PIN_AH24 钜阵键盘的第 3 行选择
Row3 PIN_AG26 钜阵键盘的第 4 行选择
表 15-1 4X4 矩阵键与 FPGA 的管脚连接表

四、实验步骤
1、打开 Quartus II 软件,新建一个工程。
2、建完工程之后,再新建一个 Verilog HDL File,打开 Verilog 编辑器对话框。
3、按照实验原理和自己的想法,在 Verilog 编辑窗口编写 Verilog 程序,用户
可参照光盘中提供的示例程序。
4、编写完 Verilog 程序后,保存起来。方法同实验一。
5、对自己编写的 Verilog 程序进行编译并仿真,对程序的错误进行修改。
6、编译仿真无误后,依照 4X4 矩阵键、数码管与 FPGA 的管脚连接表进行管
脚分配。表 15-2 是示例程序的管脚分配表。分配完成后,再进行全编译一次,以
使管脚分配生效。
端口名 使用模块信号 对应FPGA管脚 说明
CLK 数字信号源 PIN_AF14 时钟为50MHZ
Column0 钜阵键盘的第 1 列选择 PIN_AK27 钜阵键盘行信
Column 1 钜阵键盘的第 2 列选择 PIN_AK28 号
Column 2 钜阵键盘的第 3 列选择 PIN_AK29
Column 3 钜阵键盘的第 4 列选择 PIN_AG25
Row0 钜阵键盘的第 1 行选择 PIN_AJ27 钜阵键盘列信

81
第 2章 基础硬件实验部分

Row 1 钜阵键盘的第 2 行选择 PIN_AH27 号


Row 2 钜阵键盘的第 3 行选择 PIN_AH24
Row3 钜阵键盘的第 4 行选择 PIN_AG26
HEX0[0] 数码管模块A段 PIN_AE26 键值显示
HEX0[1] 数码管模块B段 PIN_AE27
HEX0[2] 数码管模块C段 PIN_AE28
HEX0[3] 数码管模块D段 PIN_AG27
HEX0[4] 数码管模块E段 PIN_AF28
HEX0[5] 数码管模块F段 PIN_AG28
HEX0[6] 数码管模块G段 PIN_AH28
HEX1[0] 数码管模块A段 PIN_AJ29
HEX1[1] 数码管模块B段 PIN_AH29
HEX1[2] 数码管模块C段 PIN_AH30
HEX1[3] 数码管模块D段 PIN_AG30
HEX1[4] 数码管模块E段 PIN_AF29
HEX1[5] 数码管模块F段 PIN_AF30
HEX1[6] 数码管模块G段 PIN_AD27
HEX2[0] 数码管模块A段 PIN_AB23
HEX2[1] 数码管模块B段 PIN_AE29
HEX2[2] 数码管模块C段 PIN_AD29
HEX2[3] 数码管模块D段 PIN_AC28
HEX2[4] 数码管模块E段 PIN_AD30
HEX2[5] 数码管模块F段 PIN_AC29
HEX2[6] 数码管模块G段 PIN_AC30
HEX3[0] 数码管模块A段 PIN_AD26
HEX3[1] 数码管模块B段 PIN_AC27
HEX3[2] 数码管模块C段 PIN_AD25
HEX3[3] 数码管模块D段 PIN_AC25
HEX3[4] 数码管模块E段 PIN_AB28
HEX3[5] 数码管模块F段 PIN_AB25
HEX3[6] 数码管模块G段 PIN_AB22
HEX4[0] 数码管模块A段 PIN_AA24
HEX4[1] 数码管模块B段 PIN_Y23
HEX4[2] 数码管模块C段 PIN_Y24
HEX4[3] 数码管模块D段 PIN_W22
HEX4[4] 数码管模块E段 PIN_W24
HEX4[5] 数码管模块F段 PIN_V23

82
第 2章 基础硬件实验部分

HEX4[6] 数码管模块G段 PIN_W25


HEX5[0] 数码管模块A段 PIN_V25
HEX5[1] 数码管模块B段 PIN_AA28
HEX5[2] 数码管模块C段 PIN_Y27
HEX5[3] 数码管模块D段 PIN_AB27
HEX5[4] 数码管模块E段 PIN_AB26
HEX5[5] 数码管模块F段 PIN_AA26
HEX5[6] 数码管模块G段 PIN_AA25
表 15-2 端口管脚分配表
7、用下载电缆通过 JTAG 口将对应的 sof 文件加载到 FPGA 中。观察实验结果
是否与自己的编程思想一致。

五、实验结果与现象
以设计的参考示例为例,当设计文件加载到目标器件后,按下矩阵键盘的某一
个键,则在数码管上显示对应的这个键标识的键值。按下“*”键则在数码管是显
示“E”键值。按下“#”键在数码管上显示“F”键值。

六、实验报告
1、绘出不同的键值时的数码管的仿真波形,并作说明。
2、根据自己的思路,找一找还有没有其它方法进行键盘的扫描显示。并画出
流程图。
3 、将实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记录下
来。(实验参考程序见光盘 keyboard 文件夹)

83
第 2章 基础硬件实验部分

2.16 AUDIO 电子音乐实验

一、实验目的
1、了解普通扬声器的工作原理。
2、使用 FPGA 产生不同的音乐频率。
3、进一步体验 FPGA 的灵活性。

二、实验原理
本实验是完成一小段音乐程序的开发,然后再用扬声器进行试听。下面主要介
绍一下完成本实验的几个主要部分的工作原理。
音符的产生:音符的产生是利用计数器对输入的时钟信号进行分频,然后输出
不同的频率来控制扬声器发不同的声音。计数器必须是模可变的计数器,也就是其
初始计数值可变,这样便可以对其进行初始化,使其从不同的初始值开始计数,实
现对输入时钟信号的不同分频。
节拍的产生:节拍也是利用计数器来实现,如果某一个音符需要维持的时间比
较长,那么就可以在此计数器从计数值 A 到计数值 B 之间都维持该音符,很显然,
A 和 B 之间的间隔越大,那么该音符维持的时间也就越长。
乐谱的存储:乐谱是一个固定的组合电路,根据不同的输入值,然后输出一个
固定的值,该值就是音符产生计数器的分频的初始值。适当的选择这些计数器和组
合电路,便可完成不同的乐曲和不同节奏。

三、实验内容
本实验要求完成的任务是通过编程实现一段音乐旋律的循环播放。
在实验平台中的音乐频率信号的输出电路如下图 16-1 所示。与 FPGA 的管脚
连接如表 16-1 所示。

图 16-1 对应 FPGA 管脚名


信号名称 对应FPGA管脚名 说明
SPK PIN_AE18 FPGA输出到SPK
表 16-1 音频输出电路与 FPGA 的管脚连接表

四、实验步骤

84
第 2章 基础硬件实验部分

1、打开 Quartus II 软件,新建一个工程。


2、建完工程之后,再新建一个 Verilog HDL File,打开 Verilog 编辑器对话框。
3、按照实验原理和自己的想法,在 Verilog 编辑窗口编写 Verilog 程序,用户可
参照光盘中提供的示例程序。
4、编写完 Verilog 程序后,保存起来。方法同实验一。
5、对自己编写的 Verilog 程序进行编译并仿真,对程序的错误进行修改。
6、编译仿真无误后,依照点阵、时钟与 FPGA 的管脚连接表行管脚分配。表 16-2
是示例程序在实验系统中的管脚分配表。分配完成后,再进行全编译一次,以使管
脚分配生效。
端口名 使用模块信号 对应FPGA管脚 说明
CLK 数字信号源 PIN_AF14 系统时钟50MHZ
SPK 音乐频率输出模块 PIN_AE18
表 16-2 端口管脚分配表
7、用下载电缆通过 JTAG 口将对应的 sof 文件加载到 FPGA 中。观察实验结果
是否与自己的编程思想一致。

五、实验结果与现象
以设计的参考示例为例,当设计文件加载到目标器件后,在实验平台上的音频
输出模块将会响起一段音乐的旋律。

六、实验报告
1、了解乐曲节拍产生的过程,注意音符的节拍长短的变化是由什么控制的。
2、熟悉音乐编程的过程,填入新的乐曲。
3、试利用 FPGA 的 LPM-ROM 将音乐旋律存放入 ROM,然后再调用的形式编
写程序。
4、绘出仿真波形图,并加以说明。(实验参考程序见光盘 music 文件夹)

85
第 2章 基础硬件实验部分

2.17 直流电机测速控制

一、实验目的
1、掌握直流电机的工作原理。
2、了解开关型霍尔传感器的工作原理和使用方法。
3、掌握电机测速的原理。

二、实验原理
直流电机是我们生活当中常用的一种电子设备。其内部结构如下图 17-1 所示:

图 17-1 直流电机结构图
下面就上图来说明直流电机的工作原理。将直流电源通过电刷接通电枢绕组,
使电枢导体有电流流过,由于电磁作用,这样电枢导体将会产生磁场。同时产生的
磁场与主磁极的的磁场产生电磁力,这个电磁力作用于转子,使转子以一定的速度
开始旋转。这样电机就开始工作。
为了能够测定出电机在单位时间内转子旋转了多少个周期,我们在电机的外部
电路中加入了一个开关型的霍尔原件(44E),同时在电子转子上的转盘上加入了
一个能够使霍尔原件产生输出的带有磁场的磁钢片。当电机旋转时,带动转盘是的
磁钢片一起旋转,当磁钢片旋转到霍尔器件的上方时,可以导致霍尔器件的输出端
高电平变为低电平。当磁钢片转过霍尔器件上方后,霍尔器件的输出端又恢复高电
平输出。这样电机每旋转一周,则会使霍尔器件的输出端产生一个低脉冲,我们就
可以通过检测单位时间内霍尔器件输出端低脉冲的个数来推算出直流电机在单位
时间内的转速。直流电机和开关型霍尔器件的电路原理图如下图 17-2 所示:

86
第 2章 基础硬件实验部分

图 17-2 直流电机、霍尔器件电路图
电机的转速通常是指每分钟电机的转速,也就是单位为 rpm,实际测量过程中,
为了减少转速刷新的时间,通常都是 5~10 秒刷新一次。如果每 6 秒钟刷新一次,
那么相当于只记录了 6 秒钟内的电机转数,把记录的数据乘 10 即得到一分钟的转
速。最后将这个数据在数码管上显示出来。
最后显示的数据因为是将数据乘以 10,也就是将个位数据的后面加上一位来做
个位即可,这一位将一直为 0。如:45*10 变为 450,即为在“45”个位后加了一
位“0”。由此可知,这个电机的转速的误差将是 20 以内。为了使显示的数据能
够在数码管是显示稳定,在这个数据的输出时加入了一个 16 位的锁存器,把锁存
的数据送给数码管显示,这样就来会因为在计数过程中,数据的变化而使数码管显
示不断变化。

三、实验内容
本实验要求完成的任务是通过编程实现电机转数读取,并在数码管上显示。其
读取数据和显示数据的时序关系如下图 17-3 所示:

图 17-3 实验控制信号时序图
在此实验中数码管与 FPGA 的连接电路和管脚连接在以前的实验中都做了详
细说明,这里不在赘述。直流电机和霍尔器件的电路原理如图 16-2 所示。与 FPGA
的管脚连接如表 17-1 所示。
信号名称 对应FPGA管脚名 说明

87
第 2章 基础硬件实验部分

PWM PIN_AE18 PWM信号输入至直流电机


MOTOR-OUT PIN_AE19 霍尔器尔器件输出至FPGA
表 17-1 直流电机、霍尔器件与 FPGA 的管脚连接表

四、实验步骤
1、打开 Quartus II 软件,新建一个工程。
2、建完工程之后,再新建一个 Verilog HDL File,打开 Verilog 编辑器对话框。
3、按照实验原理和自己的想法,在 Verilog 编辑窗口编写 Verilog 程序,用户可
参照光盘中提供的示例程序。示例程序共提供 3 个 Verilog 源程序。每一个源程序
完成一定的功能。其具体的功能如下表 17-2:
文件名称 完成功能
count_ctl.v 测量电机转速
freq_div.v 系统时钟分频,产生电机驱动时钟和数码管扫描时钟
disp.v 显示模块,用于显示电机的转速
表 17-2 示例程序功能表
4、编写完 Verilog 程序后,保存起来。方法同实验一。
5、将自己编写的 Verilog 程序进行编译并生成模块符号文件,并对程序的错
误进行修改,最终所有程序通过编译并生成模块符号文件。其具体方法请参照实验
六。
6、新建一个图形编辑文件,将已生成的模块符号文件放入其中,并根据要求
边接起来。完成后,如下图 17-4 所示:

图 17-4 编辑好的图形设计文件
7、将自己编辑好的的程序进行编译仿真,并对程序的错误进行修改,最终通
过编译。
8、编译仿真无误后,依照直流电机、霍尔器件、数码管与 FPGA 的管脚连接
表行管脚分配。表 17-3 是示例程序的管脚分配表。分配完成后,再进行全编译一
次,以使管脚分配生效。
端口名 使用模块信号 对应 FPGA 管脚 说明
Clk_sys 数字信号源 PIN_AF14 时钟为 50MHZ
Motor_in 直流电机模块 PIN_AE18 脉冲输入
Rst_n 复位信号 PIN_AA14 复位

88
第 2章 基础硬件实验部分

HEX0[0] 数码管模块A段 PIN_AE26 电机转速显示


HEX0[1] 数码管模块B段 PIN_AE27
HEX0[2] 数码管模块C段 PIN_AE28
HEX0[3] 数码管模块D段 PIN_AG27
HEX0[4] 数码管模块E段 PIN_AF28
HEX0[5] 数码管模块F段 PIN_AG28
HEX0[6] 数码管模块G段 PIN_AH28
HEX1[0] 数码管模块A段 PIN_AJ29
HEX1[1] 数码管模块B段 PIN_AH29
HEX1[2] 数码管模块C段 PIN_AH30
HEX1[3] 数码管模块D段 PIN_AG30
HEX1[4] 数码管模块E段 PIN_AF29
HEX1[5] 数码管模块F段 PIN_AF30
HEX1[6] 数码管模块G段 PIN_AD27
HEX2[0] 数码管模块A段 PIN_AB23
HEX2[1] 数码管模块B段 PIN_AE29
HEX2[2] 数码管模块C段 PIN_AD29
HEX2[3] 数码管模块D段 PIN_AC28
HEX2[4] 数码管模块E段 PIN_AD30
HEX2[5] 数码管模块F段 PIN_AC29
HEX2[6] 数码管模块G段 PIN_AC30
HEX3[0] 数码管模块A段 PIN_AD26
HEX3[1] 数码管模块B段 PIN_AC27
HEX3[2] 数码管模块C段 PIN_AD25
HEX3[3] 数码管模块D段 PIN_AC25
HEX3[4] 数码管模块E段 PIN_AB28
HEX3[5] 数码管模块F段 PIN_AB25
HEX3[6] 数码管模块G段 PIN_AB22
HEX4[0] 数码管模块A段 PIN_AA24
HEX4[1] 数码管模块B段 PIN_Y23
HEX4[2] 数码管模块C段 PIN_Y24
HEX4[3] 数码管模块D段 PIN_W22
HEX4[4] 数码管模块E段 PIN_W24
HEX4[5] 数码管模块F段 PIN_V23
HEX4[6] 数码管模块G段 PIN_W25
HEX5[0] 数码管模块A段 PIN_V25
HEX5[1] 数码管模块B段 PIN_AA28

89
第 2章 基础硬件实验部分

HEX5[2] 数码管模块C段 PIN_Y27


HEX5[3] 数码管模块D段 PIN_AB27
HEX5[4] 数码管模块E段 PIN_AB26
HEX5[5] 数码管模块F段 PIN_AA26
HEX5[6] 数码管模块G段 PIN_AA25
表 17-3 端口管脚分配表
9、用下载电缆通过 JTAG 口将对应的 sof 文件加载到 FPGA 中。观察实验结果
是否与自己的编程思想一致

五、实验结果与现象
以设计的参考示例为例,当设计文件加载到目标器件后,将直流电机模块的模
式选择到 GND 模式,旋转改变转速的电位器,使直流电机开始旋转,此时在一定
的时间内,数码管上将显示此时直流电机的每分钟转速。通过电位器慢慢增加或者
减少直流电机的转动速率,此时数码管上的数值也会相应的增加或者减少。

六、实验报告
1 、绘出仿真波形,并作说明。
2 、试编写程序将实验的结果精确到个位。
3、将实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记录下
来。(实验参考程序见光盘 dc_motor 文件夹)

90
第 2章 基础硬件实验部分

2.18 步进电机驱动控制

一、实验目的
1.了解步进电机的工作原理。
2.掌握用 FPGA 产生驱动步进电机的时序。
3.掌握用 FPGA 来控制步进电机转动的整个过程。

二、实验原理
步进电机是工业过程控制及仪表中常用的控制元件之一,例如在机械装置中可
以用丝杆把角度变为直线位移,也可以用步进电机带动螺旋电位器,调节电压或电
源,从而实现对执行机械的控制。步进电机可以直接用数字信号驱动,使用非常方
便。步进电机还具有快速启停、精确步进和定位等特点,因而在数控机床、绘图仪、
打印机以及光学仪器中得到广泛的应用。
步进电机是工业控制及仪表中常用的控制元件之一,例如在机械装置中可以精
确控制机械装置的旋转角度、移动距离等。步进电机可以直接用数字信号来驱动,
使用非常方便。另外步进电机还具有快速起停、精确步进和定位的特点。步进电机
实际上是一个数据/角度转换器,三相步进电机的结构原理如下图 18-1 所示:

图 18-1 三相步进电机的结构示意图
从图中可以看出,电机的定子有六个等分的磁极, A、A’、B、B’、C、C’,
相邻的两个磁极之间夹角为 60°,相对的两个磁极组成一组(A—A’,B—B’,
C—C’),当某一绕组有电流通过时,该绕组相应的两个磁极形成 N 极和 S 极,
每个磁极上各有五个均分布的矩形小齿,电机的转子上有 40 个矩形小齿均匀地分
布在圆周上,相邻两个齿之间夹角为 9°。
⑴当某一相绕组通电时,对应的磁极就产生磁场,并与转子转动一定的角度,
使转子和定子的齿相互对齐。由此可见,错齿是促使步进电机旋转的原因。例如在
三相三拍控制方式中,若 A 相通电,B、C 相都不通电,在磁场作用下使转子齿和
A 相的定子齿对齐,我们以此作为初始状态。设与 A 相磁极中心线对齐的转子的
齿为 0 号齿,由于 B 相磁极与 A 相磁极相差 120°不是 9°的整数倍(120÷
9=13 2/3),所以此时转子齿没有与 B 相定子的齿对应,只是第 13 号小齿靠近
B 相磁极的中心线,与中心线相差 3°,如果此时突然变为 B 相通电,A、C 相

91
第 2章 基础硬件实验部分

不通电,则 B 相磁极迫使 13 号转子齿与之对齐,转子就转动 3°,这样使电机


转子一步。如果按照 A—AB—B—BC—C—CA—A 次序通电则为正转。通常用三
相六拍环形脉冲分配器产生步进脉冲。
⑵运转速度的控制。若改变 ABC 三相绕组高低电平的宽度,就会导致通电和
断电的变化速率变化,使电机转速改变,所以调节脉冲的周期就可以控制步进电机
的运转速度。
⑶旋转的角度控制。因为输入一个 CP 脉冲使步进电机三相绕组状态变化一次,
并相应地旋转一个角度,所以步进电机旋转的角度由输入的 CP 脉冲数确定。本实
验箱所使用步进电机为 4 相步进电机,最小旋转角度为 1.8 度,其正向转动控制时
序如下所示,每一个脉冲控制其转过 1.8 度。

反向转动控制时序如下:

三、实验内容
本实验要完成的任务就是设计步进电机的控制电路。通过一个拨动开关 SW9
来控制步进电机的顺时针和逆时针旋转;通过八个按键开关 SW0-SW7 来控制步进
电机旋转的角度。
在本实验中,用到的模块有数字信号源模块、拨动开关模块、按键开关、步进
电机模块等。其中数字信号源、拨动、按键开关与 FPGA 的连接电路和管脚连接
在以前的实验中都做了详细说明,这里不在赘述。步进电机模块位于实验平台的左
下方,其工作状态通过一个跳线帽来选择。其控制电路如下图 18-2 所示。其与 FPGA
的管脚连接如表 18-1 所示。

92
第 2章 基础硬件实验部分

图 18-2 步进电机驱动电路图
信号名称 对应FPGA管脚名 说明
A PIN_AF21 步进电机的A相输入
B PIN_AG21 步进电机的B相输入
C PIN_AF19 步进电机的C相输入
D PIN_AF18 步进电机的D相输入
表 18-1 步进电机模块接口与 FPGA 的管脚连接表

四、实验步骤
1、打开 Quartus II 软件,新建一个工程。
2、建完工程之后,再新建一个 Verilog HDL File,打开 Verilog 编辑器对话框。
3、按照实验原理和自己的想法,在 Verilog 编辑窗口编写 Verilog 程序,用户可
参照光盘中提供的示例程序。
4、编写完 Verilog 程序后,保存起来。方法同实验一。
5 、将自己编辑好的的程序进行编译仿真,并对程序的错误进行修改,最终通
过编译。
6、编译仿真无误后,依照步进电机、按键、拨动开关与 FPGA 的管脚连接表
进行管脚分配。表 18-2 是示例程序的管脚分配表。分配完成后,再进行全编译一
次,以使管脚分配生效。
端口名 使用模块信号 对应FPGA管脚 说明
Clk_sys 数字时钟模块 PIN_AF14 接1KHZ时钟
Key_dir 拨动开关SW9 PIN_AE12 顺/逆时针控制
Step_out0 步进电机A相 PIN_AF21 步进电机相位
Step_out1 步进电机B相 PIN_AG21 控制信号
Step_out2 步进电机C相 PIN_AF19
Step_out3 步进电机D相 PIN_AF18
SW0 按键开关SW0 PIN_AB12 旋转角度控制
SW1 按键开关SW1 PIN_AC12
SW2 按键开关SW2 PIN_AF9
SW3 按键开关SW3 PIN_AF10

93
第 2章 基础硬件实验部分

SW4 按键开关SW4 PIN_AD11


SW5 按键开关SW5 PIN_AD12
SW6 按键开关SW6 PIN_AE11
SW7 按键开关SW7 PIN_AC9
表 18-2 端口管脚分配表
7、用下载电缆通过 JTAG 口将对应的 sof 文件加载到 FPGA 中。观察实验结果
是否与自己的编程思想一致。

五、实验结果与现象
以设计的参考示例为例,当设计文件加载到目标器件后,拨动拨码开关
SW0-SW7,步进电机将会按照程序设计的相应的步进角度进行旋转。拨动拨动开
关的 SW9,步进电机旋转的方向将会发生改变。
SW0 SW1 SW2 SW3 SW4 SW5 SW6 SW7
1.8° 5.4° 9° 18° 45° 90° 180° 360°

六、实验报告
1、绘出仿真波形,并作说明。
2、将实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记录下
来。(实验参考程序见光盘 step_motor 文件夹)

94
第 2章 基础硬件实验部分

2.19 交通灯控制设计

一、实验目的
1、了解交通灯的燃灭规律。
2、了解交通灯控制器的工作原理。
3、熟悉 Verilog 语言编程,了解实际设计中的优化方案。

二、实验原理
交通灯的显示有很多方式,如十字路口、丁字路口等,而对于同一个路口又有
很多不同的显示要求,比如十字路口,车辆如果只要东西和南北方向通行就很简单,
而如果车子可以左右转弯的通行就比较复杂,本实验仅针对最简单的南北和东西直
行的情况。要完成本实验,首先必须了解交通路灯的燃灭规律。本实验需要用到实
验箱上交通灯模块中的发光二极管,即红、黄、绿各三个。依人们的交通常规,“红
灯停,绿灯行,黄灯提醒”。其交通灯的燃灭规律为:初始态是两个路口的红灯全
亮,之后,东西路口的绿灯亮,南北路口的红灯亮,东西方向通车,延时一段时间
后,东西路口绿灯灭,黄灯开始闪烁。闪烁若干次后,东西路口红灯亮,而同时南
北路口的绿灯亮,南北方向开始通车,延时一段时间后,南北路口的绿灯灭,黄灯
开始闪烁。闪烁若干次后,再切换到东西路口方向,重复上述过程。在实验中使用
8 个七段码管中的任意两个数码管显示时间。东西路和南北路的通车时间均设定为
20s。数码管的时间总是显示为 19、18、17……2、1、0、19、18……。在显示时间
小于 3 秒的时候,通车方向的黄灯闪烁。

三、实验内容
本实验要完成任务就是设计一个简单的交通灯控制器,交通灯显示用实验箱的
交通灯模块和七段码管中的任意两个来显示。系统时钟选择是板载 50MHz 时钟,
七段码管的时间显示为 1Hz 脉冲,即每 1s 中递减一次,在显示时间小于 5 秒的
时候,黄灯亮。系统中用 KEY0 按键进行复位。
实验箱中用到的数字时钟模块、按键开关、数码管与 FPGA 的接口电路,以及
数字时钟源、按键开关、数码管与 FPGA 的管脚连接在以前的实验中都做了详细
说明,这里不在赘述。交通灯模块原理与 LED 灯模块的电路原理一致,当有高电
平输入时 LED 灯就会被点亮,反之不亮。只是 LED 发出的光有颜色之分。其与
FPGA 的管脚连接如下表 19-1 所示:
信号名称 对应FPGA管脚名 说明
R1 PIN_AK19 纵向红色交通信号LED灯
Y1 PIN_AJ17 纵向黄色交通信号LED灯
G1 PIN_AH18 纵向绿色交通信号LED灯
R2 PIN_AG16 横向红色交通信号LED灯

95
第 2章 基础硬件实验部分

Y2 PIN_AF16 横向黄色交通信号LED灯
G2 PIN_AA18 横向绿色交通信号LED灯
19-1 交通灯模块与 FPGA 的管脚连接表

四、实验步骤
1、打开 Quartus II 软件,新建一个工程。
2、建完工程之后,再新建一个 Verilog HDL File,打开 Verilog 编辑器对话
框。
3、按照实验原理和自己的想法,在 Verilog 编辑窗口编写 Verilog 程序,用户可
参照光盘中提供的示例程序。
4、编写完 Verilog 程序后,保存起来。方法同实验一。
5、对自己编写的 Verilog 程序进行编译并仿真,对程序的错误进行修改。直到
完全通过。
6、编译仿真无误后,依照按键开关、数字信号源、数码管与 FPGA 的管脚连
接表行管脚分配。表 19-2 是示例程序的管脚分配表。分配完成后,再进行全编译
一次,以使管脚分配生效。
端口名 使用模块信号 对应FPGA管脚 说明
CLK 数字信号源 PIN_AF14 系统时钟50MHZ
RST 按键开关KEY0 PIN_AA14 复位信号
R1 交通灯模块横向红色 PIN_AK19 交通信号灯
Y1 交通灯模块横向黄色 PIN_AJ17
G1 交通灯模块横向绿色 PIN_AH18
R2 交通灯模块纵向红色 PIN_AG16
Y2 交通灯模块纵向黄色 PIN_AF16
G2 交通灯模块纵向绿色 PIN_AA18
HEX0[0] 数码管模块A段 PIN_AE26 通行时间显示
HEX0[1] 数码管模块B段 PIN_AE27
HEX0[2] 数码管模块C段 PIN_AE28
HEX0[3] 数码管模块D段 PIN_AG27
HEX0[4] 数码管模块E段 PIN_AF28
HEX0[5] 数码管模块F段 PIN_AG28
HEX0[6] 数码管模块G段 PIN_AH28
HEX1[0] 数码管模块A段 PIN_AJ29
HEX1[1] 数码管模块B段 PIN_AH29
HEX1[2] 数码管模块C段 PIN_AH30
HEX1[3] 数码管模块D段 PIN_AG30
HEX1[4] 数码管模块E段 PIN_AF29
HEX1[5] 数码管模块F段 PIN_AF30

96
第 2章 基础硬件实验部分

HEX1[6] 数码管模块G段 PIN_AD27


HEX4[0] 数码管模块A段 PIN_AA24
HEX4[1] 数码管模块B段 PIN_Y23
HEX4[2] 数码管模块C段 PIN_Y24
HEX4[3] 数码管模块D段 PIN_W22
HEX4[4] 数码管模块E段 PIN_W24
HEX4[5] 数码管模块F段 PIN_V23
HEX4[6] 数码管模块G段 PIN_W25
HEX5[0] 数码管模块A段 PIN_V25
HEX5[1] 数码管模块B段 PIN_AA28
HEX5[2] 数码管模块C段 PIN_Y27
HEX5[3] 数码管模块D段 PIN_AB27
HEX5[4] 数码管模块E段 PIN_AB26
HEX5[5] 数码管模块F段 PIN_AA26
HEX4[0] 数码管模块A段 PIN_AA24
19-2 端口管脚分配表
7、用下载电缆通过 JTAG 口将对应的 sof 文件加载到 FPGA 中。观察实验结果
是否与自己的编程思想一致。

五、实验结果与现象
以设计的参考示例为例,当设计文件加载到目标器件后。交通灯模块的红、绿、
黄 LED 发光管会模拟实际中的交通信号灯的变化。此时,数码管上显示通行的时
间的到计时。当到计时到 5 秒时,黄灯开始点亮。到 0 秒时红绿灯开始转换,倒
计时的时间恢复至 29 秒。按下按键开关 KEY0 则从头开始显示和计数。

六、实验报告
1 、绘出仿真波形,并作说明。
2 、试编写能手动控制交通灯通行时间的交通灯控制器。
3 、将实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记录下
来。(实验参考程序见光盘 jiaotongdeng 文件夹)

97
第 2章 基础硬件实验部分

2.20 LCD 液晶显示实验

一、实验目的
1、掌握 FPGA 对 SSD1963 命令控制;
2、掌握液晶屏显示时序;
3、掌握如何在液晶屏上显图片等。

二、实验原理
实验箱上使用的液晶屏为 800×480 彩色屏。该彩屏拥有操作简单、读写速度
快以及显示稳定等优点,它提供一个高速的 16 位总线接口(I/O 命令方式),可
以直接与 MCS51、MCS96、MC68、ARM 以及 DSP 相连。直接输入 X、Y 坐标,
无须计算地址。模块提供字节写、行写和列写三种方式,而且写操作时地址自动加
1,地址加 1 方向可编程,使用非常方便。
该液晶屏采用 SSD1963 控制器驱动,具有触摸驱动功能。SSD1963 是 1215K
字节帧缓冲显示控制器,支持 864X480X24 位图形内容。它也配有不同宽度并行接
口总线来接收图形数据和命令单片机。它的显示界面,支持常见的内存更少的 LCD
驱动器,每一像素的颜色深度可达 24 比特。
SSD1963 的特点:
(1)建于 1215K 字节缓冲帧。支持 864X480 到 24BPP 显示;
(2)支持 8 位串行 RGB 接口;
(3)0,90,180 的硬件旋转,270 度;
(4)硬件显示镜像;
(5)硬件窗口;
(6)可编程的亮度,对比度和饱和度控制;
(7)动态背光控制,通过脉宽调制信号;
(8)单片机的连接;
(9)8/9/16/18/24 位单片机的接口;
(10)撕裂效应信号;
(11)内置时钟发生器;
(12)深睡眠。

三、实验内容
本实验中,将控制液晶屏的读写时序来控制 LCD 的显示,做图形显示。同样
截取一幅 BMP 格式的图片经转换软件格式转换为 mif,通过单端口 RAM 显示图
片。

四、实验步骤

98
第 2章 基础硬件实验部分

1、打开 Quartus II 软件,新建一个工程。


2、建完工程之后,再新建一个 Verilog HDL File,打开 Verilog 编辑器对话
框。
3、按照实验原理和自己的想法,在 Verilog 编辑窗口编写 Verilog 程序,用户可
参照光盘中提供的示例程序。
4、编写完 Verilog 程序后,保存起来。方法同实验一。
5、对自己编写的 Verilog 程序进行编译并仿真,对程序的错误进行修改。直到
完全通过。
6、编译仿真无误后,依照按键开关、数字信号源、数码管与 FPGA 的管脚连
接表行管脚分配。表 20-1 是示例程序的管脚分配表。
端口名 使用模块信号 对应FPGA管脚 说明
CLOCK_50 时钟 PIN_AF14 50MHZ时钟
EN 使能 PIN_AF20 使能TFT
DB15 数据端口 PIN_Y18 液晶屏数据端口
DB14 数据端口 PIN_AK18 -
DB13 数据端口 PIN_AK19 -
DB12 数据端口 PIN_AJ17 -
DB11 数据端口 PIN_AH18 -
DB10 数据端口 PIN_AG16 -
DB9 数据端口 PIN_AF16 -
DB8 数据端口 PIN_AA18 -
DB7 数据端口 PIN_AE16 -
DB6 数据端口 PIN_AG17 -
DB5 数据端口 PIN_AA19 -
DB4 数据端口 PIN_AC20 -
DB3 数据端口 PIN_AJ20 -
DB2 数据端口 PIN_AK21 -
DB1 数据端口 PIN_AD19 -
DB0 数据端口 PIN_AD20 -
Reset 复位 PIN_AA14 液晶屏复位
CS 片选 PIN_Y17 液晶屏片选
RD 读数据 PIN_AE17 液晶屏读数据
WR 写数据 PIN_AH19 液晶屏写数据
RS 数据/指令 PIN_AH20 液晶屏写数据/指令
表 20-1 管脚分配表

五、实验结果与现象
经程序编译成可执行文件,并拷贝到试验箱上运行该可执行文件。可以发现屏

99
第 2章 基础硬件实验部分

幕上显示一幅图片。

六、实验报告
观察实验现象,并作说明。在这个实验的基础上重新设计,利用试验箱上的资
源如 RTC 以及 EEPROM 矩阵键盘等,可以把相关的芯片的数据采集显示到 LCD
上。(实验参考程序见光盘 lcd_rtc 文件夹)

100
第 3章 综合应用实验部分

第 3 章 综合应用实验部分

3.1 数字频率计的设计

一、实验目的
1 、了解等精度测频的方法和原理。
2、掌握如何在 FPGA 内部设计多种功能模块。
3、掌握 Verilog 在测量模块设计方面的技巧。

二、实验原理
所谓频率就是周期性信号在单位时间(1s)内变化的次数。若在一定时间间隔 T
(也称闸门时间)内测得这个周期性信号的重复变化次数为 N,则其频率可表示
为 f=N/T
由上面的表示式可以看到,若时间间隔 T 取 1s,则 f=N。由于闸门的起始
和结束的时刻对于信号来说是随机的,将会有一个脉冲周期的量化误差。进一步分
析测量准确度:设待测信号脉冲周期为 Tx,频率为 Fx,当测量时间为 T=1s 时,
测量准确度为 δ=Tx/T=1/Fx。由此可知这种直接测频法的测量准确度与被测信号
的频率有关,当待测信号频率较高时,测量准确度也较高,反之测量准确度较低。
因此,这种直接测频法只适合测量频率较高的信号,不能满足在整个测量频段内的
测量精度保持不变的要求。若要得到在整个测量频段内的测量精度保持不变的要
求,应该考虑待精度频率测量等其它方法。
等精度频率测频的实现方法,可以用图 31-1 所示的框图来实现。

图 31-1 等精度测频实现框图
所谓等精度是指该频率计在所测量的整个频段内部,均可实现相同精度的测
量,即测量精度与频率无关。图中预置门信号通常为 1s。其内部包括一个同步门
电路,用来实现被测频标与被测频率的同步,提高测量精度,减少基本误差。该部
分与清零脉冲协调工作用来控制两个计数器的启动脉冲。计数器 1 和计数器 2 分

101
第 3章 综合应用实验部分

别用来给频标和被测数字脉冲计数,设在同步门控制结束时计数器 1 计数 N1,计
数器 2 计数 N2,假设频标频率为 F1,被测频率位 Fx,则可写出公式:
Fx/N2=F1/N1;…………………(1)
Fx=(F1/N1)* N2……………(2)
由公式可以看出,测量精度与预置门时间无关,主要由 F1 的频率稳定度来确
定,所以为了提高测量精度,主要是提高频标的频率稳定度,换句话说,测量精度
基本上近似于频标的稳定度,若频标的稳定度位 10,则测量误差边可达到 10。在
该电路中,为了确保频标计数与被测频率完全同步(即被测频率的上升沿开始计数,
1s 以后,被测频率的下跳沿停止计数),同步门必须由被测信号来控制,设计方法
多种多样,可由学生独立完成。
本实验采用直接测频法进行频率测量。闸门时间固定为 1s,闸门信号是一个
0.5Hz 的方波,在闸门有效(高电平)期间,对输入的脉冲进行计数,在闸门信号
的下降沿时刻,所存当前的计数值,并且清零所有的频率计数器。由于闸门时间是
1s(0.5Hz 方波),所以显示的频率是 1s 钟更新一次,且显示的内容是闸门下
降沿时锁存的值。
因为闸门时间我们设定为 1s,所以这种频率计仅能测出频率大于或者等于
1Hz 的情况,且频率越高,精度也越高。实际应用中,频率计的闸门时间是个可变
量,当频率小于 1Hz 是,闸门时间就要适当放大。采用一个标准的时钟,在单位
时间内如:0.1 秒对被测信号的脉冲进行计数,即为信号的频率。
在设计频率计的时候,八个七段码管最多可以显示 99,999,999Hz,因此在设计
时候用八个 4 位二进制码(BCD 码)来表示,另外还必须有同样的八个 4 位二
进制码来对输入的频率进行计数,在闸门下降沿的时候,将后者的值锁存到寄存器
中。其信号的时序关系如下图 31-2 所示:

图 31-2 控制信号时序关系

三、实验内容
本实验要完成的任务就是设计一个频率计,系统时钟选择核心板上的 50MHz
的时钟,闸门时间为 1s(通过对系统时钟进行分频得到),在闸门为高电平期间,
对输入的频率进行计数,当闸门变低的时候,记录当前的频率值,并将频率计数器
清零,频率的显示每过 2 秒刷新一次。

102
第 3章 综合应用实验部分

在本实验中,用到的模块有数字信号源模块、拨动开关模块、 50MHz 系统时


钟源、数码管显示模块等。其中数码管、数字信号源、拨动开关与 FPGA 的连接
电路和管脚连接在以前的实验中都做了详细说明,这里不在赘述。50MHz 系统时
钟源的模块位于核心板上的一个贴片的 50MHz 有源晶体来产生 50MHZ 的时钟信
号,详细说明请参阅用户使用手册。其与 FPGA 的管脚连接如表 31-1 所示。
信号名称 对应FPGA管脚名 说明
系统时钟源 PIN_AF14 50MHZ系统时钟
表 31-1 50MHz 系统时钟与 FPGA 的管脚连接表

四、实验步骤
1、打开 Quartus II 软件,新建一个工程。
2、建完工程之后,再新建一个 Verilog HDL File,打开 Verilog 编辑器对话框。
3、按照实验原理和自己的想法,在 Verilog 编辑窗口编写 Verilog 程序,用户
可参照光盘中提供的示例程序。示例程序共提供 3 个 Verilog 源程序。每一个源
程序完成一定的功能。其具体的功能如下表 31-2:
文件名称 完成功能
measure_fre.v 测频模块,用于测量输入信号的频率
freq_div.v 分频产生闸门信号和数码管显示扫描信号
disp.v 显示模块,测量频率后显示信号的频率
表 31-2 示例程序功能表
4、编写完 Verilog 程序后,保存起来。方法同实验一。
5、将自己编写的 Verilog 程序进行编译并生成模块符号文件,并对程序的错
误进行修改,最终所有程序通过编译并生成模块符号文件。其具体方法请参照实验
六。
6、新建一个图形编辑文件,将已生成的模块符号文件放入其中,并根据要求
边接起来。
7、将自己编辑好的的程序进行编译仿真,并对程序的错误进行修改,最终通
过编译。
8、编译仿真无误后,依照直流电机、霍尔器件、数码管与 FPGA 的管脚连接
表进行管脚分配。表 31-3 是示例程序的管脚分配表。分配完成后,再进行全编译
一次,以使管脚分配生效。
端口名 使用模块信号 对应FPGA管脚 说明
Clk_sys 50M系统时钟 AF14 DE1-SOC系统时钟
Fx_in 输入输出观测模块 AC18 外部被测时钟输入
Rst_n 复位按键KEY0 AA14 复位按键
HEX0[0] 数码管模块A段 PIN_AE26 被测信号频率显示
HEX0[1] 数码管模块B段 PIN_AE27
HEX0[2] 数码管模块C段 PIN_AE28

103
第 3章 综合应用实验部分

HEX0[3] 数码管模块D段 PIN_AG27


HEX0[4] 数码管模块E段 PIN_AF28
HEX0[5] 数码管模块F段 PIN_AG28
HEX0[6] 数码管模块G段 PIN_AH28
HEX1[0] 数码管模块A段 PIN_AJ29
HEX1[1] 数码管模块B段 PIN_AH29
HEX1[2] 数码管模块C段 PIN_AH30
HEX1[3] 数码管模块D段 PIN_AG30
HEX1[4] 数码管模块E段 PIN_AF29
HEX1[5] 数码管模块F段 PIN_AF30
HEX1[6] 数码管模块G段 PIN_AD27
HEX2[0] 数码管模块A段 PIN_AB23
HEX2[1] 数码管模块B段 PIN_AE29
HEX2[2] 数码管模块C段 PIN_AD29
HEX2[3] 数码管模块D段 PIN_AC28
HEX2[4] 数码管模块E段 PIN_AD30
HEX2[5] 数码管模块F段 PIN_AC29
HEX2[6] 数码管模块G段 PIN_AC30
HEX3[0] 数码管模块A段 PIN_AD26
HEX3[1] 数码管模块B段 PIN_AC27
HEX3[2] 数码管模块C段 PIN_AD25
HEX3[3] 数码管模块D段 PIN_AC25
HEX3[4] 数码管模块E段 PIN_AB28
HEX3[5] 数码管模块F段 PIN_AB25
HEX3[6] 数码管模块G段 PIN_AB22
HEX4[0] 数码管模块A段 PIN_AA24
HEX4[1] 数码管模块B段 PIN_Y23
HEX4[2] 数码管模块C段 PIN_Y24
HEX4[3] 数码管模块D段 PIN_W22
HEX4[4] 数码管模块E段 PIN_W24
HEX4[5] 数码管模块F段 PIN_V23
HEX4[6] 数码管模块G段 PIN_W25
HEX5[0] 数码管模块A段 PIN_V25
HEX5[1] 数码管模块B段 PIN_AA28
HEX5[2] 数码管模块C段 PIN_Y27
HEX5[3] 数码管模块D段 PIN_AB27
HEX5[4] 数码管模块E段 PIN_AB26

104
第 3章 综合应用实验部分

HEX5[5] 数码管模块F段 PIN_AA26


HEX5[6] 数码管模块G段 PIN_AA25
表 31-3 端口管脚分配表
9、用下载电缆通过 JTAG 口将对应的 sof 文件加载到 FPGA 中。观察实验
结果是否与自己的编程思想一致。

五、实验结果与现象
以设计的参考示例为例,当设计文件加载到目标器件后,从输入输出观测引脚
的输入端(如图 31-3 所示)输入一个频率大于 1HZ 的时钟信号,这时在数码管上
显示这个时钟信号的频率值。如果使拨动开关置为低电平,数码管上显示的值为系
统上的数字信号源的时钟的频率值。改变数字信号源的时钟,看显示的值是否与标
值一致。

图 31-3 信号源接入引脚(方框内引脚左侧为信号输入,右侧为地)

六、实验报告
1 、绘出仿真波形,并作说明。
2 、根据前面介绍的等精度频率计的实现方法,写出等精度频率计的 Verilog
代码。
3 、将实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记录下
来。(实验代码见光盘 pinlvji 文件夹)

105
第 3章 综合应用实验部分

3.2 多功能数字钟的设计

一、实验目的
1、了解数字钟的工作原理。
2、进一步熟悉用 Verilog 语言编写驱动七段码管显示的代码。
3、掌握 Verilog 编写中的一些小技巧。

二、实验原理
多功能数字钟应该具有的功能有:显示时-分-秒、整点报时、小时和分钟可
调等基本功能。首先要知道钟表的工作机理,整个钟表的工作应该是在 1Hz 信号
的作用下进行,这样每来一个时钟信号,秒增加 1 秒,当秒从 59 秒跳转到 00
秒时,分钟增加 1 分,同时当分钟从 59 分跳转到 00 分时,小时增加 1 小时,但
是需要注意的是,小时的范围是从 0~23 时。
在实验中为了显示的方便,由于分钟和秒钟显示的范围都是从 0~59,所以可
以用两个数码管分别显示十位和个位,对于小时因为它的范围是从 0~23,同样用
两个数码管分别显示十位和个位。
对于整点报时功能,用户可以根据系统的硬件结构和自身的具体要求来设计。
本实验设计的是当进行整点的倒计时 5 秒时,让 LED 来闪烁和喇叭发声进行整点
报时的提示。

三、实验内容
本实验的任务就是设计一个多功能数字钟,要求显示格式为小时-分钟-秒
钟,整点报时,报时时间为 5 秒,即从整点前 5 秒钟开始进行报时提示,喇叭开
始发声,直到过整点时,在整点前 5 秒 LED 开始闪烁,过整点后,停止闪烁。系
统时钟选择 50MHz 时钟,要得到 1Hz 时钟信号,必须对系统时钟进行 50,000,000
次分频。调整时间的的按键用按键模块的 KEY2 和 KEY3,KEY3 调节小时,每
按下一次,小时增加一个小时,KEY2 调整分钟,每按下一次,分钟增加一分钟。
另外用 KEY0 按键作为系统时钟复位,复位后全部显示 00-00-00。实验箱中
用到的数字时钟模块、按键开关、LED、数码管与 FPGA 的接口电路,以及数字
时钟源、按键开关、LED、数码管与 FPGA 的管脚连接在以前的实验中都做了详
细说明,这里不在赘述。

四、实验步骤
1、打开 Quartus II 软件,新建一个工程。
2、建完工程之后,再新建一个 Verilog File,打开 Verilog 编辑器对话框。
3、按照实验原理和自己的想法,在 Verilog 编辑窗口编写 Verilog 程序,用户

106
第 3章 综合应用实验部分

可参照光盘中提供的示例程序。
4、编写完 Verilog 程序后,保存起来。方法同实验一。
5、对自己编写的 Verilog 程序进行编译并仿真,对程序的错误进行修改,直
到完全通过编译和仿真。
6、编译仿真无误后,依照按键开关、数码管、LED 灯与 FPGA 的管脚连接
表进行管脚分配。表 32-1 是示例程序的管脚分配表。分配完成后,再进行全编译
一次,以使管脚分配生效。
端口名 使用模块信号 对应 FPGA 管脚 说明
Clk_sys 数字信号源 PIN_AF14 时钟为 50MHZ
Key_en 使能时间调整 PIN_AB12 使能
Key_h 按键开关 KEY3 PIN_Y16 调整小时
Key_m 按键开关 KEY2 PIN_W15 调整分钟
Rst_n 按键开关 KEY0 PIN_AA14 复位
BEEP 喇叭模块 PIN_AC23 整点发声
LED0 LED 灯模块 LEDR0 PIN_V16 整点闪烁
LED1 LED 灯模块 LEDR1 PIN_W16
LED2 LED 灯模块 LEDR2 PIN_V17
LED3 LED 灯模块 LEDR3 PIN_V18
HEX0[0] 数码管模块A段 PIN_AE26 时间显示
HEX0[1] 数码管模块B段 PIN_AE27
HEX0[2] 数码管模块C段 PIN_AE28
HEX0[3] 数码管模块D段 PIN_AG27
HEX0[4] 数码管模块E段 PIN_AF28
HEX0[5] 数码管模块F段 PIN_AG28
HEX0[6] 数码管模块G段 PIN_AH28
HEX1[0] 数码管模块A段 PIN_AJ29
HEX1[1] 数码管模块B段 PIN_AH29
HEX1[2] 数码管模块C段 PIN_AH30
HEX1[3] 数码管模块D段 PIN_AG30
HEX1[4] 数码管模块E段 PIN_AF29
HEX1[5] 数码管模块F段 PIN_AF30
HEX1[6] 数码管模块G段 PIN_AD27
HEX2[0] 数码管模块A段 PIN_AB23
HEX2[1] 数码管模块B段 PIN_AE29
HEX2[2] 数码管模块C段 PIN_AD29
HEX2[3] 数码管模块D段 PIN_AC28
HEX2[4] 数码管模块E段 PIN_AD30

107
第 3章 综合应用实验部分

HEX2[5] 数码管模块F段 PIN_AC29


HEX2[6] 数码管模块G段 PIN_AC30
HEX3[0] 数码管模块A段 PIN_AD26
HEX3[1] 数码管模块B段 PIN_AC27
HEX3[2] 数码管模块C段 PIN_AD25
HEX3[3] 数码管模块D段 PIN_AC25
HEX3[4] 数码管模块E段 PIN_AB28
HEX3[5] 数码管模块F段 PIN_AB25
HEX3[6] 数码管模块G段 PIN_AB22
HEX4[0] 数码管模块A段 PIN_AA24
HEX4[1] 数码管模块B段 PIN_Y23
HEX4[2] 数码管模块C段 PIN_Y24
HEX4[3] 数码管模块D段 PIN_W22
HEX4[4] 数码管模块E段 PIN_W24
HEX4[5] 数码管模块F段 PIN_V23
HEX4[6] 数码管模块G段 PIN_W25
HEX5[0] 数码管模块A段 PIN_V25
HEX5[1] 数码管模块B段 PIN_AA28
HEX5[2] 数码管模块C段 PIN_Y27
HEX5[3] 数码管模块D段 PIN_AB27
HEX5[4] 数码管模块E段 PIN_AB26
HEX5[5] 数码管模块F段 PIN_AA26
HEX5[6] 数码管模块G段 PIN_AA25
表 32-1 端口管脚分配表
7、用下载电缆通过 JTAG 口将对应的 sof 文件加载到 FPGA 中。观察实验结果
是否与自己的编程思想一致。

五、实验结果与现象
以设计的参考示例为例,当设计文件加载到目标器件后,系统的输入时钟为
50MHZ,数码管开始显示时间,从 00-00-00 开始。在整点的前 10 秒,在偶数秒喇
叭开始发声进行报时,在整点的前 5 秒的时候,LED 灯模块的 LEDR0-LEDR3 开
始闪烁。一旦超过整点,喇叭停止发声,LED 停止显示。按动按键开关的 KEY1、
KEY2 小时和分钟开始步进,进行时间的调整。按下按键开关的 KEY0,显示恢复
到 00-00-00 重新开始显示时间。

六、实验报告
1 、绘出仿真波形,并作说明。
2 、将实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记录下

108
第 3章 综合应用实验部分

来。
3、在此实验的基础上试用其它的方法来实现数字钟的功能,并增加其它功能。
(实验程序见光盘 shuzizhong 文件夹)

109
第 3章 综合应用实验部分

3.3 数字秒表的设计

一、实验目的
1、了解数字秒表的工作原理。
2、进一步熟悉用 Verilog 语言编写驱动七段码管显示的代码。
3、掌握 Verilog 编写中的一些小技巧。

二、实验原理
秒表由于其计时精确,分辨率高(0.01 秒),在各种竞技场所得到了广泛的应
用。秒表的工作原理与实验十五的多功能时钟基本相同,唯一不同的是,由于秒表
的计时时钟信号,由于其分辨率为 0.01 秒,所以整个秒表的工作时钟是在 100Hz
的时钟信号下完成。当秒表的计时小于 1 个小时时,显示的格式是 mm-ss-xx(mm
表示分钟:0~59;ss 表示秒:0~59;xx 表示百分之一秒:0~99),当秒表的计
时大于或等于一个小时时,显示的和多功能时钟是一样的,就是 hh-mm-ss(hh
表示小时:0~99),由于秒表的功能和钟表有所不同,所以秒表的 hh 表示的范
围不是 0~23,而是 0~99,这也是和多功能时钟不一样的地方。在设计秒表的时
候,时钟的选择为 100Hz。变量的选择:因为 xx(0.01 秒)和 hh(小时)表示的
范围都是 0~99,所以用两个 4 为二进制码(BCD 码)表示;而 ss(秒钟)和 mm
(分钟)表示的范围是 0~59,所以用一个 3 位的二进制码和一个 4 位的二进制
码(BCD)码表示。显示的时候要注意的问题就是小时的判断,如果小时是 00,
则显示格式为 mm-ss-xx,如果小时不为 00,则显示 hh-mm-ss。

三、实验内容
本实验的任务就是设计一个秒表,系统时钟为 50MHz,由于计时时钟信号为
100Hz,因此需要对系统时钟进行分频才能得到。另外为了控制方便,需要一个复
位按键、启动计时按键和停止计时按键,分别选用实验箱按键模块的 KEY0、KEY1
和 KEY2,按下 KEY0,系统复位,所有寄存器全部清零;按下 KEY1,秒表启
动计时;按下 KEY2,秒表停止计时,并且七段码管显示当前计时时间,如果再次
按下 KEY1,秒表继续计时,除非按下 KEY0,系统才能复位,显示全部为 00-00
-00。
实验箱中用到的数字时钟模块、按键开关、LED、数码管与 FPGA 的接口电路,
以及数字时钟源、按键开关、LED、数码管与 FPGA 的管脚连接在以前的实验中
都做了详细说明,这里不在赘述。

四、实验步骤
1、打开 Quartus II 软件,新建一个工程。

110
第 3章 综合应用实验部分

2、建完工程之后,再新建一个 Verilog HDL File,打开 Verilog 编辑器对


话框。
3、按照实验原理和自己的想法,在 Verilog 编辑窗口编写 Verilog 程序,用户
可参照光盘中提供的示例程序。
4、编写完 Verilog 程序后,保存起来。方法同实验一。
5、对自己编写的 Verilog 程序进行编译并仿真,对程序的错误进行修改。
6、编译仿真无误后,依照拨动开关、LED 与 FPGA 的管脚连接表或参照附
录进行管脚分配。表 33-1 是示例程序的管脚分配表。分配完成后,再进行全编译
一次,以使管脚分配生效。
端口名 使用模块信号 对应 FPGA 管脚 说明
Clk_sys 数字信号源 PIN_AF14 时钟为 50MHZ
key0 按键开关 START(KEY1) AA15 秒表开始计数
key1 按键开关 OVER(KEY2) W15 秒表停止计数
Rst_n 按键开关 KEY0 AA14 复位信号
HEX0[0] 数码管模块A段 PIN_AE26 秒表计数结果
HEX0[1] 数码管模块B段 PIN_AE27 输出
HEX0[2] 数码管模块C段 PIN_AE28
HEX0[3] 数码管模块D段 PIN_AG27
HEX0[4] 数码管模块E段 PIN_AF28
HEX0[5] 数码管模块F段 PIN_AG28
HEX0[6] 数码管模块G段 PIN_AH28
HEX1[0] 数码管模块A段 PIN_AJ29
HEX1[1] 数码管模块B段 PIN_AH29
HEX1[2] 数码管模块C段 PIN_AH30
HEX1[3] 数码管模块D段 PIN_AG30
HEX1[4] 数码管模块E段 PIN_AF29
HEX1[5] 数码管模块F段 PIN_AF30
HEX1[6] 数码管模块G段 PIN_AD27
HEX2[0] 数码管模块A段 PIN_AB23
HEX2[1] 数码管模块B段 PIN_AE29
HEX2[2] 数码管模块C段 PIN_AD29
HEX2[3] 数码管模块D段 PIN_AC28
HEX2[4] 数码管模块E段 PIN_AD30
HEX2[5] 数码管模块F段 PIN_AC29
HEX2[6] 数码管模块G段 PIN_AC30
HEX3[0] 数码管模块A段 PIN_AD26
HEX3[1] 数码管模块B段 PIN_AC27

111
第 3章 综合应用实验部分

HEX3[2] 数码管模块C段 PIN_AD25


HEX3[3] 数码管模块D段 PIN_AC25
HEX3[4] 数码管模块E段 PIN_AB28
HEX3[5] 数码管模块F段 PIN_AB25
HEX3[6] 数码管模块G段 PIN_AB22
HEX4[0] 数码管模块A段 PIN_AA24
HEX4[1] 数码管模块B段 PIN_Y23
HEX4[2] 数码管模块C段 PIN_Y24
HEX4[3] 数码管模块D段 PIN_W22
HEX4[4] 数码管模块E段 PIN_W24
HEX4[5] 数码管模块F段 PIN_V23
HEX4[6] 数码管模块G段 PIN_W25
HEX5[0] 数码管模块A段 PIN_V25
HEX5[1] 数码管模块B段 PIN_AA28
HEX5[2] 数码管模块C段 PIN_Y27
HEX5[3] 数码管模块D段 PIN_AB27
HEX5[4] 数码管模块E段 PIN_AB26
HEX5[5] 数码管模块F段 PIN_AA26
HEX5[6] 数码管模块G段 PIN_AA25
表 33-1 端口管脚分配表
7、用下载电缆通过 JTAG 口将对应的 sof 文件加载到 FPGA 中。观察实验结果
是否与自己的编程思想一致。

五、实验结果与现象
以设计的参考示例为例,当设计文件加载到目标器件后,按下开始按键(按键
开关 KEY1),设计的数字秒表从 00-00-00 开始计秒。直到按下停止按键(按键开
关 KEY2),数码管停止计秒。按下开始按键(按键开关 KEY1),数码管继续进
行计秒。按下复位按键(按键开关 KEY0)秒表从 00-00-00 重新开始计秒。

六、实验报告
1、绘出仿真波形,并作说明。
2、将实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记录下
来。(实验代码见光盘 miaobiao 文件夹)

112
第 3章 综合应用实验部分

3.4 出租车计费器的设计

一、实验目的
1、了解出租车计费器的工作原理。
2、学会用 Verilog 语言编写正确的七段码管显示程序。
3、掌握用 Verilog 编写复杂功能模块。
4、进一步数量状态积在系统设计中的应用。

二、实验原理
出租车计费器一般都是按公里计费,通常是起步价 xx 元(xx 元可以行走 x 公
里),然后再是 xx 元/公里。所以要完成一个出租车计费器,就要有两个计数单位,
一个用来计公里,另外一个用来计费用。通常在出租车的轮子上都有传感器,用来
记录车轮转动的圈数,而车轮子的周长是固定的,所以知道了圈数自然也就知道了
里程。在这个实验中,就要模拟出租车计费器的工作过程,用直流电机模拟出租车
轮子,通过传感器,可以得到电机每转一周输出一个脉冲波形。结果的显示用 8
个七段码管,前四个显示里程,后四个显示费用。在设计 Verilog 程序时,首先在
复位信号的作用下将所有用到的寄存器进行清零,然后开始设定到起步价记录状
态,在此状态时,在起步价规定的里程里都一直显示起步价,直到路程超过起步价
规定的里程时,系统转移到每公里计费状态,此时每增加一公里,计费器增加相应
的费用。另外讲一讲编写过程中的的一些小技巧。为了便于显示,在编写过程中的
数据用 BCD 码来显示,这样就不存在数据格式转换的问题。比如表示一个三位
数,那么就分别用四位二进制码来表示,当个位数字累加大于 9 时,将其清零,
同时十位数字加 1,依此类推。

三、实验内容
本实验要完成的任务就是设计一个简单的出租车计费器,要求是起步价 3 元,
准行 1 公里,以后 1 元/公里。显示部分的七段码管扫描时钟选择时钟模块的 1KHz,
电机模块的跳线选择 GND 端,这样通过旋钮电机模块的电位器,即可达到控制电
机转速的目的。另外用按键模块的 KEY0 来作为整个系统的复位按钮,每复位一次,
计费器从头开始计费。直流电机用来模拟出租车的车轮子,每转动一圈认为是行走
1 米,所以每旋转 1000 圈,认为车子前进 1 公里。系统设计是需要检测电机的转
动情况,每转一周,计米计数器增加 1。七段码管显示要求为前 4 个显示里程,后
3 个显示费用。
实验箱中用到的数字时钟模块、按键开关、直流电机模块、数码管与 FPGA 的
接口电路,以及数字时钟源、按键开关、LED、数码管与 FPGA 的管脚连接在以
前的实验中都做了详细说明,这里不在赘述。

四、实验步骤
113
第 3章 综合应用实验部分

1、打开 Quartus II 软件,新建一个工程。


2、建完工程之后,再新建一个 Verilog HDL File,打开 Verilog 编辑器对
话框。
3、按照实验原理和自己的想法,在 Verilog 编辑窗口编写 Verilog 程序,用户
可参照光盘中提供的示例程序。
4、编写完 Verilog 程序后,保存起来。方法同实验一。
5、对自己编写的 Verilog 程序进行编译并仿真,对程序的错误进行修改。
6、编译仿真无误后,依照拨动开关、LED 与 FPGA 的管脚连接表行管脚分
配。表 34-1 是示例程序的管脚分配表。分配完成后,再进行全编译一次,以使管
脚分配生效。
端口名 使用模块信号 对应 FPGA 管脚 说明
Clk_sys 数字信号源 PIN_AF14 系统时钟 50MHz
Pulse_in 霍尔传感器 PIN_AE19 脉冲输入
Rst_n 按键 KEY0 PIN_AA14 复位信号
HEX0[0] 数码管模块A段 PIN_AE26 计价器费用显示
HEX0[1] 数码管模块B段 PIN_AE27
HEX0[2] 数码管模块C段 PIN_AE28
HEX0[3] 数码管模块D段 PIN_AG27
HEX0[4] 数码管模块E段 PIN_AF28
HEX0[5] 数码管模块F段 PIN_AG28
HEX0[6] 数码管模块G段 PIN_AH28
HEX1[0] 数码管模块A段 PIN_AJ29
HEX1[1] 数码管模块B段 PIN_AH29
HEX1[2] 数码管模块C段 PIN_AH30
HEX1[3] 数码管模块D段 PIN_AG30
HEX1[4] 数码管模块E段 PIN_AF29
HEX1[5] 数码管模块F段 PIN_AF30
HEX1[6] 数码管模块G段 PIN_AD27
HEX2[0] 数码管模块A段 PIN_AB23
HEX2[1] 数码管模块B段 PIN_AE29
HEX2[2] 数码管模块C段 PIN_AD29
HEX2[3] 数码管模块D段 PIN_AC28
HEX2[4] 数码管模块E段 PIN_AD30
HEX2[5] 数码管模块F段 PIN_AC29
HEX2[6] 数码管模块G段 PIN_AC30
HEX3[0] 数码管模块A段 PIN_AD26
HEX3[1] 数码管模块B段 PIN_AC27

114
第 3章 综合应用实验部分

HEX3[2] 数码管模块C段 PIN_AD25


HEX3[3] 数码管模块D段 PIN_AC25
HEX3[4] 数码管模块E段 PIN_AB28
HEX3[5] 数码管模块F段 PIN_AB25
HEX3[6] 数码管模块G段 PIN_AB22
HEX4[0] 数码管模块A段 PIN_AA24
HEX4[1] 数码管模块B段 PIN_Y23
HEX4[2] 数码管模块C段 PIN_Y24
HEX4[3] 数码管模块D段 PIN_W22
HEX4[4] 数码管模块E段 PIN_W24
HEX4[5] 数码管模块F段 PIN_V23
HEX4[6] 数码管模块G段 PIN_W25
HEX5[0] 数码管模块A段 PIN_V25
HEX5[1] 数码管模块B段 PIN_AA28
HEX5[2] 数码管模块C段 PIN_Y27
HEX5[3] 数码管模块D段 PIN_AB27
HEX5[4] 数码管模块E段 PIN_AB26
HEX5[5] 数码管模块F段 PIN_AA26
HEX5[6] 数码管模块G段 PIN_AA25
表 34-1 端口管脚分配表
7、用下载电缆通过 JTAG 口将对应的 sof 文件加载到 FPGA 中。观察实验结果
是否与自己的编程思想一致。

五、实验结果与现象
以设计的参考示例为例,当设计文件加载到目标器件后,将直流电机模块选择
为“ON”,旋动直流电机边上的速度调节旋钮,使直流电机开始旋转观察数码管
显示的值与设计的是否一致。

六、实验报告
1、绘出仿真波形,并作说明。
2、将实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记
录下来。(实验代码见光盘 taxi 文件夹)

115
第 3章 综合应用实验部分

3.5 基于 Verilog 的温度测量的设计

一、实验目的
1、了解 1-wire 总线的工作原理。
2、学会用 Verilog 语言编写正确的多层次嵌套的状态机程序。
3、掌握用 Verilog 编写复杂功能模块。
4、进一步学习状态机在系统设计中的应用。

二、实验原理
在传统的模拟信号温度测量系统中,存在引线误差补偿、多点测量切换误差和放
大电路零点漂移 误差等技术问题,设计好的电路在更换传感器时,需对系统重新调
试,一致性差.为了克服这些问题, 引入了美国 Dallas 半导体公司
1-Wire 系列的高精度数字式温度传感器 DS18B20, DS18B20 具有以 下特点:提
供 9~12 位精度的温度测量;电源供电范围为 3. 0 V~5. 5 V 温度测量范围为
- 55℃~ + 125℃,在- 10℃~+ 85℃范围内,测量精度是±0. 5℃;增量值最小可
为 0. 0625℃;将测量温度 转换为 12 位的数字量最大需要 750 ms; DS18B20 可采用
信号线寄生供电,不需额外的外部供电;每 个 DS18B20 有唯一的 64 位的序列码,这
使得可以有多个 DS18B20 在一条单总线上工作。 FPGA 的 特点是直接面向用户,
具有极大的灵活性和通用性,使用方便,硬件测试和实现快捷,开发效率高,技 术维护
简单,工作可靠性高。基于上述特点,在此提出了采用
DS18B20 与可编程逻辑器件 FPGA 来实现测温系统的新方法,并且给出了提
高 DS18B20 测量精度的方法,使 DS18B20 的 9 位分辨率时的测量精度由
0. 5℃提高到 0. 1℃,实际测试证明该系统具有良好的一致性,兼容性和较高的准
确性

三、实验内容
本实验硬件的设计是将 DS18B20 的 DQ 与 FPGA 的一个 IO 连接,并加 4.7K
左右的上拉电阻。VDD 和 VPU 可以为 3.0~5.0V。这里我们参照 FPGA 本身的 IO
电压,选择 3.3V。需要注意的一点是,由于 DQ 的数据是双向的,所以 FPGA 的
该 IO 要设定为 inout 类型
DS18B20 是一个 1-wire 总线,12bit 的数字温度传感器,其详细的参数这里不
做具体的介绍,只讨论其基于 Verilog 的控制程序的设计。
实际上,对 DS18B20 的控制,主要是实现 1-wire 总线的初始化,读,写等操
作,然后再根据 DS18B20 的控制要求,实现对其控制的 verilog 逻辑。
在 1-Wire 总线上,有一个 master,可以有 1 个或者多个 slave。而对于
FPGA+DS18B20 的温度测试设计来讲,需要在 FPGA 上实现一个 1-Wire 总线的
master。 DS18B20 作为 1-wire 总线的 slave 设备存在,可以有一个或者多个,不过

116
第 3章 综合应用实验部分

为了简化程序,例程里假定只存在一个 DS18B2020。
1-Wire 总线的操作形式上相对简单,但操作本身相对却又比较复杂。用 Verilog
做控制程序设计时,采用多层次嵌套的状态机来实现。

四、实验步骤
1、打开 Quartus II 软件,新建一个工程。
2、建完工程之后,再新建一个 Verilog HDL File,打开 Verilog 编辑器对
话框。
3、按照实验原理和自己的想法,在 Verilog 编辑窗口编写 Verilog 程序,用户
可参照光盘中提供的示例程序。
4、编写完 Verilog 程序后,保存起来。方法同实验一。
5、对自己编写的 Verilog 程序进行编译并仿真,对程序的错误进行修改。
6、编译仿真无误后,依照管脚连接表进行管脚分配。表 35-1 是示例程序的管
脚分配表。分配完成后,再进行全编译一次,以使管脚分配生效。
端口名 使用模块信号 对应 FPGA 管脚 说明
Clk 数字信号源 PIN_AF14 系统时钟 50MHz
DB 温度传感器 PIN_AB17 传感器数据输入
Rst_n 按键 KEY0 PIN_AA14 复位信号
HEX0[0] 数码管模块A段 PIN_AE26 温度显示
HEX0[1] 数码管模块B段 PIN_AE27
HEX0[2] 数码管模块C段 PIN_AE28
HEX0[3] 数码管模块D段 PIN_AG27
HEX0[4] 数码管模块E段 PIN_AF28
HEX0[5] 数码管模块F段 PIN_AG28
HEX0[6] 数码管模块G段 PIN_AH28
HEX1[0] 数码管模块A段 PIN_AJ29
HEX1[1] 数码管模块B段 PIN_AH29
HEX1[2] 数码管模块C段 PIN_AH30
HEX1[3] 数码管模块D段 PIN_AG30
HEX1[4] 数码管模块E段 PIN_AF29
HEX1[5] 数码管模块F段 PIN_AF30
HEX1[6] 数码管模块G段 PIN_AD27
HEX2[0] 数码管模块A段 PIN_AB23
HEX2[1] 数码管模块B段 PIN_AE29
HEX2[2] 数码管模块C段 PIN_AD29
HEX2[3] 数码管模块D段 PIN_AC28
HEX2[4] 数码管模块E段 PIN_AD30
HEX2[5] 数码管模块F段 PIN_AC29

117
第 3章 综合应用实验部分

HEX2[6] 数码管模块G段 PIN_AC30


HEX3[0] 数码管模块A段 PIN_AD26
HEX3[1] 数码管模块B段 PIN_AC27
HEX3[2] 数码管模块C段 PIN_AD25
HEX3[3] 数码管模块D段 PIN_AC25
HEX3[4] 数码管模块E段 PIN_AB28
HEX3[5] 数码管模块F段 PIN_AB25
HEX3[6] 数码管模块G段 PIN_AB22
表 35-1 端口管脚分配表
7、用下载电缆通过 JTAG 口将对应的 sof 文件加载到 FPGA 中。观察实验结果
是否与自己的编程思想一致。

五、实验结果与现象
以设计的参考示例为例,当设计文件加载到目标器件后,数码管将实时显示温
度,精度到 0.1℃(数码管最后一位),尝试用高温物体接近 DS18B20,观察温度
变化。

六、实验报告
1、绘出仿真波形,并作说明。
2、将实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记
录下来。(实验代码见光盘 temperature 文件夹)

118
第 3章 综合应用实验部分

3.6 IIC 存储模块的设计

一、实验目的
1、了解 IIC 总线的工作原理。
2、学会用 Verilog 语言编写正确的读写 AT24C01 存储芯片的程序。
3、掌握用 Verilog 编写复杂功能模块。
4、进一步学习状态机在系统设计中的应用。

二、实验原理
IIC 总线是一种由 PHILIPS 公司开发的两线式串行总线,用于连接微控制器及
其外围设备。IIC
总线是由数据线 SDA 和时钟 SCL 构成的串行总线,可发送和接收数据。在 CPU
与被控 IC 之间、IC 与 IC 之间进行双向传送,最高传送速率 400kbps。
IIC 总线在传送数据过程中共有三种类型信号,它们分别是:开始信号、结束
信号和应答信号。
1)开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据;
2)结束信号:SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据;
3)应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特
定的低电平脉冲,表示已收到数据。CPU 向受控单元发出一个信号后,等待受控
单元发出一个应答信号,CPU 接收到应答信号后,根据实际情况作出是否继续传
递信号的判断。若未收到应答信号,由判断为受控单元出现故障。

三、实验内容
写操作的理想时序如图 36-1 所示,SCLK 为串行时钟,CS 为拉高有效的片选(又名为
RESET),DATA 是数据进出的 I/O。忘了说,DS1302 由于使用 SPI 传输的关系,所以下
降沿设置数据,上升沿锁存数据。如图 23.1 所示,左边为访问字节,右边则是数据字节,CS
拉高为写操作有效。对此,主机先将访问字节写入,再将数据字节写入指定的位置。闲置状态,
SCLK 信号还有 CS 信号都是拉低发呆,而且读写数据都是由低至高

图 36-1 写操作的理想时序
读操作的理想时序如图 36-2 所示。T0~T7,主机写入访问字节并且指定读出地址。
T8~T15,从机读出数据字节,期间 DATA 为输入状态,从机根据下降沿设置(更新)数据,

119
第 3章 综合应用实验部分

主机为上升沿读取。

图 36-2 读操作的理想时序

四、实验步骤
1、打开 Quartus II 软件,新建一个工程。
2、建完工程之后,再新建一个 Verilog HDL File,打开 Verilog 编辑器对
话框。
3、按照实验原理和自己的想法,在 Verilog 编辑窗口编写 Verilog 程序,用户
可参照光盘中提供的示例程序。
4、编写完 Verilog 程序后,保存起来。方法同实验一。
5、对自己编写的 Verilog 程序进行编译并仿真,对程序的错误进行修改。
6、编译仿真无误后,依照管脚连接表进行管脚分配。表 36-1 是示例程序的管
脚分配表。分配完成后,再进行全编译一次,以使管脚分配生效。
端口名 使用模块信号 对应 FPGA 管脚 说明
Clk 数字信号源 PIN_AF14 系统时钟 50MHz
Rst_n 按键 KEY0 PIN_AA14 复位信号
Scl IIC 总线 SCL 信号 PIN_AD24 SCL 信号
Sda IIC 总线 SDA 信号 PIN_AE23 SDA 信号
HEX0[0] 数码管模块A段 PIN_AE26 IIC EEPROM 读数据
HEX0[1] 数码管模块B段 PIN_AE27 显示
HEX0[2] 数码管模块C段 PIN_AE28
HEX0[3] 数码管模块D段 PIN_AG27
HEX0[4] 数码管模块E段 PIN_AF28
HEX0[5] 数码管模块F段 PIN_AG28
HEX0[6] 数码管模块G段 PIN_AH28
HEX1[0] 数码管模块A段 PIN_AJ29
HEX1[1] 数码管模块B段 PIN_AH29
HEX1[2] 数码管模块C段 PIN_AH30
HEX1[3] 数码管模块D段 PIN_AG30
HEX1[4] 数码管模块E段 PIN_AF29
HEX1[5] 数码管模块F段 PIN_AF30

120
第 3章 综合应用实验部分

HEX1[6] 数码管模块G段 PIN_AD27


HEX2[0] 数码管模块A段 PIN_AB23
HEX2[1] 数码管模块B段 PIN_AE29
HEX2[2] 数码管模块C段 PIN_AD29
HEX2[3] 数码管模块D段 PIN_AC28
HEX2[4] 数码管模块E段 PIN_AD30
HEX2[5] 数码管模块F段 PIN_AC29
HEX2[6] 数码管模块G段 PIN_AC30
HEX3[0] 数码管模块A段 PIN_AD26
HEX3[1] 数码管模块B段 PIN_AC27
HEX3[2] 数码管模块C段 PIN_AD25
HEX3[3] 数码管模块D段 PIN_AC25
HEX3[4] 数码管模块E段 PIN_AB28
HEX3[5] 数码管模块F段 PIN_AB25
HEX3[6] 数码管模块G段 PIN_AB22
HEX4[0] 数码管模块A段 PIN_AA24
HEX4[1] 数码管模块B段 PIN_Y23
HEX4[2] 数码管模块C段 PIN_Y24
HEX4[3] 数码管模块D段 PIN_W22
HEX4[4] 数码管模块E段 PIN_W24
HEX4[5] 数码管模块F段 PIN_V23
HEX4[6] 数码管模块G段 PIN_W25
HEX5[0] 数码管模块A段 PIN_V25
HEX5[1] 数码管模块B段 PIN_AA28
HEX5[2] 数码管模块C段 PIN_Y27
HEX5[3] 数码管模块D段 PIN_AB27
HEX5[4] 数码管模块E段 PIN_AB26
HEX5[5] 数码管模块F段 PIN_AA26
HEX5[6] 数码管模块G段 PIN_AA25
表 36-1 端口管脚分配表
7、用下载电缆通过 JTAG 口将对应的 sof 文件加载到 FPGA 中。观察实验结果
是否与自己的编程思想一致。

五、实验结果与现象
以设计的参考示例为例,当设计文件加载到目标器件后,数码管将显示
ABCDEF 的数据。修改程序中显示的数据值,重新编译程序下载后,观察数码管
显示数据是否与修改数据相同。

121
第 3章 综合应用实验部分

六、实验报告
1、绘出仿真波形,并作说明。
2、将实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记
录下来。(实验代码见光盘 IIC_EEPROM 文件夹)

122
第 3章 综合应用实验部分

3.7 基于 Verilog 的 SDRAM 测试的设计

一、实验目的
1、进一步了解 SDRAM 的工作原理。
2、掌握 SDRAM 读写时序。
3、进一步掌握状态机的使用。

二、实验原理
驱动 SDRAM,简单可以分为以下四项操作:
(一)初始化
(二)刷新操作
(三)读操作
(四)写操作

三、实验内容
此实验演示的功能块如图 38-1 所示。SDRAM 控制器使用 50 MHz 作为一个参
考时钟,并倍频到 100MHz 作为内存时钟。

图 37-1 系统框图

四、实验步骤
1、打开 Quartus II 软件,新建一个工程。
2、建完工程之后,再新建一个 Verilog HDL File,打开 Verilog 编辑器对
话框。
3、按照实验原理和自己的想法,在 Verilog 编辑窗口编写 Verilog 程序,用户
可参照光盘中提供的示例程序。
4、编写完 Verilog 程序后,保存起来。方法同实验一。

123
第 3章 综合应用实验部分

5、对自己编写的 Verilog 程序进行编译并仿真,对程序的错误进行修改。


6、编译仿真无误后,依照管脚连接表进行管脚分配。表 38-1 是示例程序的管
脚分配表。分配完成后,再进行全编译一次,以使管脚分配生效。
端口名 使用模块信号 对应 FPGA 管脚 说明
CLOCK_50 数字信号源 PIN_AF14 系统时钟 50MHz
KEY[0] 启动按键 PIN_AA14 启动按键
LED[0] 显示灯 显示灯
LED[1]
LED[2]
DRAM_ADDR[0] SDRAM 地址位 PIN_AK14 SDRAM 地址位
DRAM_ADDR[1] PIN_AH14
DRAM_ADDR[2] PIN_AG15
DRAM_ADDR[3] PIN_AE14
DRAM_ADDR[4] PIN_AB15
DRAM_ADDR[5] PIN_AC14
DRAM_ADDR[6] PIN_AD14
DRAM_ADDR[7] PIN_AF15
DRAM_ADDR[8] PIN_AH15
DRAM_ADDR[9] PIN_AG13
DRAM_ADDR[10] PIN_AG12
DRAM_ADDR[11] PIN_AH13
DRAM_ADDR[12] PIN_AJ14
DRAM_DQ[0] SDRAM 数据位 PIN_AK6 SDRAM 数据位
DRAM_DQ[1] PIN_AJ7
DRAM_DQ[2] PIN_AK7
DRAM_DQ[3] PIN_AK8
DRAM_DQ[4] PIN_AK9
DRAM_DQ[5] PIN_AG10
DRAM_DQ[6] PIN_AK11
DRAM_DQ[7] PIN_AJ11
DRAM_DQ[8] PIN_AH10
DRAM_DQ[9] PIN_AJ10
DRAM_DQ[10] PIN_AJ9
DRAM_DQ[11] PIN_AH9
DRAM_DQ[12] PIN_AH8
DRAM_DQ[13] PIN_AH7
DRAM_DQ[14] PIN_AJ6

124
第 3章 综合应用实验部分

DRAM_DQ[15] PIN_AJ5
DRAM_BA[0] SDRAM bank PIN_AF13 SDRAM bank
DRAM_BA[1] PIN_AJ12
DRAM_LDQM SDRAM 字节数据掩 PIN_AB13 SDRAM 字节数据掩
DRAM_UDQM 码 PIN_AK12 码
DRAM_RAS_N 行选 PIN_AE13 行选
DRAM_CAS_N 列选 PIN_AF11 列选
DRAM_CKE 时钟使能 PIN_AK13 时钟使能
DRAM_CLK SDRAM 时钟 PIN_AH12 SDRAM 时钟
DRAM_WE_N 写使能 PIN_AA13 写使能
DRAM_CS_N 片选 PIN_AG11 片选
表 37-1 端口管脚分配表
7、用下载电缆通过 JTAG 口将对应的 sof 文件加载到 FPGA 中。观察实验结果
是否与自己的编程思想一致。

五、实验结果与现象
以设计的参考示例为例,当设计文件加载到目标器件后,按 KEY[0]按键,当
按下时,LEDR0~2 点亮,当发开时,LEDR1 和 LEDR2 开始闪烁。8 秒过后,LEDR1
如果常亮,表示 SDRAM 测试通过。LEDR2 如果不闪烁表示 50MHZ 时钟没有工作,
LEDR1 如果 8 秒过后不保持常亮,则测试失败,尝试重新按 KEY[0]按键。

六、实验报告
1、绘出仿真波形,并作说明。
2、将实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记
录下来。(实验代码见光盘 DE1_SoC_SDRAM_RTL_Test 文件夹)

125
第 3章 综合应用实验部分

3.8 基于 Qsys 的 SDRAM 测试的设计

一、实验目的
1、了解 SDRAM 的工作原理。
2、掌握 Nios II 的基本开发流程。
3、掌握使用 SDRAM 控制器 IP 访问 SDRAM。

二、实验原理
提到内存,相信大家都不陌生,几乎所有的计算机系统中都有它的身影,按照
内存的工作原理
划分,可将内存分为 RAM 和 ROM 两大类。
RAM(Random Access Memory)存储器又称随机存取存储器,存储的内容
可通过指令随机读写访问,RAM 中的数据在掉电时会丢失;
ROM(Read Only Memory)存储器又称只读存储器,只能从中读取信息而不
能任意写信息。ROM 具有掉电后数据可保持不变的优点。
RAM 和 ROM 两大类下面又可分很多小类,如下图 37-1 所示:

图 38-1 RAM 和 ROM 分类


SDRAM:Synchronous Dynamic Random Access Memory,即同步动态随机存取
存储器。“同步”是指其时钟频率与 CPU 前端总线的系统时钟频率相同,并且内
部命令的发送与数据的传输都以此频率为基准;“动态”是指存储阵列需要不断的
刷新来保证所存储数据不丢失;“随机”是指数据不是线性一次存储,而是自由指
定地址进行数据的读写。

三、实验内容
FPGA 内部 RAM 资源较少,许多要求大量存储单元的应用会使用到 SDRAM
这样的外部存储单元。本实验将演示如何添加存储器到 Qsys 工程中。同时还将展
示如何通过 SDRAM 控制器 IP 访问 SDRAM,以及 Nios II 处理器如何读写 SDRAM
进行硬件验证。SDRAM 控制器处理访问 SDRAM 的控制比较复杂,如初始化内存

126
第 3章 综合应用实验部分

设备、管理 SDRAM banks,并保持设备在一定时间间隔刷新。


系统框图如下图 37-2 所示。该系统输入时钟为 50 MHz。SDRAM 控制器被配
置为一个 64MB 的控制器。该 SDRAM 控制器的工作频率为 100MHz,和 Nios II
程序运行时钟相同。

图 38-2 系统框图

四、实验步骤
1、打开 Quartus II 软件,新建一个工程。
2、建完工程之后,再新建一个 Verilog HDL File,打开 Verilog 编辑器对
话框。
3、按照实验原理和自己的想法,在 Verilog 编辑窗口编写 Verilog 程序,用户
可参照光盘中提供的示例程序。
4、编写完 Verilog 程序后,保存起来。方法同实验一。
5、对自己编写的 Verilog 程序进行编译并仿真,对程序的错误进行修改。
6、编译仿真无误后,依照管脚连接表进行管脚分配。表 37-1 是示例程序的管
脚分配表。分配完成后,再进行全编译一次,以使管脚分配生效。
端口名 使用模块信号 对应 FPGA 管脚 说明
CLOCK_50 数字信号源 PIN_AF14 系统时钟 50MHz
KEY 启动按键 PIN_AA14 启动按键
DRAM_ADDR[0] SDRAM 地址位 PIN_AK14 SDRAM 地址位
DRAM_ADDR[1] PIN_AH14
DRAM_ADDR[2] PIN_AG15
DRAM_ADDR[3] PIN_AE14
DRAM_ADDR[4] PIN_AB15
DRAM_ADDR[5] PIN_AC14
DRAM_ADDR[6] PIN_AD14

127
第 3章 综合应用实验部分

DRAM_ADDR[7] PIN_AF15
DRAM_ADDR[8] PIN_AH15
DRAM_ADDR[9] PIN_AG13
DRAM_ADDR[10] PIN_AG12
DRAM_ADDR[11] PIN_AH13
DRAM_ADDR[12] PIN_AJ14
DRAM_DQ[0] SDRAM 数据位 PIN_AK6 SDRAM 数据位
DRAM_DQ[1] PIN_AJ7
DRAM_DQ[2] PIN_AK7
DRAM_DQ[3] PIN_AK8
DRAM_DQ[4] PIN_AK9
DRAM_DQ[5] PIN_AG10
DRAM_DQ[6] PIN_AK11
DRAM_DQ[7] PIN_AJ11
DRAM_DQ[8] PIN_AH10
DRAM_DQ[9] PIN_AJ10
DRAM_DQ[10] PIN_AJ9
DRAM_DQ[11] PIN_AH9
DRAM_DQ[12] PIN_AH8
DRAM_DQ[13] PIN_AH7
DRAM_DQ[14] PIN_AJ6
DRAM_DQ[15] PIN_AJ5
DRAM_BA[0] SDRAM bank PIN_AF13 SDRAM bank
DRAM_BA[1] PIN_AJ12
DRAM_LDQM SDRAM 字节数据掩 PIN_AB13 SDRAM 字节数据掩
DRAM_UDQM 码 PIN_AK12 码
DRAM_RAS_N 行选 PIN_AE13 行选
DRAM_CAS_N 列选 PIN_AF11 列选
DRAM_CKE 时钟使能 PIN_AK13 时钟使能
DRAM_CLK SDRAM 时钟 PIN_AH12 SDRAM 时钟
DRAM_WE_N 写使能 PIN_AA13 写使能
DRAM_CS_N 片选 PIN_AG11 片选
表 38-1 端口管脚分配表
7、用下载电缆通过 JTAG 口将对应的 sof 文件加载到 FPGA 中。观察实验结果
是否与自己的编程思想一致。

五、实验结果与现象

128
第 3章 综合应用实验部分

控制程序在 Nios II 上运行。Nios II 程序写入测试文件到 SDRAM 中,然后从


SDRAM 中读取数据进行验证。程序将通过 Nios 终端显示 SDRAM 的读/写数据。
在验证过程中达到 100%,结果将在 Nios 终端显示。如图 37-3 所示

图 38-3 SDRAM 测试

六、实验报告
1、绘出仿真波形,并作说明。
2、将实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记
录下来。(实验代码见光盘 DE1_SoC_SDRAM_Nios_Test 文件夹)

129
第 4 章 ARM SoC FPGA 嵌入式系统实验部分

第 4 章 ARM SoC FPGA 嵌入式系统实验部分


引述:基于 ARM 的 SoC FPGA 在 FPGA 中紧密结合了经过优化的“硬核”处理器系统(HPS)
模块。HPS 包括双核 ARM 处理器、多端口存储器控制器以及多个外设单元,处理器性能达到 4,
000 DMIPS (DhrySTONes 2.1 基准测试),功耗不到 1.8 W,这些硬核 IP 模块提高了性能同时
降低了功耗和成本,减少了对逻辑资源的占用,突出了产品优势。用户可以定制片内 FPGA 架构,
开发专用逻辑。可编程功能支持采用新的或者修改后的通信标准和网络协议,进一步调整性能。与
传统的解决方案相比,SoC FPGA 在性能上有明显的优势。本部分介绍如何进行基于 SoC 的
FPGA 嵌入式系统软件和硬件件设计。

4.1 ARM SoC FPGA 快速入门

4.1.1 MSEL 设置
在 DE1-SOC 板背面, 有个 MSEL 的指拨开关 SW10 如图 1- 1 所示:

图 1- 1 FPGA MSEL 开关

此开关用途为设定 FPGA 的配置来源。常用的设定如下表:

MSEL[4:0] 设定模式 描述

10010 AS FPGA configured from EPCQ

01010 FPPx32 FPGA configured from HPS software: Linux

FPGA configured from HPS software: U-Boot, with


00000 FPPx16 image stored on the SD card, like LXDE Desktop or
console Linux with frame buffer edition

130
第 4 章 ARM SoC FPGA 嵌入式系统实验部分

 当 MSEL 被设定在 AS mode 下, FPGA 会通过 EPCQ 配置起来


 若设定在 FPPx32 模式下工作, 则由 HPS 负责配置 FPGA

4.1.2 连接设定
开发板的接口和相关线材连接如图 1-2 所示:

 将电源供应器插上电源接口
 使用白色的 USB Type B 线材将计算机与 DE1-SoC 上的 USB-Blaster II 接口连接。此接口主要
负责 FPGA 配置以及 HPS Debug 使用。
 使用 Mini-USB 线材将计算机与 DE1-SoC 上的 UART-to-USB 接口连接。此接口主要用于计算机
与 HPS 互相通信使用。

4.1.3 安装 USB-Blaster II 驱动
下面的步骤将介绍如何安装 USB-Blaster II 的驱动:
1. 首先将用户的计算机与 DE1_SoC 上的 USB-Blsater 接口(J13) 通过 USB 下载线连接起来如图 1-
3 所示:

图 1- 3 DE1_SoC USB BlasterII 连接设定

131
第 4 章 ARM SoC FPGA 嵌入式系统实验部分

2. 开启板子上的电源并且打开电脑 window 的设备管理器,用户将会看到系统发现了一个未知的装


置如图 1- 4 所示:

图 1- 4 侦测 USB Blaster 器件

2. 选 择 这 个 未 知 的 装 置 并 更 新 它 的 驱 动 。 用 户 可 以 在 \<Quartus II 安 装 路 径 >\drivers\
usb-blaster-ii 文 件 夹 下 找 到 这 个 装 置 的 驱 动 (ex :
E:\altera\13.1\quartus\drivers\usb-blaster-ii\)。
3. 当驱动被正确的安装完成后,用户可以在设备管理器下看到 "Altera USB-Blaster II(JTAG
interface)",代表用户已经正确的安装好 USB-Blaster II 的驱动如图 1- 5 所示:

图 1- 5 安装完 USB-Blaster 驱动

132
第 4 章 ARM SoC FPGA 嵌入式系统实验部分

4.1.4 制作 microSD Card Image


本章节将介绍如何制作一个可以让开发板 DE1_SoC 运行 Linux 的 microSD card,用户须要先在
DE1_SoC 产品网页内下载 image file。接着使用 Win32DiskImager.exe 这这个工具来进行刻录 Linux
image 到 microSD card 内,以下是具体步骤:
下面是将 de1_SoC_SD.img 档案烧写入 microSD card 的步骤:
1. 将 microSD card 通过读卡器接上计算机
2. 执行 Win32DiskImager.exe 如图 1- 6 所示:
3. 输入 de1_SoC_SD.img 文件的路径
4. 选择 microSD card 的磁盘位置
5. 点选 “write”后 开始刻录 image 文件进入 microSD card,等待烧入完成后即可移除
microSD card

图 1- 6 microSD cardimage 烧写

4.1.5 设定串口终端
 安装驱动
1. 使用 mini-USB 线将计算机与 DE1_SoC 的 UART 转 USB 接口 (J4) 连接如图 1- 7 所示

图 1- 7 UART 转 USB 接口设定

133
第 4 章 ARM SoC FPGA 嵌入式系统实验部分

2. 开启 DE1_SoC 电源后用户将可以在计算机上的设备管理器里发现一个未识别的装置: USB


Serial Port 如图 1- 8 所示:

图 1- 8 检测 UART 转 USB 接口器件

3. 在实验教材的目录 DE1_SOC\tool\drivers\USB2UART_driver 文件夹内放置有这个芯片的


驱动, 用户可以使用这个驱动来安装 usb-uart driver,如图 1-9 所示。

图 1- 9 USB2UART 驱动
4. 当驱动被安装完成后, USB Serial Port 会被识别出来并会显示 COM Port 的号码如 COM11
如图 1- 10 所示:

134
第 4 章 ARM SoC FPGA 嵌入式系统实验部分

图 1- 10 UART 转 USB 驱动安装完成

 设定串口终端的规格:
接 下 来 我 们 会 使 用 串 口 终 端 工 具 来 与 DE1_SoC 连 接 , 用 户 可 以 在 实 验 教 材 内 的 这 个 路 径 :
\tool\SSH\ , 找到 putty.exe 这个串口中端工具。 下面是详细的设定步骤:
1. 执行 putty.exe, 选择 Serial 来进行串口通信。
2. 依照图 1- 11 的设定来进行配置并储存起来。 注意下图所显示的 COM11 是要根据用户的设
备管理器所显示的 COM Port 号码。有可能是 COM7 or COM8...等。 请特别注意这点。

图 1- 11 串口中端工具设定

3. 设置完成后可以关闭 putty。

135
第 4 章 ARM SoC FPGA 嵌入式系统实验部分

4.1.6 在 DE1_SoC 上运行 Linux


本节将介绍如何运行预装载的 Linux images 在 DE1_SoC 上,用户可以参照下面的步骤来运行
Linux :
1. 请先确认 DE1_SoC 板电源是关闭状态
2. 将预装载有 Linux image 的 microSD card 插入 DE1_SoC 的 microSD card 插槽
3. 开启 DE1_SoC 板的电源
4. 开启 putty.exe, 选择上一节提到已经存好的设定 DE1_SoC_usb 并点选 Open
5. 当系统成功 boot 起来如图 1- 12 所示:Linux 系统会要求用户输入 login 信息。输入 root
并按下 enter 后便可以登入系统

图 1- 12 在 DE1_SoC 上运行 Linux

136
第 4 章 ARM SoC FPGA 嵌入式系统实验部分

4.2 搭建 ARM SoC FPGA 硬件平台

4.2.1 创建 Quartus II 工程
创建一个 HPS_LED_HEX \ LED_HEX_hardware 文件夹,用于存放 Quartus II 工程。
打开 Quartus II,File –>> New Project Wizard,创建一个 Quartus II 工程,如图 2- 1 所示,
点击 Next
选择 Quartus II 工程存放的文件夹,并输入工程的名称(顶层文件名称默认与工程名称
一致),如图 2- 2 所示,点击 Next
选择 Empty Project,如图 2- 3 所示,点击 Next
暂时不添加工程所包含文件,如图 2- 4 所示,点击 Next
选择工程所用器件,本工程所用器件为 5CSEMA5F31C6,如图 2- 5 所示,点击 Next,
EDA Tool Settings 选择 None,点击 Next
图图 2- 6 所示为工程的 summary,选择 finish 完成 Quartus II 工程的创建
点击 File -->> New,选择 Verilog HDL File,如图 2- 7 所示,新建 HPS_LED_HEX.v 文
件,编辑并保存。

图 2- 1 新建 Quartus II 工程

137
第 4 章 ARM SoC FPGA 嵌入式系统实验部分

图 2- 2 工程目录

图 2- 3 选择空工程

138
第 4 章 ARM SoC FPGA 嵌入式系统实验部分

图 2- 4 暂不添加文件

图 2- 5 选择器件

图 2- 6 工程 Summary

139
第 4 章 ARM SoC FPGA 嵌入式系统实验部分

图 2- 7 HPS_CONTROL_FPGA_LED.v 文件

4.2.2 配置 HPS 系统
点击 Tool -->> Qsys,新建 Qsys 系统,如图 2- 8 所示,可以在左侧的 Library 中选择并添加系统所
需要的组件,也可以搜索并添加,该 Library 中包含 HPS 组件。

图 2- 8 新建 Qsys 系统

添加 HPS 等基本组件,如图图 2- 9 所示,并对 HPS 进行配置,具体如下所示

140
第 4 章 ARM SoC FPGA 嵌入式系统实验部分

图 2- 9 Qsys 系统基本组件

如图 2- 10 所示,HPS 属性有 FPGA Interfaces、Peripheral Pin Multiplexing、HPS


Clocks 和 SDRAM 等四个配置栏,下面将会简单各个介绍。

图 2- 10 HPS 选项

在 FPGA Interfaces 选项栏下,用户可以在 General 下使能基本的接口和信号,配置


AXI Bridges 的参数,如图 2- 11 所示

141
第 4 章 ARM SoC FPGA 嵌入式系统实验部分

图 2- 11 hps_0 General properties

 用户可以设定 FPGA 与 HPS 相连接的 3 个 AXI Bridges 的数据宽度如图 2- 12 所


示:

图 2- 12 AXI Bridges data-width

 增减 FPGA to HPS SDRAM 的接口数目如图 2- 13 所示:

图 2- 13 FPGA to HPS SDRAM interface

 配置系统的 Reset 信号如图 2- 14 所示:

142
第 4 章 ARM SoC FPGA 嵌入式系统实验部分

图 2- 14 system reset

 DMA Peripheral Request 如图 2- 15 所示,以及使能各种 Interrupts

图 2- 15 DMA Peripheral Request

在 Peripheral Pin Multiplexing 选项栏下,可以通过选项来启用 HPS 的外围设备如


图 2- 16 所示。包括 Ethernet Media Access、NAND Flash、QSPI Flash、SD/MMC、USB、
SPI、UART、I2C、CAN、Trace Port Interface Unit 等外围设备控制器如图 2- 17、图
2- 18 所示:

图 2- 16 HPS peripherals

143
第 4 章 ARM SoC FPGA 嵌入式系统实验部分

图 2- 17 USB、SPI、UART

图 2- 18 I2C、CAN and Trace Port interface

每个外设都有一个 pin multiplexing 选项,这是因为 HPS I/O 如果对照 DE1_SoC 的原


理图,可以发现 HPS 的管脚其实都是复用的。如 H19 这根管脚如下图所示,

除了当 EMAC1 的 TX_CLK 功能外,也可以设定成 QPSI、NAND Flash 或 GPIO 管脚来使用。


但最终使用时只能固定设定成其中一种。例如当 DE1_SoC 的这根 H19 管脚被连接到

144
第 4 章 ARM SoC FPGA 嵌入式系统实验部分

Ethernet MAC。那么在 Qsys 专案內就只能设定 EMAC1 pin multiplexing 为“HPS I/O


Set 0”。而 NAND Flash Controller 因为管脚已被 EMAC1 占去,所以只能设定为 Unused。

在这个设定页的最底层有个 Peripherals Mux Table 如图 2- 19 所示,可以帮助用户检


验整个 HPS 外设 I/O pin multiplexing 设定的状态,看看是否有所冲突。每个
mux_select 表内,若管脚名被标注为粗体,就代表此管脚功能已被设定如图 2- 20 所示:

图 2- 19 HPS peripherals I/O pin multiplexing

图 2- 20 HPS peripherals I/O pin setting

选择 HPS Clocks 选项卡,可以设置使能 HPS to FPGA 和 FPGA to HPS 之间的时钟及其


频率如图 2- 21 所示:

145
第 4 章 ARM SoC FPGA 嵌入式系统实验部分

图 2- 21 HPS Clock

在 SDRAM 选项卡里,可以配置 HPS 的外部存储器接口参数,比如 DDR2/DDR3/LPDDR2,


基于 DE1_SoC 配置成 DDR3,其 clock 以及 initial(如图 2- 22、图 2- 23),memory(如
图 2- 24)和 board(如图 2- 25、图 2- 26)参数。

图 2- 22 HPS SDRAM clock

146
第 4 章 ARM SoC FPGA 嵌入式系统实验部分

图 2- 23 HPS SDRAM memory initialization option

 在 SDRAM 的 Memory Timing 选项中,设置的存储器 chip 的时序参数也必须匹


配 DDR3 chip datasheet 上的规定。

图 2- 24 HPS SDRAM memory chip timing

 在 SDRAM 的 Board Settings 的选项下,


“Setup and Hold Derating”和“Channel
Signal Integrity”一般设置为“Use Altera's default settings”

147
第 4 章 ARM SoC FPGA 嵌入式系统实验部分

图 2- 25 HPS SDRAM board setup and hold derating

 Board Skews 的参数设置如下:

图 2- 26 HPS SDRAM board skews

4.2.3 添加并配置 LED 组件


接下来,我们将练习如何在 Qsys 内加入定制组件,并与 HPS 系统连接。在 DE1_SoC 开发板上有 10
个 LED 连接到 FPGA 器件的 I/O 引脚上,我们需要添加 PIO 组件来驱动这些 LED。
首先添加 LED PIO component,在左侧的搜索栏里输入 PIO,在下拉窗中选择 PIO (Parallel I/O),
双击或者点击下面的 Add,将其添加到系统,如图 2- 27 所示

148
第 4 章 ARM SoC FPGA 嵌入式系统实验部分

图 2- 27 add PIO component

3. 如图 2- 28 所示,在 PIO 组件的属性框里将 Width 设置为 10,即控制连接到 FPGA


引脚上的 LED 的个数,并确保 Direction 为 Output,然后点击 Finish,完成 LED
组件的配置。

图 2- 28 PIO configuration

4. 将默认的 PIO 组件名 pio_0 重命名为 led_pio 如图 2- 29 所示(选中该组件(高亮),


使用右键选中 rename 对其重命名)。

图 2- 29 rename pio component

5. 双击 led_pio 组件下 external_connection 的 export 列,引出 led 的外部连线,


并将其重命名为 led_pio_external_connection 如图 2- 30 所示:

149
第 4 章 ARM SoC FPGA 嵌入式系统实验部分

图 2- 30 pio component export

6. 接着添加 SEG7_IF component,再次在左侧的搜索栏里输入 SEG7_IF,在下拉窗中


选择 SEG7_IF,双击或者点击下面的 Add,再次添加 SEG7_IF 组件到系统。
7. 如图 2- 31 所示。

图 2- 31 SEG7_IF

8. 添加后如图 2- 32 所示:

图 2- 32 SEG7_IF name

9. 双击 SEG7_IF 组件下 conduit_end 的 export 列,引出 button 的外部连线,并将其


重命名为 seg7_if_conduit_end,如图 2- 33 所示:

图 2- 33 SEG7_IF export

10. 新添加到系统的组件(SEG7_IF)由于还没有连接,会提示很多错误,这些错误信
息将会在下面的操作中消除。如图 2- 34 所示:

150
第 4 章 ARM SoC FPGA 嵌入式系统实验部分

图 2- 34 tempory error messages

11. 表格 2-1 列出了需要连在一起的信号 :


What component What signal of the
Name of
Name of Signal that the signal is to component that is
Component
be connected to to be connected to
led_pio clk clk_0 clk
led_pio reset clk_0 clk_reset
led_pio s1 master_non_sec master
led_pio s1 hps_0 h2f_lw_axi_master
SEG7_IF clk clk_0 clk
SEG7_IF reset clk_0 clk_reset
SEG7_IF s1 master_non_sec master
SEG7_IF s1 hps_0 h2f_lw_axi_master

表格 2- 1 signals interconnection

例如: 将 led_pio 连接到系统的方法:右键 led_pio 组件下的 clk 信号,选择要


连接的信号,其 clock、reset 以及 avmm slave 有效的连接方式如图 2- 35、图
2- 36 和图 2- 37 所示:

图 2- 35 led_pio clk signal connection

图 2- 36 led_pio reset signal connection

151
第 4 章 ARM SoC FPGA 嵌入式系统实验部分

图 2- 37 led_pio avmm slave port connection

12. SEG7_IF 的连接设定如下:

图 2- 38SEG7_IF clock signal connection

图 2- 39 SEG7_IF reset signal connection

图 2- 40 SEG7_IF avmm slave port connection

13. 将 led_pio 组件的基地址修改为 0x0001_0040,将 button_pio 的基地址修改为


0x0001_00c0,并点击锁定图标锁定基地址,如图 2- 41 所示:

152
第 4 章 ARM SoC FPGA 嵌入式系统实验部分

图 2- 41 manual assign the base address for led_pio and button_pio

14. 至此 led 和 seg_if 已经添加完毕,完整的系统连接如图 2- 42、图 2- 43 所示:

图 2- 42 SoC based qsys system(1)

图 2- 43 SoC based qsys system(2)

153
第 4 章 ARM SoC FPGA 嵌入式系统实验部分

4.2.4 编译生成 Qsys 系统


在 qsys 菜单栏下选择 Generate-> Generate 编译系统如图 2- 44 所示:

图 2- 44 generate Qsys system

如果提示保存,请选择 Save,如图 2- 45 所示,系统将开始编译

图 2- 45 save qsys system

编译完成后,如果没有错误,窗口将显示 Generate Completed,可能会提示一些


warning,但可以忽略,如图 2- 46 所示:

图 2- 46 generate complete

154
第 4 章 ARM SoC FPGA 嵌入式系统实验部分

关闭编译窗口,选择右下角 Finish 回到 Quartus II 窗口。(如果提示保存请选择保存系统)

4.2.5 编辑并编译 QUARTUS II 工程


当 Qsys 生成完后,会产生出许多可以被 Quartus II 编译合成的 HDL(verilog)文档,
一般位于以 qsys 文件名命名的文件夹内。这些文件需要先被增添入 Quartus II 工
程内。我们可以通过增加 .qip 这个描述所有文件位置的目录档案完成所有
include 文档的包含。

 如图 2- 47 所示在 Quartus II 下选择 Assignments => Settings

图 2- 47 assignments 菜单

 用鼠标点击 来选择对应的 .qip 文件. 如图 2- 48 所示:

图 2- 48 select the .qip file

 在 Select File 窗口内,选择专案内 \soc_system\synthesis\目录下的


soc_system.qip 文件如图 2- 49 所示:

155
第 4 章 ARM SoC FPGA 嵌入式系统实验部分

图 2- 49 select soc_system.qip file

 按下 Add 把 soc_system.qip 文件增添入项目内,如图 2- 50 所示:

图 2- 50 add soc_system.qip file

回到 Quartu II 窗口,打开 HPS_LED_HEX.v,如图 2- 51 所示:

图 2- 51 open HPS_CONTROL_FPGA_LED.v

156
第 4 章 ARM SoC FPGA 嵌入式系统实验部分

如图 2- 52 所示,找到 HPS_LED_HEX.v 里面 soc_system u0 的模块。

图 2- 52 soc_system module

在 soc_system u0 下面,找到 led_pio 和 seg7_if 对应的 instance 输入 LED 以及 HEX


的外部接口声明信号,如图 2- 53 所示:

图 2- 53 instance add led and seg_if signals

编辑完成后,选取菜单选项 File->Save 保存 HPS_LED_HEX.v 文档。


在 Quartus II 窗口的工具栏中选择 Analysis and Synthesis 图标(图 2- 54 中红色框
中的图标)。这个步骤不会进行 pin assignment 跟布线,只做预分析和综合完成 .v
文件语法以及 instancemodules 是否完备等状况。

图 2- 54 Analysis and Synthesis button

开始分析和综合工程,如图 2- 55 所示,必须无错误的完成。

157
第 4 章 ARM SoC FPGA 嵌入式系统实验部分

图 2- 55 sucessfully analysis and synthesis

接下来运行 TCL 脚本文件以完成 SDRAM interface constrains(timing and I/Os),


选择菜单选项 Tools -> TCL script 在窗口中选择
hps_sdram_p0_pin_assignments.tcl 如图 2- 56 所示:

图 2- 56 run tcl for sdram interface

选择 Run,运行脚本,当提示完成时选择 OK 如图 2- 57 所示,完成 SDRAM 对应 pin I/Os


constrain。

图 2- 57 run tcl for sdram interface sucessfully

在 Quartus 的工具栏中选择 Start Compliation 图标或者选取菜单选择 Processing->

158
第 4 章 ARM SoC FPGA 嵌入式系统实验部分

Start Compilation,进行全编译,如图 2- 58 所示:

图 2- 58 full complication

编译如果成功完成,进度条会显示 100% 完成,但是不会再单独弹出对话框,请注意状


态栏提示。

4.2.6 生成 Preloader
生成 Preloader 具体步骤如下:
进入 SoC EDS 的安装路径并打开 Embedded Command Shell。如图 2- 59 所示,打开
<QUARTUS_ROOT_DIR>\embedded \ 并执行 “Embedded_Command_Shell.bat”。
Altera Embedded Command Shell 窗口将会出现。

图 2- 59 Embedded_Command_Shell.bat

启动 BSP Editor:在窗口内输入 bsp-editor 并按 enter 键,如

图 2- 60 所示:

图 2- 60 bsp-editor

159
第 4 章 ARM SoC FPGA 嵌入式系统实验部分

产生新的 BSP:打开 bsp-editor 后选择菜单 File --> New HPS BSP 来创建新的 BSP 如
图 2- 61 所示:

图 2- 61 create new HPS BSP

然后设定 Preloader Setting Directory 的路径,在 New HPS BSP 的窗口下选择


Preloader Setting Directory 的路径,把路径指向实验工程
HPS_CONTROL_FPGA_LED\hps_isw_handoff\soc_system_hps_0\。如图 2- 62 所示:

图 2- 62 select the preloader setting directory

选择 OK 来产生 BSP setting 文档以及文件夹,如

图 2- 63 所示:

160
第 4 章 ARM SoC FPGA 嵌入式系统实验部分

图 2- 63 BSP related information

系统将在工程內产生一个 software 的文件夹,并生成一个 settings.bsp 文档,


如图 2- 64 所示:

图 2- 64 settings.bsp file

接下来按下 Generate 生成 preloader 的原始档以及 Makefile。当生成档案完成


后,按下 exit 完成任务离开窗口,如图 2- 65 所示:

图 2- 65 generate BSP

进入 software\spl_bsp\generated 的子文件夹并查看产生的文档。可以看到之前
在 Qsys 中有关 HPS 的相关设定已经转换成..h 头文件以配置 preloader source

161
第 4 章 ARM SoC FPGA 嵌入式系统实验部分

code 对应设置,如图 2- 67 所示:

图 2- 66 generated bsp files for DE1_SoC

以 pinmux_config.h 为例,可以看到 HPS 的外设的配置使用情况,其中“(1)”


代表该外设被使用,如图 2- 68 所示:

图 2- 67 HPS pinmux_config.h file

在 shell 窗口,进入项目位置里的 softeare\spl_bsp 活页夹,然后输入 make 指


令如图 2- 68 所示(若 PC CPU 内核为多核,如 4 核,可输入 make -j8 进行多线
程编译以提高编译效率)。

162
第 4 章 ARM SoC FPGA 嵌入式系统实验部分

图 2- 68 compile preloader

此项操作会需要一点时间,编译完成后可以在
\sotware\spl_bsp\uboot-socfpga\spl 文件夹下看到 Preloader 的 elf 和 binary
文档,如图 2- 69 所示。

图 2- 69 preloader binary file

File Description

uboot-socfpga/spl/u-boot-spl Preloader ELF file

uboot-socfpga/spl/u-boot-spl.b Preloader binary


in file

表格 2- 2 u-boot-spl file

163
第 4 章 ARM SoC FPGA 嵌入式系统实验部分

下一步是产生 preloader 的 image file。

图 2- 70 生成 preloader 流程

 先将\sotware\spl_bsp\uboot-socfpga\spl 下的 u-boot-spl.bin 复制到向上


两层的\sotware\spl_bsp\文件夹下,如图 2- 71 所示:

图 2- 71 preloader binary file

 在 shell 窗口下,路径也重新定位于此。
 输入指令 mkpimage -hv -0 -o preloader_with_header.img u-boot-spl.bi
如图 2- 72 所示:

图 2- 72 generate preloader .img file

 如此便可以产生 preloader_with_header.img 文件,如图 2- 73 所示:

164
第 4 章 ARM SoC FPGA 嵌入式系统实验部分

图 2- 73 preloader_with_header.img file

165
VEEK-SOC-II System Platform EDA 基础篇

4.3 搭建 ARM SoC FPGA 软件平台

4.3.1 软件开发流程
图 3- 1 是软件设计流程图,软件开发的步骤如下:
编写 C 语言程序文件( .c /.h 文件)。
为软件设计创建“Makefile” ,制定编译规则。
使用编译器生成可执行文件。
在 DE1_SoC 上启动 Linux。
通过网络(ssh)传送可执行文件到 Linux 中并执行测试。

图 3- 1 软件设计流程

4.3.2 创建工程文件夹
Linux 应用程序工程通常包含了.c/.h 和 Makefile 文件。这些文件通常存放在相同的文件
夹中,创建一个工程文件夹预备给.c/.h 和 make file 文件.

本例在 SOC_FPGA\HPS_LED_HEX 文件夹下创建了一个“LED_HEX_software”文件夹,其绝对


路径为 C:\Users\Administrator\Desktop\ExperimentBox\VEEK_SOC_II\HPS\HPS_LED_HEX
\LED_HEX_software

4.3.3 hps_0.h 头文件


linux 应用程序控制 led_pio 组件需要用到 led_pio 组件属性信息。此段描述如何使用一个
给出的 Linux batch 文件获取应用程序需要的包含 PIO 控制器 led_pio 属性信息的头文
件。
Batch file 文 件 名 为 generate_hps_qsys_header.sh , 它 位 于 HPS_CONTROL_FPGA_LED
Quartus II 工程文件夹根目录下,其绝对路径为 C:\Users\Administrator\Desktop\

166
VEEK-SOC-II System Platform EDA 基础篇
ExperimentBox\VEEK_SOC_II\HPS\HPS_LED_HEX\LED_HEX_hardware。生成头文件的步骤如
下。
1.运行 Altera SoC EDS command shell
2.通过 shell 命令 cd 定位到 QuartusII 工程文件夹根目录。
3.输入‘./generate_hps_qys_header.sh”并按 Enter 键执行,成功执行后,会生出名为
hps_0.h 的头文件,如图 3- 2 所示
在头文件中,包含 led_pio 在 Qsys 中分配的相对于 lwaxi 的基地址,它表现为一个宏定义
LED_PIO_BASE; led_pio 的位宽信息表示为宏定义 LED_PIO_DATA_WIDTH,如图 3- 3 所示,
这两个参数将会是应用程序访问 led_pio 寄存器所需要的

图 3- 2 生成头文件 hps_0.h

图 3- 3 hps_0.h 中 led_pio 组件和 SEG7_IF 组件信息

167
VEEK-SOC-II System Platform EDA 基础篇

4.3.4 创建 main.c 文件
主函数代码如所示图 3-4 所示,其中 LEDR_LightCount()、LEDR_OffCount()函数包含在 led.c
文件中,如图 3- 5 所示,数码管函数包含在 seg.c 中,如图 3-6 所示

图 3- 4 main.c 程序

图 3- 5 LEDR_LightCount 和 LEDR_OffCount c 程序

图 3- 6 SEG.c 程序

168
VEEK-SOC-II System Platform EDA 基础篇

4.3.5 创建 Makefile 文件
创建 Makefile 制定 Altera Embedded Command Shell 编译工程的一系列规则,tool 编译
生 成 可 执 行 文 件 。 首 先 , 在 “ software” 文 件 夹 下 创 建 一 个 空 白 文 本 文 档 并 命 名 为
“Makefile”。然后在文档中写入如图 3- 7 所示内容

图 3- 7 Makefile 文件内容

4.3.6 编译工程
使 用 Altera Embedded Command Shell 编 译 工 程 。 首 先 在 SoC EDS 安 装 路 径 下 找 到
Embedded_Command_Shell.bat 并打开,绝对路径为" E:\altera\13.1\embedded",如图 3- 8
所示

图 3- 8 Altera Embeded Command Shell

在 Command shell 中,使用 shell 命令“cd”切换路径。如图 3- 9 所示,切换路径切换至

169
VEEK-SOC-II System Platform EDA 基础篇
“C:\Users\Administrator\Desktop\ExperimentBox\VEEK_SOC_II\HPS\HPS_LED_HEX\LED_
HEX_software\HPS_LED_HEX”,然后,输入 “make” 命令编译(compiling and linking)。

图 3- 9 编译工程

工 程 编 译 完 成 之 后 , 输 入 "ls" 命 令 可 以 列 出 文 件 夹 下 所 有 文 件 。 如 图 3- 10 所 示 ,
“HPS_LED_HEX” 生成成功。

图 3- 10 查看生成的可执行文件 HPS_LED_HEX

4.3.7 运行工程
启动 DE1_SoC 中的 Linux 系统,如图 3- 11、图 3- 12 所示

图 3- 11 Putty 登录 Linux 系统

170
VEEK-SOC-II System Platform EDA 基础篇

图 3- 12 登录 Linux 系统

设置 IP 地址,如图 3- 13 所示

图 3- 13 设置 IP 地址

“scp”复制可执行文件“HPS _LED_HEX”到 Linux 路径下(/home/root) ,如


图 3- 14、图 3- 15 所示

图 3- 14 copy 可执行文件

图 3- 15 linux 下的 HPS_LED_HEX

171
VEEK-SOC-II System Platform EDA 基础篇
串口终端中输入“chmod 777 HPS_LED_HEX”更改文件可执行属性,如图 3- 16
所示

图 3- 16 更改文件属性

使用 Quartus Programmer 下载 FPGA 硬件 sof 文件,如图 3- 17 所示

图 3- 17 下载 sof 文件

回到串口终端窗口输入“./ HPS_LED_HEX”执行 ARM 程序,如图 3- 18 所示,开


发板上会看到 LED[7:0]逐个点亮,逐个熄灭,数码管显示十六进制数字

图 3- 18 执行 ARM 程序

172

You might also like