精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

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

如何掌握體系編程和SOC編程 SOC設(shè)計和編程關(guān)系

454398 ? 來源:csdn ? 作者: 吳躍前 ? 2020-10-21 14:50 ? 次閱讀

筆者將從芯片IC的系統(tǒng)設(shè)計的角度去詮釋如何掌握體系編程和SOC編程。筆者有超過10年的嵌入式研發(fā)經(jīng)驗,作為架構(gòu)師多次主導(dǎo)過基于ARM/MIPS/51核的多媒體SOC研發(fā)并成功量產(chǎn)案例,希望本系列文章能給嵌入式學(xué)習(xí)者和從業(yè)者有較深刻的指引。

一、體系編程的邊界和范疇

嵌入式開發(fā)人員往往從最簡單的51單片機編程開始,然后慢慢會接觸到PIC、AVR、STM32等系列或者型號控制器,還會可能轉(zhuǎn)向三星S5PV210、Exynos4412等高端處理器編程。

開發(fā)人員一般的開發(fā)過程都是理解完該型號控制器或者處理器對應(yīng)的指令集和datasheet,然后通過簡單的例程開始編程,而最普遍的模塊是GPIO、中斷和定時器timer。在接觸到多種類型的處理器編程之后,我們可能會有歸納式的疑問:

在include一個代表該型號IC的register map的頭文件后,某些系列芯片的控制編程可能是完全一樣的,而不同系列芯片的控制編程也是類似,唯一的不同可能在于寄存器命名的不同。這是為什么?

要回答這些問題,我們必須要弄懂體系編程的范疇,明確體系編程的邊界。要深刻地理解體系編程,我們需要從芯片的系統(tǒng)設(shè)計的角度去理解芯片的研發(fā)構(gòu)成,可以參考筆者之前撰寫過的《集成電路設(shè)計和分工》。

其中有一點非常重要,就是我們要理解CPU核心和SOC的關(guān)系。這個世界上有能力研發(fā)SOC(System on chip片上系統(tǒng))的公司很多很多,大到大名鼎鼎的蘋果和三星公司,小到深圳那些籍籍無名但又很賺錢的芯片設(shè)計公司都是屬于這個行列。而CPU核呢,放眼世界,能設(shè)計CPU知識產(chǎn)權(quán)核的就那么幾家,如Intel的X86,ARM公司的ARM核,MIPS公司的MIPS核,51內(nèi)核也算一個。這里要說明一點,中國沒有,國家雖然重點扶持集成電路,但高層也知道這個砸重金也沒用,實實在在的先把集成電路封裝、工藝等技術(shù)發(fā)展起來再說。現(xiàn)在的android智能機都是基于ARM核的,想知道ARM之父是誰嗎?前不久大師steve furber在廣東工業(yè)大學(xué)做了講座:

SOC都是根據(jù)市場需求和功能定位,在某個類型的CPU核基礎(chǔ)上集成各種通用的外圍模塊控制器,如前面說的GPIO、INT和TIMER,和一些專用的模塊控制器,如TI公司的藍牙單芯片CC2541集成的藍牙基帶和射頻控制器。SOC和CPU核的關(guān)系如下圖:

體系編程明顯是針對體系結(jié)構(gòu)的編程,而體系的載體就是CPU。因此,89C51、CC2541等都是51體系編程,而PIC32、ATJ213X都是基于MIPS體系編程,而S5PV210和S3C2440都是ARM體系編程。對同一家CPU核設(shè)計公司,它沒有理由將自己的CPU核設(shè)計成風(fēng)格迥異,同一家公司不同的CPU處理器系列應(yīng)該遵循同一個體系結(jié)構(gòu)。那么,體系結(jié)構(gòu)的范疇是什么?是上圖中紅色的部分,其包括CPU核的設(shè)計和總線的時序和控制標準。而CPU核又細分CU(控制單元)和PU(運算單元),CU再分取指、譯碼、訪問寄存器、回寫存儲單元等流水線操作,高級CPU一般還會集成協(xié)處理。因此體系架構(gòu)編程一般包括以下內(nèi)容:

1)指令集(尋址、運算)、匯編偽指令

2)流水線、指令預(yù)取和跳轉(zhuǎn)規(guī)則。在流水線的工作模式下,指令預(yù)取當(dāng)前執(zhí)行指令的下面N條指令,因此PC和執(zhí)行地址并不一致,因此假如發(fā)生中斷、異常等情況下的返回地址要如何確定。

3)協(xié)處理(MMU虛擬內(nèi)存、cache緩存)

4)寄存器使用和參數(shù)傳遞規(guī)范(ABI)。其要解決寄存器級如何實現(xiàn)C語言的參數(shù)傳遞。請參考筆者之前的博文《C/匯編混合編程接口--MIPS ABI》

5)異常中斷處理(硬件中斷、一般異常、指令陷入中斷等),上圖中的INT管理所有的硬件中斷,如串口、定時器、外部等中斷,并將所有的中斷引腳進行或之后送入CPU的中斷信號。因此,對于CPU來說,當(dāng)發(fā)生中斷時,它并不知道是哪個模塊發(fā)生了中斷,只有INT模塊才知道。

6)調(diào)試規(guī)范

7)總線規(guī)范。對于編程人員來說,并不需要太關(guān)心總線規(guī)范。但它是SOC芯片設(shè)計的重要規(guī)范。它規(guī)定了總線的時序和仲裁的規(guī)范以及存儲工作模式(馮諾依曼還是哈佛結(jié)構(gòu))。

對于一個CPU核設(shè)計公司來說,它會給SOC芯片設(shè)計公司提供兩樣?xùn)|西,一是體系設(shè)計相關(guān)規(guī)范,如ARMV7指令集,描述了每一條指令執(zhí)行的偽代碼過程(這個偽代碼針對的是硬件語言,如HDL);另一樣?xùn)|西是特定系列CPU的設(shè)計規(guī)范,以及在該規(guī)范下實現(xiàn)的CPU IP核(知識產(chǎn)權(quán)核),為RTL寄存器級電路。

那么,對于同一個體系下不同的系列,他們的差異在哪里?

例如,ARM公司現(xiàn)在的發(fā)展方向是Cortex A系列主要面向高端消費類電子,如手機平板,Cortex R主要面向軍工、航空等實時要求高的場合,Cortex M系列則是搶占低端控制器市場,如STM32,STM8等。三者的體系都是ARM體系結(jié)構(gòu),但三者的工藝、功耗、性能并不一樣,而且,CPU核集成的東西是不一樣的,例如M系列并沒有集成cache,相當(dāng)A系列,M系列的MMU也是一個簡化版。

體系編程是嵌入式架構(gòu)師和操作系統(tǒng)開發(fā)人員需要精通的,對于一般的開發(fā)人員比較少接觸到。以上的分析都是基于理論層面的分析。而SOC編程則是面向廣大的普通開發(fā)者,將會從系統(tǒng)設(shè)計的角度指導(dǎo)大家如何進行SOC編程。

二、SOC編程的范疇和定義

SOC編程是針對片上集成模塊進行寄存器控制編程。在開發(fā)實踐中,我們往往把SOC編程和體系編程統(tǒng)稱為體系編程了。沒關(guān)系,只要我們理解清楚他們之間的關(guān)系就可以了。

那么SOC編程的范疇是什么?

1) 通用控制模塊,如CLOCK、GPIO、INT、TIMER、UART等。

2) 專用控制模塊,如LCD、藍牙、編解碼等。

有些模塊不需要通過引腳連接外圍設(shè)備就可以完成功能,如TIMER,大部分模塊需要通過引腳連接外圍設(shè)備來完成功能。因此芯片片上集成的是模塊的控制部分,例如LCD控制器,該控制電路實現(xiàn)LCD驅(qū)動器(外圍設(shè)備)所需要的數(shù)據(jù)傳輸時序、行信號、列信號和設(shè)置接口等。換一個角度說,如果沒有LCD控制器,我們也一樣能夠通過GPIO來模擬出LCD驅(qū)動器的時序,但是這樣做,對于普通的開發(fā)者來說太復(fù)雜,對CPU來說也是一個沉重的負擔(dān)。所以系統(tǒng)設(shè)計人員會針對LCD驅(qū)動器來實現(xiàn)專有的控制電路。

那么對于LCD控制器來說,我們SOC編程來做什么呢?至少,我們需要給LCD控制器一個標識,讓它啟動或者關(guān)閉,如何給出這個信號呢?LCD控制器電路無非是一堆的時序電路和邏輯組合電路,啟動和關(guān)閉可以用一個信號輸入來表示,而該信號在CPU看來可以映射成一個寄存器的其中一個bit。因此,SOC編程即是針對寄存器編程。對于LCD控制編程,當(dāng)然不只一個寄存器這么簡單,因為對于一個SOC廠商來說,它希望能兼容市面越多的LCD驅(qū)動器,兼容不同的分辨率和圖像深度,因此肯定會有不同的寄存器來進行設(shè)置。

從教學(xué)的角度來總結(jié),體系編程和SOC編程分為五個層次:

1)體系指令集,如ARM指令集

2)特定系列的CPU規(guī)范,如基于ARM體系的CortexA8核

3)SOC級,在CPU核的bus總線基礎(chǔ)上集成clock、timer、interrupt、GPIO等控制器,如三星的S5PV210和TI的OMAP3430都是基于Cortex A8核。

4)板級電路,如開發(fā)板、手機主板電路,其電路圖將明確SOC的引腳和外圍設(shè)備的連接關(guān)系。如GPIO A的第一個引腳接LED0,那要控制LED0就需要對GPIOA0進行控制編程。

5)外圍設(shè)備規(guī)格,表示板級電路圖上所有外圍設(shè)備的規(guī)格,如具體LCD SPEC(尺寸、分辨率、延時參數(shù)等)。

筆者給SOC編程的過程定義是:基于1)和2)的指令集和CPU總線控制機制,根據(jù)具體外圍設(shè)備5)的特性參數(shù)和4)具體的電路連接關(guān)系,對3)SOC對應(yīng)控制模塊的寄存器進行編程,達到控制、使用的目的。

三、SOC設(shè)計和編程

理解SOC系統(tǒng)設(shè)計能夠極大地幫助編程,每款SOC的控制例程都是由SOC系統(tǒng)設(shè)計人員給出,因為他們也需要通過編程來對SOC芯片進行功能測試和驗證。

另外,我們需要明白的一個觀點是,對于不同的體系來說,同樣的模塊的設(shè)計思路是基本一致的,或者可以說,從編程的角度來說,片上集成的模塊的設(shè)計控制過程無關(guān)于體系結(jié)構(gòu)(兩者有關(guān)更多的是在總線控制方面,而這個跟編程人員來說關(guān)系不大)。因此基于ARM體系的LCD控制器和基于MIPS體系的LCD控制器,其設(shè)計思路都是一致的,不同系統(tǒng)的GPIO控制也是一致的。盡管底層的寄存器電路可能不一樣,但對于上層編程人員看來,兩者是一致的,不同的可能只是寄存器名稱。例如51單片機和arm處理器的GPIO都是輸入寄存器、輸出寄存器、方向寄存器、上下拉寄存器等等。

下面就以CLOCK和GPIO為例說明SOC編程,盡量提取通用的設(shè)計和控制過程。

1.最小系統(tǒng)

最小系統(tǒng)除了CPU和RAM之后,還有一個重要的組件就是晶振。SOC或者CPU說到底都是一堆邏輯組合電路和時序電路,時序電路需要時鐘才能正常工作,而晶振就是提供時鐘的,其在上電后不斷地產(chǎn)生時鐘。

2. CLOCK

一般的低端單片機并沒有時鐘控制模塊,其直接利用晶振(如12M或者24M)工作,即CPU的工作頻率就是12M或者24MHz。但是作為一個高級處理器來說,其支持的主頻達到1G或者更高。而市場上并沒有1G的晶振,因此SOC內(nèi)部必然要實現(xiàn)調(diào)頻,PLL鎖相環(huán)倍頻技術(shù)被廣泛應(yīng)用在處理器的CLOCK模塊中,其是將晶振的頻率進行倍頻提升。CLOCK模塊除了實現(xiàn)倍頻的控制外,還需要考慮這樣的需求:

1)SOC集成的模塊很多,各種模塊的工作頻率并不盡相同,或者說是在不同的層級,例如CPU和GPU、RAM的工作頻率在G級,LCD的工作頻率則在100M左右,視頻編解碼的工作頻率百M級別,而像GPIO、串口這些模塊的工作頻率可以在10M級別。因此CLOCK還需要進行分頻。所以CLOCK模塊一般的處理方法是將模塊進行分類,并進行一級分頻。例如,S5PV210的CLOCK會將頻率分為三個范圍,M域供給CPU、中斷異常等,D域供給LCD、JPEG、HDMI等,P域供給GPIO、UART等外圍設(shè)備。每個域都給定一個頻率(可以通過控制器調(diào)節(jié))。

