news 2026/11/2 1:57:02

【FPGA学习】IP核(五)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【FPGA学习】IP核(五)

1. IP核概述

1.1 IP核是什么

IP 核(Intellectual Property Core):
知识产权核,FPGA/ASIC 设计里的预制、可复用硬件模块,不是软件函数,是已经做好的硬件电路。

ASIC和FPGA中预先设计好的电路模块;

1.2 使用IP核的原因

1. 可靠性高
设计越来越复杂,自己设计功能难以保证;

2. 提高开发效率
规定时间内完成;

3. 加快产品上市
减轻工程师负担;

1.3 IP核的局限性

1. 移植性差
IP不能跨平台使用;

2. 功能调整空间小
黑匣子

3. 部分需付费使用
部分IP核价格昂贵;

1.4 如何使用IP核

PROJECT MANAGER -> IP CATALOG;

2. IP核之PLL实验

时钟的倍频器;

2.1 简介

Xilinx FPGA的时钟管理
CMT(Clock Management Tiles):时钟管理单元,可以对时钟进行管理,具有时钟倍频、分频、相位偏移、可编程占空比和优化抖动等功能。

PLL:phase-locked loop
MMCM:mixed-mode clock manager

CMT结构:
对于7系列来说:
CMT含有一个PLL和一个MMCM;
MMCM中包含PLL和DCM;
即,MMCM在PLL的基础上加上了相位动态调整的功能;

2.2 PLL原理

PLL:
PLL:Phase Locked Loop(锁相环)
PLL是一种时钟反馈控制电路,特点是利用外部输入的参考信号控制环路内部震荡信号的频率和相位;

PLL原理:
输出的CLK和参考CLK比较,直到输出的CLK和参考REF相同;


类比示意图:
主要就是OUT和REF;

PLL分频原理:

PLL倍频原理:
使用实际的分频后的频率与REF相比;
此时也就是相当于倍频了;

2.3 实验任务

本节的实验任务是使用开发板输出4路不同频率或相位的时钟,时钟分别为100Mhz,100Mhz(相位偏移180度)、50Mhz和25Mhz。将四路时钟分别输出至扩展口的端口,并通过示波器来测量输出结果是否正确。

2.4 操作过程

  1. 点击IP catalog 搜索;

  2. 设置PLL,并对其进行设置:
    主要是如下:
    注意设置首要的时钟频率,根据自己的开发板的时钟进行设置:

  3. 输出时钟配置:
    如下图所示:
    按照要求设置输出时钟:

  4. 本页面设置时钟端口的重命名:

  5. 这个页面是得到输出时钟的具体参数设置:

  6. 这里是总结页面:

    总的来看,主要也就是需要设置板载的时钟频率,以及最终的输出频率;
    也就是上面的,第二步和第三步;

  7. 这里直接点击生成即可;

  8. 此时的IP核会出现在IP Sources界面:

  9. 对IP核进行例化:
    复制对应的例化模板;


代码示例:

