这是参照手把手教你学习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网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【笔记】生成报错synthdesignERROR被打赏50分 | |
【STM32H7S78-DK评测】LTDC+DMA2D驱动RGBLCD屏幕被打赏50分 | |
【STM32H7S78-DK评测】Coremark基准测试被打赏50分 | |
【STM32H7S78-DK评测】浮点数计算性能测试被打赏50分 | |
【STM32H7S78-DK评测】Execute in place(XIP)模式学习笔记被打赏50分 | |
每周了解几个硬件知识+buckboost电路(五)被打赏10分 | |
【换取逻辑分析仪】RA8 PMU 模块功能寄存器功能说明被打赏20分 | |
野火启明6M5适配SPI被打赏20分 | |
NUCLEO-U083RC学习历程2-串口输出测试被打赏20分 | |
【笔记】STM32CUBEIDE的Noruletomaketarget编译问题被打赏50分 |