差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
后一修订版 两侧同时换到之后的修订记录
点亮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控制信号。