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

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

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

關(guān)于FPGA中的設(shè)計(jì)思維

FPGA開(kāi)源工作室 ? 來(lái)源:IC_learner ? 作者:IC_learner ? 2022-03-15 17:34 ? 次閱讀

一、邏輯設(shè)計(jì)

(1)組合邏輯設(shè)計(jì)

下面是一些用Verilog進(jìn)行組合邏輯設(shè)計(jì)時(shí)的一些注意事項(xiàng):

①組合邏輯可以得到兩種常用的RTL 級(jí)描述方式。第一種是always 模塊的觸發(fā)事件為電平敏感信號(hào)列表;第二種就是用assign 關(guān)鍵字描述的數(shù)據(jù)流賦值語(yǔ)句。

②always 模塊的敏感表為電平敏感信號(hào)的電路可幾乎可以完成對(duì)所有組合邏輯電路的建模。always模塊的敏感列表為所有判斷條件信號(hào)和輸入信號(hào),但一定要注意敏感列表的完整性(注意通配符*的使用)。

由于賦值語(yǔ)句有阻塞賦值和非阻塞賦值兩類(lèi),建議讀者使用阻塞賦值語(yǔ)句“=”,原因?qū)⒃凇白枞x值和非阻塞賦值”中(現(xiàn)在還沒(méi)有寫(xiě))進(jìn)行說(shuō)明。

always 模塊中的信號(hào)必須定義為reg 型,不過(guò)最終的實(shí)現(xiàn)結(jié)果中并沒(méi)有寄存器。這是由于在組合邏輯電路描述中,將信號(hào)定義為reg 型,只是為了滿足語(yǔ)法要求。

③assign 語(yǔ)句的描述,利用條件符“?”可以描述一些相對(duì)簡(jiǎn)單的組合邏輯電路,左邊的賦值信號(hào)只能被定義為wire 型。當(dāng)組合邏輯比較復(fù)雜時(shí),需要很多條語(yǔ)句assign 語(yǔ)句或者多重嵌套“?”,使得代碼可讀性極差,因此此時(shí)推薦always組合邏輯建模方式。

④設(shè)計(jì)時(shí)要注意不要出現(xiàn)組合邏輯環(huán)路:

77485d1e-9640-11ec-952b-dac502259ad0.png

不要在組合邏輯中引入環(huán)路,在組合邏輯中引入環(huán)路會(huì)導(dǎo)致電路產(chǎn)生振蕩、毛刺以及沖突等問(wèn)題,從而降低設(shè)計(jì)的穩(wěn)定性和可靠性,此外,環(huán)回邏輯的延時(shí)完全依靠組合邏輯門(mén)延遲和布線延遲。一旦這些傳播時(shí)延有所變化,則環(huán)路的整體邏輯將徹底失效。其次,環(huán)路的時(shí)序分析是個(gè)死循環(huán)過(guò)程。目前的EDA 開(kāi)發(fā)工具為了計(jì)算環(huán)路的時(shí)序邏輯都會(huì)主動(dòng)割斷時(shí)序路徑,引入許多不確定的因素。因此要徹底避免環(huán)路。

(2)時(shí)序邏輯設(shè)計(jì)

①時(shí)序電路的行為決定了其只能通過(guò)always 塊語(yǔ)句實(shí)現(xiàn),通過(guò)關(guān)鍵詞“posedge”和“negedge”來(lái)捕獲時(shí)鐘信號(hào)的上升沿和下降沿。在always 語(yǔ)句塊中可以使用任何可綜合的標(biāo)志符。

②在描述時(shí)序電路的always 塊中的reg 型信號(hào)都會(huì)被綜合成寄存器,這是和組合邏輯電路所不同的。

③時(shí)序邏輯中推薦使用非阻塞賦值“《=”,原因?qū)⒑竺嬖敿?xì)說(shuō)明。

④時(shí)序邏輯的敏感信號(hào)列表只需要加入所用的時(shí)鐘觸發(fā)沿即可,其余所有的輸入和條件判斷信號(hào)都不用加入,這是因?yàn)闀r(shí)序邏輯是通過(guò)時(shí)鐘信號(hào)的跳變沿來(lái)控制的。

二、鎖存器

鎖存器是個(gè)“奇葩”的器件,在FPGA邏輯設(shè)計(jì)中很避諱;在ASIC設(shè)計(jì)中,以前很喜歡(因?yàn)槊娣e小),現(xiàn)在不是很喜歡了。在這里就記錄一下關(guān)于鎖存器的一些事項(xiàng)吧。

(1)鎖存器的概述

①最常見(jiàn)最基本的鎖存器是SR鎖存器,然后常見(jiàn)常用的鎖存器是D鎖存器。在數(shù)字電路里面,SR鎖存器是最簡(jiǎn)單的時(shí)序單元,它由一對(duì)交叉耦合的或非門(mén)構(gòu)成。主要功能就是通過(guò)輸入的S、R端分別控制Q進(jìn)行置位(set)和復(fù)位(reset)。SR鎖存器可以具有鎖存數(shù)據(jù)的功能。雖然SR鎖存器可以鎖存數(shù)據(jù),電路結(jié)構(gòu)也簡(jiǎn)單,但是有一個(gè)毛病就是S和R同時(shí)有效時(shí),輸出錯(cuò)誤,使用不夠方便;還有一個(gè)問(wèn)題就是某個(gè)時(shí)候存某個(gè)數(shù)據(jù)分不開(kāi),相當(dāng)于時(shí)間和內(nèi)容不夠清晰。因此就有了D鎖存器,D鎖存的功能是在時(shí)鐘高/低電平的時(shí)候通過(guò)數(shù)據(jù),在時(shí)鐘低/高電平的時(shí)候鎖存數(shù)據(jù)。D鎖存器可以分為前級(jí)門(mén)電路(兩個(gè)與門(mén)和一個(gè)非門(mén))和后級(jí)SR鎖存器組成。

②鎖存器是一種對(duì)脈沖電平敏感的存儲(chǔ)單元電路,可以在特定輸入脈沖電平作用下改變狀態(tài),其本身也是一類(lèi)常用的邏輯單元,有著特定的需求。

③鎖存器在數(shù)據(jù)未鎖存時(shí),輸出端的信號(hào)隨輸入信號(hào)變化,就像信號(hào)通過(guò)一個(gè)緩沖器一樣,一旦鎖存信號(hào)有效,則數(shù)據(jù)被鎖住,輸入信號(hào)不起作用。因此,鎖存器也被稱為透明鎖存器,指的是不鎖存時(shí)輸出對(duì)于輸入是透明的。

④鎖存器和寄存器都是數(shù)字電路的基本存儲(chǔ)單元,但鎖存器是電平觸發(fā)的存儲(chǔ)器,觸發(fā)器是邊沿觸發(fā)的存儲(chǔ)器。

本質(zhì)上,鎖存器和D 觸發(fā)器的邏輯功能是基本相同的,都可存儲(chǔ)數(shù)據(jù),且鎖存器所需的門(mén)邏輯更少,具備更高的集成度。

⑤鎖存器具備下列三個(gè)缺點(diǎn):

·對(duì)毛刺敏感,不能異步復(fù)位,因此在上電后處于不確定的狀態(tài)。

·鎖存器會(huì)使靜態(tài)時(shí)序分析變得非常復(fù)雜,不具備可重用性。

·在FPGA/CPLD芯片中,基本的單元是由查找表和觸發(fā)器組成的,若生成鎖存器反而需要更多的資源。

(2)鎖存器的產(chǎn)生

①鎖存器產(chǎn)生于組合邏輯的設(shè)計(jì)中,在基于always的組合邏輯描述語(yǔ)句中,可能產(chǎn)生鎖存器的情況具體可分為兩種:其一是在if 語(yǔ)句中,另一種是在case 語(yǔ)句中。

②在always 塊中使用if 語(yǔ)句,但缺乏else 分支而造成鎖存器。

③在always 塊中使用case 語(yǔ)句,由于缺乏default 分支而造成鎖存器。

④如果用到if 語(yǔ)句,最好有else 分支;如果用到case 語(yǔ)句,最好有default 語(yǔ)句。即使需要鎖存器,也通過(guò)else 分支或default 分支來(lái)顯式說(shuō)明。

(3)鎖存器的應(yīng)用

①在總線應(yīng)用上,鎖存器能提高驅(qū)動(dòng)能力、隔離前后級(jí)。

②地址鎖存器、數(shù)據(jù)鎖存器、復(fù)位信號(hào)鎖存器;門(mén)控時(shí)鐘鐘的應(yīng)用等等。

三、設(shè)計(jì)思維

這個(gè)設(shè)計(jì)思維本來(lái)屬于設(shè)計(jì)技巧里面的,放在這里說(shuō)明,是為了告訴自己,在進(jìn)行電路描述的時(shí)候, 是基于這些準(zhǔn)則的,在設(shè)計(jì)時(shí)能夠根據(jù)這些基本準(zhǔn)則進(jìn)行優(yōu)化電路。下面是常見(jiàn)的設(shè)計(jì)思維,主要是基于FPGA的,關(guān)于ASIC其他設(shè)計(jì)技巧或者設(shè)計(jì)思維,我記錄在了“技巧”篇。

(1)速度面積互換準(zhǔn)則

①速度與面積是設(shè)計(jì)時(shí)常考慮的的一個(gè)問(wèn)題,因此在設(shè)計(jì)的時(shí)候要考慮怎么在這二者之間的權(quán)衡。當(dāng)然,現(xiàn)在功耗也與速度、面積成為需要考慮的重大因素之一。

②面積和速度互換的具體操作很多,比如模塊復(fù)用、乒乓操作、串并轉(zhuǎn)換以及流水線操作等。在設(shè)計(jì)技巧策略和技巧那一章節(jié)中將會(huì)進(jìn)行敘述。

③串并轉(zhuǎn)換乘法器:假設(shè)數(shù)據(jù)速率是乘法器模塊處理速度的3 倍,那么由于乘法器模塊的數(shù)據(jù)吞吐量滿足不了要求,在這種情況下,就利用面積換速度的思想,復(fù)制3 個(gè)乘法器模塊。首先將輸入數(shù)據(jù)進(jìn)行串并轉(zhuǎn)換,然后利用這3 個(gè)模塊并行處理所分配到的數(shù)據(jù),最后將處理結(jié)果并串轉(zhuǎn)換,達(dá)到數(shù)據(jù)速率的要求。

如下圖所示:

775a579e-9640-11ec-952b-dac502259ad0.png

(2)FPGA中的設(shè)計(jì)思維

①信號(hào)反相的處理策略

在處理反相信號(hào)時(shí),設(shè)計(jì)時(shí)應(yīng)盡可能地遵從分散反相原則。即應(yīng)使用多個(gè)反相器分別反相,每個(gè)反相器驅(qū)動(dòng)一個(gè)負(fù)載,這個(gè)原則無(wú)論對(duì)時(shí)鐘信號(hào)還是對(duì)其它信號(hào)都是適用的。

因?yàn)樵贔PGA設(shè)計(jì)中,反相是被吸收到CLB或IOB中的,使用多個(gè)反相器并不占用更多的資源,而使用一個(gè)反相器將信號(hào)反相后驅(qū)動(dòng)多個(gè)負(fù)載卻往往會(huì)多占資源,而且延遲也增加了。

②首先,如果輸入信號(hào)需要反相,則應(yīng)盡可能地調(diào)用輸入帶反相功能的符號(hào),而不是用分離的反相器對(duì)輸入信號(hào)進(jìn)行反相。

因?yàn)樵谑褂米詭Х聪喙δ艿钠骷校捎诤瘮?shù)發(fā)生器用查表方式實(shí)現(xiàn)邏輯,反相操作是不占資源的,也沒(méi)有額外延遲;而分開(kāi)使用不同邏輯使用反相操作實(shí)現(xiàn),從而消耗額外的資源,增加額外的延遲。

③其次,如果一個(gè)信號(hào)反相后驅(qū)動(dòng)了多個(gè)負(fù)載,則應(yīng)將反相功能分散到各個(gè)負(fù)載中實(shí)現(xiàn),而不能采用傳統(tǒng)TTL電路設(shè)計(jì),采用集中反相驅(qū)動(dòng)多個(gè)負(fù)載來(lái)減少所用的器件的數(shù)量。

