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

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

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

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

ZYNQ:使用PL將任務(wù)從PS加載到PL端

OpenFPGA ? 來(lái)源:OpenFPGA ? 作者:OpenFPGA ? 2022-05-10 09:52 ? 次閱讀

之前的幾篇文章主要集中在 Zynq SoC 的處理系統(tǒng) (PS) 方面,包括:

  • 使用 MIO 和 EMIO
  • Zynq SoC 的中斷結(jié)構(gòu)
  • Zynq 私有定時(shí)器看門狗
  • Zynq SoC 的三重定時(shí)器計(jì)數(shù)器 (TTC)

然而,從設(shè)計(jì)角度來(lái)看,Zynq SoC 真正令人興奮的方面是創(chuàng)建一個(gè)使用 Zynq 可編程邏輯 (PL) 的應(yīng)用程序。使用 PL 將任務(wù)從 PS 加載到 PL 端,為其他任務(wù)回收處理器帶寬從而加速任務(wù)。此外,PS 端可以控制 PL 端在經(jīng)典的片上系統(tǒng)應(yīng)用中執(zhí)行的操作。使用 Zynq SoC 的 PL 端可以提高系統(tǒng)性能、降低功耗并為實(shí)時(shí)事件提供可預(yù)測(cè)的延遲。

簡(jiǎn)介

Zynq PS 和 PL 通過(guò)以下接口互連:

  • 兩個(gè) 32 位主 AXI 端口(PS 主)
  • 兩個(gè) 32 位從 AXI 端口(PL 主)
  • 四個(gè) 32/64 位從機(jī)高性能端口(PL 主機(jī))
  • 1 個(gè) 64 位從加速器一致性端口 (ACP)(PL 主控)
  • 從 PS 到 PL 的四個(gè)時(shí)鐘
  • PS 到 PL 中斷
  • PL 到 PS 中斷
  • DMA 外設(shè)請(qǐng)求接口

以下是說(shuō)明這些不同接口點(diǎn)的框圖:

bbdc84ac-cffa-11ec-bce3-dac502259ad0.png

ARM 的 AXI 是一種面向突發(fā)的協(xié)議,旨在提供高帶寬同時(shí)提供低延遲。每個(gè) AXI 端口都包含獨(dú)立的讀寫通道。要求不高的接口使用的 AXI 協(xié)議的一個(gè)版本是 AXI4-Lite,它是一種更簡(jiǎn)單的協(xié)議,可用于寄存器式控制/狀態(tài)接口。例如,Zynq XADC 使用 AXI4-Lite 接口連接到 Zynq PS。有關(guān) AXI 協(xié)議的更多信息,請(qǐng)?jiān)L問(wèn):

http://www.arm.com/products/system-ip/amba/amba-open-specifications.php

Zynq SoC 支持三種不同的 AXI 傳輸類型,可以使用它們來(lái)連接PS到設(shè)備的PL端:

  • AXI4 Burst transfers
  • AXI4-Lite for simple control interfaces
  • AXI4-Streaming for unidirectional data transfers

下表定義了每個(gè)接口的理論帶寬:

bc12b054-cffa-11ec-bce3-dac502259ad0.png

必須使用 Zynq SoC 的 DMA 控制器才能達(dá)到上表中列出的最大速度。作為一個(gè)額外的好處,當(dāng) PS 是主機(jī)時(shí),DMA 控制器減少了 Zynq SoC 的 ARM Cortex-A9 MPCore 處理器的負(fù)載。在不使用 DMA 控制器的情況下,從 PS 到 PL 端的最大傳輸速率為 25Mbytes/sec。

總而言之,在 PS 和 PL 之間使用了驚人的 14.4Gbytes/sec(115.2Gbits/sec)的理論帶寬!

創(chuàng)建AXI外設(shè)

這一節(jié)將使用 AXI 接口在 Zynq SoC 的可編程邏輯結(jié)構(gòu)中創(chuàng)建外設(shè)。

第一步

第一步是打開(kāi) Vivado 設(shè)計(jì)并從工具選項(xiàng)下選擇“創(chuàng)建和封裝 IP”選項(xiàng)-create and package IP。

bc31fa54-cffa-11ec-bce3-dac502259ad0.png

這將打開(kāi)一個(gè)對(duì)話框,允許創(chuàng)建 AXI4 外設(shè)。對(duì)話框的第一個(gè)實(shí)際頁(yè)面提供了許多選項(xiàng),用于創(chuàng)建新 IP 或?qū)?dāng)前設(shè)計(jì)或目錄轉(zhuǎn)換為 IP 模塊。

bc43b488-cffa-11ec-bce3-dac502259ad0.png

選擇“創(chuàng)建新的 AXI4 外設(shè) - Create new AXI4 peripheral”選項(xiàng)并將其指向預(yù)定義的 IP 位置。可以使用 Vivado 主頁(yè)上的管理 IP 部分創(chuàng)建新的 IP 位置。

