ZYNQ初识2(zynq_7010)基于vivado,从PL端调用PS端的时钟

由于需要进行一些FPGA的简单开发,但板载PL端没有焊接晶振,所以需要从PS端借用时钟到PL端使用。

首先新建项目,根据自己的板载选择芯片,我的板载芯片是zynq_7010。

一路next,在自己的vivado的工作文档新建文件夹并给自己新建的项目命名,随后进行芯片选型,由于我的板载芯片是zynq_7010,所以做如下选择。确认无误后点击finish即可。

下面是创建好新工程的主界面,点击创建block_design

根据自己需要是否修改设计名字,不改也可。点击OK后进入如下界面,点击"+",在左上角搜索ZYNQ并选择唯一对应的Precessing System。

随后出现对应Processing System模块,双击进入设置

选择Preihpheral IO PIns,根据板载设置,一般设置好QuadSPI和UART即可简单使用。

随后进入DDR的设置,按如下步骤选择MemoryPart(应是和板载芯片最接近的设置)

随后按如下操作取消勾选,得到最终的PrecessingSystem模块。

右键两个引脚,选择自动接出,如下图

随后点击左上角Sources,选中刚刚创建的bp文件,右击选择生成输出项目

点击Generate即可。

随后继续选中bp文件,右击选择创建顶层文件,点击OK

随后点击创建bit流文件,而后默认点击Yes,跳转后默认点击OK即可,生成文件后,弹出界面选择cancel即可,不需要进行修改。

随后选择File,选择导出,将生成的bit流文件导出到硬件Hardware,默认点击OK即可。但需要勾选中包含流文件(including Stresming file)

随后选择Launch SDK,启动PS端,随后默认点击OK即可。

页面跳转至如下界面:

随后依次点击左上角File,选择New,选择Application Project进行文件创建:

根据自己情况为新创建的文件命名,随后选择提供的空模板,点击Finish即可。

随后单击选择新建好的工程文件夹,找到src文件夹并新建main.c文件

双击打开新建好的main.c文件,发现程序字号显示较小,按下操作调整主界面字号,选择Window->Preference->general->color and font,选择Text Font,点击左侧Edit,根据需要修改即可。

随后将下面的几行代码复制到新建的main.c文件中,保存(运行)。

cpp 复制代码
int main(void){
  while(1){
  }
}

随后选择工程文件,选择Run as->Run Configuration

选中最下面的选项,双击后,勾选右侧界面的Reset entire system和ProgramFPGA,随后点击run

随后切换到PL端,给工程文件添加现有的LED闪烁的代码文件(源文件):

添加完后在Diagram主界面中右击选择添加model,将刚刚添加到工程文件中的led闪烁文件模块加入到Diagram界面并连线,将复位和led输出两个引脚选中,并点击Make Externalm,最终如下图:

随后点击右侧的Run Synthesis,进行综合分析并进行IO引脚的配置(结合板载的原理图)

引脚配置完成后如下图:

随后将保存的文件自行命名(不需要和工程文件名字统一,但不可以是中文字符),随后点击OK

点击左侧左下角的生成bit流文件,默认点击OK,等待生成即可。

随后选中OpenTarget,选择自动连接 auto connect

随后依次点击Program device ->Program来将生成后的bit流文件下载烧写至板载中。

随后则可以观察到板载小灯闪烁,上述过程成功。

另外在下面附上FPGA两个小灯交替闪烁的代码:

复制代码
`timescale 1ns / 1ps
module test_led003(
  input   sys_clk,
  input   sys_rst_n,

  output [1:0] led
);
 reg [25:0] cnt;
assign led = (cnt<26'd25_000_000) ? 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'd50_000_000)
        cnt <= cnt + 1'b1;
      else
        cnt <= 26'd0;
    end
endmodule

另附上修改后的三个小灯连续闪烁的代码:(注意修改对应的管脚分配)

复制代码
`timescale 1ns / 1ps
module test_006(
  input   sys_clk,
  input   sys_rst_n,

  output [2:0] led // 修改为3位宽,控制三个LED
);
//reg define
reg [25:0] cnt;
wire [2:0] led_state; // 定义一个3位宽的wire,用于存储LED状态

// 使用case语句来实现三个LED的交替闪烁
assign led_state = (cnt > 26'd25_000_000) ? 3'b001 : // 当计数器大于25,000,000时,LED1亮
                  (cnt > 26'd12_500_000) ? 3'b010 : // 当计数器大于12,500,000时,LED2亮
                  3'b100; // 否则,LED3亮

assign led = led_state; // 将led_state的值赋给led输出

always @ (posedge sys_clk or negedge sys_rst_n) begin
  if (!sys_rst_n)
    cnt <= 26'd0;
  else if (cnt < 26'd50_000_000)
    cnt <= cnt + 1'b1;
  else
    cnt <= 26'd0;
end
endmodule
相关推荐
碎碎思2 小时前
FPGA+ESP32 = GameBoy 是你的童年吗?
fpga开发
搬砖的小码农_Sky3 小时前
FPGA:XILINX FPGA产品线以及器件选型建议
嵌入式硬件·fpga开发·硬件架构·硬件工程
YprgDay3 小时前
【Lattice FPGA 开发】Diamond在线调试Reveal逻辑乱跳的解决
fpga开发·diamond·reveal
MVP-curry-萌神3 小时前
FPGA图像处理(六)------ 图像腐蚀and图像膨胀
图像处理·人工智能·fpga开发
&Cheems4 小时前
ZYNQ笔记(二十):Clocking Wizard 动态配置
笔记·fpga开发
怪小庄吖4 小时前
7系列 之 I/O标准和终端技术
经验分享·笔记·fpga开发·硬件架构·硬件工程·xilinx 7系列 fpga·i/o标准和终端技术
爱学习的张哥4 小时前
专栏项目框架介绍
git·fpga开发·udp·ddr·gt收发器
南山维拉14 小时前
【AXI总线专题】AXI-FULL-Master
fpga开发·zynq·axi-full
矿渣渣15 小时前
ZYNQ处理器在发热后功耗增加的原因分析及解决方案
嵌入式硬件·fpga开发·zynq
起床学FPGA19 小时前
异步FIFO的学习
学习·fpga开发