差别

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

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
上一修订版 两侧同时换到之后的修订记录
6._led流水灯 [2017/03/05 18:57]
zhijun [Verilog代码]
6._led流水灯 [2021/08/16 13:50]
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>  ​
 \\  ​ \\  ​
-====引脚分配==== + 
-------- +### 引脚分配 
-小脚丫上正好有4路按键和4路开关,可以用来作为输入信号分别控制数码管的输出。按照下面表格定义输入输出信号+ 
 +按照下面表格定义输入输出信号
 \\ \\
 ^信号 ​           ^引脚 ​           ^信号 ​             ^引脚 ​   ^    ^信号 ​           ^引脚 ​           ^信号 ​             ^引脚 ​   ^   
行 134: 行 136:
 \\ \\
  
-====小结==== +### 小结 
------- + 
-掌握了verilog里面例化module的用法,采用模块化设计程序。模块化设计非常重要的FPGA设计思想。在下一节我们会学习按键的另外用法[[7. 按键消抖|按键消抖]]。+掌握了verilog里面例化module的用法,采用模块化设计程序。模块化设计非常重要的FPGA设计思想。在下一节我们会学习按键的另外用法[[7. 按键消抖|按键消抖]]。