bc5f14f8-cffa-11ec-bce3-dac502259ad0.png

然后,該對(duì)話框允許輸入要用于新外圍設(shè)備的庫(kù)、名稱、描述和公司 URL。對(duì)于這個(gè)非常簡(jiǎn)單的示例(稍后我將對(duì)其進(jìn)行擴(kuò)展)。

bc80b496-cffa-11ec-bce3-dac502259ad0.png

下面的對(duì)話框是一個(gè)功能強(qiáng)大的對(duì)話框,我們可以在其中定義我們希望指定的 AXI4 接口類型:

  • 主或從
  • 接口類型 – Lite、Streaming 或 Burst
  • 總線寬度 32 或 64 位
  • 內(nèi)存大小
  • 寄存器數(shù)量

這個(gè)初始示例非常簡(jiǎn)單,以便我可以演示創(chuàng)建外設(shè)所需的流程,在 Vivado 中實(shí)現(xiàn)它,然后將其導(dǎo)出到 SDK。出于這個(gè)原因,我將只有四個(gè)寄存器的 AXI4-L ite 接口,然后我們可以使用軟件對(duì)其進(jìn)行尋址。這些寄存器可用于控制設(shè)計(jì)的可編程邏輯方面的功能操作。

bc99da16-cffa-11ec-bce3-dac502259ad0.png

最后的“創(chuàng)建外圍設(shè)備-create peripheral”對(duì)話框允許選擇一個(gè)選項(xiàng)來(lái)為新外圍設(shè)備生成驅(qū)動(dòng)程序文件。這是一個(gè)重要的步驟,因?yàn)樗鼘⑹雇庠O(shè)與 SDK 的使用更加簡(jiǎn)單。

bcb5efbc-cffa-11ec-bce3-dac502259ad0.png

一旦“Create Peripheral”向?qū)шP(guān)閉,可以打開(kāi)創(chuàng)建的 VHDL 文件并添加自定義硬件設(shè)計(jì)以在 PL 中執(zhí)行想要的功能。我將只使用我們創(chuàng)建的四個(gè)寄存器,因此可以不編輯文件。創(chuàng)建了外圍設(shè)備后,我們希望在 Vivado 設(shè)計(jì)中連接和使用它。這樣做非常簡(jiǎn)單。我們打開(kāi)系統(tǒng)框圖并從左側(cè)菜單中選擇添加 IP 選項(xiàng)。應(yīng)該能夠找到在此菜單中創(chuàng)建的外圍設(shè)備??捎猛鈬O(shè)備按字母順序列出。

bcd0e52e-cffa-11ec-bce3-dac502259ad0.png

第二步

將此 IP 模塊拖入設(shè)計(jì)中,然后將其連接到 AXI GP 總線,其中 Vivado 提供運(yùn)行連接自動(dòng)化工具。

bcf39574-cffa-11ec-bce3-dac502259ad0.png

運(yùn)行該工具會(huì)產(chǎn)生我們可以實(shí)施的設(shè)計(jì)。

bd08b12a-cffa-11ec-bce3-dac502259ad0.png

可以通過(guò)單擊地址編輯器選項(xiàng)卡來(lái)修改外設(shè)的地址范圍。請(qǐng)注意,4k 地址空間是允許的最小地址空間,這對(duì)于我們的 4 寄存器示例來(lái)說(shuō)過(guò)于慷慨了。幸運(yùn)的是,Zynq SoC 中的 ARM Cortex-A9 MPCore 處理器擁有大量的地址空間。

bd1f7acc-cffa-11ec-bce3-dac502259ad0.png

一旦 Vivado 自動(dòng)完成連接及地址空間分配完畢,如下圖所示,我們就可以實(shí)現(xiàn)設(shè)計(jì)并將其導(dǎo)出到 SDK。然后我們就可以開(kāi)始使用我們的外圍設(shè)備了。

bd37e526-cffa-11ec-bce3-dac502259ad0.png

注意,可以檢查實(shí)施報(bào)告以確保包含已創(chuàng)建的外圍設(shè)備。

驗(yàn)證

上面我們已經(jīng)產(chǎn)生了一個(gè)AXI外設(shè),接下來(lái)就是在SDK中驗(yàn)證這個(gè)外設(shè)的正確性。

使用 Vivado 創(chuàng)建 AXI4 外設(shè)并生成BIN文件。

創(chuàng)建了設(shè)計(jì)的硬件組件后,我們現(xiàn)在需要將其導(dǎo)出到我們的 SDK 設(shè)計(jì)中,以便我們可以編寫軟件來(lái)驅(qū)動(dòng)它。第一步是在 Vivado 中打開(kāi)當(dāng)前工程,編譯生成BIN文件,然后將硬件導(dǎo)出到 SDK。(如果嘗試導(dǎo)出硬件時(shí),SDK 已在使用中,則會(huì)收到警告。)如果不將硬件導(dǎo)出到 SDK,則下次打開(kāi) SDK 時(shí),需要將硬件定義和板級(jí)支持包更新,否則將無(wú)法使用它們。還需要更新設(shè)計(jì)中定義的存儲(chǔ)庫(kù),以包括包含外圍設(shè)備的 IP 存儲(chǔ)庫(kù)。

打開(kāi) xparameters.h 文件(在 BSP 包含文件中)以查看專用于新 AXI4 外設(shè)的地址空間:

bd4effe0-cffa-11ec-bce3-dac502259ad0.png

下一步是打開(kāi) System.MSS 文件并自定義要使用的 BSP在外設(shè)創(chuàng)建過(guò)程中生成的驅(qū)動(dòng)程序而不是通用驅(qū)動(dòng)程序。

bd622c3c-cffa-11ec-bce3-dac502259ad0.png

重新構(gòu)建項(xiàng)目可確保將驅(qū)動(dòng)程序文件加載到 BSP 中。這是一個(gè)非常有用的步驟,因?yàn)檫@些文件還包含一個(gè)簡(jiǎn)單的自檢程序,可以使用該程序來(lái)測(cè)試外設(shè)的軟件接口是否正確,然后再開(kāi)始使用它進(jìn)行更高級(jí)的操作。使用此測(cè)試程序還表明我們已在 Vivado 中正確實(shí)例化了硬件。

bd93a4ec-cffa-11ec-bce3-dac502259ad0.png

在 BSP 下 libsrc 中,將看到許多新 AXI4 外設(shè)的文件。這些文件允許像使用原生外圍設(shè)備(例如 XADC 和 GPIO)一樣讀取和寫入外圍設(shè)備,我們之前在其他文章中一直在使用它們。

對(duì)于這個(gè)簡(jiǎn)單的示例,文件 myip.h 包含我們可以用來(lái)驅(qū)動(dòng)新外設(shè)的三個(gè)函數(shù)。

  • MYIP_mReadReg(BaseAddress, RegOffset)

  • MYIP_mWriteReg(BaseAddress, RegOffset, Data)

  • XStatus MYIP_Reg_SelfTest( void * baseaddr_p);

除自檢功能外,讀取和寫入功能都映射到通用函數(shù) Xil_In32 和 Xil_Out32,它們?cè)?Xil_io.h 中定義。然而,使用創(chuàng)建的函數(shù)可以使代碼更具可讀性,因?yàn)楸粚ぶ返耐庠O(shè)非常清晰。

對(duì)于這個(gè)例子,我們?cè)谕庠O(shè)中只有四個(gè)寄存器,所以我們將只使用自檢,它將寫入和讀取所有寄存器并報(bào)告通過(guò)或失敗。這個(gè)測(cè)試讓我們相信我們已經(jīng)獲得了正確的硬件和軟件環(huán)境,一旦我們?cè)谕鈬K中定義了它們,我們就可以繼續(xù)使用更高級(jí)的功能。在下一篇文章中,我們將研究如何使用 HDL 代碼向外設(shè)添加一些功能,以從處理系統(tǒng)中卸載功能并提高系統(tǒng)性能。

利用XADC進(jìn)行復(fù)雜運(yùn)算

假設(shè)我們想在 Zynq 中執(zhí)行更復(fù)雜的計(jì)算,例如針對(duì)工業(yè)控制系統(tǒng)。通常,這些系統(tǒng)將具有多個(gè)模擬輸入(通過(guò) ADC),由熱敏電阻、熱電偶、壓力傳感器、鉑電阻溫度計(jì) (PRT) 等傳感器驅(qū)動(dòng)。

很多時(shí)候,來(lái)自這些傳感器的數(shù)據(jù)需要傳遞函數(shù)來(lái)將來(lái)自 ADC 的原始數(shù)據(jù)值轉(zhuǎn)換為可用于進(jìn)一步處理的數(shù)據(jù)。一個(gè)很好的例子是 Zynq XADC,它在 XADCPS.h 中包含許多函數(shù)/宏,用于將原始 XADC 值轉(zhuǎn)換為電壓或溫度。但是,這些轉(zhuǎn)換非常簡(jiǎn)單。假如這些計(jì)算變得越復(fù)雜,則需要 Zynq 處理時(shí)間就越多。如果使用 Zynq SoC 的可編程邏輯 (PL) 端來(lái)執(zhí)行這些計(jì)算,則可以大大加快計(jì)算速度。附帶的好處是,處理器還可以騰出時(shí)間來(lái)執(zhí)行其他軟件任務(wù),因此可以通過(guò)使用 PL 進(jìn)行計(jì)算來(lái)提高處理帶寬。

