RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

FPGA與嵌入式CPU的Local Bus接口調(diào)試

FPGA技術(shù)江湖 ? 來源: 網(wǎng)絡(luò)交換FPGA ? 2023-01-10 10:25 ? 次閱讀

Local Bus總線又稱為CPU總線,根據(jù)高低位地址線序的差異,又可分為Motorola CPU總線和Intel CPU總線。 古老的CS51單片機(jī)就是Intel CPU總線的典型代表,而我們常用的Power PC就是Motorola CPU總線架構(gòu),它是從60X總線衍變過來的(60X總線支持64、32、16、8四種可選位寬模式)。 本文以一款Power PC CPU通過Local Bus讀寫FPGA內(nèi)部寄存器或RAM以及中斷響應(yīng)為例,為大家介紹開發(fā)過程中的注意事項。

poYBAGO8zNaAbnbsAADkeFLZl9s707.gif

記得在HINOC1.0的時候,F(xiàn)PGA樣機(jī)上采用Intel XScale PXA270(ARM CPU)芯片與FPGA芯片互連,采用的接口時序就是Local Bus總線的時序,該時序與CPU與外掛異步SRAM接口時序一樣,這樣HINOC芯片就可以看做是ARM CPU的一個外設(shè),可以分配可配置的寄存器或RAM等訪問空間。 具體時序圖如下圖所示,總線包括地址、片選、讀/寫信號,下圖是簡單的讀時序。 注意,所謂異步,就是CPU接口總線與FPGA相應(yīng)接口是不同步的,也就是CPU送給FPGA的信號中不包括時鐘信號,F(xiàn)PGA需要通過自己內(nèi)部的時鐘信號去采CPU接口的地址、數(shù)據(jù)等信號,同步后才能使用。 如下圖中的CPU讀FPGA時序,CPU給出度地址和讀控制信號后,等待tAA時間后才能從數(shù)據(jù)總線上取到正確的有效的數(shù)據(jù),這個tAA時間長短是可以通過設(shè)置PXA270中的寄存器來進(jìn)行調(diào)整的。

poYBAGO8zNaAEheRAAAr_JCsXvU519.png

poYBAGO8zNaAM3HIAAAjiUa61q4662.png

印象比較深刻的是,上面時序圖在FPGA側(cè)觀察時,就能感受到CPU的效率是如何之慢了,CPU完成一次讀寫FPGA內(nèi)部寄存器的操作,對應(yīng)的FPGA常常已經(jīng)過了幾十個時鐘周期,所以效率較低,好在一些改進(jìn)的SoC總線如AXI等還有Burst等類似于DMA之類的連續(xù)讀寫操作模式。

poYBAGO8zNaANYYsAABLMqfBhGo829.png

在搭建仿真環(huán)境時,上圖中的CPU行為就可以簡化為簡單的讀、寫兩個task(如下圖)。 在FPGA側(cè)的電路設(shè)計代碼,則把CPU送過來的信號采用打兩拍等方式同步后進(jìn)行地址譯碼等再交給后續(xù)的模塊使用。

pYYBAGO8zNaAML3TAAIUdPkXU0M597.jpg

目前,這種總線使用的已經(jīng)比較少了。 但在很多專用領(lǐng)域,如航空航天等領(lǐng)域,一些國產(chǎn)的CPU等仍然使用類似的總線時序。 簡單、可靠,穩(wěn)定。

調(diào)試環(huán)境介紹

硬件開發(fā)板:AX7103; CPU開發(fā)板:p2020; 驅(qū)動操作系統(tǒng)Vxworks。

vxworks操作系統(tǒng)下CPU和FPGA的硬件連接關(guān)系如下圖1所示,采用Local Bus總線接口。

poYBAGO8zNaANGIIAAAlNtGHnJ4280.png

圖1 CPU和FPGA的硬件連接

硬件側(cè)沒有開發(fā)板與p2020 Local Bus的50pins直接相對接,而驅(qū)動側(cè)需要開發(fā)、測試Local Bus驅(qū)動,因此需要創(chuàng)造調(diào)試環(huán)境,利用AX7103開發(fā)板的68個引腳,將Local Bus總線相關(guān)的關(guān)鍵引腳(37pins=16pins_addr+16pins_data+3pins_csn+1pin_oen+1pin_ wen)以及中斷信號定義到EX_IO1和EX_IO2上,再根據(jù)p2020原理圖與接插件J5、J4相匹配,調(diào)試環(huán)境如下圖2所示(略丑,只做原型功能驗證)。 圖示J5為p2020接插件(Local Bus總線相關(guān)信號); J4為p2020接插件(硬線中斷、GND信號); EX_IO1為Local Bus總線地址、片選和讀寫使能管腳; EX_IO2為數(shù)據(jù)、中斷管腳。

注意:兩塊開發(fā)板的電平標(biāo)準(zhǔn)要一致,否則不能通過杜邦線直連,另外建議兩塊開發(fā)板杜邦線共地相連。

pYYBAGO8zNaAEeSwAAGvCnPsAdg695.jpg

圖2 硬件板和CPU板實際調(diào)試環(huán)境

概述

前面介紹過FPGA與CPU進(jìn)行數(shù)據(jù)交互時使用的接口是PCIe接口等接口,在TSN或TTE系統(tǒng)里,PCIe接口常常用在端節(jié)點(diǎn)上,Local Bus接口常用于交換機(jī)內(nèi)CPU與FPGA進(jìn)行數(shù)據(jù)交互的接口。 本文只講述Local Bus調(diào)試歷程。 對于硬件側(cè)來說,Local Bus相比于PCI、PCIe開發(fā)簡單些,只需要完成CPU內(nèi)存地址與硬件寄存器、RAM地址的映射,讀/寫使能信號和片選信號的時序,此次Local Bus開發(fā)是硬件側(cè)建立一個Local Bus測試工程配合Local Bus驅(qū)動調(diào)試寄存器讀寫功能以及中斷功能。

2.1.數(shù)據(jù)讀寫操作

關(guān)于寄存器讀寫功能。 Local Bus的簡介網(wǎng)上有參考價值的就是這個鏈接:https://wenku.baidu.com/view/aeca83593b3567ec102d8a80.html?from=search, 因為局部總線簡單,也沒有什么可介紹的,理論部分就見鏈接,我這里就附上關(guān)鍵信號的讀寫時序圖,如下圖3,圖4所示。 同樣的Local Bus接口在不同的CPU處理器地址和數(shù)據(jù)位寬不一致,信號也會有一些不一致,比如:BM3803處理器中地址數(shù)據(jù)線未復(fù)用,數(shù)據(jù)位寬32bit(雙字操作); p2020處理器中數(shù)據(jù)線LAD復(fù)用(通過LALE信號鎖存高11bit的地址,如果只用16bit的地址時可以不接LALE),數(shù)據(jù)位寬16bit(雙字節(jié)操作)。

poYBAGO8zNaAGGh0AAAzBRAn-Sk201.png

pYYBAGO8zNaAZ4kEAAAyiPQNzeE407.png

pYYBAGO8zNaAH4nLAAAxpV32pPw745.png

2.2.中斷功能

中斷的話采用傳統(tǒng)的硬線中斷,p2020原理圖可知,除了irq3已經(jīng)被占用,另外6個硬線中斷(irq0/1/2/4/5/6)可供外設(shè)使用,且均在J4接插件位置處。 由p2020的Datasheet可以知道p2020內(nèi)部中斷有64類,外部中斷有12類,而我們調(diào)試使用的是外部中斷中的irq1。

調(diào)試歷程

3.1.數(shù)據(jù)讀寫操作

調(diào)試伊始,通過p2020的原理圖可以看出CS0和CS1分別給了內(nèi)部的nand_flash以及nor_flash使用,另外輸出3位的片選信號(CS2,CS3和CS4),說明最多可以掛8片局部總線外設(shè),,這些外設(shè)(含*_flash)共用數(shù)據(jù)線、地址線以及讀寫使能。 第一步就得先知道驅(qū)動使用了哪個片選信號,驅(qū)動也是摸索,驅(qū)動代碼寫著只使用了CS4,屏蔽了原來例程中的CS2,通過硬件側(cè)抓cpu_csn[2:0]發(fā)現(xiàn),cpu_csn[0]也會存在低片選狀態(tài),后經(jīng)驅(qū)動修改,先保留使用CS2,這樣驅(qū)動每次讀寫操作時都能觸發(fā)“cpu_csn[2:0]==3’b110”。 CPU板將對地址區(qū)間0xf1000_0000~0xf1000_ffff(128KB)進(jìn)行讀寫操作時會拉低CS2,映射到硬件側(cè)就是對寄存器/RAM的讀寫了。

測試寫功能,在CPU啟動后,驅(qū)動會給內(nèi)存地址0xf100_0118處寫16‘h5555,如下圖5所示,先給出寫地址,然后拉低片選信號,幾乎同時拉低了寫使能信號,這樣數(shù)據(jù)就從CPU寫入到FPGA了。

