在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

簡談FPGA的設計規范

FPGA學習交流 ? 2019-11-14 13:54 ? 次閱讀

大家好,又到了每日學習的時間了,有一段時間沒有正經更新了,之前有粗略地聊過FPGA的設計規范,那今天我們就詳細的聊一聊FPGA做開發的時候,有哪些設計規范,從文檔到工程建立等,聊一聊也許你會學到很多東西,少走很多彎路哦!
在團隊項目開發中,為了使開發的高效性、一致性、正確性,團隊應當要有一個規范的設計流程。按照規范來完成項目的設計開發工作,歸類清晰明了的工程文件夾級別;項目應擁有良好風格和完整的文檔,如設計思路與調試記錄及器件選型等;代碼書寫高效,即統一的書寫規范,文件頭包含的信息完整,無論自己還是團隊他人閱讀便一目了然。


一、文檔命名:

清晰的文檔命名能夠讓我們思路非常的清晰,所以FPGA工程文件夾的目錄要求層次鮮明,歸類清晰。一個工程必須要有一個嚴整的框架結構,用來存放相關的文檔、設計,不僅方便自己查看,也提高了項目的團隊工作效率。
下面我們來舉例說明:
一級文件夾為工程名
二級文件夾多個:
用以存放源文件
用以存放Testbench文件
用來存放設計思路相關類的文件
用來存放IP 核的文件
等等…


二、設計文檔化:
將自己對設計的思路和調試記錄在文檔中,有利于以后對模塊功能的添加和維護,并且在項目聯調時方便項目組其他人員讀代碼。也方便不同廠家的FPGA之間移植,以及FPGA到ASIC的移植。如下圖就是設計文檔化的舉例說明,文檔介紹清晰,功能分析明確,有利于以后對模塊功能的添加和維護。

image.png

設計思路:按照項目的要求,自頂向下的分成若干模塊,分別編寫功能。頂層盡量只做行為描述,邏輯描述在底層編寫。模塊的編寫要有硬件電路思維方式,每一個模塊的設計都應考慮是否存在該硬件電路,盡量采用同步設計。


三、編碼風格:

每個module應存在于單獨的源文件中,源文件名應與其所包含的模塊名相同。每個設計都應該有一個完善的文件頭,包含公司名稱、設計者、設計時間、文件名、所屬項目、模塊名稱及功能、修改記錄及版本信息等內容。代碼中的標識符采用傳統C語言的命名方法,在單詞之間用下劃線分開,采用有意義,能反應對象特征、作用和性質的單詞命名標識符,以此來增強程序的可讀性。為避免標識符過于冗長,較長的單詞可以適當的縮寫。


四、代碼規范:
低電平有效的信號,后綴名要用“_n”,比如低電平有效的復位信號“rst_n”
模塊名和信號名統一小寫
變量名要小寫,如wire、reg、input、output等定義的
變量命名應按照變量的功能用英文簡潔表示出來“xxx_xxx_xxx”,避免過長
采用大寫字母定義常量參數,參數名小于20個字母,如parameter TIME=20
時鐘信號應前綴“clk”,復位信號應前綴“rst”
對于頂層模塊的輸出信號盡量被寄存
三態邏輯避免在子模塊使用,可以在頂層模塊使用
到其它模塊的接口信號按:輸入、(雙向)、輸出的順序定義端口
一個模塊至少要有一個輸入、輸出,避免書寫空模塊
時鐘事件的表達式用“posedge”或“negedge”的形式
If語句嵌套不能太多
建議不要使用include語句
建議每個模塊添加timescale
代碼中給出必要的注釋
每個文件有個一頭文件
每個文件只包含一個模塊
模塊名和文件名保持一致
異步復位,用if(xxx==1’b1) 或 if(xxx==1’b0)
同步時序邏輯的always block中有且只有一個時鐘信號,并且在同一個沿動作
采用同步設計,避免使用異步邏輯
一般不要將時鐘信號作為數據信號的輸入
不要在時鐘路徑上添加任何buffer
在頂層模塊中,時鐘信號必須可見
不要采用向量定義的方式定義一組時鐘信號
不要在模塊內部生成時鐘信號,使用pll產生
盡量不使用任務
不使用事件變量
不使用系統函數
不使用disable語句
盡量不使用forever、repeat、while等循環語句
不使用不可綜合的運算符
在一個always語句中有且只能有一個事件列表
移位變量必須是一個常數
時序邏輯語塊中統一使用非阻塞型賦值
組合邏輯語塊中使用阻塞型賦值