傳遞函數(shù)越復(fù)雜,計(jì)算結(jié)果所需的處理器時(shí)間就越多。我們可以使用以millibars為單位的大氣壓力轉(zhuǎn)換為以米(meters)為單位的高度的示例來(lái)演示這種轉(zhuǎn)換。下面的傳遞函數(shù)給出了壓力在 0 到 10 millibars之間的海拔高度:

bdc8788e-cffa-11ec-bce3-dac502259ad0.png

使用 Zynq SoC 的處理系統(tǒng) (PS) Zynq 實(shí)現(xiàn)這個(gè)傳遞函數(shù)非常簡(jiǎn)單,使用下面的代碼行,其中“結(jié)果-result”是一個(gè)浮點(diǎn)數(shù);a、b 和 c 是上述傳遞函數(shù)中定義的常數(shù);i 是輸入值

result=((float)a*(i*i))+((float)b*(i))+(float)c;

對(duì)于這個(gè)例子,我將使用嵌套在“for”循環(huán)中的代碼來(lái)模擬上面輸入值中的步驟。代碼通過(guò) STDOUT 輸出結(jié)果。因?yàn)槲乙?jì)算執(zhí)行這個(gè)計(jì)算所需的時(shí)間,我將使用私有計(jì)時(shí)器來(lái)確定這個(gè)時(shí)間,如下:

for(i=0.0;i<10.0;?i?=?i?+0.1?){
???????XScuTimer_LoadTimer(&Timer,?TIMER_LOAD_VALUE);
???????timer_start?=?XScuTimer_GetCounterValue(&Timer);
???????XScuTimer_Start(&Timer);
???????result?=?((float)a*(i*i))+((float)b*(i))+(float)c;
XScuTimer_Stop(&Timer);
timer_value=XScuTimer_GetCounterValue(&Timer);
printf("%f,%f,%lu,%lu,

",i,result,timer_start,timer_value);
}

雖然此代碼可能無(wú)法提供最準(zhǔn)確的時(shí)序參考,但足以證明我們研究的原理。在Zynq板上運(yùn)行上述代碼,在終端窗口中獲得了以下結(jié)果。注意:

bde2bd34-cffa-11ec-bce3-dac502259ad0.png

對(duì)此輸出進(jìn)行一些簡(jiǎn)單的分析表明,計(jì)算結(jié)果平均需要 25 個(gè) CPU_3x2x 時(shí)鐘周期。。使用 666MHz 處理器時(shí)鐘,此計(jì)算需要 76 ns。我相信很多人會(huì)看到ADC輸出不是浮點(diǎn)數(shù)而是一個(gè)定點(diǎn)數(shù)。使用整數(shù)數(shù)學(xué)重寫函數(shù)代碼導(dǎo)致時(shí)鐘周期的平均數(shù)非常相似。但是我認(rèn)為對(duì)于這個(gè)例子,浮點(diǎn)數(shù)會(huì)更容易使用,并且不需要解釋定點(diǎn)數(shù)系統(tǒng)背后的原理。

在確定了 Zynq 的 PS 端執(zhí)行中等復(fù)雜度傳遞函數(shù)需要多長(zhǎng)時(shí)間的基準(zhǔn)之后,我們下一次可以看看當(dāng)我們將相同的函數(shù)轉(zhuǎn)移到設(shè)備的 PL 端時(shí),我們能以多快的速度計(jì)算這個(gè)函數(shù)。

定點(diǎn)數(shù)工作原理

上一節(jié)我們使用PS計(jì)算了一個(gè)公式,接下來(lái)我們將使用PL端加速這一公式計(jì)算,但是PL端的特點(diǎn)是只能進(jìn)行定點(diǎn)計(jì)算,所以這一小節(jié)我們將說(shuō)明一下定點(diǎn)數(shù)工作原理。

在數(shù)字系統(tǒng)中有兩種表示數(shù)字的方法:定點(diǎn)或浮點(diǎn)。定點(diǎn)表示將小數(shù)點(diǎn)保持在固定位置,這就大大簡(jiǎn)化了算術(shù)運(yùn)算。如圖所示,定點(diǎn)數(shù)由稱為整數(shù)和小數(shù)部分的兩部分組成:數(shù)字的整數(shù)部分在隱含小數(shù)點(diǎn)的左側(cè),小數(shù)部分在右側(cè)。

be263564-cffa-11ec-bce3-dac502259ad0.png

上述定點(diǎn)數(shù)能夠使用二進(jìn)制補(bǔ)碼表示表示介于 0.0 和 255.9906375 之間的無(wú)符號(hào)數(shù)或介于 –128.9906375 和 127.9906375 之間的有符號(hào)數(shù)。

浮點(diǎn)數(shù)分為指數(shù)和尾數(shù)兩部分。浮點(diǎn)表示允許小數(shù)點(diǎn)根據(jù)值的大小在數(shù)字內(nèi)浮動(dòng)。定點(diǎn)表示的主要缺點(diǎn)是要表示更大的數(shù)字或使用小數(shù)獲得更準(zhǔn)確的結(jié)果,需要更多的位。雖然 FPGA 可以同時(shí)支持定點(diǎn)數(shù)和浮點(diǎn)數(shù),但大多數(shù)應(yīng)用程序都采用定點(diǎn)數(shù)系統(tǒng),因?yàn)樗鼈儽雀↑c(diǎn)數(shù)系統(tǒng)更易于實(shí)現(xiàn)。

在設(shè)計(jì)中,我們可以選擇使用無(wú)符號(hào)或有符號(hào)數(shù)字。通常,選擇受到正在實(shí)施的算法的限制。無(wú)符號(hào)數(shù)可以表示 0 到 2n – 1 的范圍,并且始終表示正數(shù)。有符號(hào)數(shù)使用補(bǔ)碼數(shù)系統(tǒng)來(lái)表示正數(shù)和負(fù)數(shù)。二進(jìn)制補(bǔ)碼系統(tǒng)允許通過(guò)簡(jiǎn)單地將兩個(gè)數(shù)字相加來(lái)從另一個(gè)數(shù)字中減去一個(gè)數(shù)字。補(bǔ)碼數(shù)可以表示的范圍是:- (2n-1) ~ + (2n-1 – 1)

表示定點(diǎn)數(shù)內(nèi)整數(shù)位和小數(shù)位之間分割的正常方式是 x,y,其中 x 表示整數(shù)位的數(shù)量,y 表示小數(shù)位的數(shù)量。例如 8,8 代表 8 個(gè)整數(shù)位和 8 個(gè)小數(shù)位,而 16,0 代表 16 個(gè)整數(shù)和 0 個(gè)小數(shù)位。

在許多情況下,整數(shù)和小數(shù)位數(shù)將在設(shè)計(jì)時(shí)確定,這個(gè)時(shí)間通常在算法從浮點(diǎn)轉(zhuǎn)換之后。由于 FPGA 的靈活性,我們可以表示任意位長(zhǎng)的定點(diǎn)數(shù);我們不僅限于 32、64 甚至 128 位寄存器。FPGA 對(duì) 15 位、37 位或 1024 位寄存器同樣適用。

所需整數(shù)位的數(shù)量取決于該數(shù)字需要存儲(chǔ)的最大整數(shù)值。小數(shù)位數(shù)取決于最終結(jié)果的所需精度。要確定所需的整數(shù)位數(shù),我們可以使用以下等式:

be387f12-cffa-11ec-bce3-dac502259ad0.png

例如,表示 0.0 到 423.0 之間的值所需的整數(shù)位數(shù)是:

be52801a-cffa-11ec-bce3-dac502259ad0.png

我們需要 9 個(gè)整數(shù)位,允許表示 0 到 511 的范圍.

兩個(gè)定點(diǎn)操作數(shù)的小數(shù)點(diǎn)必須對(duì)齊才能加、減或除這兩個(gè)數(shù)字。也就是說(shuō),一個(gè) x,8 數(shù)字只能添加到、減去或除以同樣在 x,8 表示形式中的數(shù)字。要對(duì)不同 x,y 格式的數(shù)字執(zhí)行算術(shù)運(yùn)算,我們必須首先對(duì)齊小數(shù)點(diǎn)。請(qǐng)注意,對(duì)齊除法的小數(shù)點(diǎn)并不是絕對(duì)必要的。但是,實(shí)現(xiàn)定點(diǎn)除法需要仔細(xì)考慮,以確保在這種情況下得到正確的結(jié)果。

同樣,兩個(gè)定點(diǎn)數(shù)相乘時(shí),小數(shù)點(diǎn)也不需要對(duì)齊。例如,將兩個(gè)定點(diǎn)數(shù)相乘,格式為 14,2 和 10,6,結(jié)果為 24,8(格式為 24 個(gè)整數(shù)位和 8 個(gè)小數(shù)位)。對(duì)于除以固定常數(shù),我們當(dāng)然可以通過(guò)計(jì)算常數(shù)的倒數(shù)然后將該常數(shù)結(jié)果用作乘數(shù)來(lái)簡(jiǎn)化設(shè)計(jì)。

PL加速PS端計(jì)算

上一節(jié)簡(jiǎn)單說(shuō)了PL端實(shí)現(xiàn)定點(diǎn)計(jì)算的一些基礎(chǔ)知識(shí),接下來(lái)就是專注于在系統(tǒng)中實(shí)現(xiàn)PL端加速的工作。

