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
相关推荐
現実君3 小时前
关于MCU下位替换FPGA的经验与方案
单片机·嵌入式硬件·fpga开发
Terasic友晶科技5 小时前
【教程】Agilex 5 SoC 的两种启动模式的开发演示(一)(FPGA Configuration First)
fpga开发·agilex 5 soc
ALINX技术博客5 小时前
【黑金云课堂】FPGA技术教程Vitis开发:SD卡WAV文件读取音频播放实验
fpga开发·音视频
仲南音2 天前
Xilinx FPGA——时钟IP核MMCM、PLL
fpga开发
I'm a winner3 天前
基于Xilinx FPGA的LVDS高速串行通信系统(三)--数据训练及握手机制【文末源码】
fpga开发
upper20203 天前
coremark移植坑之-nostartfiles -nostdlib参数
学习·fpga开发·coremark移植·riscv设计
Eloudy3 天前
Vivado 纯命令行构建 FPGA 项目教程
fpga开发
Rambo.xia3 天前
AXI跨时钟域与数据一致性——CDC FIFO深度不够、写后读冒险、多Master仲裁、乱序返回,出了Bug根本查不出来
fpga开发·bug
upper20203 天前
FPGA部署卷积神经网络识别MINST图片
fpga开发·卷积神经网络·minst·minst识别·部署神经网络·神经网络识别图片
你是我的解忧王子4 天前
嵌入式 ADC采样 原始数据分析上层(平均值 波动率 正态分布 线性补偿 系统误差)
fpga开发·数据挖掘·数据分析