http://www.worlduc.com/blog2012.aspx?bid=16824701
設計8只LED迴圈燈控制電路程式,並下載到FPGA開發板中驗證。
要求:1、輸入時鐘為50M HZ;2、 LED為共陰;3、按動ON/OFF鍵, 可實現啟動/停止LED迴圈。
module ledshift(clk_50M ,ON_OFF,LED);
input clk_50M ,ON_OFF;
output[7:0] LED ;
reg[7:0] LED ;
reg clk_10,clk_1,shift_en;
input clk_
output[7:0] LED ;
reg[7:0] LED ;
reg clk_10,clk_1,shift_en;
/*1/5000000分頻模組,產生10HZ時鐘,用於按鍵查詢*/
reg[21:0] cnt1;
always@(posedge clk_50M )
if(cnt1==2499999)
begin
cnt1<=0;
clk_10<=~clk_10;
end
else
cnt1<=cnt1+1'b1;
reg[21:0] cnt1;
always@(posedge clk_
if(cnt1==2499999)
begin
cnt1<=0;
clk_10<=~clk_10;
end
else
cnt1<=cnt1+1'b1;
/*1/10分頻模組,產生1HZ時鐘,用於LED迴圈*/
reg[2:0] cnt2;
always@(posedge clk_10)
if(cnt2==4)
begin
cnt2<=0;
clk_1<=~clk_1;
end
else
cnt2<=cnt2+1'b1;
reg[2:0] cnt2;
always@(posedge clk_10)
if(cnt2==4)
begin
cnt2<=0;
clk_1<=~clk_1;
end
else
cnt2<=cnt2+1'b1;
/*按鍵識別模組,CLK_10時鐘查詢按鍵動作*/
/*並產生LED迴圈使能信號shift_en*/
reg A,B;
wire C;
always@(posedge clk_10)
begin
A<=ON_OFF; B<=A;
end
assign C=A&&(~B);
always@(posedge C)
shift_en<=~shift_en;
/*並產生LED迴圈使能信號shift_en*/
reg A,B;
wire C;
always@(posedge clk_10)
begin
A<=ON_OFF; B<=A;
end
assign C=A&&(~B);
always@(posedge C)
shift_en<=~shift_en;
/*迴圈移位元模組*/
always@(posedge clk_1)
begin
if(shift_en==1'b0)//shift_en=0移位
if(LED==8'b00000000||LED==8'b10000000)
LED<=8'b00000001;
else
LED<=LED<<1;
else ;//shift_en=1停止移位
end
always@(posedge clk_1)
begin
if(shift_en==1'b0)//shift_en=0移位
if(LED==8'b00000000||LED==8'b10000000)
LED<=8'b00000001;
else
LED<=LED<<1;
else ;//shift_en=1停止移位
end
endmodule
沒有留言:
張貼留言