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
相关推荐
海涛高软14 小时前
FPGA同步复位和异步复位
fpga开发
FakeOccupational1 天前
fpga系列 HDL:verilog 常见错误与注意事项 quartus13 bug 初始失效 reg *** = 1;
fpga开发·bug
zxfeng~1 天前
AG32 FPGA 的 Block RAM 资源:M9K 使用
fpga开发·ag32
whik11941 天前
FPGA 开发工作需求明确:关键要点与实践方法
fpga开发
whik11941 天前
FPGA开发中的团队协作:构建高效协同的关键路径
fpga开发
南棱笑笑生1 天前
20250117在Ubuntu20.04.6下使用灵思FPGA的刷机工具efinity刷机
fpga开发
我爱C编程1 天前
基于FPGA的BPSK+costas环实现,包含testbench,分析不同信噪比对costas环性能影响
fpga开发·verilog·锁相环·bpsk·costas环
移知2 天前
备战春招—数字IC、FPGA笔试题(2)
fpga开发·数字ic
楠了个难2 天前
以太网实战AD采集上传上位机——FPGA学习笔记27
笔记·学习·fpga开发
博览鸿蒙3 天前
FPGA工程师有哪些?(设计、验证与应用)
fpga开发