功能如下:
利用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
沒有留言:
張貼留言