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

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

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

如何寫出行云流水般的高質(zhì)量代碼

電子工程技術(shù) ? 2019-10-08 17:21 ? 次閱讀

1.Verilog HDL描述可綜合電路Verilog HDL語言是對已知硬件電路的文本描述。所以編寫前:

對所需實(shí)現(xiàn)的硬件電路“胸有成竹”;牢記可綜合Verilog HDL與電路結(jié)構(gòu)一一對應(yīng)的關(guān)系;確認(rèn)電路指標(biāo)是什么:性能?面積?硬件思維方式,代碼不再是一行行的代碼而是一塊一塊的硬件模塊;

達(dá)到以上幾點(diǎn),就可以寫出行云流水般的高質(zhì)量代碼。關(guān)于代碼與硬件電路的對應(yīng)關(guān)系,參見如下圖片,引用自Synopsys官方文檔和幾本參考書:

2、自動(dòng)化生成代碼如果一定要有奇淫技巧的話,那么代碼自動(dòng)化生成技術(shù)就一定可以配得上這個(gè)稱號。

近十年來,數(shù)字集成電路規(guī)模和復(fù)雜度飛速提高。這給數(shù)字集成電路工程師帶來了不僅是腦力上的勞動(dòng)的增加,更多是體力重復(fù)性工作的增多。傳統(tǒng)的手工代碼的編寫存在很多弊端。

首先對于模塊的代碼工程師,要面對許多設(shè)計(jì)文件。而這些文件之間可能相互不一致,給代碼的編寫帶來了很多的困擾。

其次,代碼工程師需要將這些文件中的很多設(shè)計(jì)信息體現(xiàn)在代碼中,其中一些信息是重復(fù)性的謄寫。這不僅帶來了很多枯燥復(fù)雜的工作量而且人工參與過多也容易引入很多粗心帶來的錯(cuò)誤。

再次,由于各個(gè)模塊連接信號之多導(dǎo)致信號文件的手寫工作量很大。每個(gè)信號文件小則幾千行大則上萬行信息。而且一旦有信號連接的變動(dòng)需要相應(yīng)修改多個(gè)模塊的信號文件。

最后,如果設(shè)計(jì)文件改動(dòng)相應(yīng)的設(shè)計(jì)文件很容易出現(xiàn)哪幾處忘記改動(dòng)的問題。

而Perl腳本語言又有著強(qiáng)大的處理文本的能力。將腳本語言應(yīng)用于數(shù)字電路設(shè)計(jì)中,作為設(shè)計(jì)文檔和EDA工具的黏合劑,能夠大大增加設(shè)計(jì)的速度。

具體方法為:使用腳本語言從設(shè)計(jì)文檔中提取有用的信息來生成想要的Verilog HDL代碼,從而大大減少了IC設(shè)計(jì)者的工作量,并提高了代碼的質(zhì)量。其好處有:

(1)很好的設(shè)計(jì)一致性:保證了設(shè)計(jì)概念一旦變動(dòng)即設(shè)計(jì)文檔稍加修改,對應(yīng)的Verilog HDL代碼就會(huì)相應(yīng)的改變,不需要工程師手動(dòng)改變代碼。

(2)兼容性強(qiáng):該自動(dòng)生成代碼工具中設(shè)置了一個(gè)配置文件,供設(shè)計(jì)工程師的配置修改。對于不同的項(xiàng)目,通過修改配置該文件可以直接是代碼相應(yīng)變化,有一定的靈活性。此外,該自動(dòng)生成代碼工具已經(jīng)應(yīng)用于兩個(gè)以上項(xiàng)目中,實(shí)踐證明有很好的兼容性。

(3)代碼維護(hù)方便:對于設(shè)計(jì)代碼的更新或升級,只需要重新運(yùn)行下該工具即可,不需要一點(diǎn)點(diǎn)該寫代碼。

(4)使用簡單:將很多腳本集成在一起,使用工具時(shí)只需要運(yùn)行一條命令即可。本文將舉一個(gè)Perl語言在代碼自動(dòng)生成中的應(yīng)用實(shí)例,下圖為一SoC芯片中全芯片的時(shí)鐘控制電路框圖:

時(shí)鐘控制模塊實(shí)現(xiàn)配置PLL參數(shù)、選擇輸出時(shí)鐘源、時(shí)鐘分頻、時(shí)鐘門控、bank切換、輸出時(shí)鐘等功能。3G、4G是系統(tǒng)通訊單元,向時(shí)鐘控制單元申請時(shí)鐘。PLLs是時(shí)鐘源,是時(shí)鐘控制單元的輸入。

時(shí)鐘控制單元有七大主要模塊,分別為時(shí)鐘源控制模塊、bank切換模塊、分頻模塊、時(shí)鐘門控模塊、多路選擇器模塊、寄存器、3G4G時(shí)鐘握手模塊。時(shí)鐘源控制模塊控制時(shí)鐘源的大小、開關(guān)。bank切換模塊使時(shí)鐘控制單元能正常工作在不同的電壓下。

時(shí)鐘控制單元的的工作機(jī)理如下:首先,外部模塊向時(shí)鐘控制單元請求時(shí)鐘,并修改并寫寄存器狀態(tài);時(shí)鐘源控制單元根據(jù)寄存器中的內(nèi)容配置時(shí)鐘源Plls,并提供了所有的時(shí)鐘源。然后,分頻器完成這些時(shí)鐘源預(yù)分頻的操作,并將其作為多路選擇器的時(shí)鐘源。而多路選擇器則從輸入的時(shí)鐘源中選擇輸出主時(shí)鐘。

主時(shí)鐘通過分頻模塊產(chǎn)生所有的分頻使能信號,這個(gè)過程中,需根據(jù)寄存器所配置的分頻數(shù)來輸出不同的頻率的時(shí)鐘。同時(shí),根據(jù)系統(tǒng)的實(shí)時(shí)需求,通過由SPCU控制的bank選擇器完成門控時(shí)鐘的實(shí)現(xiàn),降低系統(tǒng)的功耗。

以上是時(shí)鐘控制模塊的功能分析,那么如何通過代碼自動(dòng)生成技術(shù)來實(shí)現(xiàn)呢?(1)首先,我們把這些模塊梳理下,形成一個(gè)自頂向下的層次結(jié)構(gòu),如下圖。如圖中所示,頂層模塊完成對底層模塊的連接,底層模塊實(shí)現(xiàn)時(shí)鐘控制單元的功能。

針對代碼自動(dòng)生成問題,對于頂層模塊來說,承擔(dān)的功能是自動(dòng)地將底層數(shù)十個(gè)模塊連接起來。對于底層模塊來說,需要根據(jù)不同的功能定制需求,來自動(dòng)化地生成所有功能性的代碼,然后被頂層調(diào)用和連接。這樣的話,就存在兩個(gè)問題:[1]自動(dòng)生成頂層模塊?[2]自動(dòng)生成底層模塊?

(2)頂層模塊:通常來說,對于一個(gè)復(fù)雜的SoC芯片,會(huì)有萬數(shù)量級的信號需要進(jìn)行匹配和連接。而能夠自動(dòng)生成的信號文件中的信號連接有兩個(gè)特點(diǎn):一是信號命令規(guī)律性強(qiáng)二是信號的連接關(guān)系可以從設(shè)計(jì)文件中體現(xiàn)。滿足了這兩點(diǎn),便可以實(shí)現(xiàn)信號文件的自動(dòng)化。

(3)底層模塊此處即可體現(xiàn)Perl腳本強(qiáng)大的數(shù)據(jù)處理功能,針對該問題,將腳本劃分為三類:提取腳本、生成腳本和集成腳本三種。提取腳本用來從輸入文件中提取有用的設(shè)計(jì)信息到存儲(chǔ)單元中;生成腳本從存儲(chǔ)單元獲得有用信息來生成各個(gè)功能模塊的代碼;集成腳本將所有的腳本集成在一個(gè)腳本里,方便統(tǒng)一化使用。以下是代碼生成的腳本流程圖:

如圖所示,輸入的文件都是excel和文本形式,Perl腳本首先讀取技術(shù)文檔,從中解析出時(shí)鐘模塊所需的連接、頻率、時(shí)鐘域等信息,基于此信息建立一個(gè)數(shù)據(jù)庫。然后,根據(jù)實(shí)際芯片的具體需求,即配置文件,生成相應(yīng)的自動(dòng)化控制模式和需求。

最終,依據(jù)配置文件和數(shù)據(jù)庫,完成所有所需verilog代碼的生成。需要注意的是,并不是所有的代碼都可以自動(dòng)生成,有些結(jié)構(gòu)特殊的電路,只能通過手工編寫來完成。所以,自動(dòng)編寫通常完成較為規(guī)整的、有規(guī)律性的代碼,手工書寫作為補(bǔ)充。這樣即可保證得到高質(zhì)量的代碼。


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

    關(guān)注

    28

    文章

    1333

    瀏覽量

    109713
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4671

    瀏覽量

    67767
  • Verilog HDL
    +關(guān)注

    關(guān)注

    17

    文章

    125

    瀏覽量

    50317

原文標(biāo)題:行云流水般的代碼難寫嗎?那是你還缺一種硬件思維

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