2)對于在同一個域內(nèi)的模塊,其工作頻率不盡相同,因此允許其內(nèi)部進行二級分頻。

因此,對于一個高級處理器集成的模塊編程來說,設(shè)置好其CLOCK源頻率的相關(guān)寄存器是第一步。一般一級分頻由操作系統(tǒng)開發(fā)人員設(shè)定,二級分頻設(shè)置由各模塊的開發(fā)人員負責(zé)。

3.引腳復(fù)用

芯片封裝是芯片成本的重要組成部分,而封裝涉及到引腳復(fù)用,而且芯片封裝也涉及到最終產(chǎn)品的BOM成本,因此在系統(tǒng)設(shè)計時的引腳復(fù)用是一項非常關(guān)鍵的技術(shù),可以說SOC集成電路公司的絕密技術(shù)。盡可能高效地進行引腳復(fù)用非常關(guān)鍵。

對于編程人員說,我們要做什么呢?那就是記得每個引腳都可能是功能復(fù)用引腳,在使用這個引腳之前,必須設(shè)置該引腳的功能。引腳一般默認是GPIO功能,如果我們要使用該引腳進行串口或者LCD等控制線功能,就必須對該引腳對應(yīng)的功能寄存器進行設(shè)置。這是SOC編程的第二步。

CLOCK和引腳功能設(shè)置對所有模塊都是適用的。

4.GPIO

這里我們要談通用的模塊GPIO。對于GPIO編程來說,我們應(yīng)該非常熟悉了,那就是它一定帶有輸入數(shù)據(jù)寄存器、輸出數(shù)據(jù)寄存器、輸入輸出高阻態(tài)設(shè)置寄存器、上下拉設(shè)置寄存器。一般的過程是:

1)設(shè)置上下拉寄存器

2)設(shè)置引腳的方向

3)通過輸入數(shù)據(jù)寄存器讀入數(shù)據(jù)或者寫數(shù)據(jù)到輸出數(shù)據(jù)寄存器。

記得功能引腳設(shè)置也是需要的。有些高級SOC可能還會有驅(qū)動能力等級設(shè)置寄存器,控制引腳的驅(qū)動強度。

5.INT

請參考筆者的博文《軟件和硬件都是對生活的高度抽象---論中斷控制(ARM體系編程)》。
編輯;hfy

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

    關(guān)注

    68

    文章

    10702

    瀏覽量

    209422
  • soc
    soc
    +關(guān)注

    關(guān)注

    38

    文章

    4021

    瀏覽量

    217048
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3521

    瀏覽量

    93276
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1175

    瀏覽量

    51515
