差别

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

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
6._led流水灯 [2017/03/05 18:57]
zhijun [引脚分配]
6._led流水灯 [2021/08/16 13:51] (当前版本)
gongyu [引脚分配]
行 1: 行 1:
-=====LED流水灯=====+## LED流水灯
  
-在[[5. 时钟分频|时钟分频]]实验中我们联系了如何处理时钟,接下来我们要学习如何利用时钟来完成时序逻辑。+在[[5. 时钟分频|时钟分频]]实验中我们练习了如何处理时钟,接下来我们要学习如何利用时钟来完成时序逻辑。
 \\ \\
-====硬件说明==== + 
--------+### 硬件说明
 流水灯实现是很常见的一个实验,虽然逻辑比较简单,但是里面也包含了实现时序逻辑的基本思想。要用FPGA实现流水灯有很多种方法,在这里我们会用两种不同的方法实现。 流水灯实现是很常见的一个实验,虽然逻辑比较简单,但是里面也包含了实现时序逻辑的基本思想。要用FPGA实现流水灯有很多种方法,在这里我们会用两种不同的方法实现。
 \\  ​ \\  ​
行 14: 行 14:
 \\    \\   
  
-====Verilog代码==== +### Verilog代码
-------+
 模块化设计是用硬件描述语言进行数字电路设计的精髓,代码可重复利用。而且模块化的设计使得程序的结构也很清晰。这里我们首先看看流水灯的模块化设计。利用了之前的3-8译码器和分频器,你需要把这两个程序也拷贝到一个工程。 模块化设计是用硬件描述语言进行数字电路设计的精髓,代码可重复利用。而且模块化的设计使得程序的结构也很清晰。这里我们首先看看流水灯的模块化设计。利用了之前的3-8译码器和分频器,你需要把这两个程序也拷贝到一个工程。
 <code verilog> <code verilog>
行 107: 行 106:
  );                               );                             
   
-        //​1Hz时钟上升沿触发循环赋值 +        //​1Hz时钟上升沿触发循环赋值 
 +        reg [7:0] led;
         always@(posedge clk1h or negedge rst)         always@(posedge clk1h or negedge rst)
  begin  begin
行 115: 行 115:
  led <= {led[0],​led[7:​1]}; ​     //​当时钟上升沿来一次,执行一次赋值,赋值内容是led[0]与led[7:​1]重新拼接成8位赋给led,相当于循环右移  led <= {led[0],​led[7:​1]}; ​     //​当时钟上升沿来一次,执行一次赋值,赋值内容是led[0]与led[7:​1]重新拼接成8位赋给led,相当于循环右移
  end   end
 + ​endmodule
         ​         ​
  </​code>  ​  </​code>  ​
 \\  ​ \\  ​
-====引脚分配==== + 
-------+### 引脚分配 
 按照下面表格定义输入输出信号 按照下面表格定义输入输出信号
 \\ \\
行 128: 行 130:
 |led[1] ​  ​|M12 ​            ​|led[6] ​   |N9     ^ |led[1] ​  ​|M12 ​            ​|led[6] ​   |N9     ^
 |led[2] ​  ​|P12 ​            ​|led[7] ​   |p9     ​^ ​ |led[2] ​  ​|P12 ​            ​|led[7] ​   |p9     ​^ ​
-\\ +
-\\+
  
 配置好以后编译下载程序。可以调整例化分频器时传递的参数来调整流水灯的速度。 配置好以后编译下载程序。可以调整例化分频器时传递的参数来调整流水灯的速度。
 \\ \\
  
-====小结==== +### 小结 
------- + 
-掌握了verilog里面例化module的用法,采用模块化设计程序。模块化设计非常重要的FPGA设计思想。在下一节我们会学习按键的另外用法[[7. 按键消抖|按键消抖]]。+掌握了verilog里面例化module的用法,采用模块化设计程序。模块化设计非常重要的FPGA设计思想。在下一节我们会学习按键的另外用法[[7. 按键消抖|按键消抖]]。