因?yàn)樵贔PGA設(shè)計(jì)中,集中反相驅(qū)動(dòng)多個(gè)負(fù)載往往會(huì)多占一個(gè)邏輯塊或半個(gè)邏輯塊,而且延遲也增加了。分散信號(hào)的反相往往可以與其它邏輯在同一單元內(nèi)完成而不消耗額外的邏輯資源。

原文標(biāo)題:VerilogHDL 可綜合設(shè)計(jì)的注意事項(xiàng)

文章出處:【微信公眾號(hào):FPGA開(kāi)源工作室】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

審核編輯:彭菁

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

    關(guān)注

    1624

    文章

    21573

    瀏覽量

    600688
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5275

    瀏覽量

    119677
  • 電平
    +關(guān)注

    關(guān)注

    5

    文章

    356

    瀏覽量

    39784
  • 鎖存器
    +關(guān)注

    關(guān)注

    8

    文章

    904

    瀏覽量

    41394

原文標(biāo)題:VerilogHDL 可綜合設(shè)計(jì)的注意事項(xiàng)

文章出處:【微信號(hào):leezym0317,微信公眾號(hào):FPGA開(kāi)源工作室】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    編程是一種思維方式,而代碼是一種表現(xiàn)形式,硬件只不過(guò)是對(duì)思維方式的物理體現(xiàn)

    編程是一種思維方式,而代碼是一種表現(xiàn)形式,硬件只不過(guò)是對(duì)思維方式的物理體現(xiàn)關(guān)于這句話,你怎么看?
    發(fā)表于 08-25 13:18

    先進(jìn)的創(chuàng)新教育:AI 思維+設(shè)計(jì)思維

    的、可以非常有效地相輔相成。從教育視角而觀之,如何讓我們的兩種學(xué)生:機(jī)器學(xué)生與人類(lèi)學(xué)生,兩者攜手共舞、一起創(chuàng)新,成為最新潮的創(chuàng)新教育思維。 再?gòu)倪壿?b class='flag-5'>思維視角而觀之,人類(lèi)與生俱來(lái)的三項(xiàng)邏輯思維
    發(fā)表于 01-04 10:16

    什么是模型思維

    什么是模型思維?怎樣確定一個(gè)模型?
    發(fā)表于 09-18 06:41

    失效分析的模式思維方法

    失效分析的模式思維方法:對(duì)事故模式和失效模式的歸納總結(jié),從中引伸出預(yù)防事故或失效的新認(rèn)識(shí)或新概念.關(guān)健詞:失效模式;失效分析;安全性工程
    發(fā)表于 12-18 11:28 ?34次下載

    Altium Designer關(guān)于FPGA的PIN交換

    Altium Designer關(guān)于FPGA的PIN交換
    發(fā)表于 12-10 16:59 ?0次下載

    如何將MCU應(yīng)用到FPGA:關(guān)于FPGA(1)

    最近,我接手一個(gè)項(xiàng)目,這個(gè)項(xiàng)目不僅要求我使用FPGA,而且還要求我使用功能更強(qiáng)大的ARM。這都是我從未接觸過(guò)的領(lǐng)域。在這個(gè)系列博客,我將介紹我是如何將自己現(xiàn)有的MCU知識(shí)和經(jīng)驗(yàn)運(yùn)用到FPGA
    發(fā)表于 05-08 15:41 ?3866次閱讀

    關(guān)于FPGA的幾點(diǎn)問(wèn)題,你了解嗎?

    因此,要想學(xué)好FPGA,你得用硬件的思維方式來(lái)編寫(xiě)代碼,注重FPGA的系統(tǒng)結(jié)構(gòu)設(shè)計(jì),好的系統(tǒng)結(jié)構(gòu)設(shè)計(jì)會(huì)帶來(lái)質(zhì)的飛躍,這就告訴我們RTL Coding其實(shí)是硬件結(jié)構(gòu)設(shè)計(jì),而非基于處理器架構(gòu)的C語(yǔ)言程序開(kāi)發(fā),好的RTL Coding
    發(fā)表于 07-04 14:12 ?2818次閱讀

    FPGA邏輯關(guān)于地址映射說(shuō)明

    背景與問(wèn)題 CPU+FPGA架構(gòu),CPU做RC、FPGA做EP; FPGA邏輯(Vivado -BD - Address Editor)如何設(shè)置PCIe to AXI Transla
    的頭像 發(fā)表于 11-20 15:28 ?6441次閱讀
    <b class='flag-5'>FPGA</b>邏輯<b class='flag-5'>中</b><b class='flag-5'>關(guān)于</b>地址映射說(shuō)明

    FPGA設(shè)計(jì)經(jīng)驗(yàn)技巧,用數(shù)學(xué)思維來(lái)簡(jiǎn)化設(shè)計(jì)邏輯!資料下載

    電子發(fā)燒友網(wǎng)為你提供FPGA設(shè)計(jì)經(jīng)驗(yàn)技巧,用數(shù)學(xué)思維來(lái)簡(jiǎn)化設(shè)計(jì)邏輯!資料下載的電子資料下載,更有其他相關(guān)的電路圖、源代碼、課件教程、中文資料、英文資料、參考設(shè)計(jì)、用戶指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發(fā)表于 04-01 08:55 ?22次下載
    <b class='flag-5'>FPGA</b>設(shè)計(jì)經(jīng)驗(yàn)技巧,用數(shù)學(xué)<b class='flag-5'>思維</b>來(lái)簡(jiǎn)化設(shè)計(jì)邏輯!資料下載

    (網(wǎng)盤(pán))關(guān)于SDRAM和錄音機(jī)等FPGA視頻

    (網(wǎng)盤(pán))關(guān)于SDRAM和錄音機(jī)等FPGA視頻(android嵌入式開(kāi)發(fā)教程)-關(guān)于SDRAM和錄音機(jī)等FPGA視頻,一步一步的講解,真的很詳細(xì),適合大家自學(xué)研究。
    發(fā)表于 08-04 12:21 ?15次下載
    (網(wǎng)盤(pán))<b class='flag-5'>關(guān)于</b>SDRAM和錄音機(jī)等<b class='flag-5'>FPGA</b>視頻

    射頻設(shè)計(jì)的思維方式——阻抗和諧振

    關(guān)于頻率思維,要記住電磁波的三角關(guān)系:頻率,波長(zhǎng)和波速。波長(zhǎng)是射頻設(shè)計(jì)對(duì)應(yīng)的物理尺寸,所以一些常用的頻率的波長(zhǎng)大家要熟記于心。
    發(fā)表于 10-06 06:23 ?546次閱讀

    關(guān)于數(shù)據(jù)通信的思維導(dǎo)圖

    思維導(dǎo)圖可以有效的幫助初學(xué)者建立更完整的知識(shí)體系,也有利于從業(yè)多年的老司機(jī)進(jìn)行思維的展開(kāi)。下面是數(shù)據(jù)通信的思維導(dǎo)圖 ? ? ? ? 審核編輯:彭靜
    的頭像 發(fā)表于 10-28 09:28 ?1441次閱讀

    FPGA關(guān)于SPI的使用

    FPGA關(guān)于SPI的使用
    的頭像 發(fā)表于 04-12 10:13 ?843次閱讀

    FPGA朋友邏輯思維能力的學(xué)習(xí)

    Kevin一直認(rèn)為學(xué)習(xí)FPGA的朋友的邏輯思維能力應(yīng)該是比其他人要強(qiáng)很多的。在很多求職網(wǎng)站上都可以看到FPGA相關(guān)行業(yè)的招聘信息可能會(huì)有這樣的一條工作職責(zé):負(fù)責(zé)項(xiàng)目的邏輯設(shè)計(jì)。
    的頭像 發(fā)表于 08-28 09:50 ?690次閱讀

    精益思維在PCB設(shè)計(jì)的應(yīng)用實(shí)踐

    精益思維,源自豐田生產(chǎn)方式,強(qiáng)調(diào)“消除浪費(fèi),創(chuàng)造價(jià)值”。在PCB設(shè)計(jì),這意味著通過(guò)優(yōu)化流程、減少冗余、提高自動(dòng)化水平等手段,實(shí)現(xiàn)設(shè)計(jì)周期縮短、成本降低、質(zhì)量提升的目標(biāo)。精益思維不僅關(guān)注最終產(chǎn)品
    的頭像 發(fā)表于 08-28 09:53 ?156次閱讀