在我們開(kāi)始切割代碼之前,我們需要確定我們將在這個(gè)特定實(shí)現(xiàn)中使用的比例因子(小數(shù)點(diǎn)的位置)。在此示例中,輸入信號(hào)的范圍在 0 到 10 之間,因此我們可以將 4 個(gè)十進(jìn)制位和 12 個(gè)小數(shù)位打包成一個(gè) 16 位輸入向量。

be647fea-cffa-11ec-bce3-dac502259ad0.png

上面的公式就是我們要實(shí)現(xiàn)的,它具有三個(gè)常數(shù) A、B 和 C:A = -0.0088 B = 1.7673 C =131.29。我們需要在實(shí)現(xiàn)中處理(縮放)這些常數(shù)。在 FPGA 中這樣做的好處在于,我們可以對(duì)每個(gè)常數(shù)進(jìn)行不同的縮放以優(yōu)化性能,如下表所示:

be7714ac-cffa-11ec-bce3-dac502259ad0.png

當(dāng)我們實(shí)現(xiàn)上述等式時(shí),我們需要考慮合成向量的擴(kuò)展,對(duì)于術(shù)語(yǔ) Ax^2和 Bx 定義如下:

be8723e2-cffa-11ec-bce3-dac502259ad0.png

要使用常數(shù) C 執(zhí)行最終加法,我們需要對(duì)齊小數(shù)點(diǎn)。因此,我們需要將結(jié)果和 Ax^2和 Bx 除以 2 的冪,以將小數(shù)點(diǎn)與 C 對(duì)齊。result也將被格式化為這個(gè)值,即 8,8。

bea11a68-cffa-11ec-bce3-dac502259ad0.png

計(jì)算完上述內(nèi)容后,我們就準(zhǔn)備好在前幾節(jié)創(chuàng)建的 Vivado 外設(shè)工程中實(shí)施設(shè)計(jì)。

第一個(gè)實(shí)現(xiàn)步驟是在 Vivado 中打開(kāi)框圖視圖,右鍵單擊IP,然后選擇“Edit in IP Packager”。一旦 IP Packager 在頂層文件中打開(kāi),我們就可以輕松實(shí)現(xiàn)一個(gè)簡(jiǎn)單的過(guò)程,在多個(gè)時(shí)鐘周期內(nèi)執(zhí)行計(jì)算。(本示例中為五個(gè)時(shí)鐘,盡管可以進(jìn)一步優(yōu)化。)

beb2feae-cffa-11ec-bce3-dac502259ad0.png

現(xiàn)在我們可以在將更新的硬件導(dǎo)出到 SDK 之前,在 Vivado 中重新打包和重建項(xiàng)目(記得更新版本號(hào))。

在 SDK 中,我們可以使用與以前相同的方法,除了現(xiàn)在使用定點(diǎn)數(shù)字系統(tǒng)而不是前面示例中使用的浮點(diǎn)系統(tǒng):

for(i=0;i<2560;?i?=?i+25?){
???????XScuTimer_LoadTimer(&Timer,?TIMER_LOAD_VALUE);
???????timer_start?=?XScuTimer_GetCounterValue(&Timer);
???????XScuTimer_Start(&Timer);
???????ADAMS_PERIHPERAL_mWriteReg(Adam_Low,?4,?i);
???????result?=?ADAMS_PERIHPERAL_mReadReg(Adam_Low,?12);
???????XScuTimer_Stop(&Timer);
???????timer_value?=?XScuTimer_GetCounterValue(&Timer);
??????printf("%d,%lu,%lu,%lu,

",i,result,timer_start,timer_value);
}

當(dāng)上面的代碼在ZYNQ板上運(yùn)行時(shí),我們?cè)诖墟溌飞峡吹揭韵陆Y(jié)果輸出:

bec93f5c-cffa-11ec-bce3-dac502259ad0.png

33610 的結(jié)果等于 131.289 除以 2^8 時(shí),這是正確的并且符合浮點(diǎn)計(jì)算。盡管數(shù)值結(jié)果相同,但最大的區(qū)別在于執(zhí)行計(jì)算所需的時(shí)間。雖然外圍設(shè)計(jì)的實(shí)際計(jì)算只需要 5 個(gè)時(shí)鐘,但生成結(jié)果需要 140 個(gè)時(shí)鐘或 420ns,而在 Zynq SoC 的 PS 側(cè)使用 ARM Cortex-A9 處理器則需要 25 個(gè) CPU 時(shí)鐘。