五、注釋規則

  1. 每個文件有一個文件頭,文件頭中注明文件名、功能描述、引用模塊、設計者、設計時間、版權信息以及修改信息等;

  2. 對信號、參量、引腳、模塊、函數及進程等加以說明,便于閱讀與維護,如信號的作用、頻率、占空比、高低電平寬度等。用“//”做小于1行的注釋,用“/* */”做多于1行的注釋。更新的內容要做注釋,記錄修改原因,修改日期和修改人。


六、模塊規則

  1. module例化名用u_xx_x標示;

  2. 建議給每個模塊要加timescale;

  3. 不要書寫空的模塊,即:一個模塊至少要有一個輸入和一個輸出;

  4. 為了保持代碼的清晰、美觀和層次感,一條語句應占用一行,每行限制在80個字符以內,如果較長(超出80個字符)則換行;

  5. 采用基于名字(name_based)的調用而不是基于順序的(order_based)的調用;

  6. 模塊的接口信號按輸入、雙向、輸出順序定義;

  7. 使用降序定義向量有效位順序,最低位為0;

  8. 管腳和信號說明部分:一個管腳和一組總線占用一行,說明要清晰;

  9. 不要采用向量的方式定義一組時鐘信號;

  10. 邏輯內部不對input進行驅動,在module內不存在沒有驅動源的信號,更不能在模塊端口存在沒有驅動的輸出信號,避免在elabarate和compile時產生warning;

  11. 在頂層模塊中,除了內部的互連和module的例化外,避免在做其他邏輯;

  12. 出于層次設計和同步設計的考慮,子模塊輸出信號建議用寄存器

  13. 內部模塊端口避免inout,最好在最頂層模塊處理雙向總線;

  14. 子模塊中禁止使用三態邏輯,可以在頂層模塊使用;

  15. 如果能確保該信號不會被其它子模塊使用,而是直接通過頂層模塊輸出I/O口,可以在子模塊中使用三態;

  16. 禁止出現未連接的端口;

  17. 為邏輯升級保留的無用端口和信號要注釋;對于層次化設計的邏輯,在升級中采用增量編譯;建議采用層次化設計,模塊之間相對獨立。

七、線網和寄存器規則

  1. 鎖存器和觸發器不允許在不同的always塊中賦值,造成多重驅動;

  2. 出于功能仿真考慮,非阻塞賦值應該增加單位延時,對于寄存器類型的變量賦值時,尤其要注意這一點;阻塞賦值不允許使用單位延時;

  3. always語句實現時序邏輯采用非阻塞賦值;always語句實現的組合邏輯和assign語句塊中使用阻塞賦值;

  4. 同一信號賦值不能同時使用阻塞和非阻塞兩種方式;

  5. 不允許出現定義了parameter、wire、reg卻沒有使用的情況;

  6. 不建議使用integer類型寄存器;

  7. 寄存器類型的信號要初始化;

  8. 除移位寄存器外,每個always語句只對一個變量賦值,盡量避免在一個always語句出現多個變量進行運算或賦值。


