这是参照手把手教你学习FPGA—LED篇 进行的实验
依然是一个模拟实验,led输出反转表示led闪烁
代码基本没动,只是仿真时候如果分频太高的话不容易看出来led端的波形,将分频比降低到了32分频。
仿真时,将sys_clk设置为时钟。先将sys_rstn强制设置为0,运行一下停止后再将其设置为1.即先复位一下,才能是led开始工作
设置时钟:
设置复位信号:
仿真时实验结果如图:
程序代码如下,要注意两个啊always模块是并行执行的与c语言有区别:
module LED_Flicker(sys_clk,sys_rstn,led);
//变量定义
input sys_clk;
input sys_rstn;
output [7:0] led;
//定义寄存器
reg [7:0] led;
reg [5:0] delay_cnt;
//两个always模块并行执行
always@(posedge sys_clk or negedge sys_rstn)
begin
if(!sys_rstn)
begin
delay_cnt <= 5'd0;
end
else
begin
if(delay_cnt == 5'd16)
delay_cnt <= 5'd0;
else
delay_cnt <= delay_cnt+1'b1;
end
end
always@(posedge sys_clk or negedge sys_rstn)
begin
if(!sys_rstn)
led <= 8'b11111111;
else
if(delay_cnt == 5'd16)
led <=~led;
else
led <= led;
end
endmodule
共4条
1/1 1 跳转至页
2楼
参照版主的流水灯实验。这个实验基本就是分频和移位操作。
理解了闪烁灯之后,这个实验就很容易做了。
仿真波形如下,LED输出用的8位2进制显示,可以清楚看到哪一个灯亮哪一个等灭:
代码如下:
module LED_watter(sys_clk,sys_rstn,led);
//变量定义
input sys_clk;
input sys_rstn;
output [7:0] led;
//定义寄存器
reg [7:0] led;
reg [5:0] delay_cnt;
//两个always模块并行执行
always@(posedge sys_clk or negedge sys_rstn)
begin
if(!sys_rstn)
begin
delay_cnt <= 5'd0;
end
else
begin
if(delay_cnt == 5'd16)
delay_cnt <= 5'd0;
else
delay_cnt <= delay_cnt+1'b1;
end
end
always@(posedge sys_clk or negedge sys_rstn)
begin
if(!sys_rstn)
led <= 8'b11111111;
else
begin
if(delay_cnt == 5'd16)
begin
led <= led<<1;
if(led == 8'b00000000)
led <= 8'b11111111;
end
end
end
endmodule
理解了闪烁灯之后,这个实验就很容易做了。
仿真波形如下,LED输出用的8位2进制显示,可以清楚看到哪一个灯亮哪一个等灭:
代码如下:
module LED_watter(sys_clk,sys_rstn,led);
//变量定义
input sys_clk;
input sys_rstn;
output [7:0] led;
//定义寄存器
reg [7:0] led;
reg [5:0] delay_cnt;
//两个always模块并行执行
always@(posedge sys_clk or negedge sys_rstn)
begin
if(!sys_rstn)
begin
delay_cnt <= 5'd0;
end
else
begin
if(delay_cnt == 5'd16)
delay_cnt <= 5'd0;
else
delay_cnt <= delay_cnt+1'b1;
end
end
always@(posedge sys_clk or negedge sys_rstn)
begin
if(!sys_rstn)
led <= 8'b11111111;
else
begin
if(delay_cnt == 5'd16)
begin
led <= led<<1;
if(led == 8'b00000000)
led <= 8'b11111111;
end
end
end
endmodule
共4条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |