一、创建一个新的工程
1.首先,新建一个空工程
(1.)打开软件-new Project Wizard
(2.)设置空工程
-
设置工程的存储路径、名称和其中的顶层文件名
顶层文件名默认与工程文件名相同
- 选择工程类型:空工程
-
添加文件:
如果已有设计文件,在当前页面选择并添加,点击Next
-
器件选择:
根据开发平台使用的FPGA选择对应器件
-
EDA工具选择:
如果有需要可以选择第三方的综合或仿真工具(第三方工具需要另外安装并设置启动路径),这里我们选择使用modelsim工具仿真,点击Next。
-
最后确认工程设置无误:
有误back;无误finish。
2.添加设计文件
- 新建设计文件
- 编写代码:
- 在如下区域进行
- 编写完成后务必进行保存,在保存时可以进行修改文件名
-
对代码进行分析综合
若设计没有问题,综合Tasks栏中Analysis & Synthesis会变成绿色,同时左侧出现绿色对勾。
- 可以查看RTL电路:
3.管脚约束
-
器件和管脚配置
如下图,配置好后OK关闭
-
管脚分配
如下图配置,配置好后直接关闭,软件会自动保存
-
开始所有编译
等待Tasks列表中所有选项完成
4.FPGA加载
-
连接仪器-烧录:
使用micro-usb线将STEP-MAX10二代开发平台连接至电脑USB接口,选择菜单栏中Tools→Programmer选项 或 工具栏中Programmer按钮,进入烧录界面。
- 添加文件-勾选-加载
至此烧录完成,FGEA板上LD1和LD8两灯交替闪烁
二、仿真工具ModelSIM的使用
1.首先准备好测试文件
- 保存并命名为LED_shining_tb.v
- 并确定其所有的编译正常
2.在仿真选项界面中添加该文件
3.在Quartus Prime中启动Modelsim软件
- Modelsim软件启动后自动完成编译,界面如下:
4.观察波形
-
添加要观察的波形:
选中-直接移动到wave左窗口或者选中-右键-add wave
-
运行生成波形:
- 波形如图:
三、点亮LED
1.实验目的
- STEP-MAX10开发板虽然很小巧但也集成了不少外设,在本实验里我们就学习如何用FPGA控制简单外设(如何用按键或者开关控制LED的亮和灭)。
2.代码
// Module Function:利用按键和开关的状态来控制LED灯的亮灭。
module LED (key,sw,led);
input [3:0] key; //按键输入信号
input [3:0] sw; //开关输入信号
output [7:0] led; //输出信号到LED
assign led = {key,sw}; //assign连续赋值。大括号是拼接符,表示把key和sw拼接组成一个新的8位数赋值给led
endmodule
3.引脚分配
- 综合(synthesize)完成之后一定要配置FPGA的引脚到相应的外设,这样下载FPGA程序后才能达到我们想要的效果。
4.下载程序
5.效果演示
总结:实现了四个开关加上四个按键分别控制8个LED管
四、数码管显示
1.实验目的
- 认识数码管及其输入码和输出码
- 认识数码管的发光原理
2.硬件认识
- 数码管所有的信号都连接到FPGA的管脚,作为输出信号控制。FPGA只要输出这些信号就能够控制数码管的那一段LED亮或者灭。这样我们可以通过开关来控制FPGA的输出,和3-8译码器实验一样,通过组合逻辑的输出来控制数码管显示数字,下面是数码管显示的表格:
2. 代码
// Module Function:数码管的译码模块初始化
module segment (seg_data_1,seg_data_2,seg_led_1,seg_led_2);
input [3:0] seg_data_1; //数码管需要显示0~9十个数字,所以最少需要4位输入做译码
input [3:0] seg_data_2; //小脚丫上第二个数码管
output [8:0] seg_led_1; //在小脚丫上控制一个数码管需要9个信号 MSB~LSB=DIG、DP、G、F、E、D、C、B、A
output [8:0] seg_led_2; //在小脚丫上第二个数码管的控制信号 MSB~LSB=DIG、DP、G、F、E、D、C、B、A
reg [8:0] seg [9:0]; //定义了一个reg型的数组变量,相当于一个10*9的存储器,存储器一共有10个数,每个数有9位宽
initial //在过程块中只能给reg型变量赋值,Verilog中有两种过程块always和initial
//initial和always不同,其中语句只执行一次
begin
seg[0] = 9'h3f; //对存储器中第一个数赋值9'b00_0011_1111,相当于共阴极接地,DP点变低不亮,7段显示数字 0
seg[1] = 9'h06; //7段显示数字 1
seg[2] = 9'h5b; //7段显示数字 2
seg[3] = 9'h4f; //7段显示数字 3
seg[4] = 9'h66; //7段显示数字 4
seg[5] = 9'h6d; //7段显示数字 5
seg[6] = 9'h7d; //7段显示数字 6
seg[7] = 9'h07; //7段显示数字 7
seg[8] = 9'h7f; //7段显示数字 8
seg[9] = 9'h6f; //7段显示数字 9
end
assign seg_led_1 = seg[seg_data_1]; //连续赋值,这样输入不同四位数,就能输出对于译码的9位输出
assign seg_led_2 = seg[seg_data_2];
endmodule
4.引脚分配
5.程序下载同上
6.效果图
分别是0 、 1 、 3 、 7
五、心得体会
-
当按键断开时,FPGA输入为高电平,当按键按下时,FPGA输入为低电平;当开关断开(OFF)时,FPGA输入为低电平,当开关合上(ON)时,FPGA输入为高电平。
-
【注】:工程实现流程:(重要)
-
新建工程
-
器件选择
-
软件设置
-
代码实现
-
编译
-
管脚分配
-
再次编译
-
下载到 FPGA
-
-
通过这次实验,我对在实验中学习体会更加深刻了。比如软件的安装和基本使用,这些都是通过一遍又一遍实验中慢慢熟练的。
-
通过这次实验,我的自学能力得到了很大的提高。