FPGA學(xué)習(xí)筆記-點(diǎn)燈

點(diǎn)亮一個(gè)燈:
????????直接assign給輸出信號(hào)賦值一個(gè)高電平然后與板子的led燈綁定管腳約束文件。
////////////////代碼
`timescale 1ns / 1ps
module led_start(
? ? output led
? ? );
? ??
assign led=1;
endmodule
/////////////////代碼
管腳約束文件

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