pYYBAGO8zNaAcflKAAB3zA4twPw038.jpg

圖5 板級寫操作

與寫操作的簡單相比,問題都出在了讀操作,我們也同樣地將AX7103和p2020的讀使能線接好(地址、數(shù)據(jù)和片選信號先接好了),發(fā)現(xiàn)此時CPU不能啟動了,但是將此信號接到未使用的EX_IO上時CPU可以正常啟動,說明讀使能信號干擾了CPU的啟動,可是,cpu_oen和cpu_wen屬性是一樣的,input到FPGA內(nèi)部, 不存在輸出到CPU導(dǎo)致不能啟動,,,查看p2020的datasheet發(fā)現(xiàn)p2020上的LGPL2信號有兩重定義:

1、Local Bus的讀使能cpu_oen;

2、配合LBCTL、LALE信號配置e500核pll時鐘占空比。

懷疑是系統(tǒng)啟動后短時間內(nèi)FPGA側(cè)的cpu_oen電平影響到CPU側(cè)的LGPL2,為此,我們將讀使能改為inout信號,在CPU啟動后的10s內(nèi)為高阻態(tài),起著隔離作用,而10s后p2020的bootrom也加載差不多可以bootup了,然而實際測試下來的結(jié)果是CPU依舊不能正常啟動。

我們把所有的杜邦線完全拔掉,只保留讀使能線的連接,發(fā)現(xiàn)CPU可以正常啟動,此時說明FPGA側(cè)的讀使能電平并沒有影響到CPU側(cè)的啟動,為了具體定位到哪一個信號,我們再次基礎(chǔ)上,把線一點(diǎn)一點(diǎn)接上去,最后接完了讀使能線、寫使能線,片選線以及地址線后,CPU板可以正常bootup而且FPGA能抓到正常的讀寫(只是看不到讀寫數(shù)據(jù))時序, 插上了數(shù)據(jù)線后發(fā)現(xiàn)CPU就不能啟動了,至此,總算定位到問題出在哪了,為此,F(xiàn)PGA側(cè)第一次修改,做簡單的延遲處理,數(shù)據(jù)線一直處于20s的高阻態(tài)(此時CPU可以進(jìn)行Local Bus寫操作),等到bootup后,才使能數(shù)據(jù)的讀出,這樣處理其實很笨拙,但是確實能解決CPU不能正常啟動的問題,可治標(biāo)不治本/允悲/,畢竟刻意的延遲不靠譜。

/**第一次修改/

//rst_done只有20s后才為1,在此之前cpu_data處于高阻

分配cpu_data =((cpu_oen==1'b0)&&(rst_done==1'b1)) ?cpu_rdata : 16'bz;

分配cpu_wdata = cpu_data ;

/*******************************/

