基於FPGA的花樣流水燈


     今天一個學弟來問我關於狀態機的事,我就給他講了下經典的三段式狀態機,然后就讓他試着用狀態機去點亮幾個LED燈。

     狀態一:讓所有的燈全部熄滅;狀態二:全部的燈按照奇偶位的來進行閃爍;狀態三:全部的燈從左邊開始亮,一直到右邊;狀態四:全部的燈從右邊開始亮直到左邊。他寫了一個小時左右還是做不出來,一氣之下,我自己來寫,結果我自己也沒寫出來,我覺得是狀態跳轉的太快了,所以導致LED看起來不清楚。

     於是,我就用序列機寫了一個花樣流水燈。效果是,開始二十六個燈全部按照奇偶位閃爍八次,然后從左邊依次點亮所有的LED燈,再從右邊依次點亮所有的LED燈,然后就是普通的流水燈了,一直循環下去。

     代碼比較簡單,就不解釋了。剛才導師到酒店里打包回來了一大桌子菜,吃的有點小撐,有一個同學勸我多吃一些,我就說沒有干體力勞動,不用多吃,導師就說,干體力活的吃白饅頭就行,寫代碼的消耗更大,要吃肉,終於找到一個能解釋為什么我吃這么多了,不是因為貪吃,二十確實是處在巨大消耗當中呀。

     

  1 module flash_LED(
  2   clk,
  3   rst_n,
  4   LED,
  5 );
  6 
  7 input clk;
  8 input rst_n;
  9 output reg[25:0] LED;
 10 
 11 reg[27:0] cnt;
 12 
 13 always@(posedge clk or negedge rst_n)
 14   if(!rst_n)
 15     cnt <= 28'd0;
 16   else if(cnt == 4999999)               //100ms
 17     cnt <= 28'd0;
 18   else
 19     cnt <= cnt + 1'b1;
 20      
 21 reg div_clk;
 22 always@(posedge clk or negedge rst_n)    //10Hz 分頻
 23   if(!rst_n)
 24     div_clk <= 0;
 25   else if(cnt == 4999999)
 26     div_clk <= ~div_clk;
 27   else
 28     div_clk <= div_clk;
 29 
 30 reg[6:0] counter;
 31 always@(posedge div_clk or negedge rst_n)  //序列機
 32   if(!rst_n)
 33     counter <= 7'd0;
 34   else if(counter == 113)
 35     counter <= 7'd0;
 36   else
 37     counter <= counter + 1'b1;
 38      
 39 always@(posedge clk or negedge rst_n)
 40   if(!rst_n)
 41     LED <= 26'b000000000000000000000000000;
 42   else begin
 43     case(counter)
 44         0:LED <= 26'b01010101010101010101010101;
 45         1:LED <= 26'b10101010101010101010101010;
 46         2:LED <= 26'b01010101010101010101010101;
 47         3:LED <= 26'b10101010101010101010101010;
 48         4:LED <= 26'b01010101010101010101010101;
 49         5:LED <= 26'b10101010101010101010101010;
 50         6:LED <= 26'b01010101010101010101010101;
 51         7:LED <= 26'b10101010101010101010101010;
 52         8:LED <= 26'b00000000000000000000000001;
 53         9:LED <= 26'b00000000000000000000000011;
 54         10:LED <= 26'b00000000000000000000000111;
 55         11:LED <= 26'b00000000000000000000001111;
 56         12:LED <= 26'b00000000000000000000011111;
 57         13:LED <= 26'b00000000000000000000111111;
 58         14:LED <= 26'b00000000000000000001111111;
 59         15:LED <= 26'b00000000000000000011111111;
 60         16:LED <= 26'b00000000000000000111111111;
 61         17:LED <= 26'b00000000000000001111111111;
 62         18:LED <= 26'b00000000000000011111111111;
 63         19:LED <= 26'b00000000000000111111111111;
 64         20:LED <= 26'b00000000000001111111111111;
 65         21:LED <= 26'b00000000000011111111111111;
 66         22:LED <= 26'b00000000000111111111111111;
 67         23:LED <= 26'b00000000001111111111111111;
 68         24:LED <= 26'b00000000011111111111111111;
 69         25:LED <= 26'b00000000111111111111111111;
 70         26:LED <= 26'b00000011111111111111111111;
 71         27:LED <= 26'b00000111111111111111111111;
 72         28:LED <= 26'b00001111111111111111111111;
 73         29:LED <= 26'b00011111111111111111111111;
 74         30:LED <= 26'b00111111111111111111111111;
 75         31:LED <= 26'b01111111111111111111111111;
 76         32:LED <= 26'b11111111111111111111111111;
 77         33:LED <= 26'b01111111111111111111111111;
 78         34:LED <= 26'b00111111111111111111111111;
 79         35:LED <= 26'b00011111111111111111111111;
 80         36:LED <= 26'b00001111111111111111111111;
 81         37:LED <= 26'b00000111111111111111111111;
 82         38:LED <= 26'b00000011111111111111111111;
 83         39:LED <= 26'b00000001111111111111111111;
 84         40:LED <= 26'b00000000111111111111111111;
 85         41:LED <= 26'b00000000011111111111111111;
 86         42:LED <= 26'b00000000001111111111111111;
 87         43:LED <= 26'b00000000000111111111111111;
 88         44:LED <= 26'b00000000000011111111111111;
 89         45:LED <= 26'b00000000000001111111111111;
 90         46:LED <= 26'b00000000000000111111111111;
 91         47:LED <= 26'b00000000000000011111111111;
 92         48:LED <= 26'b00000000000000001111111111;
 93         49:LED <= 26'b00000000000000000111111111;
 94         50:LED <= 26'b00000000000000000011111111;
 95         51:LED <= 26'b00000000000000000001111111;
 96         52:LED <= 26'b00000000000000000000111111;
 97         53:LED <= 26'b00000000000000000000011111;
 98         54:LED <= 26'b00000000000000000000001111;
 99         55:LED <= 26'b00000000000000000000000111;
