0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FPGA编码风格介绍

Hack电子 来源:Hack电子 2024-11-15 10:49 次阅读

什么是组合逻辑环路?

组合逻辑环路(Combinational Loops):指组合逻辑的输出信号不经过任何时序逻辑电路(FF等),而直接反馈到输入节点,从而构成的电路环路。

4c248106-906d-11ef-a511-92fbcf53809c.png

此外,如果直接将寄存器的输出端通过组合逻辑反馈到该寄存器的异步端口(异步复位或异步置位),也会形成组合逻辑环路。

4c424f56-906d-11ef-a511-92fbcf53809c.png

为什么要避免组合逻辑环路?

FPGA设计中,绝大多数的应用场景都不需要使用组合逻辑环路,我暂时能想到的例外只有随机数发生器(评论区可以补充一下)。

4c55a52e-906d-11ef-a511-92fbcf53809c.png

在实践中,避免使用组合逻辑环路主要是因为它的特性所导致的危害:

组合逻辑环路违反了同步设计原则,容易振荡,从而导致整个设计不稳定和不可靠。

组合逻辑环路的行为功能取决于该环路上的延迟(逻辑延迟和布线延迟),一旦延迟发生变化,整个设计的行为功能将变得无法预测。

组合逻辑环路的振荡将导致EDA软件做无穷无尽的计算。为了完成这种计算,EDA软件将会切割环路。不同的EDA软件的切割方式不尽相同,这可能会与设计者的设计目的相违背,从而导致逻辑功能错误。

组合逻辑环路无法进行静态时序分析(STA),可能会出现时序违例,或者导致STA过程时间过长。

什么情况会导致组合逻辑环路?

情况1:组合逻辑的输出信号仅经过组合逻辑电路后又反馈到了输入节点。比如下面的代码:

4c78c806-906d-11ef-a511-92fbcf53809c.png

4c900f66-906d-11ef-a511-92fbcf53809c.png

这样的设计在Vivado中不会报错,但会报严重警告(Critical warning)。

4ca6fa00-906d-11ef-a511-92fbcf53809c.png

4cbe19a6-906d-11ef-a511-92fbcf53809c.png

情况2:寄存器的输出端通过组合逻辑直接反馈到该寄存器的异步端口(异步复位或异步置位)。比如下面的代码:

4d216e8e-906d-11ef-a511-92fbcf53809c.png

4d349130-906d-11ef-a511-92fbcf53809c.png

这种情况所导致的组合逻辑环路在实践中还是比较少出现的,因为一般情况下,寄存器的异步端口都是直接由模块外部连接的信号所驱动。

如何处理组合逻辑环路?

最重要的一点:一定要坚决避免组合逻辑环路!现在的EDA工具基本上都可以把组合逻辑环路识别出来,并报错或者报警告。写完RTL代码后请一定要记得看EDA工具的报告的错误和警告信息Message!

组合逻辑环路的避免首先应该通过良好的编码习惯来避免。上述的两种示例代码就是典型的错误,请不要在设计中使用类似的代码。

如果出现了组合逻辑环路且当前设计修改困难,那么请修改你的RTL代码--通过添加寄存器的方式来切断反馈回路。就像这样:

4d4d6f7a-906d-11ef-a511-92fbcf53809c.png

如果组合逻辑环路的出现是符合预期设计目的的(比如随机数发生器),想将其保留该如何操作?只要在XDC约束文件中添加这一句即可:

4d659992-906d-11ef-a511-92fbcf53809c.png

表示反馈回路上的一个节点,一般EDA工具都会指出这个节点,设计者只要复制替换就好了。

什么是语言模板?

不论是Xilinx的Vivado,还是AlteraQuartus II,都为开发者提供了一系列Verilog、SystemVerilog、VHDL、TCL、原语、XDC约束等相关的语言模板(Language Templates)。

在Vivado软件中,按顺序点击Tools----Language Templates,即可打开设计模板界面。

4d7a31cc-906d-11ef-a511-92fbcf53809c.png

4d91b8a6-906d-11ef-a511-92fbcf53809c.png

在Quartus II软件中,需要设计文件(.v文件等)的需要处点击右键,然后点击Inset Templates,即可打开模板界面。

4dae52c2-906d-11ef-a511-92fbcf53809c.png

4dd04576-906d-11ef-a511-92fbcf53809c.png

设计模板有什么用?

语言模板的内容还是非常丰富的,比如你可以看看xilinx推荐的文件头是什么样的:

4deb537a-906d-11ef-a511-92fbcf53809c.png

Verilog语法(逻辑运算符):

4df7781c-906d-11ef-a511-92fbcf53809c.png

找不到原语使用方式的时候,也可以来这里查找(当然你也可以查xilinx的官方文档):

4e031a32-906d-11ef-a511-92fbcf53809c.png

有些时序约束语法不太好记,你可以用这个工具查找,比如:

4e28c782-906d-11ef-a511-92fbcf53809c.png

看看xililnx提供的宏XPM(Xilinx Parameterized Macro)是怎么用的,比如CDC这部分的:

4e3907f0-906d-11ef-a511-92fbcf53809c.png

最最重要的一点是,它提供了很多典型电路的设计方法。

由于各家FPGA的结构差异,可能相同的代码在不同的器件上生成的结构会存在很大差异。比如有时候,可能你想设计的是一个分布式DRAM,但是由于你的代码风格和综合工具的原因,它给你生成的事BRAM,那这样就和你的设计初衷相违背了(当然随着综合工具的发展,这类情况是越来越少了)。所以在设计相关电路时,请尽量参考xilinx提供的代码,以确保vivado能正确生成你想要的电路(Altera 的FPGA类似)。

4e6a252e-906d-11ef-a511-92fbcf53809c.png

总 结

● 语言模板可以学习HDL语言语法、综合属性等;

● 语言模板可以快速查找设计内容、模板;

● 语言模板提供的电路设计模板可以保证综合工具能正确推断出对应的电路。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1629

    文章

    21742

    浏览量

    603536
  • 组合逻辑
    +关注

    关注

    0

    文章

    47

    浏览量

    10041
  • 环路
    +关注

    关注

    0

    文章

    50

    浏览量

    12015

原文标题:FPGA编码风格集锦

文章出处:【微信号:Hack电子,微信公众号:Hack电子】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    HDL编码风格编码

    本帖最后由 mr.pengyongche 于 2013-4-30 02:58 编辑 HDL编码风格编码
    发表于 08-12 12:09

    编码风格编码

    本帖最后由 mr.pengyongche 于 2013-4-30 02:56 编辑 编码风格编码
    发表于 08-17 09:34

    FPGA实战演练逻辑篇39:代码风格与书写规范

    代码风格与书写规范本文节选自特权同学的图书《FPGA设计实战演练(逻辑篇)》配套例程下载链接:http://pan.baidu.com/s/1pJ5bCtt 不同的人可能对代码风格和代码书写规范
    发表于 06-19 10:38

    FPGA实战演练逻辑篇41:代码风格

    代码风格本文节选自特权同学的图书《FPGA设计实战演练(逻辑篇)》配套例程下载链接:http://pan.baidu.com/s/1pJ5bCtt 所谓的设计习惯和代码风格,主要是指工程师用于实现
    发表于 06-25 09:41

    Linux内核编码风格(编程代码风格推荐)

    编码素质的重要性。相反没有良好的风格的代码读起来难看、晦涩,甚至有时候一个括号没对齐就能造成对程序的曲解或者不理解。我曾经就遇见过这样的情况,花费了很多不必要的时间在程序的上下文对照上,还debug了
    发表于 08-24 09:45

    Gowin HDL编码风格要求及编码实现

    本手册主要描述高云®HDL 编码风格要求及原语的 HDL 编码实现,旨在帮助用户快速熟悉高云 HDL 编码风格和原语实现,指导用户设计,提高
    发表于 09-29 06:23

    基于FPGA的非编码无线模块的应用设计

    介绍了一种使用射频技术的无线收发模块的编解码应用设计,自主调制与解调,该方式电路连接简单,传输距离远,且不受方向性约束。选用未经编码的无线模块,通过FPGA实现编
    发表于 12-18 12:03 10次下载

    基于FPGA的非编码无线模块的应用设计

    介绍了一种使用射频技术的无线收发模块的编解码应用设计,自主调制与解调,该方式电路连接简单,传输距离远,且不受方向性约束。选用未经编码的无线模块,通过FPGA实现编码
    发表于 07-21 17:40 27次下载

    自适应算术编码FPGA实现

    摘要: 在简单介绍算术编码和自适应算术编码的基础上,介绍了利用FPGA器件并通过VHDL语言描述实现自适应算术
    发表于 06-20 13:40 1137次阅读
    自适应算术<b class='flag-5'>编码</b>的<b class='flag-5'>FPGA</b>实现

    高精度增量式编码器与基于DSP和FPGA编码器信号测量模块

    本文介绍了基于DSP和FPGA编码器信号测量及处理的通用模块,对海德汉编码器进行了概述等。
    发表于 10-13 18:17 19次下载
    高精度增量式<b class='flag-5'>编码</b>器与基于DSP和<b class='flag-5'>FPGA</b><b class='flag-5'>编码</b>器信号测量模块

    基于FPGA的Varint编码设计原理和实现

    今天是画师第二次和各位大侠见面,执笔绘画FPGA江湖,本人最近项目经验,写了篇基于FPGA的Varint编码(压缩算法)实现,这里分享给大家,仅供参考。如有转载,请在文章底部留言,请勿随意转载,否则
    的头像 发表于 04-02 16:29 1920次阅读
    基于<b class='flag-5'>FPGA</b>的Varint<b class='flag-5'>编码</b>设计原理和实现

    关于Linux的内核代码风格

    编码风格错误开始 曾经在开发Linux内核驱动的时候,创建了一个补丁文件,但是在把补丁打到主分支的时候提示很多编码风格的错误问题,后来重做了补丁才解决了问题,这也是没有严格按照的Li
    的头像 发表于 04-25 14:50 1818次阅读

    Gowin HDL编码风格用户指南

    本手册主要描述高云®HDL 编码风格要求及原语的 HDL 编码实现,旨在 帮助用户快速熟悉高云 HDL 编码风格和原语实现,指导用户设计,
    发表于 09-15 16:02 0次下载
    Gowin HDL<b class='flag-5'>编码</b><b class='flag-5'>风格</b>用户指南

    Verilog编码风格的建议

    良好的编码风格,有助于代码的阅读、调试和修改。虽然 Verilog 代码可以在保证语法正确的前提下任意编写,但是潦草的编码风格往往是一锤子买卖。
    的头像 发表于 06-01 16:27 721次阅读
    Verilog<b class='flag-5'>编码</b><b class='flag-5'>风格</b>的建议

    阿里AliOS的编码风格

    其实,我们身边就有很多“好的资源”值得学习,比如本文分享的 阿里 AliOS 的编码风格
    发表于 06-02 09:26 235次阅读