摘要: 一、问题 假设存在这样的时钟控制模型: CLK1、CLK2以及系统时钟的频率与相位均不一致,我们希望在clk_sel=1时,输出CLK1,反之输出CLK2,CLK_SEL可以由系统时钟驱动,也可以由组合逻辑驱动。那么在这种情况下就会出现以下的“毛刺”问题: 可以看到,在CLK_SEL的交界处,非常容 阅读全文
posted @ 2024-11-18 13:37 羊的第七章 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 一、背景 数据的跨时钟域处理是FPGA开发过程中的常见问题,存在两种情况 慢时钟向快时钟同步:只需在快时钟域打两拍即可。其RTL如下: 打拍同步的原理:大家在初学FPGA时,经常听过FPGA中对信号打拍可以有效得避免亚稳态,而且一般要打两拍,其数学本质是如果打一拍发生错误得概率是1/1000,那么打 阅读全文
posted @ 2024-11-16 16:15 羊的第七章 阅读(110) 评论(0) 推荐(1) 编辑
摘要: 一. FIFO介绍 基本概念 FIFO(First In, First Out)是一种常用的数据结构,用于存储和处理数据。它的工作原理与排队的顺序类似,遵循"先进先出"的原则。即,第一个进入FIFO的数据会是第一个被取出的数据。在FPGA设计中,可以使用AM作为FIFO的存储单元,再通过控制逻辑来管 阅读全文
posted @ 2024-11-14 17:52 羊的第七章 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 一、起因 最近在开发Lattice的一款低功耗FPGA时,遇到了reg初始化复位问题,经过在网上搜寻相关资料整理如下; 二、FPGA中reg的初始化方式 在定义时初始化,例如: reg r_test = 1'b1; 在复位语句中,对reg进行赋值,例如: reg r_test; always@(po 阅读全文
posted @ 2024-11-08 16:37 羊的第七章 阅读(43) 评论(0) 推荐(2) 编辑
摘要: 一、开发工具: ICEcube2,界面非常原始,只有PLL IP核添加功能,其他IP核貌似只能使用primitive替换。 不支持时序分析、在线仿真等功能。 二、原语使用 全局布线资源 在 iCE40 FPGA 设备中,有 8 个高驱动缓冲器,称为全局缓冲器(Global Buffers,GBUFx 阅读全文
posted @ 2024-10-31 11:37 羊的第七章 阅读(16) 评论(0) 推荐(0) 编辑
摘要: 一、为什么需要复位? 在FPGA上电时,需要对reg、fifo等器件进行复位,以确保系统处于已知的状态,同时可以通过复位清除系统的错误异常状态。 二、复位的方式 从是否与时钟同步与否可以分为异步复位和同步复位。 点击查看代码 ` // 同步复位方式: always@(posedge sys_clk) 阅读全文
posted @ 2024-10-26 10:58 羊的第七章 阅读(27) 评论(0) 推荐(0) 编辑
摘要: 一、时序约束的目的 由于实际信号在FPGA内部期间传输时,由于触发器等逻辑期间并非理想期间,因此不可避免地存在传输延时,这种延迟在高速工作频率、高逻辑级数时会造成后级触发器地建立时间和保持时间不满足,造成时序违例。(这也是为什么需要把FPGA设计不能以高级编程语言思想看的原因,设计时,需要做到“心中 阅读全文
posted @ 2024-10-20 17:38 羊的第七章 阅读(79) 评论(0) 推荐(0) 编辑
摘要: 历史修改信息 版本 更改描述 更改人 批准人 修订日期/生效日期 A01 发布首版 ldy 一、目的 作为我司verilog开发过程中的输入文件,用于统一FPGA开发人员的代码风格。从而在满足功能和性能目标的前提下,能够规范代码和优化电路,增强代码的整洁度、可读性、可修改性、可维护性、可重用性、可移 阅读全文
posted @ 2024-10-17 09:51 羊的第七章 阅读(44) 评论(1) 推荐(1) 编辑