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

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

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

3天內不再提示

芯片實現碼代碼的部分

倩倩 ? 來源:IP與SoC設計 ? 作者:IP與SoC設計 ? 2022-08-23 14:59 ? 次閱讀

0 緒論

經過了上篇文章的文檔設計,我們這一章開始寫代碼。碼代碼這個問題確實是一個必備技能,任何設計不會碼代碼其實無法實現的。

這塊兒流程上包括了兩個東西。第一個碼代碼,第二個是一些必要的代碼檢查,保證代碼不會出現什么歧義導致實現結果和設計意圖不一致。具體語法我們就不在這一章講了,寫出來也是千篇一律,此處就簡單講講HDL的簡介,同時講一下如何提高編碼質量,供大家參考。然后簡單講一個代碼寫完必要的檢查工序spyglass檢查,這個工具可以避免大部分低級BUG。

521f79dc-21fa-11ed-ba43-dac502259ad0.jpg

1 碼代碼

52393af2-21fa-11ed-ba43-dac502259ad0.jpg

1.1 HDL簡介

此處的代碼主要指的是HDL, hardware design language, 最主流的只有一種:Verilog,以及它的衍生品system verilog。其實還有兩種語言,VHDL,屬于它的時代已經過去了, 還有一種Chisel為代表的高級語言,屬于它的時代似乎還沒到來。所以我們這個地方重點講講verilog。

verilog 1983年被gateway設計,1990年gateway被candance收購。然后90年代出了第一個標準Verilog-95,定義了最原始的語法。直到現在,部分公司還是只允許使用95中的特性。2001年公布新一代標準,verilog-2001, 這一代標準中加入了generate, 多維數組等等實用的語法,現在是verilog使用最主流的標準,基本上所有的軟件工具鏈都支持該標準,后續verilog更新了一代標準verilog2005, 不過這一代標準開始向著一個獨立的方向演變,最后被合并到了systemverilog 2009。system verilog中提供了interface等等一系列面向對象的方法,已經廣泛被驗證支持了,但是在設計實現中只被支持了少部分特性。具體什么特性允許使用其實各個公司都有自己的看法與標準,你需要注意一下公司的編碼標準。從我個人的觀點來看,如果確認新特性沒問題最好用新特性,減少工作量的同時還能避免代碼出低級錯誤。

verilog代碼長這樣。下面實現了一個十進制的計數器。

524b8824-21fa-11ed-ba43-dac502259ad0.jpg

1.2 編碼質量

Verilog其實不是一個很難的語言,但是由于比較落后,編碼質量很多需要人為來注意。編碼質量主要就是兩個方面考慮。容易出錯的點以及提高后續步驟效率的點。常見容易出錯的點大家應該都懂,此處簡單總結了一下我覺得需要了解又容易被忽略的點,歡迎大家補充。

1.2.1 容易出錯的點

·命名有意義,代碼有注釋。這個任何編程語言都需要注意,我把它列在第一點,這是一個碼農最起碼的素質。即可以避免自己出錯,又可以避免接手代碼的人一頭霧水。我也看過不少代碼沒注釋,命名還全是tmp1 tmp2 tmp3, 最后結局只能是自己重寫。

·信號不要以Reg以及數字結尾。這個點很容易被忽略,綜合時會自動給信號加上reg, 到時候就沒辦法區分是你寫的,還是自動生成的,非要標識這是個寄存器可以用ff結尾。同時,如果多組信號不要命名為xx1,xx2, 這么做非常容易和xx[1]混淆,建議改成xxa, xxb。

·敏感列表用*,不要用具體的信號。always實現組合邏輯的時候一個敏感列表always @(列表),這個列表直接用*,讓綜合去自動填敏感列表,把信號寫進去非常容易出錯。

·少用magic numer。設計的時候好多時候需要用到參數,比如fifo的深度,這種東西盡量用參數表示出來,不同地方引用一個參數,否則非常容易出現不一致的情況。

·不要生產latch。latch指的是沒有鎖存的寄存,生成latch會產生毛刺,所以非必要不允許使用latch。之所以產生latch其原理是你實現了組合邏輯,但是某個周期某個變量值沒有發生變化。所以牢記規律,時序邏輯值可以不變,但組合邏輯必須每個周期都賦值。具體點講,實現組合邏的時候,case必須有default, if必須有else。

·不要生產組合邏輯環。組合邏輯環指的是同周期A變化的條件是B,而B變化依賴于A。相當于軟件中的死循環。功能上就不可能正確,所以設計的時候要記得避免組合邏輯環。

·異步信號不要直接打拍。異步信號需要特別注意。在詳設的時候應該就要考慮清楚怎么處理。是用多級打拍,DMUX,異步FIFO等等辦法,總之,不能當做同步信號給直接處理了,否則必出錯。

1.2.2 提高后續效率需要注意的點

·盡量一個模塊用一個時鐘域。主要是為了后端設計起來比較方便,CTS步驟(見后續文章)較容易。

·大的模塊最好reg in和reg out。可以最大程度上避免后端時序上出問題。因為后端模塊與模塊之間不一定是按著放的,寄存器輸出寄存器輸入留出足夠的時間余量。

·不可綜合的與可綜合的代碼分模塊。設計代碼的時候有時候可能會用到SRAM cell, 或者其他硬核IP,再或者designware IP。這些東西最好單獨封裝模塊調用。主要是為了后續代碼可能會用FPGA或者emulation驗證,不可綜合的部件直接替換成邏輯版本。

碼代碼部分內容大致就是這些。其實也不必壓力太大,因為代碼寫出來是要經過多輪工具檢查的。尤其經過下面講的spyglass檢查后,想出錯也沒有那么容易(當然,一旦出錯就是非常隱蔽的錯誤,可能流片后都沒發現Orz)

2 Spyglass檢查

碼完代碼,其實我們有一個非常強力的工具可以避免大部分低級錯誤。這個工具應該是synopsys公司出的。這個工具的GUI長這樣。

5275db92-21fa-11ed-ba43-dac502259ad0.jpg

最主要檢查的東西應該有兩個,lint檢查一些常用的語法錯誤,CDC (Clock Domain Crossing )檢查異步的處理是不是有問題。

5287e8d2-21fa-11ed-ba43-dac502259ad0.jpg

lint會檢查出所有等號左右位寬不匹配、組合邏輯環、生成了latch, 端口連接不對等等問題。基本上常見的錯誤都會報出來,一般它會采用寧可錯殺不會放過的策略。所以此處會爆出一大堆的錯誤,需要逐個check一下有沒有問題。當然,好多問題也是可以waive掉的,但必須每個waive都要十分確定能不能waive掉。比如計數器,一般計數器到溢出就自動回環了,這種時候lint就會爆出錯,你就要檢查一下是不是真的要讓計數器回環。一般spygalss給你報的錯分為四類,fatel, error, warning, info。其中fatel和error是一定不能有的, 有了必然不讓你拿去流片,warning可以適當waive,info大多不用管。

CDC會檢查異步問題。主要檢查是不是所有跨時鐘域的信號經過了同步,如果spyglass沒檢查到跨時鐘域的信號沒有經過多級打拍或者dmux同步會報錯。再比如A時鐘域的兩個信號同步到了B時鐘域,然后合并了,這個時候也會報錯,因為這兩個信號同步過去以后時序可能會發生變化,要仔細檢查。再比如要同步的信號不是寄存器輸出的,這種情況由于存在毛刺風險,會增大亞穩態的概率,所以也會報出來。總之, 你能想到的錯誤基本上都會檢查出來。

本部分主要簡單介紹了編碼完后要用到的最重要的工具之一spyglass。實際使用的時候確實也要有一定的經驗積累,什么問題可以waive掉,什么問題必須改。沒必要所有問題都改掉,耗費的精力實在是太大,但真的存在風險的問題必須改掉,否則就可能搞出大事兒。。。

3 總結

本節我們講了芯片實現碼代碼的部分。主要就是verilog以及后續的檢查。芯片流片是一錘子買賣,所以一定要保證寫的代碼不出錯,一方面,在本節講的編碼階段要盡量少寫bug, 另一方面,要經過縝密的驗證,最大程度上攔截BUG。

審核編輯 :李倩

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

    關注

    455

    文章

    50816

    瀏覽量

    423613
  • vhdl
    +關注

    關注

    30

    文章

    817

    瀏覽量

    128137
  • 代碼
    +關注

    關注

    30

    文章

    4788

    瀏覽量

    68611

原文標題:一顆芯片的前世今生:設計(前端之編碼)

文章出處:【微信號:IP與SoC設計,微信公眾號:IP與SoC設計】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    XL系列433芯片、2.4G收發芯片 通訊對說明

    戶自定義,一般而言,使用標準的 1527 協議即可。 1527 協議的數據長度一般為 24 位,其中前 16 位表示地址,后 8 為表示數據。那么也就是前 4 個十六進制位為地址,也就是對的關鍵,保證每個發送端的地址不同,這樣就能
    的頭像 發表于 12-27 17:06 ?74次閱讀
    XL系列433<b class='flag-5'>芯片</b>、2.4G收發<b class='flag-5'>芯片</b> 通訊對<b class='flag-5'>碼</b>說明

    LLMWorld上線代碼翻譯新工具——問丫·語翻譯俠,快來體驗!

    01. 工具介紹 aicode.llmworld.net 問丫·語翻譯俠 是一款由LLMWorld新推出的代碼翻譯工具,支持各種語言之間的翻譯,包括計算機語言到自然語言。 02.
    的頭像 發表于 12-09 11:11 ?257次閱讀
    LLMWorld上線<b class='flag-5'>代碼</b>翻譯新工具——問丫·<b class='flag-5'>碼</b>語翻譯俠,快來體驗!

    手持式的掃槍連接到工控機上使用,實現產品掃

    在當今的自動化生產線和倉儲管理中,手持式掃槍已成為不可或缺的工具。它以其高效、準確的特點,為產品的追蹤、管理和銷售提供了極大的便利。本文將介紹如何將手持式掃槍連接到工控機上,并實現產品掃
    的頭像 發表于 12-04 14:30 ?204次閱讀
    手持式的掃<b class='flag-5'>碼</b>槍連接到工控機上使用,<b class='flag-5'>實現</b>產品掃<b class='flag-5'>碼</b>

    ASCII在編程中的應用實例

    ASCII(American Standard Code for Information Interchange,美國信息交換標準代碼)在編程中有著廣泛的應用。以下是一些ASCII在編程中
    的頭像 發表于 11-10 09:43 ?403次閱讀

    如何使用ASCII進行編碼

    ASCII(American Standard Code for Information Interchange,美國信息交換標準代碼)是一種字符編碼標準,用于文本電子交換。它主要包括128個字符
    的頭像 發表于 11-10 09:37 ?591次閱讀

    AIC3254的miniDSP編寫代碼和編寫C5502代碼有什么區別?

    問題:AIC3254的miniDSP編寫代碼和編寫C5502代碼有什么區別,執行速度和代碼量來進行分析吧,謝謝回復
    發表于 11-06 07:22

    基于圖遍歷的Flink任務畫布模式下零代碼開發實現方案

    的過程。以下是利用Flink的 StreamGraph 通過低代碼的方式,來實現StreamGraph的生成,并最終實現 Flink 程序零代碼開發的解決方案。 一、Flink 相關
    的頭像 發表于 11-05 10:35 ?699次閱讀
    基于圖遍歷的Flink任務畫布模式下零<b class='flag-5'>代碼</b>開發<b class='flag-5'>實現</b>方案

    使用實現CC3220空中升級

    電子發燒友網站提供《使用實現CC3220空中升級.pdf》資料免費下載
    發表于 09-29 10:21 ?0次下載
    使用<b class='flag-5'>碼</b>云<b class='flag-5'>實現</b>CC3220空中升級

    二維掃描頭設備嵌入到閘機上,實現掃手機屏幕完成簽到簽退

    如何嵌入到閘機上,實現掃手機屏幕完成簽到簽退的過程及其優勢。一、二維掃描頭設備的嵌入技術二維掃描頭設備作為一種高效的信息采集工具,其核心技術在于快速、準確地讀取并
    的頭像 發表于 09-18 15:45 ?282次閱讀
    二維<b class='flag-5'>碼</b>掃描頭設備嵌入到閘機上,<b class='flag-5'>實現</b>掃手機屏幕<b class='flag-5'>碼</b>完成簽到簽退

    hex文件如何查看原c語言代碼

    直接將 .hex 文件轉換回原始的 C 語言代碼是不可能的,因為 .hex 文件是二進制文件,它包含了單片機程序編譯后的機器,這些機器與原始的 C 語言代碼在結構和表達上存在巨大的
    的頭像 發表于 09-02 10:37 ?2285次閱讀

    LKT(LCS)代碼移植芯片優勢

    所謂代碼移植就是客戶可以把自定義的程序一部分關鍵代碼函數移植到加密芯片中運行。用戶采用標準C語言編寫代碼,通過KEIL C編譯器,編譯并下載
    的頭像 發表于 08-22 10:03 ?774次閱讀

    百度發布智能代碼助手“文心快

    在近日舉辦的WAVE SUMMIT大會上,百度公司震撼發布了全新的智能代碼助手——“文心快”。這款基于百度文心大模型的強大工具,結合了海量的編程數據,旨在為開發者提供一站式的代碼智能生成、修改和優化服務。
    的頭像 發表于 07-01 11:20 ?904次閱讀

    在CCG5代碼中怎么實現DR_SWAP?

    請教個問題,在 CCG5代碼中怎么實現DR_SWAP?我們配置了端口 0 作為源對外充電,但是我們希望 PORT0 做了 UFP。我們是這樣寫的代碼:案例 APP_EVT_PD_合同談判_完成
    發表于 02-26 06:27

    sim卡pin怎么設置 pin和puk有什么區別

    SIM卡(Subscriber Identity Module)是一種存儲用戶身份信息的芯片,用于在移動通信網絡中識別用戶,并且可以存儲一些聯系人信息和短信等。為了保護用戶的個人信息安全,SIM卡
    的頭像 發表于 02-19 16:20 ?4666次閱讀

    modbus協議功能分類 modbus協議功能是什么,有什么作用

    Modbus協議是一種用于工業領域常見的通信協議,它基于主從結構,用于在不同設備之間實現數據交換。Modbus協議的功能是決定數據交換類型和操作的重要部分。下面將詳細介紹Modbus協議功能
    的頭像 發表于 01-31 14:47 ?7133次閱讀
    主站蜘蛛池模板: 四虎精品影院在线观看视频| 六月婷婷激情综合| 亚洲一区二区综合| 午夜色图| 国产精品久久永久免费| 一级午夜| 久久人人视频| 中文字幕导航| 久久性| 五月天婷婷丁香花| 一区卡二区卡三区卡视频| 色香蕉色香蕉在线视频| 两性午夜欧美高清做性| 日日舔夜夜操| 中文字幕xxx| 日本免费色网站| 丁香婷五月| 我被黑人巨大开嫩苞在线观看| 午夜免费免费啪视频观看| 成人伊人亚洲人综合网站222| 久久亚洲国产成人影院| 黄网站在线观看| 日韩免费观看的一级毛片| 午夜资源在线| 美女三级黄| 青青草国产三级精品三级| 18毛片| 日本不卡在线观看免费v| 美女黄18| 欧美又粗又长又湿又黄的视频| 国产黄色a三级三级三级| 欧美日本一区二区三区道| 欧美色惰aⅴ| 性视频网| 天天综合网天天综合色不卡| 国产精品久久久久久免费播放| 国模私拍视频在线| 69日本xxxxxxxxx30| 色婷婷色综合激情国产日韩| 天天爽夜夜爽精品视频一| 直接在线观看的三级网址|