广告

资深大牛分享FPGA设计的经验技巧

2019-12-13 阅读:
任何编程语言的学习都不是一朝一夕的事,经验技巧的积累都是在点滴中完成,FPGA设计也无例外。下面就以我的切身体会,谈谈FPGA设计的经验技巧。
zozednc

13.模块划分基本原则zozednc

1)对每个同步时序设计的子模块的输出使用寄存器(用寄存器分割同步时序模块原则)。zozednc

2)将相关逻辑和可以复用的逻辑划分在同一模块内(呼应系统原则)。zozednc

3)将不同优化目标的逻辑分开。zozednc

4)将送约束的逻辑归到同一模块。zozednc

5)将存储逻辑独立划分成模块。zozednc

6)合适的模块规模。zozednc

7)顶层模块最好不进行逻辑设计。zozednc

14.组合逻辑的注意事项zozednc

1)避免组合逻辑反馈环路(容易毛刺、振荡、时序违规等)。zozednc

解决:A.牢记任何反馈回路必须包含寄存器;B.检查综合、实现报告的warning信息,发现反馈回路(combinaTIonal loops)后进行相应修改。zozednc

2)替换延迟链。zozednc

解决:用倍频、分频或者同步计数器完成。zozednc

3)替换异步脉冲产生单元(毛刺生成器)。zozednc

解决:用同步时序设计脉冲电路。zozednc

4)慎用锁存器。zozednc

解决方式:zozednc

A、使用完备的if…else语句;zozednc

B、检查设计中是否含有组合逻辑反馈环路;zozednc

C、对每个输入条件,设计输出操作,对case语句设置default 操作。特别是在状态机设计中,最好有一个default的状态转移,而且每个状态最好也有一个default的操作。zozednc

D、如果使用case语句时,特别是在设计状态机时,尽量附加综合约束属性,综合为完全条件case语句。zozednc

小技巧:仔细检查综合器的综合报告,目前大多数的综合器对所综合出的latch都会报“warning”,通过综合报告可以较为方便地找出无意中生成的latch。zozednc

15.时钟设计的注意事项zozednc

同步时序电路推荐的时钟设计方法:时钟经全局时钟输入引脚输入,通过FPGA内部专用的PLL或DLL进行分频/倍频、移相等调整与运算,然后经FPGA内部全局时钟布线资源驱动到达芯片内所有寄存器和其他模块的时钟输入端。zozednc

FPGA设计者的5项基本功:仿真、综合、时序分析、调试、验证。zozednc

对于FPGA设计者来说,练好这5项基本功,与用好相应的EDA工具是同一过程,对应关系如下:zozednc

1. 仿真:Modelsim, Quartus II(Simulator Tool)zozednc

2. 综合:Quartus II (Compi ler Tool, RTL Viewer, Te chnology Map Viewer, Chip Planner)zozednc

3. 时序:Quartus II (TImeQuest Timi ng Analyzer, Technology Map Viewer, Chip Planner)zozednc

4. 调试:Quartus II (SignalTap II Logic Analyzer, Virtual JTAG, Assignment Editor)zozednc

5. 验证:Modelsim, Quartus II(Test Bench Template Writer)zozednc

掌握HDL语言虽然不是FPGA设计的全部,但是HDL语言对FPGA设计的影响贯穿于整个FPGA设计流程中,与FPGA设计的5项基本功是相辅相成的。zozednc

对于FPGA设计者来说,用好“HDL语言的可综合子集”可以完成FPGA设计50%的工作——设计编码。zozednc

练好仿真、综合、时序分析这3项基本功,对于学习“HDL语言的可综合子集”有如下帮助:

• 通过仿真,可以观察HDL语言在FPGA中的逻辑行为。zozednc

• 通过综合,可以观察HDL语言在FPGA中的物理实现形式。zozednc

• 通过时序分析,可以分析HDL语言在FPGA中的物理实现特性。zozednc

对于FPGA设计者来说,用好“HDL语言的验证子集”,可以完成FPGA设计另外50%的工作——调试验证。zozednc

1. 搭建验证环境,通过仿真的手段可以检验FPGA设计的正确性。zozednc

2. 全面的仿真验证可以减少FPGA硬件调试的工作量。zozednc

3. 把硬件调试与仿真验证方法结合起来,用调试解决仿真未验证的问题,用仿真保证已经解决的问题不在调试中再现,可以建立一个回归验证流程,有助于FPGA设计项目的维护。zozednc

FPGA 设计者的这5项基本功不是孤立的,必须结合使用,才能完成一个完整的FPGA设计流程。反过来说,通过完成一个完整的设计流程,才能最有效地练习这5项基本功。对这5项基本功有了初步认识,就可以逐个深入学习一些,然后把学到的知识再次用于完整的设计流程。如此反复,就可以逐步提高设计水平。采用这样的循序渐进、螺旋式上升的方法,只要通过培训入了门,就可以自学自练,自我提高。zozednc

市面上出售的有关FPGA设计的书籍为了保证结构的完整性,对 FPGA设计的每一个方面分开介绍,每一方面虽然深入,但是由于缺少其他相关方面的支持,读者很难付诸实践,只有通读完全书才能对FPGA设计获得一个整体的认识。这样的书籍,作为工程培训指导书不行,可以作为某一个方面进阶的参考书。zozednc

对于新入职的员工来说,他们往往对FPGA的整体设计流程有了初步认识,5项基本功的某几个方面可能很扎实。但是由于某个或某几个方面能力的欠缺,限制了他们独自完成整个设计流程的能力。入职培训的目的就是帮助他们掌握整体设计流程,培养自我获取信息的能力,通过几个设计流程来回的训练,形成自我促进、自我发展的良性循环。在这一过程中,随着对工作涉及的知识的广度和深度的认识逐步清晰,新员工的自信心也会逐步增强,对个人的发展方向也会逐步明确,才能积极主动地参与到工程项目中来。zozednc

最后总结几点:

1)看代码,建模型zozednc

只有在脑海中建立了一个个逻辑模型,理解FPGA内部逻辑结构实现的基础,才能明白为什么写Verilog和写C整体思路是不一样的,才能理解顺序执行语言和并行执行语言的设计方法上的差异。在看到一段简单程序的时候应该想到是什么样的功能电路。zozednc

2)用数学思维来简化设计逻辑zozednc

学习FPGA不仅逻辑思维很重要,好的数学思维也能让你的设计化繁为简,所以啊,那些看见高数就头疼的童鞋需要重视一下这门课哦。举个简单的例子,比如有两个32bit的数据X[31:0]与Y[31:0]相乘。当然,无论Altera 还是Xilinx都有现成的乘法器IP核可以调用,这也是最简单的方法,但是两个32bit的乘法器将耗费大量的资源。zozednc

那么有没有节省资源,又不太复杂的方式来实现呢?我们可以稍做修改:zozednc

将X[31:0]拆成两部分X1[15:0]和X2[15:0],令X1[15:0]=X[31:16],X2[15:0]=X[15:0],则X1左移16位后与X2相加可以得到X;同样将Y[31:0]拆成两部分Y1[15:0]和Y2[15:0],令 Y1[15:0]=Y[31:16],Y2[15:0]=Y[15:0],则Y1左移16位后与Y2相加可以得到Y;则X与Y的相乘可以转化为X1和X2 分别与Y1和Y2相乘,这样一个32bit*32bit的乘法运算转换成了四个16bit*16bit的乘法运算和三个32bit的加法运算。转换后的占用资源将会减少很多,有兴趣的童鞋,不妨综合一下看看,看看两者差多少。zozednc

3)时钟与触发器的关系zozednc

“时钟是时序电路的控制者” 这句话太经典了,可以说是FPGA设计的圣言。FPGA的设计主要是以时序电路为主,因为组合逻辑电路再怎么复杂也变不出太多花样,理解起来也不没太多困难。但是时序电路就不同了,它的所有动作都是在时钟一拍一拍的节奏下转变触发,可以说时钟就是整个电路的控制者,控制不好,电路功能就会混乱。zozednc

打个比方,时钟就相当于人体的心脏,它每一次的跳动就是触发一个 CLK,向身体的各个器官供血,维持着机体的正常运作,每一个器官体统正常工作少不了组织细胞的构成,那么触发器就可以比作基本单元组织细胞。时序逻辑电路的时钟是控制时序逻辑电路状态转换的“发动机 ”,没有它时序逻辑电路就不能正常工作,因为时序逻辑电路主要是利用触发器存储电路的状态,而触发器状态变换需要时钟的上升或下降沿!由此可见时钟在时序电路中的核心作用!zozednc

最后简单说一下体会吧,归结起来就多实践、多思考、多问。实践出真知,看100遍别人的方案不如自己去实践一下。实践的动力一方面来自兴趣,一方面来自压力,我个人觉得后者更重要。有需求会容易形成压力,也就是说最好能在实际的项目开发中锻炼,而不是为了学习而学习。zozednc

(责编:Demi Xia)zozednc

本文为EDN电子技术设计 原创文章,禁止转载。请尊重知识产权,违者本司保留追究责任的权利。
  • 微信扫一扫
    一键转发
  • 最前沿的电子设计资讯
    请关注“电子技术设计微信公众号”
  • “中国IC设计成就奖”提名产品简介:新能源汽车用功率器 比亚迪半导体BF1181是一款电隔离单通道栅级驱动芯片,可兼容并驱动1200V IGBT&SiC功率器件。其互补的输入信号满足5V的信号输入,可直接与微控制器相连。其输出驱动峰值电流高达±8A,满足4500Vus 60s脉冲绝缘要求,适应-40℃~125℃环境运行温度范围。BF1181同时具有优异的动态性能和工作稳定性,并集成了多种功能,如故障报警、源密勒钳位、去饱和保护、主次级欠压保护等,同时集成模拟电平检测功能,可用于实现温度或电压的检测,并提高芯片的通用性,进一步简化系统设计并确保系统更安全,可应用于EV/HEV电源模块、工业电机控制驱动、工业电源、太阳能逆变器等领域。
  • “中国IC设计成就奖”提名产品简介:超高耐压贴片SJ-MOS 维安面向全球市场,在800V及以上超高压产品进行了大量的技术投入,经过近多年的超高压SJ-MOSFET产品研发积累,已开发出国内非常领先的工艺技术,可以将小封装,高耐压导通电阻做到非常低水平。给客户提供高功率密度的800V及900V以上耐压产品。此举填补国内空白,打破了进口品牌垄断的局面。降低对国外产品依存度。维安1000V超结工艺产品技术利用电荷平衡原理实现高耐压的低导通电阻的特性。相比VD-MOSFET 结构工艺产品,SJ-MOSFET有更好的更小封装和成本优势。目前市场使用1000V耐压MOSFET,多以TO247, TO-3P甚至TO-268超大封装。维安1000V器件WMO05N100C2,使用TO-252/DPAK贴片封装,内阻低至3.5Ω,相比同规格VDMOSFET 6-7Ω 下降1倍。目前在工业控制,中低压配电等380VAC输入场景得到广泛应用。
  • 研发转至FAE(现场应用工程师),是否远离技术了?有前途吗? 前几日,EDN小编在浏览知乎的时候,发现了一个有趣的话题《FAE有什么发展前景吗?》,被浏览次数接近九万次。小编总结了一下题主的提问:FAE是否远离技术了?未来是否有发展前景?
  • Microchip模拟嵌入式SuperFlash技术助力存算一体创新 SuperFlash memBrain存储器解决方案使知存科技片上系统(SoC)能够满足最苛刻的神经处理成本、功耗和性能要求
  • 瑞萨电子推出64位RISC-V CPU内核RZ/Five通用MPU,开创R 产品作为瑞萨现有Arm CPU内核MPU阵容的新成员扩充RZ家族的产品组合
  • 罗克韦尔自动化发布全新HiLINE 800智能低压动力中心 出厂即用,节能高效,助力企业加速实现智能制造
  • 学子专区—ADALM2000实验:跨阻放大器输入级 本次实验旨在研究简单跨阻放大器的输入级配置。
  • “中国IC设计成就奖”提名产品简介:功放芯片8002A优势 8002A是一款AB类,单声道带关断模式,桥式音频功率放大器。
  • “中国IC设计成就奖”提名产品简介:3.8V~40V输入,3.5A SCT243x系列产品:SCT2430,SCT2431,SCT2432,主要针对工业和车载应用中的三种不同需求组合(外置补偿可设置,缓启动时间可设置,频率可设置)所开发的系列产品。目前该系列产品累计出货量超千万片以上,目前客户端回诉的质量DPPM为0ppm。
  • “中国IC设计成就奖”提名产品简介:AC-DC电源管理芯片S SP2738CF是无锡硅动力微电子股份有限公司自主架构的一款性能优异的原边反馈AC/DC控制电路,采用了多项自研技术,已申请并通过了发明专利、实用新型专利技术包括国际PCT专利共9项。产品适用于高功率密度、小体积AC/DC 充电器与适配器,无需光耦和TL431。芯片可以工作在CCM/QR工作模式,可以在十分精简的外围条件下高精度地实现恒流和恒压控制,可以轻松实现6级能效要求。
  • “中国IC设计成就奖”提名产品简介:电量计芯片CW2217B CW2217B是一款用于系统侧的单节锂电池电量计芯片,其通过内部高精度模拟前端(AFE)采集电池的实时电压、电流和温度,结合内置电池模型,可精准计算的电池剩余电量(SOC)。芯片还能记录电池的充放电循环数(Cycle),追踪电池内阻的变化,计算电池的健康程度(SOH),可使用户更了解电池状态,最终提升用户体验。可广泛用于智能手机、平板电脑、智能POS机等移动便携终端,也可用于智能穿戴设备和使用锂电池的IoT设备。
  • “中国IC设计成就奖”提名产品简介:Type-C全接口综合保 传统上,需要采用多个OVP保护芯片与TVS等器件,为Type-C接口提供可靠的保护。维安采用”All-IN-One”的技术方案,在单芯片上实现了4个通道的短路与热插拔,和8个通道的系统级静电综合防护。
广告
热门推荐
广告
广告
EE直播间
在线研讨会
广告
广告
面包芯语
广告
向右滑动:上一篇 向左滑动:下一篇 我知道了