如何在 Zynq PS 端使用 wiz_clk 动态配置:

这篇具有很好参考价值的文章主要介绍了如何在 Zynq PS 端使用 wiz_clk 动态配置:。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

首先,您需要在 Vivado 中创建一个包含 wiz_clk 的设计。这通常包括:

 文章来源地址https://www.toymoban.com/news/detail-527793.html

Zynq Processing System (PS)

Clocking Wizard (wiz_clk)

AXI Interconnect(如果需要访问 PL 中的其他 IP)

配置 Clocking Wizard (wiz_clk) 以根据您的硬件需求生成所需的时钟。

 

在 Vivado 中生成 Bitstream,并导出硬件描述文件(例如,用于 PetaLinux 的 .hdf 文件)。

 

使用 PetaLinux 创建一个项目,并使用导出的硬件描述文件。

 

在 PetaLinux 项目中的设备树文件(system-user.dtsi)中,确保已添加 Clocking Wizard 的节点:

 

Copy

&clk_wiz_0 {

    status = "okay";

};

编译并部署 PetaLinux 镜像到 Zynq 设备。

 

在 PetaLinux 中,编写一个 C 程序(例如 clock_config.c),以动态配置 wiz_clk。

 

// Constants for Zynq-7020 PLL hardware parameters // Reference: Xilinx Zynq-7000 SoC Technical Reference Manual (UG585)

#define MIN_VCO_FREQ 600.0

// Minimum VCO frequency in MHz

#define MAX_VCO_FREQ 1200.0

// Maximum VCO frequency in MHz

#define MIN_CLKFBOUT_MULT 2

// Minimum CLKFBOUT multiplier value

#define MAX_CLKFBOUT_MULT 64

// Maximum CLKFBOUT multiplier value

#define MIN_DIVCLK_DIVIDE 1 // Minimum input clock divider value

#define MAX_DIVCLK_DIVIDE 106 // Maximum input clock divider value

#define MIN_OUTPUT_FREQ 10.0 // Minimum output frequency in MHz

#define MAX_OUTPUT_FREQ 800.0 // Maximum output frequency in MHz

 

// Calculate the register value for a given output frequency

unsigned int calculate_clk_wiz_reg_value(double input_freq, double output_freq) {

    unsigned int clkout0_divide = 1;

    unsigned int clkfbout_mult = 1;

    unsigned int divclk_divide = 1;

 

    double best_err = 1e9;

    double target_vco_freq = output_freq * clkout0_divide;

 

    for (unsigned int mult = MIN_CLKFBOUT_MULT; mult <= MAX_CLKFBOUT_MULT; ++mult) {

        for (unsigned int div = MIN_DIVCLK_DIVIDE; div <= MAX_DIVCLK_DIVIDE; ++div) {

            double vco_freq = input_freq * mult / div;

            if (vco_freq < MIN_VCO_FREQ || vco_freq > MAX_VCO_FREQ) {

                continue;

            }

            double err = fabs(vco_freq - target_vco_freq);

            if (err < best_err) {

                best_err = err;

                clkfbout_mult = mult;

                divclk_divide = div;

            }

        }

    }

    // Combine the calculated values into a single register value

    unsigned int clk_wiz_reg_value = (clkout0_divide << 8) | (clkfbout_mult << 16) | (divclk_divide << 24);

    return clk_wiz_reg_value;

}

 

int main() {

    double input_freq = 100.0; // Input frequency in MHz

    double output_freq_1 = 50.0; // Desired output frequency 1 in MHz

    double output_freq_2 = 75.0; // Desired output frequency 2 in MHz

 

    // Calculate the Clocking Wizard register value for the desired output frequencies

    unsigned int clk_wiz_reg_value_1 = calculate_clk_wiz_reg_value(input_freq, output_freq_1);

    unsigned int clk_wiz_reg_value_2 = calculate_clk_wiz_reg_value(input_freq, output_freq_2);

 

    if (clk_wiz_reg_value_1 != 0) {

        printf("Clocking Wizard register value for output frequency 1: 0x%08X\n", clk_wiz_reg_value_1);

        // ... (The rest of your original code here for output frequency 1)

    }

 

    if (clk_wiz_reg_value_2 != 0) {

        printf("Clocking Wizard register value for output frequency 2: 0x%08X\n", clk_wiz_reg_value_2);

        // ... (The rest of your original code here for output frequency 2)

    }

}

 

