首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

FPGA 设计中经常犯的 10 个错误

本文列出了FPGA设计中常见的十个错误。我们收集了 FPGA 工程师在其设计中犯的 10 个最常见错误,并提供了解决方案的建议和替代方案。本文假定读者已经具备 RTL 设计和数字电路方面的基础。...有 FPGA 工程经验的人往往会避免在他们的 FPGA 设计中使用任何异步逻辑。缓解此问题的一种方法是在驱动 LUT 的设计中同步锁存所有异步逻辑。...检查设计中推断的锁存器 这是一个可以用例子很好解释的案例。编写状态机时,应该有 1 个同步状态和 2 个异步状态。...在异步的 NEXT STATE LOGIC 中,如果忘记考虑所有条件,工具将推断一个锁存器,即 next_state 信号将被预期为设计中的生成时钟,因为它将驱动多个 LUT。...<polarity_: 例如 i_rst_n_122m88 所有代码都应正确记录、注释和测试(综合前和综合后) 复位信号的不必要使用 在 Xilinx 设备中,使用复位引脚驱动所有信号并不是首选,因为它会大大增加设计中的扇出

57740

FPGA设计中大位宽、高时钟频率时序问题调试经验总结

时钟周期约束:用户需要将设计中的所有时钟进行约束后,综合器才能进行合理的静态时序分析。一个设计中的时钟主要分为两类:主时钟和生成时钟。主时钟包括由全局时钟引脚接入的时钟、高速收发器的输出时钟。...错误的地方在于PC_LAST_ADDR信号直接被当做always块的输入信号使用,导致always块的输入信号的延时变大,建立时间违例。...所以对于这种用户逻辑信号,推荐采用复制寄存器的方式解决驱动能力不够的问题。 ?...,在vivado下需要在声明被复制的寄存器前面加上(* keep =“true”*)告知综合器此寄存器不需要优化。...总结:在编写代码时,需要注意信号驱动能力与扇出的问题,对扇出大的用户逻辑信号进行寄存器复制解决驱动能力不足的问题。对于全局复位信号,使用加BUFG解决驱动能力不足的问题。

