充分發(fā)揮PicoBlaze微控制器的優(yōu)勢(shì)
眾多FPGA 應(yīng)用均可通過使用簡(jiǎn)單的軟核處理器來簡(jiǎn)化時(shí)序控制結(jié)構(gòu)的生成,從而深受其益。
本文引用地址:http://m.butianyuan.cn/article/201610/308377.htm作者:Adam P. Taylor
e2v公司工程系統(tǒng)負(fù)責(zé)人
aptaylor@theiet.org
PicoBlaze 是一款結(jié)構(gòu)緊湊的8 位軟核微控制器,F(xiàn)PGA工程師可在其所選的賽靈思FPGA 中對(duì)其進(jìn)行實(shí)例化。一旦實(shí)現(xiàn),該處理器完全包含到僅使用邏輯Slice 和Block RAM 的FPGA 架構(gòu)中;無需外部易失性和非易失性存儲(chǔ)器。
由于其實(shí)現(xiàn)方案封裝面積小,F(xiàn)PGA 才可能容納多個(gè)PicoBlaze 實(shí)例化。每個(gè)實(shí)例化用于實(shí)現(xiàn)通常由狀態(tài)機(jī)創(chuàng)建的控制結(jié)構(gòu)。這樣不僅能縮短開發(fā)時(shí)間,而且還可用標(biāo)準(zhǔn)化方法來控制結(jié)構(gòu)生成。由于賽靈思FPGA結(jié)構(gòu)潛在的高性能,PicoBlaze 實(shí)例化往往能夠超越許多分離式8 位微控制器。
下面讓我們看看如何在我們的設(shè)計(jì)中充分利用這款便捷的器件。
PICOBLAZE 架構(gòu)
在使用這個(gè)處理器之前,首先讓我們了解一下它的架構(gòu)。PicoBlaze 是一款基于RISC 架構(gòu)的非常簡(jiǎn)單的8 位微控制器(如圖1 所示)。該控制器有一個(gè)12 位的地址端口,這意味著它可以處理多達(dá)4096 個(gè)存儲(chǔ)器位置。
圖1 – PicoBlaze架構(gòu),處理器(左)和存儲(chǔ)器(右)
每個(gè)地址位置包括一個(gè)18 位指令,用以定義該處理器必須執(zhí)行的操作。該處理器的輸入輸出可能通過兩個(gè)8位端口(一個(gè)輸入端口,一個(gè)輸出端口)。該控制器還提供了一個(gè)8 位識(shí)別端口,可讓多達(dá)256 個(gè)外設(shè)通過該端口進(jìn)行讀寫。此外,該控制器還提
供一個(gè)64、128 或256 字節(jié)大小可選的高速暫存存儲(chǔ)器。跟所有微處理器一樣,PicoBlaze 包含一個(gè)算術(shù)邏輯單元并支持一個(gè)中斷。有了這些功能,意味著該控制器能夠?yàn)镕PGA 設(shè)計(jì)工程師帶來眾多優(yōu)勢(shì)。
PicoBlaze 最重要的一個(gè)方面是它具有高度的確定性,這意味著所有指令都需要兩個(gè)時(shí)鐘周期才能執(zhí)行完畢,中斷服務(wù)最多需要四個(gè)時(shí)鐘周期。( 您可以通過下載賽靈思用戶指南,了解有關(guān)PicoBlaze 架構(gòu)的更多詳情。)
如何使用PICOBLAZE?
FPGA 應(yīng)用通常需要結(jié)合并行和時(shí)序操作,其中數(shù)據(jù)流主要采用并行操作,而控制結(jié)構(gòu)主要以時(shí)序結(jié)構(gòu)實(shí)現(xiàn),如狀態(tài)機(jī)。(參見《賽靈思中國(guó)通信》第46 期,“ 如何在您的FPGA 中實(shí)現(xiàn)狀態(tài)機(jī)”)。然而,復(fù)雜的控制結(jié)構(gòu)如果以狀態(tài)機(jī)實(shí)現(xiàn),可能會(huì)變得
難以處理,不僅會(huì)延長(zhǎng)驗(yàn)證時(shí)間,而且還會(huì)讓開發(fā)周期的后期修改變得困難重重。復(fù)雜的狀態(tài)機(jī)還需要花更多時(shí)間來開發(fā),如果需要開發(fā)數(shù)個(gè),那么花費(fèi)時(shí)間就會(huì)相當(dāng)長(zhǎng)。
此外,您還可以使用PicoBlaze控制通過RS232、I2C 和SPI 接口的串行通信。事實(shí)上,您采用典型8位微處理器實(shí)現(xiàn)的任何方案均可在PicoBlaze 中實(shí)現(xiàn), 而且具有更高的性能。工程師們已經(jīng)用PicoBlaze 在控制系統(tǒng)中實(shí)現(xiàn)PID 控制器。他們結(jié)合使用PicoBlaze 與I2C、SPI 或并行DAC 來創(chuàng)建方形、鋸齒和三角形以及更復(fù)雜的正弦/ 余弦等各種參考波形(使用移位加CORDIC 算法)。在您的FPGA 中實(shí)例化PicoBlaze 微控制器來實(shí)現(xiàn)這些時(shí)序功能,不僅可縮短開發(fā)時(shí)間,而且還允許在開發(fā)周期的
后期階段進(jìn)行簡(jiǎn)單的修改。當(dāng)然,作為軟核,PicoBlaze 還有助于解決過時(shí)問題,而且在您開發(fā)ASM 模塊時(shí)還支持設(shè)計(jì)重用。
首個(gè)PICOBLAZE 實(shí)例化
遵循以下幾個(gè)簡(jiǎn)單步驟,您就可以在您的設(shè)計(jì)中快速實(shí)現(xiàn)PicoBlaze。首先,確保您將用于目標(biāo)器件中的微控制器是最新版本。您可從賽靈思PicoBlaze 下載區(qū)下載這些微控制器產(chǎn)品,這里既提供支持最新7 系列器件的版本,又提供能與舊版Spartan®-3
和Virtex®-4 器件協(xié)同使用的微控制器版本。
當(dāng)下載了正確的處理器版本后,將這些文件解壓到您的工作目錄下并確保您能讀取“read-me”文件,同時(shí)根據(jù)需要密切關(guān)注路徑的設(shè)置以及賽靈思的環(huán)境變量。在您的工作目錄中, 您將注意到以下文件或應(yīng)用,以及有用的read-me 文件、許可證文件和用戶指南。
• KCPSM6.Vhd: 這是一個(gè)真正的PicoBlaze 源代碼。
• KCPSM6.exe :這是一個(gè)匯編程序,您可運(yùn)用其生成所需的機(jī)器碼和存儲(chǔ)器文件。
• ROM_Form.vhd :這是一個(gè)可執(zhí)行匯編程序,使用該文件可以生成VHDL 文件,您創(chuàng)建的程序?qū)⒋鎯?chǔ)在這里。
• KCPSM6_design_template vhd :這是一個(gè)PicoBlaze 處理器模板實(shí)例。
• All_kcpsm6_syntax.psm :這個(gè)文件是關(guān)于所有匯編程序命令和語法的定義。
對(duì)于我們的實(shí)例設(shè)計(jì),如果你不想將PicoBlaze 及其程序存儲(chǔ)器添加到現(xiàn)有項(xiàng)目中,那么最后一步您應(yīng)在我們能實(shí)例化PicoBlaze 及其程序存儲(chǔ)器的ISE® 設(shè)計(jì)套件中創(chuàng)建一個(gè)新的項(xiàng)目。
一旦完成上述步驟,我們就準(zhǔn)備開始在我們的應(yīng)用中創(chuàng)建PicoBlaze處理器。在此最簡(jiǎn)單的層面上,您只需在您的設(shè)計(jì)中聲明兩個(gè)組件:一個(gè)是處理器本身,另一個(gè)是程序存儲(chǔ)器,如圖1 所示 ( 處理器位于左側(cè)方框中,存儲(chǔ)器位于右側(cè)方框中,用以提供上下文環(huán)境)。當(dāng)然,如果您需要實(shí)現(xiàn)一個(gè)以上的實(shí)例化,那么您應(yīng)該提供若干個(gè)存儲(chǔ)器組件,用于存儲(chǔ)不同的程序。然而,首先需要我們做的是了解典型項(xiàng)目的開發(fā)流程。
開發(fā)流程
創(chuàng)建首個(gè)PicoBlaze 實(shí)例其實(shí)很簡(jiǎn)單。第一步,使用Notepad++ 之類的編輯器創(chuàng)建一個(gè)空白的文本文件。該文件應(yīng)該具備一個(gè) .PSM 的文件擴(kuò)展名,比如像“test.psm”這樣的。您可以用PicoBlaze 匯編程序?qū)ξ⒖刂破鬟M(jìn)行編程。
賽靈思在All_kcpsm6_ syntax.psm 文件中對(duì)該語法進(jìn)行了詳細(xì)介紹,您可以自行下載。無論怎樣,這個(gè)語法很容易理解和掌握。圖2 是匯編程序代碼片段的示例,這是一個(gè)簡(jiǎn)單程序,用以閃存運(yùn)行頻率為2Hz、時(shí)鐘頻率為 40MHz 的LED。
圖2 – 用于項(xiàng)目閃存LED的匯編程序代碼片段
一旦您對(duì)自己的匯編程序感到滿意后,就可以進(jìn)行下一步:通過您下載的匯編程序可執(zhí)行文件運(yùn)行該程序。這樣將會(huì)生成一個(gè)存儲(chǔ)器文件 (您的FPGA 中會(huì)用到的VHDL)、一個(gè)日志文件和一個(gè)十六進(jìn)制文件,我們將在后文介紹它們的用途。圖3 顯示了針對(duì)上述代碼片段所運(yùn)行的匯編程序流程。一旦運(yùn)行匯編程序,您現(xiàn)在就能夠在您的FPGA 內(nèi)實(shí)例化PicoBlaze。
圖3 –使用KCPSM6匯編程序生成存儲(chǔ)器文件
您現(xiàn)在擁有兩個(gè)所需的VHDL文件:KCPSM6.vhd 和由匯編程序創(chuàng)建的包含您的應(yīng)用的VHDL 文件( 在本例中為test.vhd)。第二步:
在您的VHDL 設(shè)計(jì)中聲明兩個(gè)組件(KCPSM6 和Memory) 并對(duì)他們進(jìn)行實(shí)例化(如圖4 所示)。在圖5 所示的代碼片段中可以看到這個(gè)簡(jiǎn)單的VHDL 示例。這個(gè)VHDL 示例實(shí)現(xiàn)的PicoBlaz 可以將LED 閃存到LX9Spartan® 開發(fā)板上。
圖4 – PicoBlaze上下文方框圖
圖5 –將LED閃存到LX9 Spartan開發(fā)板上的PicoBlaze的代碼片段
仿真與驗(yàn)證
一旦您在應(yīng)用中完成了設(shè)計(jì)文件的實(shí)例化,您肯定希望能在綜合和實(shí)現(xiàn)之前在仿真環(huán)境中驗(yàn)證一下該系統(tǒng)或模塊的性能。由于PicoBlaze 使用的是邏輯Slice 和 Block RAM,所以您在Mentor Graphics 的Mod-elSim 或賽靈思ISE 中的ISim ( 如果您是在
Vivado® 設(shè)計(jì)套件中的Xsim 中實(shí)現(xiàn)您的PicoBlaze,也可使用Xsim) 等程序中進(jìn)行仿真就極其簡(jiǎn)單。
由于Block RAM 包含有針對(duì)您程序的指令,所以仿真工作自然就簡(jiǎn)單。基本上,您只需要提供一個(gè)時(shí)鐘以及實(shí)例化要求的其他輸入輸出。圖6 顯示了在ISim 中進(jìn)行的PicoBlaze仿真結(jié)果,以及指令加載之間的兩個(gè)時(shí)鐘周期。
圖6 – ISim仿真結(jié)果
圖6 – ISim仿真結(jié)果
升級(jí)您的程序
在FPGA( 以及比特文件) 中內(nèi)置PicoBlaze 的最大優(yōu)勢(shì)之一就是在FPGA 配置完成后PicoBlaze 開始直接在其RAM 中運(yùn)行程序。然而,在某些情況下,您可能需要修改該處理器核正在執(zhí)行的程序。雖然根據(jù)設(shè)計(jì)余下部分的復(fù)雜程度,您可能會(huì)重新運(yùn)行Implementation 階段(包括更新了的存儲(chǔ)器文件),但這會(huì)非常耗時(shí),尤其是您只在實(shí)驗(yàn)室里嘗試各種可能的情況下。因此,在重新運(yùn)行Implementation 階段之前可以用JTAGloader 更新處理器 核的程序存儲(chǔ)器,來調(diào)試你的軟件程序。其中JTAG loader 也能通過下載獲得。
在使用JTAG loader 之前,首先需要在您的設(shè)計(jì)設(shè)置中啟用該加載程序。在一個(gè)程序存儲(chǔ)器的實(shí)例化中使用通用C_JTAG_LOAD-ER_ENABLE: integer := 1 。注意您一次只能為您設(shè)計(jì)中的一個(gè)內(nèi)存實(shí)例設(shè)置該參數(shù)。
在您的設(shè)計(jì)中啟用該程序后,您必須從JTAG_loader 目錄中選擇和你的操作系統(tǒng)匹配的版本并將其復(fù)制到您的工作目錄下 ( 即十六進(jìn)制文件所在位置)?,F(xiàn)在您可以打開一個(gè)命令窗口并導(dǎo)航到您的工作目錄下,然后使用以下命令。
jtagloader –l
注意:我已經(jīng)我的操作系統(tǒng)重新命名為可執(zhí)行文件版本,即jtagloader.exe。
當(dāng)您在您的最新PSM 文件上運(yùn)行匯編程序時(shí),此項(xiàng)操作將下載所創(chuàng)建的十六進(jìn)制文件,結(jié)果如圖7 所示。下載該文件后,您將注意到JTAGloader 會(huì)停止處理器執(zhí)行并在釋放處理器復(fù)位之前下載新的程序到存儲(chǔ)器中,此時(shí)處理器開始運(yùn)行新的程序。
一旦您對(duì)PSM 文件的更新行為感到滿意,您就可以重新運(yùn)行實(shí)現(xiàn)方案和比特文件生成,從而確保下次該器件經(jīng)過配置,能夠執(zhí)行更新的程序。
評(píng)論