八、表達式規則

  1. 在表達式內使用括號表示運算的優先級,一行中不能出現多個表達式;

  2. 不要給信號賦“x”態,以免x值傳遞;

  3. 設計中使用到的0,1,z等常數采用基數表示法書寫(即表示為1'b0,1'b1,1'bz或十六進制);

  4. 端口申明、比較、賦值等操作時,數據位寬要匹配。


九、條件語句規則

  1. if 都有else和它對應,變量在if-else或case語句中所有變量在所有分支中都賦值;

  2. 如果用到case語句,記得default項;

  3. 禁止使用casex,case語句item必須使用常數;

  4. 不允許使用常數作為if語句的條件表達式;

  5. 條件表達式必須是1bit value;

  6. 如異步復位:

    高電平有效使用“if(asynch_reset==1'b1)”,

    低電平“if(asynch_reset==1'b0)”,

    不要寫成

    “if(!asynch_reset)”或者“if(asynch_reset==0)”;

  7. 不推薦嵌套使用5級以上if…else if…結構。


十、可綜合部分規則

  1. 不要使用include語句;

  2. 不要使用disable、initial等綜合工具不支持的電路,而應采用復位方式進行初時化,但在testbench電路中可以使用;

  3. 不使用specify模塊,不使用===、!==等不可綜合的操作符;

  4. 除仿真外,不使用fork-join語句;

  5. 除仿真外,不使用while語句;

  6. 除仿真外,不使用repeat語句;

  7. 除仿真外,不使用forever語句;

  8. 除仿真外,不使用系統任務($);

  9. 除仿真外,不使用deassign語句;

  10. 除仿真外,不使用force,release語句;

  11. 除仿真外,不使用named events語句;不在連續賦值語句中引入驅動強度和延時;

  12. 禁止使用trireg型線網;

  13. 制止使用tri1、tri0、triand和trior型的連接;

  14. 不要位驅動supply0和supply1型的線網賦值;

  15. 設計中不使用macro_module;

  16. 不要在RTL代碼中實例門級單元尤,其下列單元:(CMOS/RCOMS/NMOS/PMOS/RNMOS/RPMOS/trans/rtrans/tranif0/tranif1/rtranif0/tranif1/pull_gate)。


十一、可重用部分規則

  1. 考慮未使用的輸入信號power_down,避免傳入不穩定態;

  2. 接口信號盡量少,接口時序盡量簡單;

  3. 將狀態機(FSM)電路與其它電路分開,便于綜合和后端約束;

  4. 將異步電路和同步電路區分開,便于綜合和后端約束,將相關的邏輯放在一個模塊內;

  5. 合理劃分設計的功能模塊,保證模塊功能的獨立性;

  6. 合理劃分模塊的大小,避免模塊過大;

  7. 在設計的頂層(top)模塊,將I/O口、Boundary scan電路、以及設計邏輯(corelogic)區分開。


十二、同步設計規則

  1. 同一個module中,要在時鐘信號的同一個沿動作;

  2. 如果必須使用時鐘上升沿和時鐘下降沿,則要分兩個module設計;

  3. 在頂層模塊中,時鐘信號必須可見,不在模塊內部生成時鐘信號,而要使用DCM/PLL產生的時鐘信號;

  4. 避免使用門控時鐘和門控復位;

  5. 同步復位電路,建議在同一時鐘域使用單一的全局同步復位電路;

    異步復位電路,建議使用單一的全局異步復位電路;

  6. 不在時鐘路徑上添加任何buffer;

  7. 不在復位路徑上添加任何buffer;

  8. 避免使用latch;

  9. 寄存器的異步復位和異步置位信號不能同時有效;

  10. 避免使用組合反饋電路;

  11. always有且僅有一個的敏感事件列表,敏感事件列表要完整,否則可能會造成前后仿真的結果不一致;

  12. 異步復位情況下需要異步復位信號和時鐘沿做敏感量,同步復位情況下只需要時鐘沿做敏感量;

  13. 時鐘事件的表達式要用:

    “negedge

    “posedge”的形式;

  14. 復雜電路將組合邏輯和時序邏輯電路分成獨立的always描述。


十三、循環語句規則

  1. 在設計中不推薦使用循環語句;

  2. 在非常有必要使用的循環語句時,可以使用for語句。


十四、約束規則

  1. 對所有時鐘頻率和占空比都進行約束;

  2. 對全局時鐘skew進行約束;

  3. 對于時序要求的路徑需要針對特殊要求進行約束,如鎖相環鑒相信號;

  4. 要根據輸出管腳驅動要求進行約束,包括驅動電流和信號邊沿特性;

  5. 要根據輸入和輸出信號的特性進行管腳上下拉約束;

  6. 針對關鍵I/O是否約束了輸入信號和輸入時鐘的相位關系,控制輸入信號在CLK信號之后或之前多少ns到達輸入pad;

  7. 綜合設置時,fanout建議設置為3030;

  8. 要使用輸入輸出模塊中的寄存器,如Xinlinx公司的IOB,map properties選項pack I/O register/latches into IOBsactor需要設置成為“for input and output”,這樣可以控制管腳到內部觸發器的延時時間;

  9. 布局布線報告中IOB、LUTs、RAM等資源利用率應小于百分之八十;

  10. 對于邏輯芯片對外輸入接口,進行tsu/th約束;對于邏輯芯片對外輸出接口,進行約束。


十五、PLL/DCM

  1. 如果使用FPGA內部DCM和PLL時,應該保證輸入時鐘的抖動小于300ps,防止DCM/PLL失鎖;如果輸入時鐘瞬斷后必須復位PLL/DCM。

  2. 對于所有廠家的FPGA,其片內鎖相環只能使用同頻率的時鐘信號進行鎖相,如果特殊情況下需要使用不同頻率的信號進行鎖相,需要得到廠家的認可,以避免出時鐘。


十六、代碼編輯

由于不同編輯器處理不同,對齊代碼使用空格,而不是tab鍵。


***可綜合和不可綜合詳解***

(1)所有綜合工具都支持的結構:always,assign,begin,end,case,wire,tri,aupply0,supply1,reg,integer,default,for,function,and,nand,or,nor,xor,xnor,buf,not, bufif0,bufif1,notif0,notif1,if,inout,input,instantitation,module,negedge,posedge,operators,output,parameter。
(2)所有綜合工具都不支持的結構:time,defparam,$finish,fork,join,initial,delays,UDP,wait。
(3)有些工具支持有些工具不支持的結構:casex,casez,wand,triand,wor,trior,real,disable,forever,arrays,memories,repeat,task,while。


建立可綜合模型的原則
要保證Verilog HDL賦值語句的可綜合性,在建模時應注意以下要點:
(1)不使用initial。
(2)不使用#10。
(3)不使用循環次數不確定的循環語句,如forever、while等。
(4)不使用用戶自定義原語(UDP元件)。
(5)盡量使用同步方式設計電路。
(6)除非是關鍵路徑的設計,一般不采用調用門級元件來描述設計的方法,建議采用行為語句來完成設計。
(7)用always過程塊描述組合邏輯,應在敏感信號列表中列出所有的輸入信號。
(8)所有的內部寄存器都應該能夠被復位,在使用FPGA實現設計時,應盡量使用器件的全局復位端作為系統總的復位。
(9)對時序邏輯描述和建模,應盡量使用非阻塞賦值方式。對組合邏輯描述和建模,既可以用阻塞賦值,也可以用非阻塞賦值。但在同一個過程塊中,最好不要同時用阻塞賦值和非阻塞賦值。
(10)不能在一個以上的always過程塊中對同一個變量賦值。而對同一個賦值對象不能既使用阻塞式賦值,又使用非阻塞式賦值。
(11)如果不打算把變量推導成鎖存器,那么必須在if語句或case語句的所有條件分支中都對變量明確地賦值。
(12)避免混合使用上升沿和下降沿觸發的觸發器。
(13)同一個變量的賦值不能受多個時鐘控制,也不能受兩種不同的時鐘條件(或者不同的時鐘沿)控制。
(14)避免在case語句的分支項中使用x值或z值。


1、initial
只能在test bench中使用,不能綜合。(我用ISE9.1綜合時,有的簡單的initial也可以綜合,不知道為什么)
2、events
event在同步test bench時更有用,不能綜合。
3、real
不支持real數據類型的綜合。
4、time
不支持time數據類型的綜合。
5、force 和release
不支持force和release的綜合。
6、assign 和deassign
不支持對reg 數據類型的assign或deassign進行綜合,支持對wire數據類型的assign或deassign進行綜合。
7、fork join
不可綜合,可以使用非塊語句達到同樣的效果。
8、primitives
支持門級原語的綜合,不支持非門級原語的綜合。
9、table
不支持UDP 和table的綜合。
10、敏感列表里同時帶有posedge和negedge
如:always @(posedge clk or negedge clk) begin...end
這個always塊不可綜合。
11、同一個reg變量被多個always塊驅動
12、延時
以#開頭的延時不可綜合成硬件電路延時,綜合工具會忽略所有延時代碼,但不會報錯。
如:a=#10 b;
這里的#10是用于仿真時的延時,在綜合的時候綜合工具會忽略它。也就是說,在綜合的時候上式等同于a=b;
13、與X、Z的比較
可能會有人喜歡在條件表達式中把數據和X(或Z)進行比較,殊不知這是不可綜合的,綜合工具同樣會忽略。所以要確保信號只有兩個狀態:0或1。
如:
1 module synthesis_compare_xz (a,b);
2 output a;
3 input b;
4 reg a;
5
6 always @ (b)
7 begin
8 if ((b == 1'bz) || (b == 1'bx)) begin
9 a = 1;
10 end else begin
11 a = 0;
12 end
13 end
14
15 endmodule


以上是個人整理出來的一些設計規范,有些部分有重復,但無傷大雅,適用于FPGA Verilog HDL設計,VHDL的話設計思想是一樣,大同小異,大家可以舉一反三,今天就聊到這里,感謝并祝好。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
收藏 人收藏

    評論

    相關推薦

    133條原理圖設計規范checklist

    原理圖設計是產品設計的理論基礎,設計一份規范的原理圖對設計PCB、跟機、做客戶資料具有指導性意義,是做好一款產品的基礎。原理圖設計基本要求: 規范、清晰、準確、易讀。 因此制定《原理圖設計規范
    發表于 04-11 10:50

    11節PCB實際案例課程+大廠內部PCB設計規范文檔(13920字)

    資料介紹 每個課程1個半小時左右,都是講具體設計案例,非常詳細,需要的朋友自取~ 設計規范就更基礎一些!尤其對于新手來說,從PCB的設計步驟到阻抗計算、bom分析全部都有涉及,還有一些實用的軟件
    發表于 04-02 15:28

    268條PCB Layout設計規范(免積分下載)

    本文總結了PCB布線與布局和電路設計總共268條設計規范,供大家參考學習。 獲取完整資料可下載附件哦!!!!
    發表于 03-05 16:26

    中興通訊的PCB設計規范

    中興通訊的PCB設計規范
    發表于 02-08 15:31 ?5次下載

    GB/T 50034-2024 建設照明設計規范

    當前有效的建筑照明設計規范
    發表于 02-07 15:20 ?13次下載

    華為支付接入規范

    為了確保用戶獲得良好的支付體驗,Payment Kit制定了相關接入設計規范,請開發者遵照執行,具體要求(非強制性)如下: 一、支付方式呈現 涉及支付公司名稱,請統一使用:花瓣支付(深圳)有限公司
    發表于 01-23 09:27

    學校電力監控解決方案-快速排除故障,提高學校供電可靠性

    進行監視、測量、記錄、報警等功能,并與保護設備和遠方控制中心及其他設備通信,實時掌握供電系統運行狀況和可能存在的隱患,快速排除故障,提高學校供電可靠性。 2、參考標準 JGJ310-2013?????? 《教育建筑電氣設計規范》 GB50052-2009? ? ? 《供配電系統
    的頭像 發表于 10-30 13:33 ?419次閱讀
    學校電力監控解決方案-快速排除故障,提高學校供電可靠性

    學校能耗管理系統解決方案-降低能源消耗,減少能源成本

    政府工作主要任務,學校作為能耗密集,用能情況較為復雜的大型建筑,有效的降低能源消耗,減少能源成本,避免用能過程中的“跑冒滴漏”現象,實施能效綜合考評是個非常必要的管理手段。 2、參考標準 JGJ310-2013?? ??????《教育建筑電氣設計規范》 GB50052-2009 《供配電系統
    的頭像 發表于 10-29 11:06 ?533次閱讀
    學校能耗管理系統解決方案-降低能源消耗,減少能源成本

    110kv變電站設計規范

    110kV變電站設計規范涉及多個方面,包括選址、電氣設計、設備選擇、安全保護等。以下是根據相關規范和標準整理的一些主要設計規范: 一、總則 目的與范圍 :規范適用于電壓為35~110k
    的頭像 發表于 09-26 09:32 ?3740次閱讀

    pcb設計中有哪些常用設計規范

    在PCB(Printed Circuit Board,印刷電路板)設計中,常用的設計規范涉及多個方面,以確保電路板的性能、可靠性、可制造性和可維護性。以下是一些主要的設計規范: 一、電氣設計規范
    的頭像 發表于 09-02 14:51 ?1895次閱讀

    光伏儲能系統設計規范 光伏儲能系統設計的難點有哪些

    儲能系統的設計規范進行詳細闡述,并分析設計過程中可能遇到的難點。 光伏儲能系統設計規范 2.1 系統容量設計 系統容量設計是光伏儲能系統設計的基礎,需要根據用戶需求、地理位置、氣候條件等因素進行綜合考慮。具體包括:
    的頭像 發表于 05-24 14:58 ?1781次閱讀

    FPGA研發設計相關規范(很實用)

    今天和大俠聊一聊FPGA研發設計相關規范,養成良好的個人習慣,代碼設計風格等,都有助于日后發展。有哪些設計規范,從文檔到工程建立等,聊一聊也許你會學到很多東西,少走很多彎路哦。話不多說,上貨。 在
    發表于 05-13 15:39

    Xilinx Zynq-7000嵌入式系統設計與實現

    今天給大俠帶來Xilinx Zynq-7000嵌入式系統設計與實現,話不多說,上貨。 Xilinx的ZYNQ系列FPGA是二種看上去對立面的思想的融合,ARM處理器的串行執行+FP
    發表于 05-08 16:23

    FPGA研發設計規范的簡明探討

    每個module應存在于單獨的源文件中,源文件名應與其所包含的模塊名相同。每個設計都應該有一個完善的文件頭,包含公司名稱、設計者、設計時間、文件名、所屬項目、模塊名稱及功能、修改記錄及版本信息等內容。
    的頭像 發表于 04-26 11:43 ?604次閱讀
    <b class='flag-5'>FPGA</b>研發<b class='flag-5'>設計規范</b>的簡明探討

    FPGA研發設計相關規范(很實用)

    今天和大俠聊一聊FPGA研發設計相關規范,養成良好的個人習慣,代碼設計風格等,都有助于日后發展。有哪些設計規范,從文檔到工程建立等,聊一聊也許你會學到很多東西,少走很多彎路哦。話不多說,上貨
    發表于 04-16 15:42
    主站蜘蛛池模板: 四虎影院在线观看网站 | 特黄特黄视频 | 五月天六月丁香 | 免费一级毛片在线播放不收费 | 4455四色永久免费 | 亚在线 | 久久精品免费看 | 亚洲高清视频一区 | 在线观看黄色网 | 欧美三级欧美一级 | 台湾三级毛片 | 久久久久久毛片免费播放 | 午夜国产精品视频 | 五月网址| 久久aa毛片免费播放嗯啊 | 日本视频一区二区三区 | 国产精品高清一区二区三区不卡 | 久久久久国产精品免费看 | 成人a级特黄毛片 | 国产高清视频免费最新在线 | 全黄性色大片 | 很黄很黄叫声床戏免费视频 | 久草一区| 99久久香蕉国产综合影院 | 国产成人小视频 | 在线成人精品国产区免费 | 五月婷在线观看 | 国产精品爱啪在线线免费观看 | 欧美成人免费观看bbb | 色噜噜狠狠色综合欧洲 | 免费大片av手机看片 | 婷婷六月丁香午夜爱爱 | 色婷婷综合激情视频免费看 | 日本五十交尾在线观看 | 日日摸夜夜爽夜夜爽出水 | 午夜免费一级片 | 天堂在线观看视频 | 无毒不卡在线播放 | 国内精品伊人久久大香线焦 | 欧美性猛交xxxx黑人猛交 | 久久久夜色精品国产噜噜 |