这是参照手把手教你学习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网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 | |
【FRDM-MCXN947评测】核间通信MUTEX被打赏50分 |