為什么會(huì)出現(xiàn)差異?PL端不應(yīng)該更快嗎?主要原因時(shí)外圍 I/O 時(shí)間開(kāi)銷。在使用 PL 端時(shí),我們必須考慮 AXI 總線上的總線延遲和 AXI 總線頻率,在此應(yīng)用中為 142.8MHz(請(qǐng)求為 150MHz)。AXI 總線開(kāi)銷導(dǎo)致計(jì)算時(shí)間長(zhǎng)于預(yù)期。然而,一切都沒(méi)有錯(cuò)。錯(cuò)的是我做錯(cuò)了方向:因?yàn)檫@種 I/O 開(kāi)銷時(shí)間,將任務(wù)轉(zhuǎn)移到 Zynq SoC 的 PL 并不是以這種方式使用的。

那么如果我們要采取更合理的方法,需要怎么做?DMA

下一篇文章我們將使用DMA來(lái)搬運(yùn)數(shù)據(jù),看下結(jié)果是不是我們要的~~

本文部分源文件:

https://gitee.com/openfpga/zynq-chronicles/blob/master/VHDL_part24.vhd

bee2e196-cffa-11ec-bce3-dac502259ad0.jpg

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)投訴
  • 可編程邏輯
    +關(guān)注

    關(guān)注

    7

    文章

    515

    瀏覽量

    44086
  • Zynq SoC
    +關(guān)注

    關(guān)注

    0

    文章

    6

    瀏覽量

    3641

原文標(biāo)題:ZYNQ從放棄到入門(八)-PS和PL交互

