290 likes | 475 Views
SOPC 開發 ARM 與 PLD 之結合運作. Topics. SOPC 開發所需要的軟硬體工具 SOPC 開發流程 使用 QuartusⅡ 設定 EPXA1 撰寫程式控制 H/W 使用除錯軟體及下載 Case-study ARM922T 透過 PLD 內的解碼電路,控制 Creator Motherboard 上的 I/O. SOPC 開發所需要的軟硬體工具. SOPC Design Flow. .SBI 檔: Slave Binary Image file ,記錄 PLD 組態資料,在 EXPA1 boot-from-flash 模式下時要用
E N D
Topics • SOPC 開發所需要的軟硬體工具 • SOPC 開發流程 • 使用QuartusⅡ設定EPXA1 • 撰寫程式控制H/W • 使用除錯軟體及下載 • Case-study ARM922T透過PLD內的解碼電路,控制Creator Motherboard上的I/O
SOPC Design Flow • .SBI檔: • Slave Binary Image file,記錄PLD組態資料,在EXPA1 boot-from-flash 模式下時要用 • .SBD檔: • System Build Descriptor 檔,記錄MegaWizard的設定值 • .ELF檔: • 供Domingo下載除錯的檔,其實就是.axf檔
SOPC Design Flow( H/W Design) • .SBI檔: • Slave Binary Image file,記錄PLD組態資料,在EXPA1 boot-from-flash 模式下時要用 • .SBD檔: • System Build Descriptor 檔,記錄MegaWizard的設定值 • .ELF檔: • 供Domingo下載除錯的檔,其實就是.axf檔
ARM922T Processor如何和PLD溝通 • 使用者自行開發的 SIP (矽智產) Core和外部 Flash memory,是連在 EBI( Expansion Bus Interface)上,以memory-mapped方式供 Processor存取,EBI 共有4個Block ( EBI_Block0~EBI_Block3 ) Stripe PLD
使用SOPC Builder設定Memory-Map(1) • Step1: 我們要將device的memory-map設定在EBI中,QuartusⅡ提供了精靈設定,首先啟動 QuartusⅡ->SOPC Builder • Step2: 選擇 Excalibur Stripe,按下「Add」
使用SOPC Builder設定Memory-Map(2) • Step3: 會出現 Megawizard Plug-In Manager 對話窗,如圖,可以設定Registers、SRAM0、SRAM1、DPRAM0、EBI0~EBI3 等Peripheral的Memory-Map,設定完成請按下「Next」
使用SOPC Builder設定Memory-Map(3) • Step4: SOPC Builder 會根據我們的設定自動產生供軟體開發、軟硬體整合所需要的檔案。
使用SOPC Builder設定Memory-Map(4) • Step5:成功完成系統中所有 peripheral 的memory-map 設定。
使用SOPC Builder加入自己的RTL Design(1) • Step1: 啟動 QuartusⅡ->SOPC Builder • Step2: 選擇 Interface to User Logic,按下「Add」
使用SOPC Builder加入自己的RTL Design(2) • Step3:出現對話窗,選擇 「Bus Interface Type」 • Step4:將 「Import Verilog, VHDL,… 」打勾
使用SOPC Builder加入自己的RTL Design(3) • Step5:按下「Add」,將 使用者自己的 RTL Design 檔案(*.v,*.vhd,*bdf )加進來
使用SOPC Builder加入自己的RTL Design(4) • Step6:指定 Top module • Step7:按下 「Read port-list from files」,最上層的I/O腳會自動顯示 ,將所有Port的Type都指定好,就完成了。
使用SOPC Builder加入自己的RTL Design(5) • Step8:成功將自己的 RTL Design 加入到系統中
SOPC Builder產生出來系統 Verilog VHDL VHDL
以S/W撰寫程式控制H/W (Code解說)
SOPC Design Flow(軟體開發) • .SBI檔: • Slave Binary Image file,記錄PLD組態資料,在EXPA1 boot-from-flash 模式下時要用 • .SBD檔: • System Build Descriptor 檔,記錄MegaWizard的設定值 • .ELF檔: • 供Domingo下載除錯的檔,其實就是.axf檔
範例程式---ARM9透過PLD控制Creator Mother Board週邊電路(1) //使LED出現跑馬效果的程式,C程式的寫法如下: while(KEYPAD_chk_key(&key) != OK) { mask = DIPSW_get_sw(); huhu = 1; for(i=0; i<8; i++) { HUHU_put_led( (UC)(~huhu) & mask ); huhu <<= 1; Delay(125); } }
範例程式---ARM9透過PLD控制Creator Mother Board週邊電路(2) UC DIPSW_get_sw(void) { return((UC)(IO_REG1)); } void HUHU_put_led(UC led) { scan_led = (UI)(led); scan_led <<= 8; } #define IO_REG1 (*(unsigned short *)(ECS0_BASE+0x0C02))
範例程式---ARM9透過PLD控制Creator Mother Board週邊電路(3) ;系統控制暫存器的位址宣告 MMAP_REGISTERS EQU 0x7FFFC080 MMAP_SRAM0 EQU 0x7FFFC090 MMAP_SRAM1 EQU 0x7FFFC094 MMAP_SDRAM0 EQU 0x7FFFC0B0 MMAP_SDRAM1 EQU 0x7FFFC0B4 MMAP_EBI0 EQU 0x7FFFC0C0 MMAP_EBI1 EQU 0x7FFFC0C4 MMAP_EBI2 EQU 0x7FFFC0C8 MMAP_EBI3 EQU 0x7FFFC0CC EBI_CR EQU 0x7FFFC380 EBI_SR EQU 0x7FFFC380 EBI_INT_ADDRSR EQU 0x7FFFC3A4 EBI_BLOCK0 EQU 0x7FFFC390 EBI_BLOCK1 EQU 0x7FFFC394 EBI_BLOCK2 EQU 0x7FFFC398 EBI_BLOCK3 EQU 0x7FFFC39C INT_MASK_SET EQU 0x7FFFCC00 INT_MASK_CLEAR EQU 0x7FFFCC04 (1) 此處控制暫存器基底位址是 0x7FFFC00 軟體只要以這個位址為基底, 加上offset,就可以存取到 硬體的控制暫存器,這是我們 先前在QuartusⅡ中使用SOPC Builder 精靈所設定的 (2) 我們使用基底位址(0x7FFFC00) 加上一個offset,來對Memory- Map Control Registers,EBI控制 暫存器等作設定 (3) 要控制Creator Mother Board上的 IO,需要控制EBI的Block2,硬體 的部份我們己經實作一個解碼電路 在PLD之中
範例程式---ARM9透過PLD控制Creator Mother Board週邊電路(4) -- ##### PLD內的解碼電路-- #####-- BUF_IO_RCS0 <= EBI_CS1 when(EBI_A23='0' and EBI_A24 = '0') else '1'; BUF_IO_RCS3 <= EBI_CS1 when(EBI_A23='1' and EBI_A24 = '0') else '1'; BUF_IO_ECS3 <= EBI_CS1 when(EBI_A23='0' and EBI_A24 = '1') else '1'; CS_GEN : process(RST_IN, EBI_CLK) begin if (RST_IN = '0') then IO_nRCS0 <= '1'; IO_nRCS3 <= '1'; IO_nECS0 <= '1'; IO_nECS3 <= '1'; elsif (falling_edge(EBI_CLK)) then IO_nRCS0 <= BUF_IO_RCS0; IO_nRCS3 <= BUF_IO_RCS3; IO_nECS0 <= EBI_CS2; IO_nECS3 <= BUF_IO_ECS3; end if;
SOPC Design Flow(載入到platform) • .SBI檔: • Slave Binary Image file,記錄PLD組態資料,在EXPA1 boot-from-flash 模式下時要用 • .SBD檔: • System Build Descriptor 檔,記錄MegaWizard的設定值 • .ELF檔: • 供Domingo下載除錯的檔,其實就是.axf檔
使用Domingo將產生的hex檔燒錄到EXPA1中(1) • Step1: 將Creator Mother用Carrier ICE與除錯軟體 Domingo連接
使用Domingo將hex檔燒錄到EXPA1中(2) • Step2: 選擇Config->Flash Program
使用Domingo將hex檔燒錄到EXPA1中(3) • Step3: 選擇Flash型號並設定,開始燒錄。
使用Domingo將hex檔燒錄到EXPA1中(4) • Step4: 燒錄完成後,重新啟動platform電源,可以看到EPXA1子板上有跑馬燈、母板上的LED亮起,七段顯示器計數,LCD有文字選單出現。