差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 后一修订版 两侧同时换到之后的修订记录 | ||
点亮led灯 [2016/08/03 19:12] zhijun |
点亮led灯 [2021/09/13 01:34] gongyu |
||
---|---|---|---|
行 1: | 行 1: | ||
正如C程序初学者尝试的第一个程序是写一个“hello World”一样,FPGA初学者的第一个程序一般都为“心跳(heart beat)灯”,也就是通过系统的时钟进行分频,产生周期性的低频信号(高、低电平交替变化驱动LED),控制LED灯的点亮和熄灭。 | 正如C程序初学者尝试的第一个程序是写一个“hello World”一样,FPGA初学者的第一个程序一般都为“心跳(heart beat)灯”,也就是通过系统的时钟进行分频,产生周期性的低频信号(高、低电平交替变化驱动LED),控制LED灯的点亮和熄灭。 | ||
- | ------ | + | |
- | ===硬件平台:=== | + | |
+ | ### 1. 硬件平台 | ||
我们以[[STEP-MXO2第一代]]为例,对于其它平台只需要注意其时钟的频率以及管脚的分配。 | 我们以[[STEP-MXO2第一代]]为例,对于其它平台只需要注意其时钟的频率以及管脚的分配。 | ||
- | ------ | + | |
- | ===设计要求:=== | + | ### 2. 设计要求 |
- 初步了解数字设计的基本思想和开发流程 | - 初步了解数字设计的基本思想和开发流程 | ||
- 熟悉[[Lattice Diamond的使用|Diamond软件]]和仿真软件的使用方法及流程 | - 熟悉[[Lattice Diamond的使用|Diamond软件]]和仿真软件的使用方法及流程 | ||
行 11: | 行 12: | ||
- 了解时钟分频的工作原理 | - 了解时钟分频的工作原理 | ||
\\ | \\ | ||
- | ------ | + | |
- | ===工作原理:=== | + | ### 3. 工作原理 |
按照设计要求,控制LED闪烁的周期为1秒,则LED灯需要点亮0.5s,然后熄灭0.5s,然后点亮0.5s,然后熄灭0.5s,循环执行。 | 按照设计要求,控制LED闪烁的周期为1秒,则LED灯需要点亮0.5s,然后熄灭0.5s,然后点亮0.5s,然后熄灭0.5s,循环执行。 | ||
行 18: | 行 19: | ||
开发板上晶振为25MHz,0.5s对应晶振12500000个周期的时间,所以计数器对晶振信号计数,当计12500000个数时,控制寄存器翻转。 | 开发板上晶振为25MHz,0.5s对应晶振12500000个周期的时间,所以计数器对晶振信号计数,当计12500000个数时,控制寄存器翻转。 | ||
- | ------ | + | |
- | ===硬件连接:=== | + | ### 4. 硬件连接 |
LED也叫发光二极管,可以把电能转化成光能,因为是二极管的一种,由一个PN接组成,具有单向导电性。它的正向伏安特性曲线很陡,使用时必须串联限流电阻以控制通过二极管的电流,LED的亮度与电流有关,一般LED能够承受的最大电流为20mA(具体需要看使用的LED的参数),本设计使用的限流电阻为1K。下图为LED的硬件电路: | LED也叫发光二极管,可以把电能转化成光能,因为是二极管的一种,由一个PN接组成,具有单向导电性。它的正向伏安特性曲线很陡,使用时必须串联限流电阻以控制通过二极管的电流,LED的亮度与电流有关,一般LED能够承受的最大电流为20mA(具体需要看使用的LED的参数),本设计使用的限流电阻为1K。下图为LED的硬件电路: | ||
行 35: | 行 36: | ||
------ | ------ | ||
- | ===代码设计:=== | + | ### 5. 代码设计 |
==设计文件:== | ==设计文件:== | ||
行 62: | 行 63: | ||
</code> | </code> | ||
\\ | \\ | ||
+ | |||
==测试文件:== | ==测试文件:== | ||
行 87: | 行 89: | ||
模块调用方法如下: | 模块调用方法如下: | ||
<code verilog> | <code verilog> | ||
- | Blink # | + | blink #(.CNT_NUM(10)) blink_uut( |
- | (.CNT_NUM(10)) | + | .clk_in (sys_clk), |
- | Blink_uut | + | .rst_n_in (sys_rst_n), |
- | ( | + | .led_out (led_out) |
- | .clk_in(sys_clk), | + | ); |
- | .rst_n_in(sys_rst_n), | + | |
- | .led_out(led_out) | + | |
- | ); | + | |
</code> | </code> | ||
\\ | \\ | ||
行 102: | 行 101: | ||
^ FPGA管脚 | C1 | B1 | A3 | | ^ FPGA管脚 | C1 | B1 | A3 | | ||
- | ------ | + | |
- | ===仿真结果:=== | + | ### 6. 仿真结果 |
{{:仿真结果.jpg|仿真结果}} | {{:仿真结果.jpg|仿真结果}} | ||
- | ------ | + | |
- | ===资源报告:=== | + | ### 7. 资源报告 |
^ 资源 | 数量 | 比例 | 说明 | | ^ 资源 | 数量 | 比例 | 说明 | | ||
行 116: | 行 115: | ||
^ 时钟频率 | 25MHz | | | | ^ 时钟频率 | 25MHz | | | | ||
- | ------ | + | ### 8. 学习的知识点 |
- | === 学习的知识点: === | + | |
* LED闪烁原理 | * LED闪烁原理 | ||
* FPGA时钟的使用 | * FPGA时钟的使用 | ||
* 时钟分频 | * 时钟分频 | ||
- | ------ | + | ### 9. 参考阅读 |
- | === 参考阅读: === | + | |
* {{:machxo2familydatasheet.pdf|Lattice MachXO2数据手册}} | * {{:machxo2familydatasheet.pdf|Lattice MachXO2数据手册}} | ||
- | ------ | + | ### 10. 相关设计文档 |
- | === 相关设计文档: === | + | |
^ **文件名称** | **功能** | | ^ **文件名称** | **功能** | | ||
^ **[[Blink]].v** | **LED闪烁** | | ^ **[[Blink]].v** | **LED闪烁** | | ||
^ **[[Blink_test]].v** | **测试文件** | | ^ **[[Blink_test]].v** | **测试文件** | | ||
- | ------ | + | ### 11. 扩展实验 |
- | === 扩展实验: === | + | |
XO2 FPGA自带时钟发生器,但其精度较低(5%),对于基本的功能性的实验是够了的,但对于高精度要求的应用,其芯片内部振荡器产生的时钟就无法满足要求,因此在我们的小脚丫开发板上还连接了外部晶振产生的25MHz的时钟信号,在上述的实验中我们采用了25MHz的时钟信号来产生LED的交替控制信号,用户可以尝试采用内部的时钟产生所需要的LED控制信号。 | XO2 FPGA自带时钟发生器,但其精度较低(5%),对于基本的功能性的实验是够了的,但对于高精度要求的应用,其芯片内部振荡器产生的时钟就无法满足要求,因此在我们的小脚丫开发板上还连接了外部晶振产生的25MHz的时钟信号,在上述的实验中我们采用了25MHz的时钟信号来产生LED的交替控制信号,用户可以尝试采用内部的时钟产生所需要的LED控制信号。 | ||