这节课的名字本来是想写为LED,但这一课里除了LED也有按键,又想换为GPIO控制,但关于PL的GPIO控制,不应该这么草率和简单,而且这一课有很多和ZYNQ或者PL关联性不强的东西要说。
所以我写了删删了写改了好几遍,终于定为《PL第一课》,而这节课就是讲ZYNQ的PL开发如何学习。
【正点原子】领航者ZYNQ开发板资料v2,1_领航者ZYNQ之FPGA开发指南_V2.0.pdf
其实在第一遍学习ZYNQ的时候我就已经学过了一遍PL,但由于当时公司项目紧而我本身只做PS端的工作,所以学的诚惶诚恐,学的草草了事,而这么久过去了,当我回过头来再学PL端时,没了那些压力,也多了一些经验,所以我给的第一个建议就是放轻松。
看懂原理图很重要,可能很多人用正点原子的原理图,所以管脚都是直接按照文档来配置,原理图更是打都没有打开过,比如最基本的sys_clk,由于我拿到的这块板子并不是什么正规开发板,所以我第一时间用的时候也要去看一下晶振产生的时钟在哪里连接到了PL端
虽然管脚配置的代码和步骤本身很简单,但是要通过原理图自己清楚地知道应该怎么配置是非常重要的,这也能让你更清楚的知道自己在做什么,而不是一味地按照文档得到结果,而这也引出下一部分我要说的——
对于PL的学习,甚至整个ZYNQ的学习,其实底层都并不复杂,但现在太多人无法沉下心来恨不得一小时把最后一章的实验都做完但连最简单的一些东西都无法独立完成,在开发板上抄代码抄的风生水起,突然换到一块同样芯片的其他板子就泻火了,更别说往其他类似的板卡上迁移时出现的问题。
所以,学习不能不求甚解,而是要求甚解,当然事情都是有一个度的,我们不能遇到困难就偷看答案,也不能揪着所有问题停滞不前,要自己学会把控。
具体查看正点原子参考资料PDF的4.2节,此处只粘贴代码,后续会单独开一节GPIO的课程集中讲解。
`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2023/12/14 23:29:52
// Design Name:
// Module Name: led_twinkle
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//
module led_twinkle(
input sys_clk,
input sys_rst_n,
output [1:0] led
);
reg [25:0] cnt;
assign led = (cnt < 26'd2500_0000) ? 2'b01: 2'b10;
always @ (posedge sys_clk or negedge sys_rst_n) begin
if(!sys_rst_n)
cnt <= 26'd0;
else if(cnt < 26'd5000_0000)
cnt <= cnt + 1'b1;
else
cnt <= 26'd0;
end
endmodule