2012年12月4日 星期二

期末術科(1) 8-LED 霹靂燈

設計一霹靂燈,利用SW[2:0]開關, 驅動8LED -> DE2-70適用

功能如下:


利用SW[0] 控制LED[7]->LED[0] 1sec移動一個位置
利用SW[1] 控制LED[7]<-LED[0] 1sec往右移動一個位置
利用SW[2] 控制LED[7]...LED[0] 1sec閃爍一次ON->OFF->ON
內定值為SW[2]功能

目前為切換功能時需Reset 後讀取SW[2:0]的值


module _8led(CLOCK_50,SW, KEY, LEDR, LEDG );

input  [2:0] SW;   // toggle switches
input  [7:0]  KEY;
input  CLOCK_50;      //Clock 50MHZ
output [17:0] LEDR;   // red LEDs
output [7:0]  LEDG;   // green LEDs


wire  sys_clk;     //系統時脈
wire  rst_n;        // Reset KEY 
reg  [7:0] led;      // reg led
reg  [7:0] led1;     // reg led的 temp
reg  [7:0] led_tmp; // reg led1的 temp


//assign to DE2-70 hardware     
    assign sys_clk = CLOCK_50;   // 系統時脈 50MHZ
    assign rst_n = KEY[0];           //Reset KEY[0]
    

    reg [25:0] count;   //Clock Counter 26bits  
    reg [1:0] flag;      //SW[2:0] 的Key value
    
    assign LEDR = count[25:8];    //Display Counter to LEDR

always @(posedge sys_clk,negedge rst_n)

if(!rst_n) begin //3
count <= 26'b0;            //Pressed Reset KEY
case (SW)                  //Test SW[2:0]
3'b100: 
  begin 
led_tmp<=8'b1111_1111; 
         //SW[2] 控制LED[7]...LED[0] 1sec閃爍一次ON->OFF->ON
flag<=2;
  end
3'b010: 
begin 
led_tmp<=8'b1000_0000;
         //利用SW[1] 控制LED[7]<-LED[0] 1sec往右移動一個位置
flag<=1;
end
3'b001:
begin 
led_tmp<=8'b0000_0001;
     //利用SW[0] 控制LED[7]->LED[0] 1sec移動一個位置
flag<=0;
end
default :
begin 
led_tmp<=8'b1111_1111;
flag<=2;
     //內定值為SW[2]功能
end
    endcase
    led1 <=led_tmp;
   end  //3
else  begin //2
if( count == 26'b00_1111_1111_1111_1111_1111_1111 )
begin  //1
count <= 26'b0; 
case(flag) 
2'd0: led1 <= {led1[6:0],led1[7]};  //0
                //利用SW[0] 控制LED[7]->LED[0] 1sec移動一個位置

2'd1: led1 <= {led1[0],led1[7:1]};  //1
               //利用SW[1] 控制LED[7]<-LED[0] 1sec往右移動一個位置
2'd2: led1 <= ~led1;  //2

               //SW[2] 控制LED[7]...LED[0] 1sec閃爍一次ON->OFF->ON
default:led1 <= ~led1;     //2
endcase
led <=led1;
end //1
else
count <= count + 1; 
end  //2


 assign LEDG =led1;

endmodule



沒有留言:

張貼留言