PYNQ中MicroBlaze程序文件的加載過程_第1頁
PYNQ中MicroBlaze程序文件的加載過程_第2頁
PYNQ中MicroBlaze程序文件的加載過程_第3頁
PYNQ中MicroBlaze程序文件的加載過程_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

PYNQ中MicroBlaze程序文件的加載過程

警告:這篇文章可以做為專業(yè)人士飯后甜點(diǎn),但是非專業(yè)人士

請(qǐng)火速撤離,以免造成永久性大腦皮層損傷。

在PYNQ的baseoverlay中添加了MicroBlaze,通過

MicroBlaze來配置PMOD和ardonio接口并驅(qū)動(dòng)外部設(shè)備。但是平

常我們對(duì)MicroBlaze編程都是將MicroBlaze的代碼文件被硬件的

bitstream文件融合成一個(gè)文件下載到(FPGA)里面去執(zhí)行。但

是,在PYNQ里面顯然不是這樣的。PYNQ的邏輯部分也就是Overlay

都是在系統(tǒng)起來后動(dòng)態(tài)加載的,再啟動(dòng)MicroBlaze里面的程序。那

么這一切都是如何實(shí)現(xiàn)的呢?

首先在PYNQ的overlay里面的MicroBlaze使用的是雙端口

Block(RAM),PS端可以對(duì)這個(gè)RAM進(jìn)行讀寫,那么問題就簡單

了,等。verlay配置完成,PS端再將二進(jìn)制程序文件吸入的到

MicroBlaze指令存儲(chǔ)器里面,再復(fù)位MicroBlaze就可以了。

這一過程設(shè)計(jì)復(fù)雜的文件調(diào)用和地址映射。首先來看一下這一

功能在(Python)里面實(shí)現(xiàn)的。

首先我們看一個(gè)使用MicroBlaze的例子,以Pmod(ADC)為

例。測試代碼如下;

f(rom)pynq.overlays.baseimportBaseOverlay

frompynq.1ibimportPmod_ADC

base=BaseOverlay("base.bit")

if_id=input("Typeinthein(te)rfacelDused

(PMODAorPMODB):”)

ifif_id.upper()=='PMODA':

adc=Pmod_ADC(base.PMODA)

else:

adc=Pmod_ADC(base.PMODB)

先調(diào)用baseoverlay,這個(gè)不用說。接下來使用的一個(gè)

Pmod_ADC函數(shù)指定Pmod接口是A還是B。這個(gè)函數(shù)在pmod_adc.py

文件里,讓我們進(jìn)如pmod_adc.py看一下這個(gè)函數(shù):

PMOD_ADC_PROGRAM="pmod_adc.bin”

classPmodADC(object):

def_init_(self,mb_info):

self.microblaze=Pmod(mb_info,PMOD_ADC_PROGRAM)

self.Iog_running=0

這里面使用一個(gè)Pmod函數(shù)指定了所使用的程序文件,也就是

pmod_adc.bin。這程序是自己寫的MicroBlaze程序編譯生成的,可

以在SDK里面完成程序并編譯得到.bin文件。

在pmod.py文件里面我們可以看到Pmod函數(shù)通過super()函

數(shù)調(diào)用父PynqMicroblaze里面初始化函數(shù)。關(guān)于super()函數(shù)的

使用自行谷歌。

frompynq.libimportPynqMicroblaze

classPmod(PynqMicroblaze):

def_init_(self,mb_info,mbprogram):

ifnotos.path,isabs(mb_program):

mb_program=os.path,join(BIN_L0CA(TI)ON,mb_program)

super().—init_(mb_info,mb_program)

在PynqMicroblaze里面,使用了PL.load_ip_data函數(shù)來載入

我們的二進(jìn)制程序文件。并在載入完成后使用了run()函數(shù),在

run()函數(shù)里面復(fù)位了Micro了aze。

classPynqMicroblaze:

defrun(self):

self,states'RUNNING'

self.reset_(pi)n.write(0)

defprogram(self):

self,reset()

PL.load_ip_data(self.ip_name,self,mbprogram,

zero=True)

ifself.interrupt:

self,interrupt,clear()

self,run()

讓我們?cè)龠M(jìn)入pl.py,會(huì)發(fā)現(xiàn)load_ip_data函數(shù)使用MMIO接

口函數(shù)寫入了程序文件。

defload_ip_data(cis,ip_name,data,zero=False):

cis.client_request()

withopen(data,‘rb')asbin_file:

size=os.fstat(bin_file.fileno()).st_size

target_size=cls._ip_dict[ip_name][<addr_range,]

ifsize》target_size:

r(ai)seRunTImeError("BinaryfiletoobigforIP”)

mmio=MMI0(cis._ip_dict[ip_name]['phys_addr'],

target_size)

buf=bin_file.read(size)

mmio.write(0,buf)

ifzeroandsize^target_size:

mmio.write(size,b'\x00'*(tar

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論