天天看点

【FPGA基础快速入门3】实战---流水灯的学习LED灯的硬件设计流水灯代码硬件下载

【FPGA基础快速入门3】实战---流水灯的学习

  • LED灯的硬件设计
    • 系统框图
  • 流水灯代码
  • 硬件下载

LED灯的硬件设计

【FPGA基础快速入门3】实战---流水灯的学习LED灯的硬件设计流水灯代码硬件下载

正点原子开发板里面的流水灯硬件设计如上图,发光二极管的阳极接的是FPGA的管脚,阴极通过一个电阻与地相连接,所以它是高电平点亮,低电平熄灭。

系统框图

【FPGA基础快速入门3】实战---流水灯的学习LED灯的硬件设计流水灯代码硬件下载

流水灯模块由输入和输出信号,其中有一个输入时50Mhz的时钟信号,由系统的晶振提供,还有一个输入时复位信号,是一个低电平有效信号。模块的输出端时4个LED灯。四个LED灯在流水闪烁的时候需要有一段时间间隔,所以需要计时器来计时,计时0.2s然后移位寄存器开始移位寄存器。

流水灯代码

// 流水灯代码
module flow_led(
    input            sys_clk50,                  //定义系统时钟信号
	 input            rst_n,                     //定义复位信号
	 
	 output reg [3:0] led                        //定义四个LED寄存器
);

reg [23:0] cnt;                                 //定义一个24位的计数器,为什么是24位?因为系统频率是50hz,所以周期应为20ns,FPGA的计时为0.2s,计数器的位数就为0.2s/20ns=10000000,用程序员计算器得到24位
always @(posedge sys_clk50 or negedge rst_n)   //沿触发的计时器
begin
  if(!rst_n)
       cnt <= 1'b0;                            //如果按下复位键,则计数器复位为0 
  else 
       if(cnt < 24'd10000000)
		     cnt <= cnt + 1'b1;                 //如果计数器小于0.2s,则计数器累加1
		 else
		     cnt <= 24'd0;                      //计数器等于0.2s时,重新等于0  
end

always @(posedge sys_clk50 or negedge rst_n)    //沿触发的LED灯显示
begin
  if(!rst_n)
       led <= 4'b0001;                          //按下复位键,LED灯显示第一个
  else 
       if(cnt == 24'd10000000)
		     led <= {led[2:0],led[3]};          //计数等于0.2s时,LED灯寄存器内移动,{}为位连接,led[2:0]低位移动,led[3]高位放到低位
		 else
		     led <= led;                        //计数小于0.2s时,LED闪烁不变
end 

endmodule
           

硬件下载

程序写好以后,就需要:

【FPGA基础快速入门3】实战---流水灯的学习LED灯的硬件设计流水灯代码硬件下载

编译成功以后,接下来就可以进行管脚分配:

【FPGA基础快速入门3】实战---流水灯的学习LED灯的硬件设计流水灯代码硬件下载

管脚分配的引脚参考的是FPGA硬件上的管脚。

管脚分配好了以后就可以编译一下整个工程:

【FPGA基础快速入门3】实战---流水灯的学习LED灯的硬件设计流水灯代码硬件下载

编译成功了以后,打开下载界面:

【FPGA基础快速入门3】实战---流水灯的学习LED灯的硬件设计流水灯代码硬件下载

然后打开开发板电源,保证下载线连接,端口选择USB:

【FPGA基础快速入门3】实战---流水灯的学习LED灯的硬件设计流水灯代码硬件下载

最后选择编译好的文件进行下载,点击start,下载成功以后,就可以看到板子上的led灯呈现流水灯效果:

【FPGA基础快速入门3】实战---流水灯的学习LED灯的硬件设计流水灯代码硬件下载

继续阅读