基於 MiniLA 的移植與實現 1

2021-05-21 11:08:26 字數 4612 閱讀 7019

通過上篇《minila初步分析》的描述,我們對minila有了一定的了解,現在看如何在已有的硬體環境上讓他工作起來。

找到手上最適合的一塊板卡是mpc8280 + xc2s400e,2者之間擴充套件匯流排進行連線,這時候記憶體控制器工作在gpcm(general-purpose chip-select machine)模式。

主要訊號

external bus: 8

位資料線,12根位址線,讀有效,寫有效,片選

這部分可以參考fpga內ppcbus模組的訊號定義

fpga jtag:

communication

:fpga io -> ppc irq0

fpga io -> ppc irq6

fpga io -> ppc gpio (

若干)

因為fpga旁沒有本地的memory,所以該設計的難點就是如何將取樣的資料暫存起來並保證實時可靠的傳送到powerpc的sdram裡。基於xc2s400e內的block rams資源數,最終在fpga內部通過邏輯搭建了乙個16kbytes的雙埠ram。

powerpc

上的開發環境:

eldk3.1.1 (linux-2.4.25

、gcc-3.1.1)

fpga

開發環境:

ise 7.1.04i

modelsim 5.8c

fpga

內部有5個模組,如下圖:

ppcbus

由於和powerpc的擴充套件匯流排進行對接,內建了32個8bits的暫存器。powerpc可以通過對起的訪問實現對fpga的控制。當讀暫存器0位址的時候,觸發rd訊號。

fifo

datagen

實現對16個通道上的訊號進行編碼,並寫入fifo。其中訊號:

channel[0:15]

表示輸入的16個測試通道

mask[0:15]

用來實現對clkin的分頻,來產生取樣時鐘

en表示是否使能取樣

取樣的觸發條件按上文說的有兩個:

1.當16個通道上的訊號有乙個或多個發生了變化。這時候把和上次取樣點的時鐘計數器的值以及變化前的電平狀態記錄下來。(例如這是乙個下跳,那就記錄1而不是0)

2.當16bits的計數器發生了溢位前,當到0xffff的時候強制產生一次觸發。

dataread

當powerpc對fpga暫存器0進行訪問的時候,將fifo中的乙個有效資料放在擴充套件匯流排的資料線上,並對讀位址進行自增。

la_top

將上面的4個模組進行訊號的鏈結。同時通過讀位址和寫位址進行判斷,當fifo中的有效資料超過1kbytes的時候就觸發中斷,當達到15kbytes就認為已經接近上限,認為可能發生溢位。

control為la_top中的乙個小模組,通過判斷讀位址和寫位址的值,來計算fifo內有效資料的個數

下面是對fpga暫存器功能的定義:

address

type

reset value

registers description

0x00

r0x00

data read mda port

0x01

r/w0x00

system control register

0x02

r/w0x01

sample rate control low register

0x03

r0x00

fifo remain data counter low register

0x04

r0x00

fifo remain data counter high register

0x06

r/w0x00

sample rate control high register

data read mda port registers (0x00)

bit

description

0-7用於讀取內部

fifo

內容的埠,內部位址會根據讀訊號自增

system control register (0x01)

bit

description

0

0: 停止測試資料的產生

1: 開始測試資料的產生 1

(read only)

0: 正常

1: fifo

已經溢位 2

(read only)

0: fifo

內沒有多餘

1024bytes

的資料可讀

1: fifo

內有多餘

1024bytes

的資料可讀 3

reserved

4reserved

5reserved

6reserved70:

系統正常工作

1:復位

fpga

內部邏輯

sample rate control low register (0x02)

bit

description

0-7取樣參考時鐘的計數器控制,低8位

fifo remain data counter low register (0x03)

bit

description

0-7fifo

中目前所剩資料的低8位

fifo remain data counter high register (0x04)

bit

description

0-7fifo

中目前所剩資料的高8位

sample rate control high register (0x06)

bit

description

0-7取樣參考時鐘的計數器控制,高8位

1.      fpga

工作後,

powerpc

可以檢測到其已經進入工作模式,這個通過

gpio

來實現,同時常亮

alive led

2.     

通過system control register bit0置1

來啟用資料的產生,同時點亮

active led

3.     

通過system control register bit0置0

來禁止資料的產生,同時熄滅

active led

4.     

當檢測到

fifo

快要溢位(有效資料超過

15kbytes

),點亮

critical led

,同時將狀態顯示在

system control register bit1上

5.     

當fifo

中的資料超過了

1024bytes

的時候,產生中斷

irq5

,該中斷為低有效電平中斷

6.     

通過system control register bit7置1

來復位fpga

的內部邏輯

7.     

實時的讀取

register 0x3

和0x4

可以獲得當前

fifo

中殘留資料的長度 8.

通過修改

register 0x2

和0x6

的值,可以實現對取樣時鐘的頻率進行調整,計算公式為:

sample_clk = main_clk / (reg6<<8 +reg2)

fpga

設計的要點是在datagen模組中要確保寫入fifo的取樣資料高16bits和低16bits一致。

當16個通道上的訊號有乙個或多個發生了變化。這時候把和上次取樣點的時鐘計數器的值以及變化前的電平狀態記錄下來。(例如這是乙個下跳,那就記錄1而不是0)。這個要求是上位機軟體設計決定的,兩者需要保持一致。

基於Android的SDIO WIFI移植(1)

一 sdio 裝置驅動移植 很不巧核心已經 被 支援了,我就先不費這事了。二 配置核心以支援marvel無線wifi 在這裡我編譯成模組的方式 device drivers network device support wireless lan marvell 8 libertas wlan dri...

基於uClinux的NPTL執行緒庫移植

2007 12 25 09 56 29 摘要 在linux2.6中,nptl native posix thread library 已取代linuxthreads成為glibc的首選執行緒庫,但是在嵌入式作業系統中普遍使用的基於posix 標準的執行緒庫仍是linuxthreads。分析了nptl...

基於6410的qt廣告機移植小記

請按以下具體步驟操作 1 確定需要有的幾個檔案 a qtopia core opensource src 2.1.1.tar.gz qtopia庫原始碼包 b 交叉編譯器是arm 2009q1,可執行檔案是arm none linux gnueabi gcc 網上能找到,注意要設定好交叉編譯器才可以...