通過上篇《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 網上能找到,注意要設定好交叉編譯器才可以...