锁相环的原理及FPGA开发

锁相环(Phase-Locked Loop,简称PLL)是一种常见的电路结构,用于将输入信号的相位与参考信号的相位同步。它在许多领域中广泛应用,如通信系统、时钟同步、频率合成等。本文将详细介绍锁相环的工作原理,并提供相应的FPGA开发示例代码。

  1. 锁相环的基本原理
    锁相环由相位比较器、低通滤波器、振荡器和分频器组成。其工作原理如下:
  • 相位比较器(Phase Detector):相位比较器用于比较输入信号与参考信号的相位差,并输出一个反映相位差的控制信号。
  • 低通滤波器(Low Pass Filter):低通滤波器平滑相位比较器的输出信号,去除高频噪声,得到一个平滑的控制电压。
  • 振荡器(Voltage-Controlled Oscillator,简称VCO):振荡器根据控制电压的大小来控制输出信号的频率。
  • 分频器(Divider):分频器将VCO输出的信号进行分频,产生参考信号。

锁相环的基本工作原理是通过不断调节VCO的频率,使得VCO输出的信号的相位与参考信号的相位保持同步。通过反馈机制,相位比较器的输出信号经过低通滤波器平滑处理后作为控制电压,控制VCO的频率。最终,VCO输出的信号经过分频器变为参考信号,与输入信号进行相位比较,形成闭环控制。

  1. FPGA中实现锁相环
    在FPGA中实现锁相环通常需要使用硬件描述语言(如Verilog或VHDL)进行开发。下面是一个简单的锁相环的Verilog代码示例:
module PLL (
  inp
FPGA锁相环(PLL)原理与PG2L50H开发板实战配置 锁相环(PLL)作为数字系统中的关键时钟管理模块,通过相位比较和反馈控制实现精准的频率合成。在FPGA设计中,硬核PLL通过可编程分频器和压控振荡器(VCO)的组合,能够将基准时钟转换为多路不同频率的时钟信号,满足DDR接口、视频处理等模块的时序需求。PG2L50H开发板集成的PLL硬核支持800MHz~1600MHz的VCO范围,配合Pango Design Suite的图形化配置工具,开发者可以快速构建稳定的时钟树架构。通过AXI接口的动态重配置功能,还能实现运行时频率调整,在RK3568等异构计算平台 阅读详情

相关推荐

fpga开发-基本功能IP

(2)为了保证输出正弦信号无失真,根据Nyquist采样定理,每个正弦周期至少应输出2个及以上的采样点,才能恢复出正弦波,而且输出的采样点数越多,越有利于后续低通滤波器的设计。在Quartus Prime环境下,选择新建Memory Files中的Memory Initialization File,在弹出的对话框的Number of Words和Word Size窗口栏分别设置存储器单元数和数据的位宽,建立一个空白的.mif格式文件,并保存为sin1024x8b.mif。因此,信号c1频率为3MHz。

weixin_43802726的博客 2406

锁相环技术原理及FPGA实现(第四章4.1)

经过前面几章的学习,我们已积累了设计锁相环电路的一些基本技能。根据作者的学习经验,这个阶段最期望的一定不是再去理解什么原理公式,学习什么方法思路。好比初次接触到羽毛球时,在网上看了一段中规中矩的教学视频,又刚好买回一支炫丽的球拍,走进球场,实在没有心情再听老师讲什么挥拍动作和击球技巧,只想痛痛快快地上球场打几拍了。这一章,我们将完成一个完整的一阶锁相环电路的 FPGA 设计及仿真测试过程。

qq_43416206的博客 3695

基于IP核的FPGA开发:PLL锁相环IP核的原理与配置

PLL的工作原理如下:首先,PFD比较输入时钟信号和反馈时钟信号的相位差,并输出一个脉冲信号。以上是基于IP核的FPGA开发中PLL锁相环的原理和配置的详细介绍。通过合理配置和使用PLL IP核,可以实现时钟频率的生成和相位调整等功能,提高FPGA开发的效率和灵活性。相频比较器(Phase Frequency Detector,PFD):用于比较输入时钟信号和反馈时钟信号的相位差,并输出一个宽度可调的脉冲信号。通过以上的配置,可以根据具体需求生成并使用PLL锁相环实例,实现时钟频率的生成和相位调整等功能。

EsqpWeller的博客 332

[从零开始学习FPGA编程-53]:高阶篇 - 基于IP核的FPGA开发-PLL锁相环IP核的原理与配置(Xilinx)

现代数字电路少不了时钟,时钟是时序电路的心跳,没有时钟,时序电路就无法工作,但是不同功能的时序电路,其所需要的时钟频率是不同的,不太可能为所有不同的时序电路准备不同的物理晶振,这时候,就需要一种机制,能够为FPGA内部的硬件电路产生各种频率的时钟。有两种方式来产生所需要频率的时钟:(1)通过FPGA外部的、独立的PLL锁相环芯片生成所需要的时钟;(2)通过FPGA内部的PLL锁相环IP核生成FPGA内部逻辑所需要的时钟;本文介绍的是第二种方法,因为FPGA常见已经提供了标准的PLL锁相环IP核,当然,如果使

文火冰糖(王文兵)的博客 7万+

[从零开始学习FPGA编程-54]:高阶篇 - 基于IP核的FPGA开发-PLL锁相环IP核的原理与配置(Altera)

现代数字电路少不了时钟,时钟是时序电路的心跳,没有时钟,时序电路就无法工作,但是不同功能的时序电路,其所需要的时钟频率是不同的,不太可能为所有不同的时序电路准备不同的物理晶振,这时候,就需要一种机制,能够为FPGA内部的硬件电路产生各种频率的时钟。有两种方式来产生所需要频率的时钟:(1)通过FPGA外部的、独立的PLL锁相环芯片生成所需要的时钟;(2)通过FPGA内部的PLL锁相环IP核生成FPGA内部逻辑所需要的时钟;本文介绍的是第二种方法,因为FPGA常见已经提供了标准的PLL锁相环IP核,当然,如果使

文火冰糖(王文兵)的博客 7万+

锁相环技术原理及FPGA实现(第一章1.1)

锁相环技术具有很强的专业性,要掌握其工作原理,透彻理解各种设计方法和思路,最终游刃有余地设计出性能优良的锁相环电路,首先需要掌握一系列相关工具。请注意,不是“一种”工具,而是“一系列”工具: FPGA 开发软件 Quartus II、 HDL 仿真软件 ModelSim、MATLAB 软件、 SystemView 软件,以及 FPGA 开发语言 Verilog HDL。

qq_43416206的博客 1663

FPGA零基础学习之Vivado-锁相环使用教程

本系列将带来FPGA的系统性学习,从最基本的数字电路基础开始,最详细操作步骤,最直白的言语描述,手把手的“傻瓜式”讲解,让电子、信息、通信类专业学生、初入职场小白及打算进阶提升的职业开发者都可以有系统性学习的机会。系统性的掌握技术开发以及相关要求,对个人就业以及职业发展都有着潜在的帮助,希望对大家有所帮助。本次带来Vivado系列,锁相环使用教程。话不多说,上货。锁相环是我们比较常用的IP核之一。PLL的英文全称是Phase locked loop即锁相环,是一种反馈电路。

849

【FPGA开发】时钟管理单元介绍与应用

功能:通过GUI的界面形式,帮助用户来创建自己的时钟网络,能够基于一个输入时钟源(晶振),进行分频倍频,得到其他频率、相位、占空比的时钟信号。假如你的板卡上面有两个晶振,一个50MHz一个30MHz,你想要在不同时刻输入其中的某一个晶振源时钟来给系统提供时钟,就可以勾选第二个时钟源。Locked:标志着时钟管理单元完成了对用户设置的需求的时钟信号的产生,此时的输出时钟信号就是满足要求且稳定的。第一个(单端时钟输入引脚),就是FPGA管脚上面输入的时钟信号,从我们时钟晶振输入进来的。

qq_43416206的博客 1030

[从零开始学习FPGA编程-52]:高阶篇 - 基于IP核的FPGA开发 - IP核使用的基本框架(以锁相环PLL为例)

目录前言:步骤1:IP核的导入 -- 不同的IP核,导入的方式基本相同步骤2:IP核的原理-- 不同的IP核原理不同步骤3:IP核的原理与配置(重点)-- 不同的IP核配置的内容不同步骤4:IP核的调用(实例化)-- 连接IP核的输入输出信号步骤5:IP核的仿真测试步骤6:IP核的硬件部署步骤7:IP核在目标板上的执行步骤8:IP核在目标板上的调试后记:本章以锁相环PLL IP核为例,介绍IP使用方法。导入.........

文火冰糖(王文兵)的博客 956

锁相环技术原理及FPGA实现

高清扫描版PDF,含章节书签。 本书既有锁相环原理又有工程实现,值得一看。 尤其是关注数字锁相环的同学,可以了解一下。

Token算力工厂建设方案:从GPU集群到计量计费的全链路设计

在AI应用从“租核”走向“买Token”的范式转换中,算力交付的核心指标已不再是vCPU或GPU实例,而是单位时间内的Token产出量与单Token成本。这一变化推动基础设施从资源租赁向计件生产演进,要求GPU集群、推理引擎、调度系统、计量计费等模块像工厂产线一样协同运转。本文从硬件异构混部、存储网络设计、推理引擎调优、Token网关与配额管理、稳定性治理等维度,系统拆解如何构建一座可量化、可计费、可扩展的Token算力工厂,并给出分三期落地的推进节奏,帮助架构师与技术管理者在AI基础设施建设中实现成本可控

weixin_29095587的博客 263

OpenMV识别颜色源码

【代码】OpenMV识别颜色源码。

dxt258013的博客 403

SAP接口错误查询日志

随着数字经济的迅速发展,企业数字化转型不在只追求“业财一体化”,而是在业务端也想要进行更为精细化的管理,所以很多企业在SAP ERP的基础上,集成更多垂直领域更精细的外围系统,比如销售CRM系统,采购SRM系统,生产MES系统等等,琳琅满目的产品,那对SAP实施来说,系统集成过程中,接口的一些报错查询能力必不可少,今天我们就介绍一下,SAP和CRM系统集成中接口常见的报错。

weixin_43657667的博客 2048

Win11+VSCode+TeXLive:学术党必备的LaTeX环境配置避坑指南(2024最新版)

本文详细介绍了如何在Windows 11系统下,通过VSCode编辑器与TeXLive发行版配置高效的LaTeX学术写作环境。针对国内用户常见的镜像下载慢、插件配置复杂等问题,提供了优化方案和避坑指南,帮助科研人员和学生快速搭建流畅的学术写作工作流。

plum99的博客 619

Qualcomm平台下基于QSEE的指纹识别方案移植之四TA移植

本文只介绍TA移植的过程,不做技术分析,关于TA开发另做记录。 一、TA介绍 TA,Trusted application 可信应用,是运行于QSEE中的可执行程序。 指纹TA文件如下,形式一般是 xxx.mbn; xxx.b0 ~ xxx.b6, xxx.flist, xxx.mdt; xxx.mbn 可以理解为其它几个文件的集合,签名的时候用的就是这个文件,签完名之后,有对应的工具将它...

梦路遥 7549

避开这些坑!晶圆封装中Wire Bonding(引线键合)的5种常见不良与实战调试心得

本文深入探讨晶圆封装中Wire Bonding(引线键合)的5种常见不良现象,包括Wire Offset、BSOB不良、球径/球厚异常、弧度不良和IMC问题。通过实际案例和参数优化方案,帮助工程师提升封装质量和可靠性,特别适用于半导体封装领域的专业人士。

weixin_33672109的博客 525

AgentScope Java 2.0 项目实战:从零构建企业级自主Coding Agent

本文基于 AgentScope Java 框架,完整拆解两个生产级 AI Agent 项目的从零开发全过程。其一是企业级自主编码机器人(agentscope-codingagent),支持 Issue→PR 自动实现、PR Code Review、Docker 沙箱隔离执行与多通道接入;其二是个人 AI 助手管理平台(agentscope-paw),采用 Spring Boot + React 全栈架构,支持多 Agent、技能市场与多 IM 通道。

program哲学 839

【IC前端虚拟项目】spyglass lint环境组织与lint清理

和上个虚拟项目的lint清理环节一样,关于spyglass的lint清理功能与流程还是大家通过各种资料去学习下就好啦。和之前不同的事,这次的虚拟项目里我把流程封装为Makefile,更加的贴近了实际项目交付流程。而后就可以根据提示进行lint的清理工作了。

moon9999的博客 1886

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

上一篇: Verilog进阶挑战:序列检测 FPGA开发
下一篇: 如何检查FPGA开发中过孔是否重叠的方法操作指导
普通网友
博客等级 码龄3年 84粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值