SOPC設計中自定義IP的開發(fā)
—— Developing Self-definition IP in SOPC Design
這里以一個在控制系統(tǒng)中常用的脈沖寬度調制電路(PWM)為實例,設計一個PWM用戶邏輯并利用EDK將它集成SOPC系統(tǒng)中。我們事先假定FPGA中已經存在一個基于Microblaze的嵌入式系統(tǒng),在此前提下將PWM外設集成到OPB總線上,并進行功能驗證。
假設PWM的具體設計要求如下:
◇ 要求信號周期可調。
◇ 脈沖的寬度可調。
◇ 可以控制PWM的輸出使能。
◇ PWM直接通過一個FPGA管腳輸出。
按照以上設計要求,我們設定PWM外設共有3個寄存器,分別為:
(1) Clock_Divisor 決定信號周期的32位寄存器
(2) Duty_Cycle 控制信號占空比的32位寄存器
(3) Control 控制寄存器,使能輸出,32位,只有最低位有效
3.1 模塊功能設計
PWM外設的核心是一個計數器,由Clock_Divisor控制計數周期,當計數器的計數值大于Clock_Divisor寄存器的值時,計數器清零,否則在時鐘信號觸發(fā)下,輸出使能控制位為1時計數器加1計數;PWM模塊的輸出是計數器的計數值與Duty_Cycle比較的結果,當輸出使能有效并且計數值大于Duty_Cycle寄存器的值時,輸出為1,否則輸出為零。
3.2 模塊集成
在XPS集成開發(fā)環(huán)境中,集成了一個creat/import peripheral wizard 工具,利用該向導工具就能輕松地創(chuàng)建或導入一個用戶自定義的外設。在向導中我們只需選擇與總線的接口是3個32位的寄存器即可,向導完成后,工程目錄(project)中會自動生成drivers和pcores兩個文件夾,兩個文件夾中包含了自定義外設的相關信息,drivers文件夾里以應用程序接口函數(API)的形式提供了自定義外設的驅動程序,以完成對外設的讀寫和測試, 用戶在開發(fā)包含自定義外設的高層應用軟件時就可以直接調用這些接口函數。
在pcores文件夾底下有三個文件比較重要:user_logic、MPD和PAO文件,user_logic文件是集成工具生成的用戶模板文件,該文件中給出了自定義邏輯與OPB總線的接口信號,用戶只需根據接口信號的驅動要求,在用戶模板中就能完成模塊的功能設計。PWM外設與總線的接口描述如下:
entity user_logic is
generic
( 總線協議參數設置,不允許用戶修改
C_AWIDTH : integer := 32;
C_DWIDTH : integer := 32;
C_NUM_CS : integer := 1;
C_NUM_CE : integer := 3
);
port
(
pwm_out : out std_logic; --這是PWM模塊的輸出端口
-- 以下是總線接口信號,不允許用戶修改或刪除,否則模塊集成時將會出錯
Bus2IP_Clk : in std_logic;
Bus2IP_Reset : in std_logic;
Bus2IP_Addr : in std_logic_vector(0 to C_AWIDTH-1);
Bus2IP_Data : in std_logic_vector(0 to C_DWIDTH-1);
Bus2IP_BE : in std_logic_vector(0 to C_DWIDTH/8-1);
Bus2IP_CS : in std_logic_vector(0 to C_NUM_CS-1);
Bus2IP_RdCE : in std_logic_vector(0 to C_NUM_CE-1);
Bus2IP_WrCE : in std_logic_vector(0 to C_NUM_CE-1);
IP2Bus_Data : out std_logic_vector(0 to C_DWIDTH-1);
IP2Bus_Ack : out std_logic;
IP2Bus_Retry : out std_logic;
IP2Bus_Error : out std_logic;
IP2Bus_ToutSup : out std_logic
);
end entity user_logic;
其中Bus2IP_WrCE是處理器用來對外設的寄存器進行編址的信號,該信號與寄存器地址映射關系如表1所示。
其中C_BASEADDR是系統(tǒng)給外設分配的基地址,通過該地址,處理器就能訪問外設的寄存器,在本例中系統(tǒng)分配給PWM外設的地址為0x7da00000。
MPD和PAO分別是處理器外設描述文件和外設分析文件,通過這兩個文件集成開發(fā)工具XPS就能找到外設的各組成模塊并正確識別它們。完成這兩個文件的修改后,再次啟動向導,并把MPD和PAO文件作為向導工具的輸入,就能將PWM這一自定義邏輯集成到總線上去,其修改方法是:
(1)在MPD文件中例化PWM的端口,格式如下:
PORT pwm_out = "", DIR = O
(2)在PAO文件中聲明已經完成PWM功能描述的用戶模板,格式如下:
lib pwm_v1_00_a user_logic vhdl
評論