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