5.8K42
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    (中)

    8086是所谓的16位寄存器,也就是每次读写内存或读写IO外设的操作可以为16bit。 让我们回顾一下上期6502的引脚图: 6502有40根引脚,其中16根为地址线,8根为数据线。...当然,CPU会通过电路通知锁存器:我要把AD0-AD15从输出地址切换为读写数据了,你现在锁存住地址!...有了锁存器后,CPU和内存的连接关系如下图: 图中的AD0-AD15,就是后来出现的CPU FSB(Front Side Bus)的前身,而锁存器后来也逐渐进化成为了北桥(North Bridge)...一般地,在中断处理程序中,会保存中断现场(包括程序指针IP和其他重要寄存器),方便返回被中断的程序。 中断的触发依赖于中断引脚上收到的电信号。在8086中,实际上只有一个电信号能够触发中断。...CPU从D0/D7读取8253的状态寄存器,就可以得知实际上是哪个引脚产生的中断 (有可能是多个中断,想一想,这时候CPU应当如何处理?) 第二个搭档是8237。 8237是可编程DMA控制器。

    1.5K20

    8051硬件结构

    通常连接到EPROM的使能端(OE)。 #ALE信号位于30号引脚(地址锁存信号),8051正是通过它来实现多路复用。ALE的频率是时钟信号的1/6。...VSS在20号引脚上。 I/O口的内部结构:图中是P0口的某一个引脚内部结构图。看到8051具有读锁存器和读引脚两种能力。 ? 大多数时候读引脚和读锁存器没有什么区别,但是有的情况下会不一样。...比如在引脚外面外接了一个三极管。当我们输出高电平到三极管的基级使得三极管导通,这时候三极管导通,使得端口电压被拉低。导致读引脚和读锁存器得到的结果是不一样的。为了避免错误的判断引脚电平。...我们在输入的时候将锁存器必须置1。 P0口内部无上拉电阻,在外接负载的时候需要在电路中加入上拉电阻。P1—P3内置了上拉电阻。 8051需要两个时钟周期来完成一个操作,我们称之为一个状态。...在8051中,内部数据存储器被分为了内部RAM和SFR(特殊功能寄存器)共计256B。只有低128B可以存放通用数据,高128B是特殊功能寄存器区。

    94120

    单片机基础知识整理

    29 PSEN(低) 外部程序存储器从程序存储器中取指令或读取数据时,该信号有效 30 ALE/PROG(低) 地址锁存信号访问外部存储器时,该信号锁存低8位地址;无RAM时,此引脚输出晶振的6分频信号...如图,一个端口由锁存器、输入缓冲器、多路开关、一个非门、一个与门及场效应管驱动电路构成。...P0位结构: 输入缓冲器 在P0口中,有两个三态的缓冲器,三态门有3个状态,即在其输出端可以是高电平、低电平,同时还有一种高阻状态(或称为禁止状态),要读取D锁存器输出端Q的数据,需要使读锁存器中这个缓冲器的三态控制端有效...D锁存器 构成一个锁存器,通常要用一个时序电路,一个触发器可以保存一位二进制数(即具有保持功能),在51单片机的32根I/O口线中,都是用一个D触发器来构成锁存器的。...对于D锁存器来讲,当D输入端有一个输入信号,如果这时控制端CP没有信号(即时序脉冲没有到来),这时输入端D的数据是无法传输到输出端Q及反向输出端的。

    1.3K20

    拆解FPGA芯片,带你深入了解其原理

    比特流被送入从芯片中心(粉红色)向下运行的移位寄存器中。将 71 位加载到移位寄存器中后,列选择电路(蓝色)将选择特定的内存列,并并行加载到此列中。...LUT实现中的电路特写 锁存器 每个CLB包含一个触发器,允许FPGA实现锁存器,状态机和其他有状态电路。下图显示了触发器的实现。它使用主/辅助设计。...当时钟为低电平时,第一个多路复用器让数据进入主锁存器。当时钟变高时,多路复用器关闭第一个锁存器的环路,并保持该值。(该位通过“或”门,“与非”门和反相器两次反转,因此保持不变。)...同时,当时钟变高时,辅助锁存器的多路复用器从第一个锁存器接收该位(请注意,时钟已反转)。该值成为触发器的输出。当时钟变低时,次级的多路复用器关闭环路,从而锁存该位。...因此,触发器是边缘敏感的,在时钟的上升沿锁存该值。置位和复位线强制触发器为高电平或低电平。

    1.6K30

    W25Q128FV译文(二)

    7.1.2 写使能锁存 (WEL) –只读 写使能锁存器(WEL)是状态寄存器(S1)中的只读位,在执行写使能指令后设置为1。 当器件禁止写入时,WEL状态位清零。...4.写状态寄存器-1(01h)也可用于编程状态寄存器-1和2,见8.2.5节。 ---- 8.2指令描述 8.2.1写使能(06H) 写使能指令是将状态寄存器中的写使能锁存位置一。...写状态寄存器周期结束后,状态寄存器中的写使能锁存(WEL)位将被清除为0。...如果向设备发送超过256个字节,则寻址将换行到页面的开头并覆盖先前发送的数据。 与写入和擦除指令一样,在最后一个字节的第8位被锁存后,/ CS引脚必须被驱动为高电平。...页编程周期结束后,状态寄存器中的写使能锁存(WEL)位清0。如果寻址页受块保护(CMP, SEC, TB, BP2, BP1, and BP0)位或单独块/扇区锁保护,则不会执行页面编程指令。

    1.5K20

    FPGA解惑:从IO到原语(Gowin为例)

    PAD A 和 PAD B:FPGA芯片的物理引脚,用于连接外部电路。就是PCB拉线时候的真引脚。 Buffer Pair A & B:缓冲对,用于驱动差分信号,提供足够的驱动能力。...寄存器暂存: 处理后的信号可能被存储在寄存器中,如Q1和Q0。 多路选择: 通过OTMUX和ODMUX,可以对多个信号源进行选择,实现不同的功能。...IODELAY: 输入延迟单元,用于调整输入信号的延迟,以匹配FPGA内部的时钟。 IREG: 输入寄存器,用于锁存输入数据。 IDES: 输入数据选择器,用于选择多个输入数据源。...一段抽象的话 数据输入: 外部数据通过输入引脚进入FPGA,经过输入寄存器IREG锁存,确保数据在时钟沿的稳定性。 内部处理: 锁存后的数据在FPGA内部进行各种逻辑处理。...提供校验位:通过校验位可以检测数据在传输过程中的错误,提高数据可靠性。 提供只读存储器模式:可以将B-SRAM配置为ROM,用于存储固定的数据。

    28310

    可测性设计DFT

    带扫描端的锁存器 全扫描和部分扫描 扫描测试原理 扫描设计规则 扫描测试要求电路中每个节点处于可控制和可观测的状态,只有这样才能保证其可替换为相应的扫描单元,并且保证故障覆盖率。...在IEEE 1149.1中,仅有这样一根控制信号,通过特定的输入序列来确定工作模式,采用有限状态机来实现。该信号在测试时钟TCK的上升沿采样。...实现原理是将一块PCB上所有具有边界扫描的IC中的扫描寄存器连接在一起,通过一定的测试矢量,可以发现元件是否丢失或者摆放错误,同时可以检测引脚的开路和短路故障。...边界扫描寄存器 边界扫描寄存器 指令寄存器 指令寄存器由移位寄存器和锁存器组成,长度等于指令的长度。IR可以连接在TDI和TDO的两端,经TDI串行输入指令,并且送入锁存器,保存当前指令。...整体DFT实现及性能上考虑 尽量避免异步时钟设计; 限制不同时钟域的数量; 对于多时钟域的设计,处于同一时钟域的触发器最好连在同一根扫描链上; 注意扇出比较多的端口,如scan_enable信号,尤其在综合的时候需要特别注意

    1.3K10

    【第十章鲁棒性检查 上】静态时序分析圣经翻译计划

    CPPR消除了时序分析中发起时钟路径和捕获时钟路径之间的人为悲观情绪。如果同一个时钟既驱动捕获触发器又驱动发起触发器,那么时钟树很可能会在分支之前共享一条公共路径。...在锁存器中,时钟的一个边沿会使锁存器透明,即这个沿打开了锁存器,使得锁存器的输出与数据输入相同,该时钟沿被称为打开沿(opening edge)。...图10-3 锁存器的时序的第一条规则是:如果数据在锁存器的打开沿之前到达,则寄存器行为将与触发器完全一样。在打开沿捕获数据,而同一时钟沿又将发起数据,作为下一条时序路径的起点。...第二条规则适用的情况是:数据在锁存器为透明状态时(在打开沿和关闭沿之间)到达。锁存器的输出将被用作下一级时序路径的起点,而不是时钟引脚。在锁存器处结束的时序路径所借用的时间将决定下一级的发起时间。...没有借用时间 若从触发器UFF0到锁存器ULAT1的数据路径延迟小于5ns,则建立时间检查的路径报告如下: ? ? ?

    82620

    赛灵思7系列FPGA上电配置流程

    对于BPI和SelectMAP模式,总线宽度最初为x8,状态寄存器反映了这一点。在总线宽度检测序列之后,状态寄存器被更新。...比特流数据中的错误在BOOTSTS寄存器中报告为HMAC错误。 如果在配置为FPGA为配置主机的模式期间发生CRC错误,则设备可以尝试进行回退重配置。...CRC校验旨在捕获传输配置比特流时的错误。存在这样的情况:CRC校验可能错过传输配置比特流的错误:某些时钟错误(例如双时钟)可能导致32位比特流分组与配置逻辑之间的同步丢失。...通过释放DONE引脚,器件停止驱动逻辑低电平,并通过内部上拉电阻上拉引脚。默认情况下,DONE_PIPE被使能,以在DONE引脚和配置逻辑之间添加寄存器。 ? 与启动序列发生器有关的信号 ?...在回退期间,RS引脚驱动为低电平,器件从地址空间0引导.RS引脚应连接到系统定义的高位地址,以允许将完整位文件存储在每个存储器段中。 七、多FPGA JTAG菊花链 ? 看完本文有收获?

    4.6K30

    ​ZYNQ从放弃到入门(七)-三重定时器计数器 (TTC)

    参考: ❝UG585 然而,该图没有清楚地表明,每个预分频器都可以由处理器时钟或通过来自 Zynq SoC 的 EMIO 或 MIO 引脚的信号通过可编程逻辑提供时钟。...事件控制定时器(Event Control Timer):启用定时器,复位定时器,指定计数的时钟相位,并指定定时器如何处理溢出条件。...TTC 的时钟设置为内部时钟: 图 3:选择 TTC 驱动时钟 完成这两项任务后,现在可以关闭 Vivado 中的重新自定义窗口。...SDK设置 在上一节中,我们通过在 Vivado 中定义硬件来实现 Zynq SoC 的 TTC(三重定时器计数器)。在这节中,我们将使用 SDK 来驱动 TTC。...XTtcPs_SetMatchValue(&Timer, 0, (interval/3)); 在上面的示例中,匹配寄存器一的匹配值被定义为在间隔计数器内定义的值的三分之一处触发。

    2.3K40

    【计算机组成原理】实验一:运算器输入锁存器数据写实验

    实验目的 掌握模型机中运算器输入锁存器的引脚结构、工作原理及其控制方法。 具体到本实验: 通过本实验,学习并掌握运算器输入锁存器的工作原理、引脚结构及其控制方法。...具体目标包括: 理解74HC574锁存器的工作原理:掌握如何通过控制时钟信号(CLK)的上升沿,将输入数据通过DBUS写入锁存器,并通过OC信号控制数据输出的过程。...掌握锁存器A和W的操作:通过手动控制实验箱上的开关K16~K23,学习如何将特定数据写入模型机中的锁存器A和W,理解锁存器的选择信号(AEW、WEW)和数据写入的控制逻辑。...熟悉脉冲信号的作用:掌握如何通过脉冲信号CK的控制,在正确的时机将DBUS上的数据稳定地写入相应的锁存器,理解时钟上升沿对数据锁存的关键作用。...此时数据通过DBUS从输入端被写入到相应的锁存器A或W中,寄存器的指示灯保持亮起,表示数据写入成功。随后,寄存器的指示灯可能会熄灭或返回初始状态,表示数据已经稳定保存。

    21010

    SPI协议,这篇就够了!

    发送的数据按位(Bit)在 SCLK 的有效边沿传输。数据在时钟的采样边沿被接收并存储到接收寄存器中。数据一般采用二进制编码,MSB 或 LSB 优先传输。 上面就对文章的一个总结吧!...每次 SPI 时钟周期完成时,接收到的数据会存储到接收寄存器中,发送寄存器中的数据则被发送出去。...再从各个部件来看: SPI设备内部: SPI寄存器中存储了要发送的数据。 在时钟的下降沿时,寄存器中的数据会被移出到硬件传输逻辑,并通过硬件驱动电路输出到引脚上(MOSI或MISO)。...对方设备: 接收数据的一方通过时钟的上升沿对总线上的数据采样,将接收到的数据信号存储到其自身的接收寄存器中。 移出的目的地:数据会从发送设备的寄存器移出,经过SPI总线,发送到接收设备的输入引脚。...当 CS 信号被拉低后,被写入的数据将在主机的同步移位时钟信号的控制下,从 MISO 引脚输出,同时接收 MOSI 引脚的数据到移位寄存器。

    21711

    【数字实验室】时钟切换

    当然,无论我们在同步逻辑中使用哪种技术,重要的是要确保在进行时钟切换时输出上没有毛刺。任何故障都可能导致下游逻辑的错误。 那么,让我们看看如何仅使用逻辑门和寄存器产生无毛刺输出的时钟切换。...使用两个寄存器来存储选择信号的状态。这些状态在时钟的下降沿更新,并且取消选择的寄存器将其时钟保持在复位状态。由于下降沿,时钟处于低电平,并且输出时钟保持低电平。...它将保持低电平,直到所选时钟变低(以更新其控制寄存器)并变高。 在 Vivado 中实现这一点很简单。只需几行代码即可创建时钟切换。...输出时钟引出到GPIO 引脚 。 使用 100 MHz 的 XPM 同步器宏来对其进行去抖。XPM 宏的输出用于切换时钟并路由至 GPIO 引脚 。...创建了一个简单的测试平台,可以在时序仿真中运行仿真,以确定实现中是否存在故障。 在上图中可以看到时序仿真中没有观察到任何故障。

    35340

    DC其他的时序约束选项(一)

    )   在我们要综合的电路中,只有一个时钟端口CLKC,即只有CLKC时钟驱动要综合电路中的寄存器。...其他的时钟CLKA,CLKB,CLKD和CLKE在我们要综合的电路中并没有对应的时钟端口。因此,它们并不驱动要综合电路中的任何寄存器。...上面定义了名字为VCLK的虚拟时钟,周期为20ns。因为虚拟时钟不驱动设计中的任何寄存器,设计中没有其对应的输入端口。所以定义中没有源端口或引脚。由于虚拟时钟没有对应的时钟端口,我们必须给它一个名字。...有两种门控时钟单元,一种是无锁存器(latch free)门控时钟单元,另一种是基于锁存器(latch based)门控时钟单元。前面的例子中的门控时钟单元是无锁存器的门控单元。...基于锁存器门控时钟单元的结构如下图所示: ? 这种电路结构的行为表现好像一个主从(master-slave)寄存器,它在时钟的上升沿捕获门控使能信号。这种结构的门控时钟单元的输出如下所示: ?

    1.6K21

    stm32 spi协议_STM32库开发实战指南:基于STM32F4

    CPHA(clock phase)时钟相位 如果CPHA位被置’1’,SCK时钟的第二个边沿进行数据位的采样,数据在第二个时钟边沿被锁存(保持数据稳定)。...(如果此时CPOL位为’0’时就是下降沿采样,CPOL位为’1’时就是上升沿采样) 如果CPHA位被清’0’,SCK时钟的第一个边沿进行数据位采样,数据在第一个时钟边沿被锁存(保持数据稳定) (如果此时...(这里就可以体现并行传输只需一个时钟周期),然后按顺序被串行地移位送到MOSI引脚上; ─ 与此同时,在MISO引脚上接收到的数据,按顺序被串行地移位进入8位的移位寄存器中,然后被并行地传送到SPI_DR...第三理解串行并行的区别 发送数据:数据被并行地从发送缓冲器传送到的移位寄存器中(并行传输只需一个时钟周期)然后按顺序被串行地移位送到MOSI引脚上(串行传输一位需要一个时钟周期) 接收数据:...在MISO引脚上接收到的数据,按顺序被串行地移位进入8位的移位寄存器中,然后被并行地传送到SPI_DR寄存器(接收缓冲器) 总结:移位寄存器到缓存区为并行,移位寄存器发生数据到引脚为串行 重点来了:

    84920

    SCT89C52.2(最小系统+减低EMI干扰)

    我们昨天没有读这个数据手册,今天继续阅读 ? 内部结构框图 ? ? 这个地方给出了通解 ? 单片机的命名规则 ? 最小的系统 重启引脚 晶振引脚 电源引脚 提供了设计的准则,关键是电容的选择。...USB转串口,接的是P3.0,P3.1引脚 ? 注意接的这个二极管和电阻 ? ? 所有的引脚 ---- 降低EMI的三大措施:禁止ALE信号的输出,外部频率减半,内部时钟振荡器增益减半。...什么是ALE信号: ALE 地址锁存信号 一般用它来控制地址锁存器,它在下降沿会把地址锁存器的输入信号锁定,然后地址锁存器的输出用于提供地址。...一般在T1时刻出现ALE有效的信号,将地址送人地址锁存器。 其实这个信号线的信号生成是MCU硬件电路实现的,不可以人工控制。...因此它可以用来做外部时钟或定时。 ? 就是通过寄存器的操作来关闭AEL sfr AUXR = 0x8e; AUXR = 0x01; C的示例代码 ? 第二种解决方案 ? ?

    58920

    以太网口硬件知识分享

    MAC 就是以太网控制器,MAC属于数据链路层,主要负责把数据封装成帧,对帧进行界定实现帧同步。对MAC地址和源MAC地址及逆行相应的处理并对错误帧进行处理。...是介于寄存器地址和寄存器数据之间的2个bit位,用来转换数据传输方向。...实际使用中需要如何处理中心抽头需要根据PHY芯片的驱动类型确定。 四、PHY芯片电路原理说明 ELF 1开发板最多支持两路百兆网口,底板(图2.5)和扩展板(图2.6)上各一路。...ENET_PHYAD0、ENET_PHYAD1和ENET_RXD1在芯片上电复位时会锁存一个电平状态作为芯片的PHY地址,在芯片上电后,其数据被锁存到相应寄存器中,而后恢复芯片的默认功能,不会影响通信。...(2)检查网络变压器的中心抽头的接法是否与PHY 规定的网络变压器的驱动类型相对应。

    28810
    领券