差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
6._led流水灯 [2018/01/03 22:10] group002 |
6._led流水灯 [2019/09/06 11:50] (当前版本) gongyu |
||
---|---|---|---|
行 1: | 行 1: | ||
- | =====LED流水灯===== | + | ####LED流水灯 |
+ | |||
+ | --- | ||
在[[5. 时钟分频|时钟分频]]实验中我们练习了如何处理时钟,接下来我们要学习如何利用时钟来完成时序逻辑。 | 在[[5. 时钟分频|时钟分频]]实验中我们练习了如何处理时钟,接下来我们要学习如何利用时钟来完成时序逻辑。 | ||
+ | |||
\\ | \\ | ||
- | ====硬件说明==== | + | |
- | ------- | + | ####硬件说明 |
+ | |||
+ | --- | ||
流水灯实现是很常见的一个实验,虽然逻辑比较简单,但是里面也包含了实现时序逻辑的基本思想。要用FPGA实现流水灯有很多种方法,在这里我们会用两种不同的方法实现。 | 流水灯实现是很常见的一个实验,虽然逻辑比较简单,但是里面也包含了实现时序逻辑的基本思想。要用FPGA实现流水灯有很多种方法,在这里我们会用两种不同的方法实现。 | ||
\\ | \\ | ||
行 12: | 行 18: | ||
\\ | \\ | ||
2,循环赋值:这是一种很简洁的实现流水灯效果逻辑,就是定义一个8位的变量,在每个时钟上升沿将最低位赋值给最高位,其他位右移一位,这就实现了循环赋值。这8位输出到LED就能实现流水灯。 | 2,循环赋值:这是一种很简洁的实现流水灯效果逻辑,就是定义一个8位的变量,在每个时钟上升沿将最低位赋值给最高位,其他位右移一位,这就实现了循环赋值。这8位输出到LED就能实现流水灯。 | ||
+ | |||
\\ | \\ | ||
- | ====Verilog代码==== | + | ####Verilog代码 |
- | ------ | + | |
+ | --- | ||
模块化设计是用硬件描述语言进行数字电路设计的精髓,代码可重复利用。而且模块化的设计使得程序的结构也很清晰。这里我们首先看看流水灯的模块化设计。利用了之前的3-8译码器和分频器,你需要把这两个程序也拷贝到一个工程。 | 模块化设计是用硬件描述语言进行数字电路设计的精髓,代码可重复利用。而且模块化的设计使得程序的结构也很清晰。这里我们首先看看流水灯的模块化设计。利用了之前的3-8译码器和分频器,你需要把这两个程序也拷贝到一个工程。 | ||
<code verilog> | <code verilog> | ||
行 116: | 行 125: | ||
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> | ||
+ | |||
\\ | \\ | ||
- | ====引脚分配==== | + | |
- | ------ | + | ####引脚分配 |
+ | |||
+ | --- | ||
按照下面表格定义输入输出信号 | 按照下面表格定义输入输出信号 | ||
\\ | \\ | ||
行 133: | 行 147: | ||
配置好以后编译下载程序。可以调整例化分频器时传递的参数来调整流水灯的速度。 | 配置好以后编译下载程序。可以调整例化分频器时传递的参数来调整流水灯的速度。 | ||
+ | |||
\\ | \\ | ||
- | ====小结==== | + | ####小结 |
- | ------ | + | |
+ | --- | ||
掌握了verilog里面例化module的用法,采用模块化设计程序。模块化设计是非常重要的FPGA设计思想。在下一节我们会学习按键的另外用法[[7. 按键消抖|按键消抖]]。 | 掌握了verilog里面例化module的用法,采用模块化设计程序。模块化设计是非常重要的FPGA设计思想。在下一节我们会学习按键的另外用法[[7. 按键消抖|按键消抖]]。 | ||