pll

FPGA开发(四) PLL实验

随声附和 提交于 2020-03-17 05:10:47
本次我们来学习FPGA的PLL,PLL(Phase Locked Loop)俗称锁相环,在很多的单片机中都有,它主要的目的是为了实现倍频和分频,因为我们系统运行的主频率是固定的,如果我们需要其他的频率,那么就需要超频或者降频,此时就需要锁相环实现。 FPGA的PLL是一个硬件模块,是十分重要的资源。本次博主使用的cyclone IV有四个PLL,为外部的端口提供高速的通信时钟。从数据手册中得到PLL的原理图如下 从上图可以看出,每一个PLL可以输出5路信号,信号的频率取决于C0~C5改变取值即可实现输出频率的改变。本次实验实现PLL输出的不同时钟通过FPGA的IO输出。 首先建立工程pll_test,然后我们需要进行pll的设置,点击IP catalog图标,即下图最右边的那个,搜索pll,点击ALTPLL后进行设置,起一个名字pll.v之后点击确定。 在弹出的设置中,选择输入时钟为50MHz,如下所示。 在Output clocks中选择输出的时钟为25MHz, 使能时钟1,选择50MHz,时钟2选择时钟75MHz,时钟3选择100MHz,如下所示。 新建一个pll_test.v文件,例化PLL ip ,程序如下所示。 `timescale 1ns/1ps module pll_test( input clk, input rst, output clkout1, output

STM32 HAL库 UART使用printf

我只是一个虾纸丫 提交于 2020-03-16 02:20:40
STM32 HAL库 UART使用printf // 添加这个函数 int fputc(int ch,FILE *f) { uint8_t temp[1]={ch}; HAL_UART_Transmit(&UartHandle,temp,1,2); } MDK设置:勾选Use Micro LIB 测试板子:STM32F746NG-DISCOVERY main.c文件 /* Includes ------------------------------------------------------------------*/ #include "main.h" #include <stdio.h> /** @addtogroup STM32F7xx_HAL_Examples * @{ */ /** @addtogroup UART_TwoBoards_ComDMA * @{ */ /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ #define TRANSMITTER_BOARD /* Private macro

Quartus中添加时序约束

拥有回忆 提交于 2020-03-07 07:47:48
1、sdc文件也是要添加到Quartus 软件中,这样在执行Read SDC File命令时才能读到相应的文件。 2、在TimeQuest打开的条件下,重新编译工程之后要Update Timing Netlist,这样TimeQuest分析器会得到最新的 网表文件进行时钟分析。 转载地址 http://www.cnblogs.com/pejoicen/p/4194380.html PLL时钟约束 # Uncommenting one of the following derive_pll_clocks lines # will instruct the TimeQuest Timing Analyzer to automatically # create derived clocks for all PLL outputs for all PLLs in a # Quartus design. # If the PLL inputs are constrained elsewhere, uncomment the # next line to automatically constrain all PLL output clocks. derive_pll_clocks # If the PLL inputs are not constrained elsewhere,

05、原子战舰 系统时钟配置函数

牧云@^-^@ 提交于 2020-02-24 07:17:37
STM32 时钟系统的配置初始化在 system_stm32f10x.c 中的 SystemInit()函数。 SystemInit SetSysClock SetSysClockTo72 (1) 设置HCLK,HCLK = SYSCLK (2) 设置PCLK2,PCLK2 = HCLK (3) 设置PCLK1,PCLK1 = HCLK / 2 (4) 设置PLL时钟来源及PLL倍频因数 (5) 选择PLL作为系统时钟源,即PLLCLK = SYSCLK (1) 开启HSE,等待HSE稳定 (2) 设置APB2、APB1、AHB分频系数 (3) 设置PLL的时钟来源和PLL的倍频系数 (4) 开启PLL,等待PLL稳定 (5) 读取时钟切换状态,确保PLLCLK被选为系统时钟 一般情况下,系统使用HSE时钟源,然后HSE经过PLL倍频后作为系统时钟。通常的配置是HSE = 8M,PLL的倍频因数为9,那么系统时钟SYSCLK = 8M * 9 = 72MHz,由此推导,HCLK = PCLK2 = 72MHz,PCLK1 = 36MHz。 static void SetSysClockTo72 ( void ) { __IO uint32_t StartUpCounter = 0 , HSEStatus = 0 ; /* SYSCLK, HCLK, PCLK2 and PCLK1

FPGA多时钟处理应用

荒凉一梦 提交于 2020-02-16 02:52:48
FPGA项目设计中,通常会遇到多时钟处理。即一个PLL输出多个时钟,根据条件选择合适的时钟用作系统时钟。 方案一: 外部晶振时钟进入PLL,由PLL输出多个时钟,MUX根据外部条件选择时钟输出做为系统使用。 方案在时钟频率比较低的情况下是可行的。设计时注意MUX使用组合逻辑实现的,注意case语句中default选项必须有输出,否则会出现锁存器。 当输出时钟频率较高时,这种方案的时序约束就比较麻烦。除了使用creat_clock命令约束PLL输入时钟,使用creat_generate_clock约束PLL输出时钟外,还要根据PLL输出的多个时钟之间的关系,使用set_clock_groups约束。set_clock_groups: asynchronous表示时钟同时有效,但没有相位关系。 exclusive 表示时钟是互斥的 group,group之内的时钟相关,group之间的时钟互不相关。 这种设计使得时钟约束变得繁琐,时序变得紧张。 同时PLL输出时钟后使用MUX进行选择输出,会增加时钟布线延时,高速情况下并不可靠。 时序是设计出来的,不是约束出来的。 设计出好的时序一般不需要约束。 方案二: 在高速情况下,应该更改设计,提高电路速度。ALTERA FPGA提供PLL重配功能。可根据条件对PLL进行重配。 调用ALTERA提供的PLL重配模块,根据官方资料

FPGA原理图设计----Arria II 系列FPGA设计(SATA)

 ̄綄美尐妖づ 提交于 2020-02-14 12:33:17
1、需求分析---器件选型(一般altera的技术支持会根据需求,销量,性价比帮你选型) http://www.altera.com.cn/literature/sg/csg.pdf http://www.altera.com.cn/products/ip/iup/additional_functions_iup/m-intelliprop-sata-device.html 需求分析:SATA支持的器件只有Arria II GX和Stratix IV 并且速度等级为-3的:成本、性能---性价比选择为ARRIA The SATA Device Core is designed to be connected to a SATA compliant device application to send and receive Out of Band (OOB) signals, primitives, and SATA Frame information structures (FIS). Device Utilization and Performance Table 1 lists the typical device utilization results for the megafunction. Table 1. Typical Device Utilization for

FPGA之道(8)时钟处理单元

谁说我不能喝 提交于 2020-02-10 16:31:55
文章目录 前言 背景 PLL Xilinx公司的锁相环结构简介 Altera公司的锁相环结构简介 DCM 前言 2020年2月10日15:02:18 这个时间的FPGA发展可以说已经很成熟了,Xilinx早已推出了ZYNQ系列,并推出了新工具VITIS 2019.2,当然Vivado并没有淘汰也几乎不可能淘汰,VITIS 2019.2自然也内含了Vivado 2019.2. 对于FPGA中的时钟处理单元,或者说时钟管理单元,在7系列FPGA中,有我们最常见的MMCM以及PLL,这在FPGA工程中,建立时钟IP核时可以清晰的看到。 至于更早期的时钟处理单元,有DCM、PLL等,叫法不同 ,下面根据《FPGA之道》这本书上的描述简单介绍一下。 背景 在实际的使用中,经常会碰到外部送给我们的时钟信号在频率或者相位上并不满足直接使用的要求,而内部时序逻辑又只能对时钟信号进行整数倍的分频,并且不能保证产生新时钟信号的相位稳定性,所以这个时候就需要用到时钟处理单元。 时钟处理单元可以对时钟信号进行高精度的倍频、分频和相位调整,因此对时序逻辑的设计非常重要。FPGA中的时钟处理单元共有两种:PLL和DCM,分别介绍如下: PLL PLL,英文全称:Phase Locked Loop,翻译成中文即锁相环。因为PLL调整输入时钟信号频率和相位的原理中利用了模拟电路的知识。因此一般来说

Educational Codeforces Round 76 (Rated for Div. 2)

筅森魡賤 提交于 2020-02-09 20:46:36
A. Two Rival Students (CF 1257 A) 题目大意 有 \(n\) 个学生,给定两个学生的初始站位,可以交换最多 \(k\) 次相邻学生位置,要求那两个学生相距最远,问该距离是多少? 解题思路 移到边边就好了。 神奇的代码 #include <bits/stdc++.h> #define MIN(a,b) ((((a)<(b)?(a):(b)))) #define MAX(a,b) ((((a)>(b)?(a):(b)))) #define ABS(a) ((((a)>0?(a):-(a)))) using namespace std; typedef long long LL; typedef vector<int> VI; typedef pair<int,int> PII; typedef vector<PII> VPII; typedef vector<LL> VL; typedef pair<LL,LL> PLL; typedef vector<PLL> VPLL; template <typename T> void read(T &x) { int s = 0, c = getchar(); x = 0; while (isspace(c)) c = getchar(); if (c == 45) s = 1, c = getchar();

Codeforces Round #592 (Div. 2)

假装没事ソ 提交于 2020-02-04 12:13:02
A. Pens and Pencils (CF 1244 A) 题目大意 给定 \(a,b,c,d,k\) ,问是否 \(\lceil \dfrac{a}{c} \rceil + \lceil \dfrac{b}{d} \rceil \leq k\) ? 解题思路 快速读懂题意即可。 神奇的代码 #include <bits/stdc++.h> #define MIN(a,b) ((((a)<(b)?(a):(b)))) #define MAX(a,b) ((((a)>(b)?(a):(b)))) #define ABS(a) ((((a)>0?(a):-(a)))) using namespace std; typedef long long LL; typedef vector<int> VI; typedef pair<int,int> PII; typedef vector<PII> VPII; typedef vector<LL> VL; typedef pair<LL,LL> PLL; typedef vector<PLL> VPLL; template <typename T> void read(T &x) { int s = 0, c = getchar(); x = 0; while (isspace(c)) c = getchar(); if (c == 45

RT-thread-2.0.1移植(基于STM32F4xx)

孤者浪人 提交于 2020-02-01 08:26:42
1、将下载的rt-thread-2.0.1解压后,得到如下图所示的文件列表。 在bsp目录下可以找到stm32f40x文件夹,这文件夹里面包括了库函数,其他芯片平台的文件夹统统删掉。在libcpu下,只需要将arm文件夹里面的common和cortex-m4留下来,其他的也都统统删掉。还有其他一些辅助性的文件,如:documentation、examples、tools什么的我们也统统删掉,处理完这些后,一个干净的RTT就准备好了。 2、虽然RT-thread将文件分类的很好,但最好还是根据自己的项目习惯将整个项目整理一下。将整个软件项目分成四个部分:app,bsp,mdk,rt-thread-2.0.1。如下图所示。 app:应用层,存放项目开发时自己编写的应用文件 bsp:驱动层,里面主要包括了RT-thread在stm32f40x平台中的底层驱动( applications,drivers,libraries_1.5.0 ),以及项目所使用的外设驱动( peripheral ) mdk:存放keil mdk5.15的相关工程文件 rt-thread-2.0.1:系统层,存放rt-thread-2.0.1中的 components (系统组件), include (系统内核头文件), libcpu (芯片移植)和 src (系统内核源文件) 3、安装好keil mdk5.15后