差别
这里会显示出您选择的修订版和当前版本之间的差别。
| 两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
|
流水灯 [2016/06/12 12:24] gongyu [工作原理] |
流水灯 [2021/09/13 01:39] (当前版本) gongyu |
||
|---|---|---|---|
| 行 1: | 行 1: | ||
| - | =====流水灯===== | + | ## 流水灯 |
| ====硬件平台==== | ====硬件平台==== | ||
| 行 8: | 行 8: | ||
| ====设计要求==== | ====设计要求==== | ||
| ------ | ------ | ||
| - | - 掌握任意数分频功能的设计 | + | - 掌握任意数分频计数功能的设计 |
| - 掌握时序逻辑的设计 | - 掌握时序逻辑的设计 | ||
| - 掌握case的基本语法 | - 掌握case的基本语法 | ||
| 行 40: | 行 40: | ||
| {{ :流水灯程序设计.jpg |流水灯程序设计}} | {{ :流水灯程序设计.jpg |流水灯程序设计}} | ||
| - | 为了实现对8个LED的控制,我们设计了25位的计数器cnt进行1s周期的循环计数,同时我们定义了一个4位寄存器led_cnt作为状态机的状态控制流水灯的闪烁。状态机共有8个状态,每一个状态对应点亮一个LED灯。 | + | 为了实现对8个LED的控制,我们设计了25位的计数器cnt进行1s周期的循环计数,同时我们定义了一个3位寄存器led_cnt作为状态机的状态控制流水灯的闪烁。状态机共有8个状态,每一个状态对应点亮一个LED灯。 |
| 首先是计数器的设计,计数器的计数范围为0~CNT_NUM-1,为了实现每个LED灯1秒的点亮时间,设计文件代码中我们定义参数CNT_NUM为25000000,但是在仿真文件调用设计文件时,为了方便仿真,我们会将参数CNT_NUM重新赋值为10. | 首先是计数器的设计,计数器的计数范围为0~CNT_NUM-1,为了实现每个LED灯1秒的点亮时间,设计文件代码中我们定义参数CNT_NUM为25000000,但是在仿真文件调用设计文件时,为了方便仿真,我们会将参数CNT_NUM重新赋值为10. | ||
| 行 60: | 行 60: | ||
| <code verilog> | <code verilog> | ||
| - | reg [3:0] led_cnt = 4'd0; | + | reg [2:0] led_cnt = 3'd0; |
| always@(posedge clk_in or negedge rst_n_in) begin | always@(posedge clk_in or negedge rst_n_in) begin | ||
| if(!rst_n_in) begin | if(!rst_n_in) begin | ||
| - | led_cnt <= 4'd0; | + | led_cnt <= 3'd0; |
| end else if(cnt==CNT_NUM-1) begin | end else if(cnt==CNT_NUM-1) begin | ||
| - | if(led_cnt==4'd7) led_cnt <= 4'd0; | + | if(led_cnt==3'd7) led_cnt <= 3'd0; |
| - | else led_cnt <= led_cnt + 4'd1; | + | else led_cnt <= led_cnt + 3'd1; |
| end | end | ||
| end | end | ||
| 行 76: | 行 76: | ||
| always@(led_cnt) begin | always@(led_cnt) begin | ||
| case(led_cnt) | case(led_cnt) | ||
| - | 4'd0: led_out = 8'b1111_1110; | + | 3'd0: led_out = 8'b1111_1110; |
| - | 4'd1: led_out = 8'b1111_1101; | + | 3'd1: led_out = 8'b1111_1101; |
| - | 4'd2: led_out = 8'b1111_1011; | + | 3'd2: led_out = 8'b1111_1011; |
| - | 4'd3: led_out = 8'b1111_0111; | + | 3'd3: led_out = 8'b1111_0111; |
| - | 4'd4: led_out = 8'b1110_1111; | + | 3'd4: led_out = 8'b1110_1111; |
| - | 4'd5: led_out = 8'b1101_1111; | + | 3'd5: led_out = 8'b1101_1111; |
| - | 4'd6: led_out = 8'b1011_1111; | + | 3'd6: led_out = 8'b1011_1111; |
| - | 4'd7: led_out = 8'b0111_1111; | + | 3'd7: led_out = 8'b0111_1111; |
| default: led_out = 8'b1111_1111; | default: led_out = 8'b1111_1111; | ||
| endcase | endcase | ||
| 行 114: | 行 114: | ||
| ^ 资源 | 数量 | 比例 | 说明 | | ^ 资源 | 数量 | 比例 | 说明 | | ||
| - | ^ LUTs | 28 | 4% | | | + | ^ LUTs | 27 | 4% | | |
| - | ^ 寄存器 | 33 | 2% | | | + | ^ 寄存器 | 28 | 2% | | |
| ^ 存储器 | 0 | 0% | | | ^ 存储器 | 0 | 0% | | | ||
| ^ IO管脚 | 10 | | | | ^ IO管脚 | 10 | | | | ||