moduleip_clk_wiz(input sys_clk,input sys_rst_n,output clk_100m,output clk_100m_180deg,output clk_50m,output clk_25m);wire locked;wire rst_n;assign rst_n=sys_rst_n&locked;clk_wiz_0 u_clk_wiz_0(// Clock out ports.clk_out1(clk_100m),// output clk_out1.clk_out2(clk_100m_180deg),// output clk_out2.clk_out3(clk_50m),// output clk_out3.clk_out4(clk_25m),// output clk_out4// Status and control signals.reset(~sys_rst_n),// input reset.locked(locked),// output locked// Clock in ports.clk_in1(sys_clk)// input clk_in1);endmodule

2.5 仿真

有两种仿真的方法:

  1. 使用Vivado自带的仿真器进行仿真;
  2. 联合仿真,先产生Vivado仿真库,然后和Modelsim进行联合仿真;

2.5.1 使用Vivado自带的仿真器

  1. 右击Design Sources 添加源文件:
  2. 添加源文件与tb代码,在添加tb代码的时候,注意要选择simulation sources;

    这部分需要分两次添加:
  3. 点击运行仿真;
  4. 这里可以设置初始运行时间:
  5. 此时界面就已经产生了对应的波形
  6. 此部分设置对应的运行时间;
  7. 仿真结束后关闭即可;

2.5.2 Vivado+Modelsim联合仿真

  1. 生成对应的编译仿真库

  2. 按照下图进行设置,注意就是选择对应的系列,选的越多编译越慢;

  3. 编译完成以后,点击设置,对第三方的软件进行关联;
    并在仿真部分选择modelsim软件与对应的库,并勾选下面的选项;

  4. 点击开始仿真,此时如果正常,那么就直接打开Modelsim软件了;
    就像使用Modelsim软件一样即可;

2.6 上板验证

RTL文件代码:

moduleip_clk_wiz(input sys_clk,input sys_rst_n,output clk_100m,output clk_100m_180deg,output clk_50m,output clk_25m);wire locked;wire rst_n;assign rst_n=sys_rst_n&locked;clk_wiz_0 u_clk_wiz_0(// Clock out ports.clk_out1(clk_100m),// output clk_out1.clk_out2(clk_100m_180deg),// output clk_out2.clk_out3(clk_50m),// output clk_out3.clk_out4(clk_25m),// output clk_out4// Status and control signals.reset(~sys_rst_n),// input reset.locked(locked),// output locked// Clock in ports.clk_in1(sys_clk)// input clk_in1);endmodule

tb激励文件代码:

`timescale1ns/1ns moduletb_ip_clk_wiz();parameter clk_period=20;reg sys_clk;reg sys_rst_n;wire clk_100m;wire clk_100m_180deg;wire clk_25m;wire clk_50m;initial begin sys_clk<=1'b0;sys_rst_n<=1'b0;#200sys_rst_n<=1'b1;end always #(clk_period/2)sys_clk=~sys_clk;////ip_clk_wizu_ip_clk_wiz(.sys_clk(sys_clk),.sys_rst_n(sys_rst_n),.clk_100m(clk_100m),.clk_100m_180deg(clk_100m_180deg),.clk_50m(clk_50m),.clk_25m(clk_25m));endmodule

XDC约束文件:
确定要输出的引脚,对引脚进行约束:

这是一个标准引脚约束的代码:

set_property-dict{PACKAGE_PIN U20 IOSTANDARD LVCMOS33}[get_ports clk_100m]

完整版本:

#时序约束 create_clock-period20.000-name sys_clk[get_ports sys_clk]#IO引脚约束 #----------------------系统时钟---------------------------set_property-dict{PACKAGE_PIN U18 IOSTANDARD LVCMOS33}[get_ports sys_clk]#----------------------系统复位---------------------------set_property-dict{PACKAGE_PIN N16 IOSTANDARD LVCMOS33}[get_ports sys_rst_n]set_property-dict{PACKAGE_PIN U20 IOSTANDARD LVCMOS33}[get_ports clk_100m]set_property-dict{PACKAGE_PIN T20 IOSTANDARD LVCMOS33}[get_ports clk_100m_180deg]set_property-dict{PACKAGE_PIN N18 IOSTANDARD LVCMOS33}[get_ports clk_50m]set_property-dict{PACKAGE_PIN P19 IOSTANDARD LVCMOS33}[get_ports clk_25m]
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/2 1:56:44

【Linux】文件描述符dup2重定向

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/2 1:56:00

店员天天问“这个活动怎么参加“?腾讯云ADP+JOTO零售门店运营助手

JOTO 是腾讯云 ADP CSP 授权服务商&#xff0c;专注企业级 AI 场景落地实施。本文聚焦连锁零售企业总部和门店之间的信息断层&#xff1a;促销政策换得比翻书快、店员搞不懂活动规则、新人培训全靠老带老。下面拆解一套基于腾讯云 ADP 的门店运营知识助手&#xff0c;让几千家门…

作者头像 李华
网站建设 2026/11/2 1:55:20

专为DeepSeek Harness 打造的开源“破甲“插件

文章目录 一、先把话说明白 二、它到底解决了什么问题 它明确划出的使用边界 三、核心心智模型:五层,各管一件事 三个必须记住的推论 四、生命周期:装 → 应用 → 重开 什么时候需要再点一次「应用」 一个容易被忽略的红线 五、安装:三条路,别走错 5.1 三种方式怎么选 5.2…

作者头像 李华
网站建设 2026/11/2 1:54:57

第二天学c++

(color 颜色代码 比如背景灰 字体红 为color 84&#xff09;不同的进制换算常量和变量 关键字指的是 int include 之类的头词定义常量 #define 或者 const int 类型 名字 {初始值} eg:#define dversion " v2.2 "变量 -- 类型 名字 初始值 eg&#x…

作者头像 李华
网站建设 2026/11/2 1:54:52

复现基于 PyTorch 的中文孤立手语词识别项目

项目地址&#xff1a;GitHub - harveyfly/SignLanguageRecognition: 中文孤立手语词识别&#xff1b;Bi-LSTM&#xff1b;SLR&#xff1b;500-CSL GitHub 项目介绍 把一段手语视频的骨骼序列抽成固定长度的 24 维帧特征&#xff0c;用 2 层双向 LSTM 编码时序&#xff0c;取…

作者头像 李华
网站建设 2026/11/2 1:53:57

小白程序员必看:彻底搞懂RAG与Agent的区别,面试不再卡壳!

RAG与Agent并非绑定关系&#xff0c;多数Agent会内置RAG模块但非必需。RAG用于向大模型补充外部知识&#xff0c;解决模型知识局限&#xff1b;Agent则具备规划、调用工具、多步执行、反思能力&#xff0c;解决复杂任务执行。标准RAG属于固定流程的Workflow&#xff0c;Agent是…

作者头像 李华