<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 模擬技術(shù) > 設(shè)計應(yīng)用 > SOPC設(shè)計中自定義IP的開發(fā)

          SOPC設(shè)計中自定義IP的開發(fā)

          —— Developing Self-definition IP in SOPC Design
          作者:張春生 宋磊 薛雷 防空兵指揮學(xué)院(鄭州 450052) 時間:2011-02-18 來源:電子產(chǎn)品世界 收藏
          3  自定義IP開發(fā)實(shí)例
          這里以一個在控制系統(tǒng)中常用的脈沖寬度調(diào)制電路(PWM)為實(shí)例,設(shè)計一個PWM用戶邏輯并利用EDK將它集成系統(tǒng)中。我們事先假定FPGA中已經(jīng)存在一個基于Microblaze的嵌入式系統(tǒng),在此前提下將PWM外設(shè)集成到OPB總線上,并進(jìn)行功能驗(yàn)證。
          假設(shè)PWM的具體設(shè)計要求如下:
          ◇ 要求信號周期可調(diào)。
          ◇ 脈沖的寬度可調(diào)。
          ◇ 可以控制PWM的輸出使能。
          ◇ PWM直接通過一個FPGA管腳輸出。
          按照以上設(shè)計要求,我們設(shè)定PWM外設(shè)共有3個寄存器,分別為:
          (1) Clock_Divisor 決定信號周期的32位寄存器
          (2) Duty_Cycle 控制信號占空比的32位寄存器
          (3) Control 控制寄存器,使能輸出,32位,只有最低位有效
          3.1  模塊功能設(shè)計
          PWM外設(shè)的核心是一個計數(shù)器,由Clock_Divisor控制計數(shù)周期,當(dāng)計數(shù)器的計數(shù)值大于Clock_Divisor寄存器的值時,計數(shù)器清零,否則在時鐘信號觸發(fā)下,輸出使能控制位為1時計數(shù)器加1計數(shù);PWM模塊的輸出是計數(shù)器的計數(shù)值與Duty_Cycle比較的結(jié)果,當(dāng)輸出使能有效并且計數(shù)值大于Duty_Cycle寄存器的值時,輸出為1,否則輸出為零。
          3.2  模塊集成
          在XPS集成開發(fā)環(huán)境中,集成了一個creat/import peripheral wizard 工具,利用該向?qū)Чぞ呔湍茌p松地創(chuàng)建或?qū)胍粋€用戶自定義的外設(shè)。在向?qū)е形覀冎恍柽x擇與總線的接口是3個32位的寄存器即可,向?qū)瓿珊?,工程目錄(project)中會自動生成drivers和pcores兩個文件夾,兩個文件夾中包含了自定義外設(shè)的相關(guān)信息,drivers文件夾里以應(yīng)用程序接口函數(shù)(API)的形式提供了自定義外設(shè)的驅(qū)動程序,以完成對外設(shè)的讀寫和測試, 用戶在開發(fā)包含自定義外設(shè)的高層應(yīng)用軟件時就可以直接調(diào)用這些接口函數(shù)。
          在pcores文件夾底下有三個文件比較重要:user_logic、MPD和PAO文件,user_logic文件是集成工具生成的用戶模板文件,該文件中給出了自定義邏輯與OPB總線的接口信號,用戶只需根據(jù)接口信號的驅(qū)動要求,在用戶模板中就能完成模塊的功能設(shè)計。PWM外設(shè)與總線的接口描述如下:
          entity user_logic is
          generic
          (   總線協(xié)議參數(shù)設(shè)置,不允許用戶修改
          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是處理器用來對外設(shè)的寄存器進(jìn)行編址的信號,該信號與寄存器地址映射關(guān)系如表1所示。

          本文引用地址:http://www.ex-cimer.com/article/116965.htm
          其中C_BASEADDR是系統(tǒng)給外設(shè)分配的基地址,通過該地址,處理器就能訪問外設(shè)的寄存器,在本例中系統(tǒng)分配給PWM外設(shè)的地址為0x7da00000。
          MPD和PAO分別是處理器外設(shè)描述文件和外設(shè)分析文件,通過這兩個文件集成開發(fā)工具XPS就能找到外設(shè)的各組成模塊并正確識別它們。完成這兩個文件的修改后,再次啟動向?qū)?,并把MPD和PAO文件作為向?qū)Чぞ叩妮斎?,就能將PWM這一自定義邏輯集成到總線上去,其修改方法是:
          (1)在MPD文件中例化PWM的端口,格式如下:
          PORT pwm_out = "", DIR = O
          (2)在PAO文件中聲明已經(jīng)完成PWM功能描述的用戶模板,格式如下:
          lib pwm_v1_00_a user_logic vhdl


          關(guān)鍵詞: SOPC IP核

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();