到了这里,关于如何在 Zynq PS 端使用 wiz_clk 动态配置:的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ZYNQ7000 PL与PS交互(一): PL到PS中断的使用与实现

    翻译以xilinx用户手册ug585,知道ZYNQ7000有几类中断即可。 PS基于ARM架构,使用了两个Cortex-A9处理器和GIC PL390中断控制器。中断结构与CPU密切相关,并接收来自IO外设和可编程单元PL的中断请求。 本章主要信息: 私有、共享和软件中断。 GIC功能介绍 中断优先级和处理 1.1.1 Zynq 中

    2024年04月15日
    浏览(53)
  • ZYNQ使用AXI DMA(Scatter/Gather)模式进行PL与PS数据交互附源码(ps端移植freertos或者裸机)

    AXI DMA 操作需要先提供一个在内存中驻留的不变空间,用于存储需要进行的DMA操作。形容这“每一次操作”的东西叫做Buffer Descriptor,缩写叫BD,这些BD是连接成链表的形式的,因为BD会动态增加,而预先分配存储BD的空间是恒定的,因此BD被连成一个环(BD Ring),其实就是一个循

    2024年02月09日
    浏览(41)
  • zynq 使用AXI_dma 传输==pl到ps,linux驱动开发,应用层处理DMA数据

    在使用zynq输出处理时,会使用到pl和ps的数据传输,可供使用的方案有多种,由于我们的数据量较大打算,因此使用用以下两种方案处理: 1.使用pl直接写ddr3, 2.使用dma, 本次详细介绍使用axi_dma如何将pl的数据在linux应用层接收数据并处理,以及遇到的问题 fpga工程,我们使用

    2024年02月03日
    浏览(57)
  • GD(兆易创新)系列FLASH进行FPGA和ZYNQ配置固化相关操作

    本文主要针对使用GD(兆易创新)系列的FLASH做启动配置片时,遇到的相关问题进行简单整理复盘,避免后人踩坑。 本人操作固化芯片型号为:ZYNQ7045、690T(复旦微替代型号V7 690T)。 由于GD SPI Flash器件和进口器件的厂家ID不一致,而Vivado软件又不支持跳过ID检查,导致使用G

    2024年02月06日
    浏览(40)
  • zynq pl访问ps ddr

    在 xilinx mpsoc 平台上进行 Linux 软件开发,不可避免的会涉及到 PS 与 PL 之间的数据交互。这个 系列 介绍一种 基于 DDR 的信息交互方式 。 这篇文章首先介绍下 如何从系统中“偷”内存 。 交互流程: PS 写入数据到 DDR 中,使用中断通知 PL,PL 从协商好的 DDR 中读取数据; PL 写

    2024年02月01日
    浏览(52)
  • zynq板上PS端给PL端复位

    最近接触zynq板-zcu104,记录一些实验笔记。 LED闪烁 在vivado中新建一个工程,命名为led-test。添加top.v文件。 其中,top模块接入zcu104开发板的clk_300_p/n信号,通过clock wizard转换为单端始终clock,接入到led闪烁模块led.v 其中,led模块通过一个24bit的计数器,经过相等间隔厚,让led灯

    2024年02月11日
    浏览(40)
  • zynq学习之fpga篇(三)状态机的使用

    可乐机每次投1枚一块硬币,每瓶可乐3块钱,投3个硬币就可以出可乐。 状态转移图 分析 一个简单的状态转移图,由此编写代码。  这篇想找一个简单的状态机实例,没有找到,下一篇开始进一阶,数码管驱动。 不啻微芒,造炬成阳。

    2024年02月22日
    浏览(59)
  • zynq的PL向PS提供时钟和复位

    最近买了一块矿卡蚂蚁T9+,它的资源比EBAZ4205丰富。 需要矿卡资料包的朋友可以从这下载。里面包含蚂蚁T9+和EBAZ4205原理图和几个EBAZ4205例程,还有一些相关的pdf文档。 link 首先从fpga学起,可惜PL没有焊晶振,只好从PS端引,下面以点灯为例。 打开vivado,工具栏file -- project -

    2024年02月15日
    浏览(48)
  • 基于ZYNQ PS-SPI的Flash驱动开发

                    本文使用PS-SPI实现Flash读写,PS-SPI的基础资料参考Xilinx UG1085的文档说明,其 基础使用方法 是,配置SPI模式,控制TXFIFO/RXFIFO,ZYNQ的IP自动完成发送TXFIFO数据,接收数据到RXFIFO,FIFO深度为128Byte。本文介绍了使用PS-SPI的Flash开发。 硬件平台:Xilinx ZYNQ Flash芯片

    2024年03月23日
    浏览(40)
  • ZYNQ学习笔记(四):PL与PS数据交互——基于BRAM IP 核的(PS端读写+PL端读)控制实验

    说起PS、PL数据交互,常见的有IO方式:MIO EMIO GPIO,还有利用BRAM或FIFO等,在上一篇文章ZYNQ学习笔记(三):PL与PS数据交互—— UART串口+AXI GPIO控制DDS IP核输出实验咱们学会了如何利用AXI GPIO IP核来实现PS(写)与PL(读)的数据交互,那么这篇文章来学习如何使用BRAM~ 本次实验

    2024年02月05日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包