HPS 虛擬位址對映

2022-08-18 01:06:10 字數 2077 閱讀 1667

hps 如何對fpga外設進行操作?

hardware:在qsys中將外設連線到axi bridge上

software:對映外設實體地址到到應用程式可以操作的虛擬位址,應用程式通過得到的虛擬位址入口控制外設。

也就是說hps訪問fpga中的外設時,可以使用mpu來進行虛擬位址的分配

mpu將以有的外設分配一段位址,若hps需要控制哪乙個外設,只需要訪問虛擬位址即可。

為什麼要進行位址對映?

記憶體對映就是講核心空間的一部分區域對映到使用者空間,使用者對這段記憶體空間的修改可以反映到核心空間。可以將核心空間的一段位址對映到多個程序,以實現執行緒間的記憶體通訊。系統呼叫mmap()就是進行位址對映。mmap是將乙個檔案(linux下裝置也被看做是檔案)或其他物件對映進記憶體。munmap執行相反的操作,刪除特定位址區域的物件對映。

採用共享記憶體進行通訊的優點是效率高,直接讀寫記憶體不需要進行資料拷貝。

通常使用mmap有三種情況,1、提高i/o效率   2、匿名記憶體對映   3、共享記憶體程序通訊。

mmap用於記憶體對映的一種方式是開啟或建立乙個檔案,然後呼叫mmap().(另一種方式如下:程序a和程序b都將該頁對映到自己的位址空間,當程序a第一次訪問該頁中的資料時產生乙個缺頁中斷,核心此時讀入這一頁到記憶體並更新頁表使之指向它,當程序b訪問同一頁發生缺頁中斷時,該頁已經在記憶體中,核心只需要將程序b的頁表登記項指向此頁即可)

下面簡要介紹一下重要原理12

3#define user_io_dir     (0x01000000)

#define bit_led         (0x01000000)

#define button_mask     (0x02000000)

下列程式用來配置led為輸出引腳:

1alt_setbits_word( ( virtual_base + ( ( uint32_t )( alt_gpio1_swporta_ddr_addr ) & ( uint32_t )( hw_regs_mask ) ) ), user_io_dir );

下列語句可以點亮led

1alt_setbits_word( ( virtual_base +( ( uint32_t )( alt_gpio1_swporta_dr_addr ) &( uint32_t )( hw_regs_mask ) ) ), bit_led );

如下語句可以用來讀取

1alt_read_word( ( virtual_base + ( ( uint32_t )(  alt_gpio1_ext_porta_addr ) & ( uint32_t )( hw_regs_mask ) ) ) );

通過open 和mmap對映到相應的虛擬基位址

if( ( fd(fd =open( "/d / " ( o rdwr | o sync ) ) )"/dev/mem" , (o_ rdwr|o_ sync))) == -1 )

virtual_base =mmap( null, hw_regs_span, ( prot_read |

prot write_ ), map shared_, ,  fd,  hw regs base_ _ );

lwaxi匯流排(light weight axi)相對於其虛擬基位址的偏移(alt_lwfpgaslvs_ofst&(unsigned long)(hw_regs_mask))

fpga外設相對於lwaxi的位址(pio_led_base)

h2_lw_led_addr= virtual_base +  ( ( unsigned long)(

alt_lwfpgaslvs_ofst+pio_led_base) & ( unsigned

long)(hw_regs_mask) )

Linux虛擬位址對映

我們定義乙個區域性變數,然後列印出這個區域性變數的位址,那麼這個區域性變數的位址是線性位址?實體地址?還是邏輯位址?要明白這些,先來看看以下的知識吧。x86體系 指的是特定微cpu執行的有些 計算機語言 指令集,定義了 晶元的基本用規則 cpu的位數 alu一次性最多能處理的整數的位元組數,也即al...

虛擬位址與實體地址的對映

對於dsp的每個cpu而言,當由cpu發起的對corepac內部記憶體 l1,l2記憶體,片上暫存器位址 的訪問 通過store或load指令 時,所訪問記憶體的位址就是實體地址 但當cpu訪問corepac外部的記憶體 如msm,即多核共享記憶體或ddr 時,cpu所訪問的32位位址就是虛擬位址了...

虛擬位址和實體地址及其對映

原文 前一段時間在面試總監的時候,總監問了我這樣的乙個問題 你個我說說物理記憶體和虛擬記憶體到底是怎麼一回事?其實之前我看過這個問題,據我理解的,當時是這麼回答的 程序在執行的時候,作業系統都為其分配乙個4gb的位址空間,即所謂的虛擬位址空間,一般情況下,當我們的程式很大的時候,實際的物理記憶體根本...