收藏 人收藏

    評論

    相關(guān)推薦

    編程SoC設(shè)計相關(guān)資料推薦

    全可編程SoC設(shè)計導(dǎo)論
    發(fā)表于 12-08 06:22

    ARM體系結(jié)構(gòu)與編程

    ARM體系結(jié)構(gòu)與編程
    發(fā)表于 02-11 09:35 ?161次下載
    ARM<b class='flag-5'>體系</b>結(jié)構(gòu)與<b class='flag-5'>編程</b>

    編程SoC(SoPC),什么是可編程SoC(SoPC)

    編程SoC(SoPC),什么是可編程SoC(SoPC) SOPC ( System on a Programmable Chip,片上可編程
    發(fā)表于 03-26 17:01 ?2393次閱讀

    Mouser備貨Cypress PSoC 4可編程SoC

    Mouser Electronics正在備貨Cypress的PSoC? 4可編程SoC,該產(chǎn)品結(jié)合了Cypress PSoC模擬與數(shù)字結(jié)構(gòu)、CapSense?電容觸摸技術(shù)以及ARM?的Cortex?-M0。
    發(fā)表于 06-13 11:01 ?1032次閱讀

    關(guān)于Xilinx發(fā)布的全可編程SoC和MPSoC的SDSoC開發(fā)環(huán)境介紹

    公司進一步豐富其SDx產(chǎn)品系列,并持續(xù)將用戶群拓展至更廣闊的系統(tǒng)及軟件工程師社區(qū) 賽靈思推出面向全可編程SoC和MPSoC的SDSoC? 開發(fā)環(huán)境。作為賽靈思SDx?系列開發(fā)環(huán)境的第三大成員,SDSoC開發(fā)環(huán)境讓更廣闊的系統(tǒng)和軟件開發(fā)者群體也能獲益于“全可
    發(fā)表于 10-06 11:53 ?476次閱讀

    Zynq-7000可完全編程SoC設(shè)備詳細介紹

    的Xilinx FPGA。此外,cRIO-9068軟件設(shè)計控制器也是基于創(chuàng)新的Zynq-7000可完全編程SoC設(shè)備。 NI充分利用了其產(chǎn)品中器件的特性,同時簡化了編程,使工程師和科學(xué)家們可以在熟悉的環(huán)境中進行開發(fā),而無需深入探
    發(fā)表于 11-18 06:54 ?1880次閱讀

    Zynq-7000全可編程SoC的性能和功能

    Zynq-7000全可編程SoC提供無與倫比的性能和功能
    的頭像 發(fā)表于 01-21 07:32 ?3467次閱讀

    Zynq-7000可編程SOC芯片組合產(chǎn)品表的資料免費下載

    本文檔的主要內(nèi)容詳細介紹的是Zynq-7000可編程SOC芯片組合產(chǎn)品表的資料免費下載。
    發(fā)表于 02-12 16:07 ?4次下載
    Zynq-7000可<b class='flag-5'>編程</b><b class='flag-5'>SOC</b>芯片組合產(chǎn)品表的資料免費下載

    Zynq-7000所有可編程SOC模塊的詳細資料介紹

    本文檔的主要內(nèi)容詳細介紹的是Zynq-7000所有可編程SOC模塊的詳細資料介紹。
    發(fā)表于 02-13 17:16 ?0次下載
    Zynq-7000所有可<b class='flag-5'>編程</b><b class='flag-5'>SOC</b>模塊的詳細資料介紹

    Zynq-7000全可編程SOC系列產(chǎn)品選擇指南免費下載

    本文檔的主要內(nèi)容詳細介紹的是Zynq-7000全可編程SOC系列產(chǎn)品選擇指南免費下載。
    發(fā)表于 02-15 11:52 ?9次下載
    Zynq-7000全可<b class='flag-5'>編程</b><b class='flag-5'>SOC</b>系列產(chǎn)品選擇指南免費下載

    Zynq-7000全可編程SoC產(chǎn)品中文簡介資料免費下載

    Zynq-7000 All Programmable (全可編程SoC 重新定義了嵌入式系統(tǒng)的可能性,為系統(tǒng)架構(gòu)師和軟件開發(fā)人員推出新的解決方案提供了一個靈活的平臺,同時為傳統(tǒng) ASIC 和 SoC 用戶提供了一個全可
    發(fā)表于 02-21 14:26 ?11次下載
    Zynq-7000全可<b class='flag-5'>編程</b><b class='flag-5'>SoC</b>產(chǎn)品中文簡介資料免費下載

    掌握越多編程越好嗎?

    在學(xué)習(xí)編程語言的過程中,很多人首先學(xué)習(xí)一種編程語言,但是很多人都會有一個疑問,掌握越多編程語言越好嗎?俗話說,技多不壓身,其實在學(xué)習(xí)編程語言
    的頭像 發(fā)表于 06-30 17:10 ?2325次閱讀

    Zynq-7000全可編程SoC ZC706評估套件(ISE Design Suite 14.5)入門指南

    Zynq-7000全可編程SoC ZC706評估套件(ISE Design Suite 14.5)入門指南
    發(fā)表于 05-19 14:20 ?20次下載
    Zynq-7000全可<b class='flag-5'>編程</b><b class='flag-5'>SoC</b> ZC706評估套件(ISE Design Suite 14.5)入門指南

    ARM原理學(xué)習(xí)(一)全可編程SoC設(shè)計導(dǎo)論

    全可編程SoC設(shè)計導(dǎo)論
    發(fā)表于 11-25 19:51 ?9次下載
    ARM原理學(xué)習(xí)(一)全可<b class='flag-5'>編程</b><b class='flag-5'>SoC</b>設(shè)計導(dǎo)論

    為什么我們要掌握Linux系統(tǒng)編程

    為什么我們要掌握Linux系統(tǒng)編程
    的頭像 發(fā)表于 05-17 10:00 ?766次閱讀