100         56:LED <= 26'b00000000000000000000000011;
101         57:LED <= 26'b00000000000000000000000001;
102         58:LED <= 26'b01010101010101010101010101;
103         59:LED <= 26'b10101010101010101010101010;
104         60:LED <= 26'b01010101010101010101010101;
105         61:LED <= 26'b10101010101010101010101010;
106         62:LED <= 26'b00000000000000000000000001;
107         63:LED <= 26'b00000000000000000000000010;
108         64:LED <= 26'b00000000000000000000000100;
109         65:LED <= 26'b00000000000000000000001000;
110         66:LED <= 26'b00000000000000000000010000;
111         67:LED <= 26'b00000000000000000000100000;
112         68:LED <= 26'b00000000000000000001000000;
113         69:LED <= 26'b00000000000000000010000000;
114         70:LED <= 26'b00000000000000000100000000;
115         71:LED <= 26'b00000000000000001000000000;
116         72:LED <= 26'b00000000000000010000000000;
117         73:LED <= 26'b00000000000000100000000000;
118         74:LED <= 26'b00000000000001000000000000;
119         75:LED <= 26'b00000000000010000000000000;
120         76:LED <= 26'b00000000000100000000000000;
121         77:LED <= 26'b00000000001000000000000000;
122         78:LED <= 26'b00000000010000000000000000;
123         79:LED <= 26'b00000000100000000000000000;
124         80:LED <= 26'b00000001000000000000000000;
125         81:LED <= 26'b00000010000000000000000000;
126         82:LED <= 26'b00000100000000000000000000;
127         83:LED <= 26'b00001000000000000000000000;
128         84:LED <= 26'b00010000000000000000000000;
129         85:LED <= 26'b00100000000000000000000000;
130         86:LED <= 26'b01000000000000000000000000;
131         87:LED <= 26'b10000000000000000000000000;
132         88:LED <= 26'b01000000000000000000000000;
133         89:LED <= 26'b00100000000000000000000000;
134         90:LED <= 26'b00010000000000000000000000;
135         91:LED <= 26'b00001000000000000000000000;
136         92:LED <= 26'b00000100000000000000000000;
137         93:LED <= 26'b00000010000000000000000000;
138         94:LED <= 26'b00000001000000000000000000;
139         95:LED <= 26'b00000000100000000000000000;
140         96:LED <= 26'b00000000010000000000000000;
141         97:LED <= 26'b00000000001000000000000000;
142         98:LED <= 26'b00000000000100000000000000;
143         99:LED <= 26'b00000000000010000000000000;
144         100:LED <= 26'b00000000000010000000000000;
145         101:LED <= 26'b00000000000001000000000000;
146         102:LED <= 26'b00000000000000100000000000;
147         103:LED <= 26'b00000000000000010000000000;
148         104:LED <= 26'b00000000000000001000000000;
149         105:LED <= 26'b00000000000000000100000000;
150         106:LED <= 26'b00000000000000000010000000;
151         107:LED <= 26'b00000000000000000001000000;
152         108:LED <= 26'b00000000000000000000100000;
153         109:LED <= 26'b00000000000000000000010000;
154         110:LED <= 26'b00000000000000000000001000;
155         111:LED <= 26'b00000000000000000000000100;
156         112:LED <= 26'b00000000000000000000000010;
157         113:LED <= 26'b00000000000000000000000001;
158         default:LED<=26'b00000000000000000000000000;
159      endcase
160     end
161 endmodule

 

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM