0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

FPGA編碼風(fēng)格介紹

Hack電子 ? 來源:Hack電子 ? 2024-11-15 10:49 ? 次閱讀

什么是組合邏輯環(huán)路?

組合邏輯環(huán)路(Combinational Loops):指組合邏輯的輸出信號不經(jīng)過任何時序邏輯電路(FF等),而直接反饋到輸入節(jié)點(diǎn),從而構(gòu)成的電路環(huán)路。

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

此外,如果直接將寄存器的輸出端通過組合邏輯反饋到該寄存器的異步端口(異步復(fù)位或異步置位),也會形成組合邏輯環(huán)路。

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

為什么要避免組合邏輯環(huán)路?

FPGA設(shè)計中,絕大多數(shù)的應(yīng)用場景都不需要使用組合邏輯環(huán)路,我暫時能想到的例外只有隨機(jī)數(shù)發(fā)生器(評論區(qū)可以補(bǔ)充一下)。

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

在實踐中,避免使用組合邏輯環(huán)路主要是因為它的特性所導(dǎo)致的危害:

組合邏輯環(huán)路違反了同步設(shè)計原則,容易振蕩,從而導(dǎo)致整個設(shè)計不穩(wěn)定和不可靠。

組合邏輯環(huán)路的行為功能取決于該環(huán)路上的延遲(邏輯延遲和布線延遲),一旦延遲發(fā)生變化,整個設(shè)計的行為功能將變得無法預(yù)測。

組合邏輯環(huán)路的振蕩將導(dǎo)致EDA軟件做無窮無盡的計算。為了完成這種計算,EDA軟件將會切割環(huán)路。不同的EDA軟件的切割方式不盡相同,這可能會與設(shè)計者的設(shè)計目的相違背,從而導(dǎo)致邏輯功能錯誤。

組合邏輯環(huán)路無法進(jìn)行靜態(tài)時序分析(STA),可能會出現(xiàn)時序違例,或者導(dǎo)致STA過程時間過長。

什么情況會導(dǎo)致組合邏輯環(huán)路?

情況1:組合邏輯的輸出信號僅經(jīng)過組合邏輯電路后又反饋到了輸入節(jié)點(diǎn)。比如下面的代碼:

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

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

這樣的設(shè)計在Vivado中不會報錯,但會報嚴(yán)重警告(Critical warning)。

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

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

情況2:寄存器的輸出端通過組合邏輯直接反饋到該寄存器的異步端口(異步復(fù)位或異步置位)。比如下面的代碼:

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

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

這種情況所導(dǎo)致的組合邏輯環(huán)路在實踐中還是比較少出現(xiàn)的,因為一般情況下,寄存器的異步端口都是直接由模塊外部連接的信號所驅(qū)動。

如何處理組合邏輯環(huán)路?

最重要的一點(diǎn):一定要堅決避免組合邏輯環(huán)路!現(xiàn)在的EDA工具基本上都可以把組合邏輯環(huán)路識別出來,并報錯或者報警告。寫完RTL代碼后請一定要記得看EDA工具的報告的錯誤和警告信息Message!

組合邏輯環(huán)路的避免首先應(yīng)該通過良好的編碼習(xí)慣來避免。上述的兩種示例代碼就是典型的錯誤,請不要在設(shè)計中使用類似的代碼。

如果出現(xiàn)了組合邏輯環(huán)路且當(dāng)前設(shè)計修改困難,那么請修改你的RTL代碼--通過添加寄存器的方式來切斷反饋回路。就像這樣:

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

如果組合邏輯環(huán)路的出現(xiàn)是符合預(yù)期設(shè)計目的的(比如隨機(jī)數(shù)發(fā)生器),想將其保留該如何操作?只要在XDC約束文件中添加這一句即可:

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

表示反饋回路上的一個節(jié)點(diǎn),一般EDA工具都會指出這個節(jié)點(diǎn),設(shè)計者只要復(fù)制替換就好了。

什么是語言模板?

不論是Xilinx的Vivado,還是AlteraQuartus II,都為開發(fā)者提供了一系列Verilog、SystemVerilog、VHDL、TCL、原語、XDC約束等相關(guān)的語言模板(Language Templates)。

在Vivado軟件中,按順序點(diǎn)擊Tools----Language Templates,即可打開設(shè)計模板界面。

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

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

在Quartus II軟件中,需要設(shè)計文件(.v文件等)的需要處點(diǎn)擊右鍵,然后點(diǎn)擊Inset Templates,即可打開模板界面。

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

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

設(shè)計模板有什么用?

語言模板的內(nèi)容還是非常豐富的,比如你可以看看xilinx推薦的文件頭是什么樣的:

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

Verilog語法(邏輯運(yùn)算符):

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

找不到原語使用方式的時候,也可以來這里查找(當(dāng)然你也可以查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

最最重要的一點(diǎn)是,它提供了很多典型電路的設(shè)計方法。

由于各家FPGA的結(jié)構(gòu)差異,可能相同的代碼在不同的器件上生成的結(jié)構(gòu)會存在很大差異。比如有時候,可能你想設(shè)計的是一個分布式DRAM,但是由于你的代碼風(fēng)格和綜合工具的原因,它給你生成的事BRAM,那這樣就和你的設(shè)計初衷相違背了(當(dāng)然隨著綜合工具的發(fā)展,這類情況是越來越少了)。所以在設(shè)計相關(guān)電路時,請盡量參考xilinx提供的代碼,以確保vivado能正確生成你想要的電路(Altera 的FPGA類似)。

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

總 結(jié)

● 語言模板可以學(xué)習(xí)HDL語言語法、綜合屬性等;

● 語言模板可以快速查找設(shè)計內(nèi)容、模板;

● 語言模板提供的電路設(shè)計模板可以保證綜合工具能正確推斷出對應(yīng)的電路。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1630

    文章

    21769

    瀏覽量

    604634
  • 組合邏輯
    +關(guān)注

    關(guān)注

    0

    文章

    47

    瀏覽量

    10056
  • 環(huán)路
    +關(guān)注

    關(guān)注

    0

    文章

    50

    瀏覽量

    12031

原文標(biāo)題:FPGA編碼風(fēng)格集錦

文章出處:【微信號:Hack電子,微信公眾號:Hack電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    HDL編碼風(fēng)格編碼

    本帖最后由 mr.pengyongche 于 2013-4-30 02:58 編輯 HDL編碼風(fēng)格編碼
    發(fā)表于 08-12 12:09

    編碼風(fēng)格編碼

    本帖最后由 mr.pengyongche 于 2013-4-30 02:56 編輯 編碼風(fēng)格編碼
    發(fā)表于 08-17 09:34

    FPGA實戰(zhàn)演練邏輯篇39:代碼風(fēng)格與書寫規(guī)范

    代碼風(fēng)格與書寫規(guī)范本文節(jié)選自特權(quán)同學(xué)的圖書《FPGA設(shè)計實戰(zhàn)演練(邏輯篇)》配套例程下載鏈接:http://pan.baidu.com/s/1pJ5bCtt 不同的人可能對代碼風(fēng)格和代碼書寫規(guī)范
    發(fā)表于 06-19 10:38

    FPGA實戰(zhàn)演練邏輯篇41:代碼風(fēng)格

    代碼風(fēng)格本文節(jié)選自特權(quán)同學(xué)的圖書《FPGA設(shè)計實戰(zhàn)演練(邏輯篇)》配套例程下載鏈接:http://pan.baidu.com/s/1pJ5bCtt 所謂的設(shè)計習(xí)慣和代碼風(fēng)格,主要是指工程師用于實現(xiàn)
    發(fā)表于 06-25 09:41

    Linux內(nèi)核編碼風(fēng)格(編程代碼風(fēng)格推薦)

    現(xiàn)編碼素質(zhì)的重要性。相反沒有良好的風(fēng)格的代碼讀起來難看、晦澀,甚至有時候一個括號沒對齊就能造成對程序的曲解或者不理解。我曾經(jīng)就遇見過這樣的情況,花費(fèi)了很多不必要的時間在程序的上下文對照上,還debug了
    發(fā)表于 08-24 09:45

    Gowin HDL編碼風(fēng)格要求及編碼實現(xiàn)

    本手冊主要描述高云?HDL 編碼風(fēng)格要求及原語的 HDL 編碼實現(xiàn),旨在幫助用戶快速熟悉高云 HDL 編碼風(fēng)格和原語實現(xiàn),指導(dǎo)用戶設(shè)計,提高
    發(fā)表于 09-29 06:23

    基于FPGA的非編碼無線模塊的應(yīng)用設(shè)計

    介紹了一種使用射頻技術(shù)的無線收發(fā)模塊的編解碼應(yīng)用設(shè)計,自主調(diào)制與解調(diào),該方式電路連接簡單,傳輸距離遠(yuǎn),且不受方向性約束。選用未經(jīng)編碼的無線模塊,通過FPGA實現(xiàn)編
    發(fā)表于 12-18 12:03 ?10次下載

    基于FPGA的非編碼無線模塊的應(yīng)用設(shè)計

    介紹了一種使用射頻技術(shù)的無線收發(fā)模塊的編解碼應(yīng)用設(shè)計,自主調(diào)制與解調(diào),該方式電路連接簡單,傳輸距離遠(yuǎn),且不受方向性約束。選用未經(jīng)編碼的無線模塊,通過FPGA實現(xiàn)編碼
    發(fā)表于 07-21 17:40 ?27次下載

    自適應(yīng)算術(shù)編碼FPGA實現(xiàn)

    摘要: 在簡單介紹算術(shù)編碼和自適應(yīng)算術(shù)編碼的基礎(chǔ)上,介紹了利用FPGA器件并通過VHDL語言描述實現(xiàn)自適應(yīng)算術(shù)
    發(fā)表于 06-20 13:40 ?1153次閱讀
    自適應(yīng)算術(shù)<b class='flag-5'>編碼</b>的<b class='flag-5'>FPGA</b>實現(xiàn)

    高精度增量式編碼器與基于DSP和FPGA編碼器信號測量模塊

    本文介紹了基于DSP和FPGA編碼器信號測量及處理的通用模塊,對海德漢編碼器進(jìn)行了概述等。
    發(fā)表于 10-13 18:17 ?19次下載
    高精度增量式<b class='flag-5'>編碼</b>器與基于DSP和<b class='flag-5'>FPGA</b><b class='flag-5'>編碼</b>器信號測量模塊

    基于FPGA的Varint編碼設(shè)計原理和實現(xiàn)

    今天是畫師第二次和各位大俠見面,執(zhí)筆繪畫FPGA江湖,本人最近項目經(jīng)驗,寫了篇基于FPGA的Varint編碼(壓縮算法)實現(xiàn),這里分享給大家,僅供參考。如有轉(zhuǎn)載,請在文章底部留言,請勿隨意轉(zhuǎn)載,否則
    的頭像 發(fā)表于 04-02 16:29 ?1937次閱讀
    基于<b class='flag-5'>FPGA</b>的Varint<b class='flag-5'>編碼</b>設(shè)計原理和實現(xiàn)

    關(guān)于Linux的內(nèi)核代碼風(fēng)格

    編碼風(fēng)格錯誤開始 曾經(jīng)在開發(fā)Linux內(nèi)核驅(qū)動的時候,創(chuàng)建了一個補(bǔ)丁文件,但是在把補(bǔ)丁打到主分支的時候提示很多編碼風(fēng)格的錯誤問題,后來重做了補(bǔ)丁才解決了問題,這也是沒有嚴(yán)格按照的Li
    的頭像 發(fā)表于 04-25 14:50 ?1831次閱讀

    Gowin HDL編碼風(fēng)格用戶指南

    本手冊主要描述高云?HDL 編碼風(fēng)格要求及原語的 HDL 編碼實現(xiàn),旨在 幫助用戶快速熟悉高云 HDL 編碼風(fēng)格和原語實現(xiàn),指導(dǎo)用戶設(shè)計,
    發(fā)表于 09-15 16:02 ?0次下載
    Gowin HDL<b class='flag-5'>編碼</b><b class='flag-5'>風(fēng)格</b>用戶指南

    Verilog編碼風(fēng)格的建議

    良好的編碼風(fēng)格,有助于代碼的閱讀、調(diào)試和修改。雖然 Verilog 代碼可以在保證語法正確的前提下任意編寫,但是潦草的編碼風(fēng)格往往是一錘子買賣。
    的頭像 發(fā)表于 06-01 16:27 ?738次閱讀
    Verilog<b class='flag-5'>編碼</b><b class='flag-5'>風(fēng)格</b>的建議

    阿里AliOS的編碼風(fēng)格

    其實,我們身邊就有很多“好的資源”值得學(xué)習(xí),比如本文分享的 阿里 AliOS 的編碼風(fēng)格。
    發(fā)表于 06-02 09:26 ?254次閱讀