FPGA學習筆記-點燈
點亮一個燈:
????????直接assign給輸出信號賦值一個高電平然后與板子的led燈綁定管腳約束文件。
////////////////代碼
`timescale 1ns / 1ps
module led_start(
? ? output led
? ? );
? ??
assign led=1;
endmodule
管腳約束文件

流水燈實現(xiàn):
????????一個1s跳一次的流水燈,需要一個1s的計時器,然后利用多分支語句每隔一秒換一個燈。
////////////////case實現(xiàn)
`timescale 1ns / 1ps
module ledRE(
? ? input sysclk,//時鐘
? ? input rst_n,//復位
? ? output reg [3:0] led//4位寬輸出的寄存器
? ? );
parameter delay = 50_000_000;//50m板子晶振1S的時間
reg [31:0] cnt;//1S計時器
reg [1:0] data;//case當前狀態(tài)
? ??
? ? always@(posedge sysclk or negedge rst_n)begin? ?//1s計時器
? ? ? ? if (!rst_n)// 復位觸發(fā)
? ? ? ? ? ? cnt<=0;
? ? ? ? else if (cnt == delay-1)//計時滿1S
? ? ? ? ? ? cnt<=0;
? ? ? ? else
? ? ? ? ? ? cnt<=cnt+1;
? ? end
? ??
always@(posedge sysclk or negedge rst_n)begin//1s計數(shù)器
? ? if(!rst_n)//復位同時賦初始值
? ? ? ? data<=0;
? ? else if(cnt == delay-1)//滿1S的時候變量自增
? ? ? ? data<=data+1;
? ? else if(data == 3 && cnt == delay-1)
? ? ? ? data<=0;
? ? else
? ? ? ? data<=data;
end
? ? always@(*)begin//組合模塊,*號代表所有用到的字符
? ? ? ? case(data)
? ? ? ? ? ? 0:led=4'b1000;
? ? ? ? ? ? 1:led=4'b0100;
? ? ? ? ? ? 2:led=4'b0010;
? ? ? ? ? ? 3:led=4'b0001;
? ? ? ? default:led=led;
? ? ? ? endcase
? ? end
endmodule
////////////////位拼接實現(xiàn)
`timescale 1ns / 1ps
module ledRE(
? ? input sysclk,//時鐘
? ? input rst_n,//復位
? ? output reg [3:0] led//4位寬輸出的寄存器
? ? );
? ? parameter delay = 50_000_000;//50m板子晶振1S的時間
? ? reg [31:0] cnt;//1S計時器
? ??
? ? always@(posedge sysclk or negedge rst_n)begin?//1s計時器
? ? ? ? if (!rst_n)// 復位觸發(fā)
? ? ? ? ? ? cnt<=0;
? ? ? ? else if (cnt == delay-1)//計時滿1S
? ? ? ? ? ? cnt<=0;
? ? ? ? else
? ? ? ? ? ? cnt<=cnt+1;
? ? end
? ??
? ? always@(posedge sysclk or negedge rst_n)begin//位拼接
? ? ? ? if (!rst_n)
? ? ? ? ? ? led<=4'b0001;
? ? ? ? else if (cnt == delay-1)
? ? ? ? ? ? led<={led[0],led[3:1]};//把低位提出來拼到高位
? ? ? ? else
? ? ? ? ? ? led<=led;
? ? end
endmodule