收藏 人收藏

    評論

    相關(guān)推薦

    何為高質(zhì)量代碼如何寫出高質(zhì)量代碼

    懂得“數(shù)據(jù)結(jié)構(gòu)與算法” 寫出高效的代碼,懂得“設(shè)計(jì)模式”寫出高質(zhì)量代碼。
    發(fā)表于 08-02 09:44 ?696次閱讀
    何為<b class='flag-5'>高質(zhì)量</b>的<b class='flag-5'>代碼</b>?<b class='flag-5'>如何寫出</b><b class='flag-5'>高質(zhì)量</b><b class='flag-5'>代碼</b>?

    如何寫出好的代碼?高質(zhì)量代碼的三要素

    膾炙人口的詩"春有百花秋有月,夏有涼風(fēng)冬有雪",意境唯美,簡明易懂。好的代碼也是讓人陶醉的,那么如何寫出好的代碼
    的頭像 發(fā)表于 01-05 11:29 ?1032次閱讀
    <b class='flag-5'>如何寫出</b>好的<b class='flag-5'>代碼</b>?<b class='flag-5'>高質(zhì)量</b><b class='flag-5'>代碼</b>的三要素

    protel輸出高質(zhì)量gerber

    圖文并茂一步一步手把手教你輸出高質(zhì)量的gerber傻瓜式教學(xué)。。。。[hide] [/hide]
    發(fā)表于 12-12 15:43

    高質(zhì)量C語言編程

    高質(zhì)量c語言,精,精,精,精華
    發(fā)表于 07-22 13:48

    編寫高質(zhì)量C語言代碼

    編寫高質(zhì)量C語言代碼 編寫高質(zhì)量C語言代碼 編寫高質(zhì)量C語言代碼
    發(fā)表于 07-31 17:47

    高質(zhì)量c語言高級教程

    交流。大家認(rèn)為提高質(zhì)量與生產(chǎn)率是軟件工程要解決的核心問題。高質(zhì)量程序設(shè)計(jì)是非常重要的環(huán)節(jié),畢竟軟件是靠編程來實(shí)現(xiàn)的。 我們心目中的老手們和高手們能否編寫出高質(zhì)量的程序來? 不見得都能!
    發(fā)表于 01-07 11:16

    高質(zhì)量編程

    干貨,《495個(gè)C語言問題》、《華為內(nèi)部程序設(shè)計(jì)編碼規(guī)范》、《C語言:陷阱和缺陷》、《高質(zhì)量C編程[林銳]》
    發(fā)表于 02-27 19:39

    如何用B&R寫出高質(zhì)量的程序

    B&R的特征包括哪些?B&R的命名規(guī)則是什么?如何用B&R寫出高質(zhì)量的程序?
    發(fā)表于 09-29 09:17

    如何寫出漂亮的嵌入式C代碼

    Cortex-M這類微控制器編程通常采用C代碼,那么編程人員如何編寫代碼才能讓C編譯器產(chǎn)生高質(zhì)量底層代碼就成為一個(gè)很重要的話題。這里所說的高質(zhì)量
    發(fā)表于 12-17 07:18

    10個(gè)嵌入式小技巧 教你寫出高質(zhì)量代碼!

    技巧是不是能夠幫你寫出高質(zhì)量代碼,面對嵌入式開發(fā),也不要自己嚇唬自己,在接到項(xiàng)目之后,先認(rèn)真思考,了解清楚需求之后在開始去編寫代碼。
    發(fā)表于 12-20 16:19

    如何寫好一篇高質(zhì)量的引用論文

    如何寫好一篇高質(zhì)量的引用論文在大多數(shù)的國家,研究工作多數(shù)只注意發(fā)表更多的論文,并沒有具體的心里目的,就只是為了發(fā)表更多的ISI論文!這樣一來就每年有大量的論文的
    發(fā)表于 11-24 21:32 ?19次下載

    介紹了五個(gè)簡單的總體概念 可輕松寫出寫出代碼

    我認(rèn)為應(yīng)該建立起良好的心態(tài),這樣,不管你用什么語言或者庫,都會(huì)自然而然的寫出高質(zhì)量代碼。這里我主要談到 5 個(gè)相關(guān)的概念。記住它們,輕松寫出寫出
    的頭像 發(fā)表于 01-10 14:00 ?5655次閱讀
    介紹了五個(gè)簡單的總體概念 可輕松<b class='flag-5'>寫出</b><b class='flag-5'>寫出</b>好<b class='flag-5'>代碼</b>

    高質(zhì)量Verilog代碼有什么特點(diǎn)

    高質(zhì)量的verilog代碼主要包含以下幾個(gè)要素:可讀性、功能、性能、標(biāo)準(zhǔn)化、穩(wěn)定性、可定位。
    發(fā)表于 03-30 10:12 ?1885次閱讀
    <b class='flag-5'>高質(zhì)量</b>Verilog<b class='flag-5'>代碼</b>有什么特點(diǎn)

    如何編寫高質(zhì)量的Javascript代碼

    這篇文章不僅僅從代碼本身來考慮如何優(yōu)化編碼,也從代碼的設(shè)計(jì)階段來考慮,包括書寫API文檔,同事的review,使用JSLint。這些習(xí)慣都能幫助你編寫更加高質(zhì)量的、更易于理解的、可維護(hù)的代碼
    發(fā)表于 01-21 14:28 ?7次下載
    如何編寫<b class='flag-5'>高質(zhì)量</b>的Javascript<b class='flag-5'>代碼</b>

    如何寫出高效優(yōu)美的C語言代碼

    電子發(fā)燒友網(wǎng)站提供《如何寫出高效優(yōu)美的C語言代碼.pdf》資料免費(fèi)下載
    發(fā)表于 11-18 10:55 ?0次下載
    <b class='flag-5'>如何寫出</b>高效優(yōu)美的C語言<b class='flag-5'>代碼</b>