靈感一現(xiàn)。。。 FPGA側(cè)在“assign cpu_data =(cpu_oen==1'b0) ? cpu_rdata : 16'bz; ”只是多加了一條約束條件“(rst_done==1'b1)”就能讓CPU啟動,說明在CPU啟動之初,cpu_oen滿足低使能導(dǎo)致cpu_data有輸出干擾到CPU側(cè)的數(shù)據(jù)線,,,本文之初提及p2020內(nèi)部還有nand_flash和nor_flash,在p2020啟動的時候要從這些flash里讀寫數(shù)據(jù),也拉低了cpu_oen ,此時Local Bus讀出的是默認(rèn)值16’h0,而本應(yīng)該從*_flash里讀出一些有用的值被16’h0覆蓋。 為了驗證這種猜想,我將數(shù)據(jù)信號的代碼做第二次修改。

/**第二次修改/

//CPU只有片選CS_4了localbus后FPGA才會將cpu_rdata輸出,否則高阻.

assign cpu_data =((cpu_oen==1'b0)&&(cpu_csn[2]==1'b0)) ?cpu_rdata : 16'bz;

分配cpu_wdata = cpu_data ;

/*******************************/

這樣修改后CPU正常啟動,因為p2020啟動之初,會讀*_flash,雖然拉低了cpu_oen,但是選通并非CS2,故此時FPGA的cpu_data保持高阻,直到片選成功且讀使能低有效才將讀數(shù)據(jù)輸出。 最終調(diào)試正確的板級讀操作時序如下圖6所示。

pYYBAGO8zNaAEeA8AACelsmtoUg765.jpg

圖6 板級讀操作

3.2.硬中斷

p2020處理器的中斷分為外部中斷和內(nèi)部中斷,我們使用的是外部中斷1。 在Vxworks下,處理器外部中斷向量從0開始編號,故分配給外部中斷1的中斷向量為1。 首先,在BSP中將中斷向量與設(shè)備綁定,并注冊到hcfDevice設(shè)備列表中; 然后,在驅(qū)動中初始化并使能中斷,即可收到來自外部中斷1引腳的中斷信號。

需要注意的是,下圖7是p2020datasheet關(guān)于中斷irq的描述:為高時置中斷,為低時不產(chǎn)生中斷,然而實際板級測試發(fā)現(xiàn),irq為低時有效,產(chǎn)生硬線中斷。

pYYBAGO8zNaAM9yFAAFqXSf3wL0242.jpg

圖7 p2020中斷irq描述

當(dāng)驅(qū)動收到中斷后,需要對硬線中斷進(jìn)行復(fù)位,參考PCIe總線中INTa中斷操作(干貨! 實測VxWorks響應(yīng)PCIe中斷的最小時間間隔),我們定義0x110寄存器為中斷寄存器,驅(qū)動往0x110第[15]位寫1再寫0時硬件將硬線中斷信號重新拉回高電平復(fù)位狀態(tài),中斷時序如下圖8所示。

pYYBAGO8zNaAXe_5AAC8FBgab20575.jpg


圖8 中斷時序

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1629

    文章

    21729

    瀏覽量

    602986
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10854

    瀏覽量

    211578
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8575

    瀏覽量

    151015
  • 總線
    +關(guān)注

    關(guān)注

    10

    文章

    2878

    瀏覽量

    88051
  • locale
    +關(guān)注

    關(guān)注

    0

    文章

    11

    瀏覽量

    1173

原文標(biāo)題:FPGA與嵌入式CPU的Local Bus接口調(diào)試

文章出處:【微信號:HXSLH1010101010,微信公眾號:FPGA技術(shù)江湖】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    嵌入式CPU指令Cache的設(shè)計與實現(xiàn)

    針對嵌入式CPU 指令處理速度與存儲器指令存取速度不匹配問題,本文基于FPGA 設(shè)計并實現(xiàn)了可以有效解決這一問題的指令Cache。根據(jù)嵌入式五級流水線
    發(fā)表于 08-05 14:27 ?36次下載

    FPGA嵌入式系統(tǒng)USB接口設(shè)計

    FPGA嵌入式系統(tǒng)USB接口設(shè)計 摘要:設(shè)計基于FPGA的IP-BX電話應(yīng)用系統(tǒng),用于傳統(tǒng)的電話網(wǎng)絡(luò)(PSTN)與PC機(jī)之間的接口連接。
    發(fā)表于 04-03 10:52 ?1915次閱讀
    <b class='flag-5'>FPGA</b>的<b class='flag-5'>嵌入式</b>系統(tǒng)USB<b class='flag-5'>接口</b>設(shè)計

    嵌入式系統(tǒng)的遠(yuǎn)程調(diào)試

      1 基本方法   圖1(a)是傳統(tǒng)的嵌入式調(diào)試方法:主機(jī)PC通過串口與從機(jī)嵌入式系統(tǒng)相連,接收從嵌入式系統(tǒng)發(fā)來的調(diào)試信息并向
    發(fā)表于 08-30 10:23 ?1028次閱讀
    <b class='flag-5'>嵌入式</b>系統(tǒng)的遠(yuǎn)程<b class='flag-5'>調(diào)試</b>

    嵌入式應(yīng)用中的能耗調(diào)試技術(shù)

    嵌入式應(yīng)用中的能耗調(diào)試技術(shù)
    發(fā)表于 02-12 17:28 ?903次閱讀
    <b class='flag-5'>嵌入式</b>應(yīng)用中的能耗<b class='flag-5'>調(diào)試</b>技術(shù)

    嵌入式CPU軟核綜述

    隨著FPGA 和SoPC(System on Programmable Chip)技術(shù)的迅速發(fā)展,基于 FPGA嵌入式系統(tǒng)得到了廣泛的研究和應(yīng)用。該文針對目前比較有影響和特點(diǎn)的4 款嵌入式
    發(fā)表于 06-07 18:35 ?53次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>CPU</b>軟核綜述

    基于FPGA嵌入式CPU的VHDL建模和設(shè)計

    目前,基于FPGA嵌入式CPU核的設(shè)計已成為SOC設(shè)計的重要部分.提出一種嵌入式CPU核的VHDI 行為建模方法,與傳統(tǒng)的基于電路結(jié)構(gòu)建
    發(fā)表于 06-27 16:00 ?75次下載
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>嵌入式</b><b class='flag-5'>CPU</b>的VHDL建模和設(shè)計

    一種帶Cache的嵌入式CPU的設(shè)計與實現(xiàn)

    基于FPGA平臺實現(xiàn)了嵌入式RISC CPU的設(shè)計。根據(jù)項目要求,實現(xiàn)指令集為MIPS CPU指令集的一個子集,分析指令處理過程,構(gòu)建了嵌入式
    發(fā)表于 09-26 14:24 ?1249次閱讀
    一種帶Cache的<b class='flag-5'>嵌入式</b><b class='flag-5'>CPU</b>的設(shè)計與實現(xiàn)

    嵌入式Linux下CAN接口調(diào)試

    CAN(Controller Area Network)總線是嵌入式設(shè)備最為常用的接口之一,常用于汽車以及工業(yè)自動化等嵌入式領(lǐng)域,因此本文就基于嵌入式Linux演示使用CAN總線進(jìn)行通
    發(fā)表于 04-29 16:40 ?3265次閱讀

    使用ARM核設(shè)計實現(xiàn)嵌入式CPU的AHB接口說明

    本文分析了基于芯核的嵌入式CPU 設(shè)計的特點(diǎn),提出了設(shè)計基于ARM 核的嵌入式CPU內(nèi)AHB 接口存在的空洞問題。結(jié)合體系的設(shè)計,給出了通過
    發(fā)表于 10-18 16:13 ?3次下載
    使用ARM核設(shè)計實現(xiàn)<b class='flag-5'>嵌入式</b><b class='flag-5'>CPU</b>的AHB<b class='flag-5'>接口</b>說明

    嵌入式軟件的開發(fā)流程_嵌入式軟件的調(diào)試

    本文首先介紹了嵌入式軟件的發(fā)展,其次闡述了嵌入式軟件的開發(fā)流程,最后介紹了嵌入式軟件的調(diào)試。
    發(fā)表于 08-31 16:02 ?6288次閱讀

    如何實現(xiàn)嵌入式系統(tǒng)遠(yuǎn)程調(diào)試

    嵌入式系統(tǒng)隨著目前科技的發(fā)展,正逐步融入人們的生活中。對于嵌入式系統(tǒng),我們應(yīng)該有所了解。就專業(yè)人員而言,他們對嵌入式系統(tǒng)早已駕輕就熟。為增進(jìn)大家對嵌入式系統(tǒng)的認(rèn)識,本文將對
    的頭像 發(fā)表于 11-22 11:55 ?5335次閱讀
    如何實現(xiàn)<b class='flag-5'>嵌入式</b>系統(tǒng)遠(yuǎn)程<b class='flag-5'>調(diào)試</b>

    嵌入式LINUX系統(tǒng)內(nèi)核和內(nèi)核模塊調(diào)試

    嵌入式LINUX系統(tǒng)內(nèi)核和內(nèi)核模塊調(diào)試(嵌入式開發(fā)和硬件開發(fā))-嵌入式LINUX系統(tǒng)內(nèi)核和內(nèi)核模塊調(diào)試? ? ? ? ? ? ? ? ?
    發(fā)表于 07-30 13:55 ?10次下載
    <b class='flag-5'>嵌入式</b>LINUX系統(tǒng)內(nèi)核和內(nèi)核模塊<b class='flag-5'>調(diào)試</b>

    基于FPGA嵌入式硬核的PCIExpress總線接口設(shè)計與驗證

    基于FPGA嵌入式硬核的PCIExpress總線接口設(shè)計與驗證(嵌入式開發(fā)架構(gòu))-該文檔為基于FPGA
    發(fā)表于 07-30 15:23 ?7次下載
    基于<b class='flag-5'>FPGA</b><b class='flag-5'>嵌入式</b>硬核的PCIExpress總線<b class='flag-5'>接口</b>設(shè)計與驗證

    fpga嵌入式

    FPGA(現(xiàn)場可編程門陣列)不是嵌入式系統(tǒng),但FPGA嵌入式系統(tǒng)中有著重要的應(yīng)用。
    的頭像 發(fā)表于 03-14 17:19 ?2280次閱讀

    嵌入式fpga是什么意思

    嵌入式FPGA是指將FPGA技術(shù)集成到嵌入式系統(tǒng)中的一種解決方案。嵌入式系統(tǒng)是一種為特定應(yīng)用而設(shè)計的計算機(jī)系統(tǒng),它通常包括處理器、內(nèi)存、外設(shè)
    的頭像 發(fā)表于 03-15 14:29 ?1243次閱讀
    RM新时代网站-首页