| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> FPGA基础知识记录 -> 正文阅读 |
|
[嵌入式]FPGA基础知识记录 |
一、高速接口8B/10B的作用? ? ? ? ? 在数字通信中编码和加扰的作用是不同的。编码通常有信源编码和信道编码,8b/10b是信道编码,信道编码的作用是通过增加冗余(此外冗余为2b)以提高数据传输的可靠性。 二、两个触发器做建立保持时间分析模型中,涉及到那些参数? Tclk2q:第一个寄存器时钟CLK到Q端的延时(个人理解类似于Tco) Tcomb:组合路径和布线延迟。 Tsu? ? ?:寄存器建立时间 Th? ? ? :寄存器保持时间 Tskew:时钟偏移 Tjitter :时钟抖动 Tco? ? :寄存器输出延时 Tmet :输出在时钟边沿的Tco后会产生振荡,振荡时间为Tmet(决断时间),最终稳定到“0”或者“1”。 Trecovery:撤销复位时,恢复到非复位状态的电平必须在时钟有效沿到来之前的一段时间到来,才能保证时钟能有效恢复到非复位状态,此段时间为recovery time。。 Tremove:撤销复位时,在时钟有效沿到来之后复位信号还需要保持的时间为撤销时间removal time。 ? 三、什么是STA静态时序分析,有什么作用? 概念:STA静态时序分析是一种验证数字集成电路时序是否合格的方法。 作用:找到隐藏的时序问题,根据时序分析结果优化逻辑或者约束条件,使设计达到时序闭合收敛。(满足寄存器建立保持时间,不产生时序错误) 四、CDC跨时钟域处理及相应的时序约束 create_clock: create_generated_clock: create_clock一般是用于定义外围晶振通过引脚PIN输入的时钟,称为master_clock。create_generated_clock 一般用于定义source_clock分频或倍频电路后的时钟,create_generated_clock 是用来说明 generated clock 与 source clock 的相位(边沿)关系。同时EDA工具根据 source clock 找到 master clock 以及 source clock 和 master clock 的关系, 最终会确定 generated clock 和 master clock 的相位(边沿)关系。例:外围晶振输入单端时钟CLK=100Mhz,经过经过二分频产生时钟CLKdiv2在寄存器Udiv-Q端输出。 create_generated_clock -name CLKdiv2 \ -edges {1 3 5} \ -source CLK \ [get_pins Udiv/Q] 假如CLKdiv2与?CLK关系是二分频并且相位相差180°。 create_generated_clock -name CLKdiv2 \ -edges {2 4 6} \ -source CLK \ [get_pins Udiv/Q] set_clock_latency? ? ? : set_clock_uncertainty: set_clock_groups? ? ? : set_input_delay? ? ? ? ?: set_output_delay? ? ? ?: set_false_path? ? ? ? ? ?: 五、FPGA上电启动过程 FPGA和CPLD不同(大多数FPGA是基于SRAM工作,每次掉电都需要从Flash重新加载数据),上电后不能直接工作,而是需要一个配置过程。Xilinx FPGA需要经过8个步骤才能正常地运行用户逻辑。 1、FPGA上电启动 FPGA工作的第一步就是给器件加电。Xilinx要求VCCINT(核心电压)先动,然后再是VCCO(I/O电压),最坏情况是它们之间不能相差1 s以上。在并行配置模式下,要求VCCO_2参考电压必须和FLASH参考电压相同。在系统正常上电或者PROG-B是一个低脉冲时,FPGA开始配置寄存器空间。这段时间除定义好的配置引脚外,其他I/O引脚均被设置为高阻态(High-Z)。经多次测试,这个阶段需要30 ms左右的时间。FPGA启动阶段最后一步就是配置启动模式。在PROG-B变高时,FPGA开始采集配置方式引脚(M3、M2、M1),并同时驱动CCLK输出。在这个阶段,有两种方法可以延迟FPGA的配置时序,一种是拉低INIT-B引脚,这是由于FPGA检测到自身还没有初始化完毕,不会进行接下来的操作步骤,这种状态一直保持到INIT-B引脚变高。另一种就是拉低PROG-B引脚,使FPGA处于等待配置状态。具体芯片参考芯片Datasheet启动上电流程。? 2、FPGA数据加载 ? ? ? ? FPGA正常数据加载前,需要做一个器件与FLASH之间的同步检查。其方法是传输一个特殊的32位数值(0xAA995566)到FPGA中,提示FPGA下面开始传输的是配置数据。这个步骤对用户来说是透明的,因为Xilinx ISE Bitstream Generator生成的.bit文件中已经自动加入了这个校验码。 ? ? ? ?在完成配置前的通信同步后,FPGA与FLASH之间还无法识别对方是什么器件,于是Xilinx就给每一个型号的FPGA设计了一个唯一的器件ID号,这个ID号可以在Xilinx配置手册中查到。如XC4VSX35,其ID号为0x02088093。FPGA需要从FLASH中读出这个器件号和自身比对,如果相同就继续下面的步骤,如果不同则配置失败,并打印出配置故障信息。 ? ? ? ?所有准备工作正常完成后,FPGA开始载入配置文件。这一步对大多数用户也是透明的,由器件自行完成。这也是配置过程中最耗时的步骤,时间从100 ms到几秒不等。在这个过程中,FPGA的所有可配置I/O根据HSWAPEN引脚的设置变为弱上拉(HSWAPE=1)或者高阻态(HSWAPE=0)。这个阶段的I/O引脚还没有变为用户需要的状态,也最有可能影响到其他外围电路的上电时序和运行。设计硬件电路时要特别注意并采取必要措施,如加入上下拉电阻或改变器件加电顺序来尽量避免或减少FPGA配置时对电路其他器件的影响。 ? ? ? ? 配置文件载入完成后,为了验证数据的正确性,FPGA还自动设置了CRC校验(这个在ISE配置选项中也可以去掉,但是为了保证载入数据的正确性,这个是必须选择的)。如果CRC校验不正确,FPGA会自动把INIT-B拉低,放弃这次配置。用户必须把PROG-B引脚拉低,才能进行重新配置。具体芯片参考芯片Datasheet配置流程 3、启动序列 ? ? ? ? ?CRC校验正确后,FPGA不会马上执行用户的逻辑,它还要进行一些自身内部电路的配置,如DCM锁定(DCMs to Lock)、全局写信号使能(Global Write Enable)等,这些信号的启动顺序也是在ISE配置选项中设置的。必须启动的序列为:释放DONE引脚;释放GTS信号,激活IO引脚;设置全局读/写使能、使能内部RAM和FIFOAssert,结束上电配置。 六、MCU上电启动流程 ? ? ? ? MCU整体工作流程可总结如下:上电——》主时钟起振——》启动代码——》用户程序(main函数)。如ARM系列的STM32、LPC等32位MCU,以及芯片原厂的完善底层代码,启动代码已经固化在芯片内部flash(称为BootLoader)。 ? ? ? ?MCU上电(复位)时,从固定的地址启动,一般是地址0x00000000,如ARM7;个别特殊的如STM32默认启动地址为0x8000000(flash区启动)。启动过程主要完成两部分工作,一个是硬件执行环境,如中断向量表、寄存器、看门狗等,另一个是软件环境,如C库环境、ZI(未初始化的内存变量)等 1、硬件上电配置 1.1、初始化时钟 内核时钟,模块时钟,外设时钟。 1.2、关闭看门狗 ? ? ? 看门狗是用来监控应用程序的异常跑飞而复位CPU,在初始化阶段,由于没有“喂狗”这一动作,有可能导致CPU不断复位,因此,首先会关闭看门狗,初始化完,再开启。 1.3、建立中断向量表 ? ? ? ? 中断向量表,中断源的识别标志,可用来形成相应的中断服务程序的入口地址,或者中断服务程序入口地址的偏移量和段基值。CPU利用中断向量表转入中断服务程序处理相关事务。 1.4、初始化堆栈寄存器 ? ? ? ? 堆栈的作用一个就是保存现场(上下文),如函数调用或者中断发送时,将当前执行地址压栈,调用完成再返回此处执行程序。另一个作用就是保存参数,如临时变量。因此,在启动阶段需初始化堆栈寄存器、堆栈的大小、起始地址等。 1.5、初始化内存 选择内部或者外部RAM 2、软件上电配置 2.1、把RO,RW从它们的加载域复制到它们的运行域中去。 2.2、初始化(清零)ZI域。 2.3、初始化堆栈指针 2.4、初始化C库环境:包括C库所需的内存空间、程序执行所需资源、C库初始化。 3、Cortex M3启动 CortexM3有3种启动方式 1、 BOOT1=1 BOOT0=1 ,中断向量表定位于SRAM区,即起始地址为0x2000000,同时复位后PC指针位于0x2000000处。 2、 BOOT1=x BOOT0=0,中断向量表定位于FLASH区,即起始地址为0x8000000,同时复位后PC指针位于0x8000000处。 3、 BOOT1=0 BOOT0=1 ,中断向量表定位于内置Bootloader区,此时可通过串口下载程序的二进制文件到flash区。 而Cortex-M3内核规定,起始地址必须存放堆顶指针,而第二个地址则必须存放复位中断入口向量地址,这样在Cortex-M3内核复位后,会自动从起始地址的下一个32位空间取出复位中断入口向量,跳转执行复位中断服务程序。对比ARM7/ARM9内核,Cortex-M3内核则是固定了中断向量表的位置而起始地址是可变化的。即是对于flash启动来说(正常工作也是flash启动),0x8000000地址存放的是栈顶地址__initial_sp,0x8000004地址存放的是复位中断向量Reset_Handler入口地址(STM32使用32位总线,存储空间为4字节对齐);在编写多段程序时,偏移地址空间需注意,如编写一个BootLoader,从BootLoader到应用程序段的相互跳转。 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 8:58:34- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |