差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
book_excise_led [2021/08/17 15:10] zili |
book_excise_led [2021/08/17 15:19] (当前版本) zili |
||
---|---|---|---|
行 7: | 行 7: | ||
#### 2. 实验原理 | #### 2. 实验原理 | ||
图6-1给出了开发平台的核心板上LED灯的连接图。从图中可以看出,LED灯的正极连接到了3.3V,负极通过一个下拉电阻连接到了FPGA的管脚。为了点亮LED灯,连接负极的FPGA管脚必须拉低;为了熄灭LED灯,连接负极的FPGA管脚必须拉高。\\ | 图6-1给出了开发平台的核心板上LED灯的连接图。从图中可以看出,LED灯的正极连接到了3.3V,负极通过一个下拉电阻连接到了FPGA的管脚。为了点亮LED灯,连接负极的FPGA管脚必须拉低;为了熄灭LED灯,连接负极的FPGA管脚必须拉高。\\ | ||
- | {{ :1.1.png |}} | + | {{ :1.1.png ||图6 1 LED连接图}} |
为了使LED灯点亮的时间为200ms,那么连接到相应LED负极的FPGA管脚必须拉低200ms。由于核心板上的时钟是50MHz,如果拉低时间为200ms,则需要拉低的时钟周期数为:50,000,000*0.2=10,000,000。为此,需要一个24位(224=16,777,216>10,000,000)的计数器对点亮的时钟周期进行计数,计数器初始值为0,当计数到10,000,000时,则熄灭当前点亮的LED灯,点亮下一个LED灯。 | 为了使LED灯点亮的时间为200ms,那么连接到相应LED负极的FPGA管脚必须拉低200ms。由于核心板上的时钟是50MHz,如果拉低时间为200ms,则需要拉低的时钟周期数为:50,000,000*0.2=10,000,000。为此,需要一个24位(224=16,777,216>10,000,000)的计数器对点亮的时钟周期进行计数,计数器初始值为0,当计数到10,000,000时,则熄灭当前点亮的LED灯,点亮下一个LED灯。 | ||
为了分别控制每个LED灯,定义一个8位的寄存器,寄存器中的每一位分别控制一个LED灯,如果寄存器中的某一位设为0,则点亮相应的LED灯;如果某一位设为1,则熄灭相应的LED灯。 | 为了分别控制每个LED灯,定义一个8位的寄存器,寄存器中的每一位分别控制一个LED灯,如果寄存器中的某一位设为0,则点亮相应的LED灯;如果某一位设为1,则熄灭相应的LED灯。 | ||
行 15: | 行 15: | ||
#### 3. 程序设计 | #### 3. 程序设计 | ||
为了实现对8个LED灯的控制,设计了状态机State,状态机在不同的状态控制不同LED灯点亮。State有8个状态,每个状态停留200毫秒(图6-2)。\\ | 为了实现对8个LED灯的控制,设计了状态机State,状态机在不同的状态控制不同LED灯点亮。State有8个状态,每个状态停留200毫秒(图6-2)。\\ | ||
- | {{:1.2.png?200|}}\\ | + | {{ :1.2.png |图6 2 State状态机转移图}} |
为了控制状态机在每个状态的停留时间,定义了计数器counter,counter从0~10,000,000循环计数,当计数器循环一次,状态State变迁一次。 | 为了控制状态机在每个状态的停留时间,定义了计数器counter,counter从0~10,000,000循环计数,当计数器循环一次,状态State变迁一次。 | ||
整个功能由程序Led_core.v实现,实现模块led_core的信号定义如下: | 整个功能由程序Led_core.v实现,实现模块led_core的信号定义如下: | ||
行 85: | 行 85: | ||
图6-3是用modelsim仿真得到的结果。从图中可以看出,在程序运行的时刻,reset为高时,输出信号LED[7..0]中始终有一个信号为低电平,表示相应的灯亮。由于程序中计数器循环一次的时间太长,所以仿真时不容易看到状态的变化,所以仿真时可以降低计数器的计数值。本例中计数到10时清零。可以看出,计数器计到10时,State的状态转换一次。\\ | 图6-3是用modelsim仿真得到的结果。从图中可以看出,在程序运行的时刻,reset为高时,输出信号LED[7..0]中始终有一个信号为低电平,表示相应的灯亮。由于程序中计数器循环一次的时间太长,所以仿真时不容易看到状态的变化,所以仿真时可以降低计数器的计数值。本例中计数到10时清零。可以看出,计数器计到10时,State的状态转换一次。\\ | ||
- | {{:1.3.png?200|}}\\ | + | {{ :1.3.png |图6 3 modelsim仿真结果}} |
\\ | \\ | ||
\\ | \\ |