差别

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

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
流水灯 [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 |   ​| ​   |