220 likes | 234 Views
This Stripe Excalibur ARM EPXA1 embedded development board features EPXA1F484 device with industry standard interconnections, memory subsystem, expansion headers, and user-interface features for versatile embedded processor FPGA designs. It includes ARM922T 32-Bit RISC Processor, embedded memory, UART, timer, and watchdog timer. The example design involves handling read and write requests via AHB between Stripe and PLD components. Hardware and software development steps are detailed for setup and testing with LEDs and RS-232 communication.
E N D
環境設定 • Hardware development : quartus2 4.0 web edition and web license ,download form website • Software development : sopcbuilder with gnupro CD in the box
Excalibur ARM feature • Powerful development board for embedded processor FPGA designs • – Features an EPXA1F484 device • – Supports intellectual property-based (IP-based) designs using a microprocessor • Industry-standard interconnections • – 10/100 megabits per second (Mbps) Ethernet • – Two RS-232 ports • Memory subsystem • – 8 Mbytes of flash memory • – 32 Mbytes of single data rate (SDR) SDRAM • Multiple clocks for communications system design • Multiple ports for configuration and debugging • – IEEE Std. 1149.1 Joint Test Action Group (JTAG) • – Support for configuring the EPXA1 device using flash memory, • with a MasterBlaster™ or ByteBlasterMV™ cable • – Multi-ICE header for debugging • Expansion headers for greater flexibility and capacity • – 5-V standard expansion header • – 5-V long expansion card header • Additional user-interface features • – One user-definable 8-bit dual in-line package (DIP) switch block • – Four user-definable push-button switches, plus reset switch • – Ten user-definable LEDs, plus function-specific LEDs • Test points provided to facilitate system development
This is Stripe Excalibur ARM , EPXA1
Embedded Stripe Components • ARM922T 32-Bit RISC Processor • –200-MHz Bus Performance • Embedded Memory • –Single-Port SRAM to 256 Kbytes • –Dual-Port SRAM to 128 Kbytes • SDRAM Controller • Expansion Bus Interface • Multi-Layer AMBA AHB Bus Architecture • Embedded Bridges between Stripe & PLD • Embedded Peripherals • –UART • –Timer • –Watchdog Timer • –Interrupt Controller
Excalibur ARM, epxa1,Design example • ug_xa1_devbd_getting_started • Can be download form here http://www.altera.com/literature/lit-exc.jsp • 這是一個簡單的example, stripe是唯一的 bus master,只有它能送出read 或write 的request, slave則負責回映master的要求
The block diagram of this example Single_transaction_slave Stripe Reg_file
A write request form stripe Single_transaction_slave Stripe 1 2 Reg_file
A write request from stripe • Stripe 透過 AHB 送出一個write request到single_transaction_slave, single_transaction_slave 的功用為負責處理AHB上面的溝通訊號 • Single_transaction_slave 將資料傳給regfile處理
A read request form stripe Single_transaction_slave Stripe 1 4 3 2 Reg_file
A read request from stripe • Stripe 透過 AHB 送出一個read request到single_transaction_slave • Single_transaction_slave 將資料傳給regfile處理 • Regfile將資料傳回給single_transaction_slave • Single_transaction_slave 將資料傳回給stripe
Example Builds in epxa1 • Download the example • First hardware build • Then software build • download to development board • Setup RS-232 connect in PC
Hardware build • 先用quartusII打開example • 按圖上的紐開始hardware build • 通常不會有問題除了license Push here to build hardware
Software build • 打開SOPC Builder SDK Shell • 進到example裡面的gnu資料夾中,將makefile中的epxa10.c改為epxa1.c • 輸入make
Download the design to development board • 執行prog_hw.bat • 接下來就能看到板子上面的跑馬燈
Setup RS-232 • 打開hyperterminal做左邊圖裡面的設定
Example results • 在板子上面能看到LED在跑動, 用RS-232和板子相連的PC也能夠在hyperterminal 的視窗中看到以下的訊息 ************************************************************** **Altera EPXA10 Development Board - I'm alive!!! ** ** ** ** Look for scrolling LEDs ** ** ** **************************************************************
修改example-hardware What you want a write request do What you want a read request do Double click 在 regfile 的圖上
My Example reg_file.v if(write) begin if(reg_state) begin temp1 <= wdata; reg_state <= 1'b0; end else begin temp2 <= wdata; reg_state <= 1'b1; end end //endif else begin rdata <= temp1 + temp2; end
修改example - software int main(void) { LED = (volatile unsigned int*) EXC_PLD_BLOCK0_BASE + 0x00001000; printf("\r\n"); printf("****************************************************\r\n"); printf("** **\r\n"); printf("** Altera EPXA10 Development Board - I'm alive!!! **\r\n"); printf("** **\r\n"); printf("** Look for scrolling LEDs **\r\n"); printf("** **\r\n"); printf("****************************************************\r\n"); while (1) Scroll_LED(); return 0; } 在common的資料夾內的main.c
My Example main.c temp = *LED; while(tempc != 0){ printf("input first number :"); scanf("%d",&temp); *LED = temp; printf("input second number :"); scanf("%d",&temp); *LED = temp; temp = *LED; printf("temp = %d \r\n",temp); printf("continue?(1/0)\r\n"); scanf("%d",&tempc); }
My Example Results input first number :132 input second number :333 temp = 465 continue?(1/0)