文章出處:【微信號(hào):Open_FPGA,微信公眾號(hào):OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    使用BQ76PL102系列電量計(jì)進(jìn)行BQ78PL114的快速入門指南

    電子發(fā)燒友網(wǎng)站提供《使用BQ76PL102系列電量計(jì)進(jìn)行BQ78PL114的快速入門指南.pdf》資料免費(fèi)下載
    發(fā)表于 10-17 11:31 ?8次下載
    使用BQ76<b class='flag-5'>PL</b>102系列電量計(jì)進(jìn)行BQ78<b class='flag-5'>PL</b>114的快速入門指南

    bq78PL114系統(tǒng)設(shè)計(jì)指南

    電子發(fā)燒友網(wǎng)站提供《bq78PL114系統(tǒng)設(shè)計(jì)指南.pdf》資料免費(fèi)下載
    發(fā)表于 10-17 10:08 ?1次下載
    bq78<b class='flag-5'>PL</b>114系統(tǒng)設(shè)計(jì)指南

    PICO-IMX8PL和SRG-IMX8PL:共創(chuàng)您的物聯(lián)網(wǎng)集成網(wǎng)關(guān)

    憑借為工業(yè)物聯(lián)網(wǎng)構(gòu)建的平臺(tái),全新PICO-IMX8PL和SRG-IMX8PL強(qiáng)大的物理硬件與精英開(kāi)發(fā)工具相結(jié)合,使解決方案更易于推向市場(chǎng)。SRG-IMX8PL系統(tǒng)賦予用戶制造高品質(zhì)、
    的頭像 發(fā)表于 10-12 08:01 ?456次閱讀
    PICO-IMX8<b class='flag-5'>PL</b>和SRG-IMX8<b class='flag-5'>PL</b>:共創(chuàng)您的物聯(lián)網(wǎng)集成網(wǎng)關(guān)

    復(fù)旦微PS+PL異構(gòu)多核開(kāi)發(fā)案例分享,基于FMQL20SM國(guó)產(chǎn)處理器平臺(tái)

    機(jī)與評(píng)估板的調(diào)試串口相連接,評(píng)估板的RS232串口連接至PC機(jī)的USB接口,硬件連接如下圖所示。 圖 3 參考產(chǎn)品資料,先加載設(shè)備樹(shù)文件和PL可執(zhí)行文件,然后在
    發(fā)表于 08-22 14:04

    PL7518v1

    5V升壓和9V降壓輸入的雙節(jié)鋰電池高效充電管理芯片PL7518PL7518是一款寬電壓輸入專門為雙節(jié)鋰電池充電的充電管理芯片,兼容5V,9V適配器。在5V供電的情況下,實(shí)現(xiàn)升壓充電,電池最大
    發(fā)表于 08-12 13:09 ?0次下載

    FM20S用戶手冊(cè)-PS + PL異構(gòu)多核案例開(kāi)發(fā)手冊(cè)

    "CAN FD"。 本案例的PLbin格式可執(zhí)行文件拷貝至"Aib/firmware/"目錄下,然后執(zhí)行如下命 令加載
    發(fā)表于 07-25 16:14

    FM20S用戶手冊(cè)-PL案例開(kāi)發(fā)手冊(cè)

    ;GenerateBitstream" 選項(xiàng)右側(cè)將出現(xiàn)圖標(biāo),同時(shí)在工程rundir目錄下生成bt文件。 如需生成用于PS加載PL
    發(fā)表于 07-25 16:12

    有關(guān)PL利用AXI總線控制PSDDR進(jìn)行讀寫(機(jī)wready信號(hào)一直不拉高)

    5.31我在做PL控制PS DDR時(shí)遇到個(gè)問(wèn)題,就是機(jī)(DDR)的wready信號(hào)就不會(huì)拉高,只有你發(fā)出wvalid信號(hào)時(shí)才會(huì)拉高,(這是通過(guò)跑通例程抓取信號(hào)看見(jiàn)的)。然而awready信號(hào)是會(huì)
    發(fā)表于 05-31 12:04

    簡(jiǎn)談Xilinx Zynq-7000嵌入式系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    方法不同的是,ZYNQ 7000 SoC總是最先啟動(dòng)PS內(nèi)的處理器,這樣允許PS上運(yùn)行的基于軟件程序用于啟動(dòng)系統(tǒng)并且配置PL,這樣可以配置
    發(fā)表于 05-08 16:23

    AMD Versal AI Edge自適應(yīng)計(jì)算加速平臺(tái)之體驗(yàn)ARM,裸機(jī)輸出(7)

    我們原理圖中可以看到 ZYNQ 芯片分為PLPS,PS的IO分配相對(duì)是固定的,不能任意分配
    的頭像 發(fā)表于 04-19 10:45 ?1407次閱讀
    AMD Versal AI Edge自適應(yīng)計(jì)算加速平臺(tái)之體驗(yàn)ARM,裸機(jī)輸出(7)

    簡(jiǎn)談Xilinx Zynq-7000嵌入式系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    PLPS中,這樣就可實(shí)現(xiàn)獨(dú)一無(wú)二和差異化的系統(tǒng)功能。與傳統(tǒng)的FPGA方法不同的是,ZYNQ 7000 SoC總是最先啟動(dòng)PS內(nèi)的處理器,這樣允許
    發(fā)表于 04-10 16:00

    FPGA的PL固化流程

    電子發(fā)燒友網(wǎng)站提供《FPGA的PL固化流程.pdf》資料免費(fèi)下載
    發(fā)表于 03-07 14:48 ?8次下載

    快速充電協(xié)議智能管理芯片PL6602 SOT23-6 數(shù)據(jù)手冊(cè)

    ,手機(jī)和 PL6602 之間開(kāi)始互相識(shí)別,一旦識(shí)別成功,PL6602 即可響應(yīng)手機(jī)的請(qǐng)求。根據(jù)手機(jī)的請(qǐng)求信息,PL6602 通過(guò) FB 管腳,控制外部的 DC/DC 或者 AC/DC
    發(fā)表于 02-28 09:33 ?0次下載

    快速充電協(xié)議智能管理芯片PL6602適合低功耗場(chǎng)合應(yīng)用

    ,手機(jī)和 PL6602 之間開(kāi)始互相識(shí)別,一旦識(shí)別成功,PL6602 即可響應(yīng)手機(jī)的請(qǐng)求。根據(jù)手機(jī)的請(qǐng)求信息,PL6602 通過(guò) FB 管腳,控制外部的 DC/DC 或者 AC/DC
    發(fā)表于 02-19 09:14 ?0次下載

    快速充電協(xié)議智能管理芯片PL6602數(shù)據(jù)手冊(cè)

    ,手機(jī)和 PL6602 之間開(kāi)始互相識(shí)別,一旦識(shí)別成功,PL6602 即可響應(yīng)手機(jī)的請(qǐng)求。根據(jù)手機(jī)的請(qǐng)求信息,PL6602 通過(guò) FB 管腳,控制外部的 DC/DC 或者 AC/DC
    發(fā)表于 02-04 09:10 ?0次下載
    主站蜘蛛池模板: 182tv免费视视频线路一二三 | 一级特黄性色生活片一区二区| 天天摸天天做| 992tv国产精品福利在线| 一级片 在线播放| 黄色片日本网站| 国产r67194吃奶视频| 国产综合精品久久久久成人影| 3p性小说| 韩日中文字幕| www.夜夜骑| 午夜精品视频任你躁| 成人性视屏| 好爽的视频黄| 欧日韩美香蕉在线观看| 国产四虎精品| 222aaa免费国产在线观看| 亚洲电影一区二区| freesexvideo性欧美2| 牛牛碰在线| 中文字幕一区二区三区免费视频| 色婷婷丁香六月| 天天射日日干| tom影院亚洲国产日本一区| 狠狠色成色综合网| 在线欧美激情| 日本一线a视频免费观看| 天天干天天操天天碰| 国产亚洲欧美一区| 国产成年美女毛片80s| videosxxoo18在线| 美女视频网站色软件免费视频| 久久免费公开视频| 特级无码毛片免费视频尤物| 亚洲三级色| 最新中文字幕在线资源| 欧美性受xxxx极品| 狠狠操狠狠摸| 日本三级在线| 精品黄色片| 色多多官网|