电灯分为两中,第一种纯组合逻辑实现,LED与switch开关各由16个,一一对应,可以直接pin2pin直连,通过SWITCH开关控制
assign led = switch;
另外一种就是通过时序逻辑实现,用时钟频率计数,实现LED交替闪烁
module led_dri(
input clk ,
input rst ,
output [15:0] led
);
//parameter define
parameter CLK_FS = 50_000; //1ms
//reg define
//reg [15:0] led ;
reg [15:0] cnt ;
reg [15:0] tim ;
//wire defien
wire cnt_overflow ;
assign cnt_overflow = (cnt == CLK_FS - 1'b1) ;
//clk div 1ms
always@(posedge clk or posedge rst)
begin
if(rst == 1'b1)
cnt <= 16'd0 ;
else if(cnt_overflow)
cnt <= 16'd0 ;
else
cnt <= cnt + 1'b1 ;
end
//clk div
always@(posedge clk or posedge rst)
begin
if(rst == 1'b1)
tim <= 16'd0 ;
else if(tim >= 16'h2000)
tim <= 16'd0 ;
else
tim <= tim + 1'b1 ;
end
assign led[0] = tim[15] ? 1'b1 : 1'b0;
assign led[1] = tim[14] ? 1'b1 : 1'b0;
assign led[2] = tim[13] ? 1'b1 : 1'b0;
assign led[3] = tim[12] ? 1'b1 : 1'b0;
assign led[15:4] = (tim <= 16'h1000) ? 12'h000 : 12'hfff ;
endmodule
两种功能都比较简单,是否实现LED的闪烁,简单验证单板基本功能。
引用: Fred_1977 发表于 2022-4-11 09:11 我也刚入门FPGA,给你加油,正在学按键如何消抖,努力中。。。。
按键消抖正点原子和黑金好像有例程可以借鉴一下