3 系統(tǒng)軟件設(shè)計
本系統(tǒng)主要的開發(fā)調(diào)試工具有SOPC Builder、Quartus II和 NIOS II IDE。SOPC Builder是一個自動化的系統(tǒng)開發(fā)工具,它能夠極大地簡化高性能SOPC的設(shè)計工作;Quartus II是Altera公司推出的CPLD/FPGA開發(fā)工具,Quartus II提供了完全集成且與電路結(jié)構(gòu)無關(guān)的開發(fā)包環(huán)境,具有數(shù)字邏輯設(shè)計的全部特性,主要用于system-on-a-programmable-chip (SOPC)的設(shè)計環(huán)境;NIOS II IDE是NIOS II系列嵌入式處理器的基本軟件開發(fā)工具。所有軟件開發(fā)任務(wù)都可以NIOS II IDE下完成,包括編輯、編譯和調(diào)試程序。
3.1.系統(tǒng)軟件配置
采用NIOS處理器開發(fā)設(shè)計與采用傳統(tǒng)的處理器開發(fā)設(shè)計不同,開發(fā)者必須先配置處理器結(jié)構(gòu)、設(shè)置接口等內(nèi)容。也就是說,開發(fā)者必須根據(jù)實際需求構(gòu)建一個處理器,而傳統(tǒng)的處理器具有固定接口、片內(nèi)RAM和外部設(shè)備。系統(tǒng)設(shè)計所需的具體軟件配置如下:
(1)用SOPC Builder系統(tǒng)綜合軟件來進(jìn)行NIOS軟核的軟件配置,包括NIOS CPU配置、片上ROM及RAM設(shè)置、FLASH設(shè)置、SDRAM設(shè)置、JTAG調(diào)試配置、加入定時器、加入外部RAM總線——Avalon三態(tài)總線橋、通訊接口、按鍵PIO與LED PIO設(shè)置、指定基地址和配置NIOS軟核,這樣整個NIOS軟核已經(jīng)配置完畢,之后需要編譯,并生成圖形文件,成為Quartus II設(shè)計的一部分。
?。?)使用Quartos II軟件來選取具體的Altera可編程器件系列,并對SOPC Builder生成的HDL設(shè)計文件進(jìn)行布局布線;再使用Quartos II軟件選取目標(biāo)器件并對NIOS II系統(tǒng)上的各種I/O口分配管腳,另外還要根據(jù)要求進(jìn)行硬件編譯選項或時序約束的設(shè)置。在編譯的過程中,Quartos II從HDL源文件綜合生成一個適合目標(biāo)器件的網(wǎng)表。最后生成配置文件。
?。?)使用Quartos II編程器和Altera下載電纜,將配置文件下載到開發(fā)板上。當(dāng)校驗完當(dāng)前硬件設(shè)計后,再將新的配置文件下載到開發(fā)板上的非易失存儲器里。
3.2.嵌入式實時操作系統(tǒng)MicroC/OS-II的應(yīng)用設(shè)計
目前比較流行的嵌入式操作系統(tǒng)主要有MicroC/OS-II , MicroCLinux,VxWorks等,考慮到系統(tǒng)資源以及NIOS II IDE 開發(fā)環(huán)境包含MicroC/OS-II實時操作系統(tǒng),為設(shè)計者提供快速地搭建基于NIOS II處理器的MicroC/OS-II應(yīng)用程序的能力,, 故本系統(tǒng)的操作系統(tǒng)選用MicroC/OS-II 。MicroC/OS-II 是一種可固化、可剪裁、占先式的多任務(wù)實時操作系統(tǒng)內(nèi)核。它為每個任務(wù)分配單獨的堆棧, 提供多種系統(tǒng)服務(wù)可進(jìn)行中斷管理。
創(chuàng)建一個基于NIOS II處理器的MicroC/OS-II軟件過程包含以下步驟:創(chuàng)建一個新的NIOS II IDE工程;設(shè)定MicroC/OS-II軟件工程庫;建立并運行NIOS II 下的MicroC/OS-II軟件工程。
一、 創(chuàng)建一個新的NIOS II IDE工程
創(chuàng)建一個新的NIOS II IDE工程的方法比較簡單,基本上按照向?qū)Ь湍芡瓿?,要注意的是?Project Template(工程模板)選擇中, 要選擇 the MicroC/OS-II Tutorial,在New System Library Dialog Box 頁面中的Select Type of system library欄中要選擇MicroC/OS-II。
二、設(shè)定MicroC/OS-II的步驟
?。?). 在NIOS II IDE的C/C++ Projects視圖中,右鍵在系統(tǒng)庫上單擊std_system_lib。
(2). 在彈出的菜單中選擇Properties打開Properties對話框。
(3). 單擊System Library顯示system library選項。
?。?).單擊在RTOS 下面的RTOS Options。彈出MicroC/OS-II RTOS Options對話框。
(5).單擊“+”在在左邊的面板中,展開MicroC/OS-II目錄。MicroC/OS-II是高度映射可設(shè)定的。你選定的對話框中的選項被保存在os_cfg.h文件中。選定的MicroC/OS-II選項被包含在二進(jìn)制中。通過單擊MicroC/OS-II下每一個選項檢查你所能選擇的選項。
?。?).選擇默認(rèn)設(shè)置單擊OK。你將返回系統(tǒng)庫選項對話框,然后單擊OK完成設(shè)置。
三、建立并運行NIOS II 下的MicroC/OS-II軟件工程
在這一部分,在嵌入式系統(tǒng)中設(shè)計并運行一個MicroC/OS-II程序,通過在嵌入式操作系統(tǒng)MicroC/OS-II下編寫2個互相調(diào)用任務(wù)來測試本系統(tǒng)的運行情況。
1.打開ucosii_tutorial.c
2.頭文件加入如下代碼
#include “system.h”
#include “altera_avalon_pio_regs.h”
#include “alt_types.h”
3.加入相關(guān)定義
#define TASK_STK_SIZE 1024
#define TaskStart_ID 0
#define Task1_ID 1
#define Task2_ID 2
#define TaskStart_Prio 1
#define Task1_Prio 4
#define Task2_Prio 3
OS_STK TaskStk[N_TASKS][TASK_STK_SIZE];
OS_EVENT *AckMbox;
OS_EVENT *TxMbox
4.在初始化函數(shù) initCreateTasks函數(shù)中加入如下代碼
OSTaskCreateExt(TaskStart, 0, &TaskStk[0][TASK_STK_SIZE-1], TaskStart_Prio, TaskStart_ID, &TaskStk[0][0], TASK_STK_SIZE, 0, OS_TASK_OPT_STK_CHK );
OSTaskCreateExt(Task1, 0, &TaskStk[1][TASK_STK_SIZE-1], Task1_Prio, Task1_ID, &TaskStk[2][0], TASK_STK_SIZE, 0, OS_TASK_OPT_STK_CHK );
OSTaskCreateExt(Task2, 0, &TaskStk[2][TASK_STK_SIZE-1], Task2_Prio, Task2_ID, &TaskStk[3][0], TASK_STK_SIZE, 0, OS_TASK_OPT_STK_CHK );
5.增加執(zhí)行2任務(wù)互相調(diào)用的代碼
void Task1(void * pParam)
{ //往接收消息隊列發(fā)送A
char txmsg;
INT8U err;
txmsg = ‘A’;
while(1)
{
OS_ENTER_CRITICAL();
printf( “Hello from task1\n” );
OS_EXIT_CRITICAL();
OSMboxPost(TxMbox, &txmsg);
OSMboxPend(AckMbox, 0, &err);
OSTimeDly(2);
}
}
void Task2(void * pParam)
{
char *rxmsg;
INT8U err;
while(1)
{
rxmsg = OSMboxPend(TxMbox, 0, &err);
OS_ENTER_CRITICAL();
printf( “Hello from task2\n” );
OS_EXIT_CRITICAL();
OSTimeDly(2);
OSMboxPost(AckMbox, (void*)1);
}
}
6、 選擇Run As 》 NIOS II Hardware (Run menu中)創(chuàng)建程序,下載它到試驗板中并運行。下載完成后,當(dāng)執(zhí)行這兩個任務(wù)時,任務(wù)一返回:“Hello from task1”;而任務(wù)二返回:“Hello from task2”,兩個任務(wù)之間互相調(diào)用。
得到測試結(jié)果如圖2:
圖2 MicroC/OS系統(tǒng)測試結(jié)果
從測試結(jié)果中可以看出,任務(wù)一和任務(wù)二被反復(fù)的調(diào)用,這與預(yù)期中執(zhí)行的結(jié)果相同,說明系統(tǒng)能夠在FPGA中穩(wěn)定運行。
四、結(jié)束語
本文介紹的基于FPGA的嵌入式系統(tǒng)設(shè)計達(dá)到了預(yù)期效果, CPU 本身是以軟核的方式實現(xiàn), 其功能可根據(jù)需要進(jìn)行定制, 非常靈活。嵌入式MicroC/OS-II 操作系統(tǒng)的32 位嵌入式微處理器進(jìn)行核心控制,利用它強大的運算處理能力,不僅減少了系統(tǒng)所用的器件數(shù)量和系統(tǒng)的尺寸,更提高了系統(tǒng)的可靠性和靈活性。該設(shè)計為嵌入式系統(tǒng)設(shè)計提供了一條新思路,體現(xiàn)了FPGA的靈活性、高集成性等特性,大大降低了成本,縮短了開發(fā)時間。
評論
查看更多