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

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

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

PCI總線如何與中斷控制器的信號相連?

FPGA設(shè)計論壇 ? 來源:sailing ? 作者:sailing ? 2021-06-21 16:10 ? 次閱讀

PCI總線使用INTA#、INTB#、INTC#和INTD#信號處理器發(fā)出中斷請求。這些中斷請求信號為低電平有效,并與處理器的中斷控制器連接。在PCI體系結(jié)構(gòu)中,這些中斷信號屬于邊帶信號(Sideband Signals),PCI總線規(guī)范并沒有明確規(guī)定在一個處理器系統(tǒng)中如何使用這些信號,因為這些信號對于PCI總線是可選信號。PCI設(shè)備還可以使用MSI機制向處理器提交中斷請求,而不使用這組中斷信號。有關(guān)MSI機制的詳細說明見第8章。

1.1 中斷信號與中斷控制器的連接關(guān)系

不同的處理器使用的中斷控制器不同,如x86處理器使用APIC(Advanced Programmable Interrupt Controller)中斷控制器,而PowerPC處理器使用MPIC(Multiprocessor Interrupt Controller)中斷控制器。這些中斷控制器都提供了一些外部中斷請求引腳IRQ_PINx#。外部設(shè)備,包括PCI設(shè)備可以使用這些引腳向處理器提交中斷請求。

但是PCI總線規(guī)范沒有規(guī)定PCI設(shè)備的INTx信號如何與中斷控制器的IRQ_PINx#信號相連,這為系統(tǒng)軟件的設(shè)計帶來了一定的困難,為此系統(tǒng)軟件使用中斷路由表存放PCI設(shè)備的INTx信號與中斷控制器的連接關(guān)系。在x86處理器系統(tǒng)中,BIOS可以提供這個中斷路由表,而在PowerPC處理器中Firmware也可以提供這個中斷路由表。

在一些簡單的嵌入式處理器系統(tǒng)中,F(xiàn)irmware并沒有提供中斷路由表,此時系統(tǒng)軟件開發(fā)者需要事先了解PCI設(shè)備的INTx信號與中斷控制器的連接關(guān)系。此時外部設(shè)備與中斷控制器的連接關(guān)系由硬件設(shè)計人員指定。

我們假設(shè)在一個處理器系統(tǒng)中,共有3個PCI插槽(分別為PCI插槽A、B和C),這些PCI插槽與中斷控制器的IRQ_PINx引腳(分別為IRQW#、IRQX#、IRQY#和IRQZ#)可以按照圖15所示的拓撲結(jié)構(gòu)進行連接。

采用圖15所示的拓撲結(jié)構(gòu)時,PCI插槽A、B、C的INTA#、INTB#和INTC#信號將分散連接到中斷控制器的IRQW#、IRQX#和IRQY#信號,而所有INTD#信號將共享一個IRQZ#信號。采用這種連接方式時,整個處理器系統(tǒng)使用的中斷請求信號,其負載較為均衡。而且這種連接方式保證了每一個插槽的INTA#信號都與一根獨立的IRQx#信號對應(yīng),從而提高了PCI插槽中斷請求的效率。

在一個處理器系統(tǒng)中,多數(shù)PCI設(shè)備僅使用INTA#信號,很少使用INTB#和INTC#信號,而INTD#信號更是極少使用。在PCI總線中,PCI設(shè)備配置空間的Interrupt Pin寄存器記錄該設(shè)備究竟使用哪個INTx信號,該寄存器的詳細介紹見第2.3.2節(jié)。

1.2 中斷信號與PCI總線的連接關(guān)系

在PCI總線中,INTx信號屬于邊帶信號。所謂邊帶信號是指這些信號在PCI總線中是可選信號,而且只能在一個處理器系統(tǒng)的內(nèi)部使用,并不能離開這個處理器環(huán)境。PCI橋也不會處理這些邊帶信號。這給PCI設(shè)備將中斷請求發(fā)向處理器帶來了一些困難,特別是給掛接在PCI橋之下的PCI設(shè)備進行中斷請求帶來了一些麻煩。

在一些嵌入式處理器系統(tǒng)中,這個問題較易解決。因為嵌入式處理器系統(tǒng)很清楚在當前系統(tǒng)中存在多少個PCI設(shè)備,這些PCI設(shè)備使用了哪些中斷資源。在多數(shù)嵌入式處理器系統(tǒng)中,PCI設(shè)備的數(shù)量小于中斷控制器提供的外部中斷請求引腳數(shù),而且在嵌入式系統(tǒng)中,多數(shù)PCI設(shè)備僅使用INTA#信號提交中斷請求。

在這類處理器系統(tǒng)中,可能并不含有PCI橋,因而PCI設(shè)備的中斷請求信號與中斷控制器的連接關(guān)系較易確定。而在這類處理器系統(tǒng)中,即便存在PCI橋,來自PCI橋之下的PCI設(shè)備的中斷請求也較易處理。

在多數(shù)情況下,嵌入式處理器系統(tǒng)使用的PCI設(shè)備僅使用INTA#信號進行中斷請求,所以只要將這些INTA#信號掛接到中斷控制器的獨立IRQ_PIN#引腳上即可。這樣每一個PCI設(shè)備都可以獨占一個單獨的中斷引腳。

而在x86處理器系統(tǒng)中,這個問題需要BIOS參與來解決。在x86處理器系統(tǒng)中,有許多PCI插槽,處理器系統(tǒng)并不知道在這些插槽上將要掛接哪些PCI設(shè)備,而且也并不知道這些PCI設(shè)備到底需不需要使用所有的INTx#信號線。因此x86處理器系統(tǒng)必須要對各種情況進行處理。

x86處理器系統(tǒng)還經(jīng)常使用PCI橋進行PCI總線擴展,擴展出來的PCI總線還可能掛接一些PCI插槽,這些插槽上INTx#信號仍然需要處理。PCI橋規(guī)范并沒有要求橋片傳遞其下PCI設(shè)備的中斷請求。事實上多數(shù)PCI橋也沒有為下游PCI總線提供中斷引腳INTx#,管理其下游總線的PCI設(shè)備。但是PCI橋規(guī)范推薦使用表13建立下游PCI設(shè)備的INTx信號與上游PCI總線INTx信號之間的映射關(guān)系。

表13 PCI設(shè)備INTx#信號與PCI總線INTx#信號的映射關(guān)系

設(shè)備號 PCI設(shè)備的INTx#信號 PCI總線的INTx#信號
0, 4, 8, 12, 16, 20, 24, 28 INTA# INTA#
INTB# INTB#
INTC# INTC#
INTD# INTD#
1, 5, 9, 13, 17, 21, 25, 29 INTA# INTB#
INTB# INTC#
INTC# INTD#
INTD# INTA#
2, 6, 10, 14, 18, 22, 26, 30 INTA# INTC#
INTB# INTD#
INTC# INTA#
INTD# INTB#
3, 7, 11, 15, 19, 23, 27, 31 INTA# INTD#
INTB# INTA#
INTC# INTB#
INTD# INTC#

我們舉例說明該表的含義。在PCI橋下游總線上的PCI設(shè)備,如果其設(shè)備號為0,那么這個設(shè)備的INTA#引腳將和PCI總線的INTA#引腳相連;如果其設(shè)備號為1,其INTA#引腳將和PCI總線的INTB#引腳相連;如果其設(shè)備號為2,其INTA#引腳將和PCI總線的INTC#引腳相連;如果其設(shè)備號為3,其INTA#引腳將和PCI總線的INTD#引腳相連。

在x86處理器系統(tǒng)中,由BIOS或者APCI表記錄PCI總線的INTA~D#信號與中斷控制器之間的映射關(guān)系,保存這個映射關(guān)系的數(shù)據(jù)結(jié)構(gòu)也被稱為中斷路由表。大多數(shù)BIOS使用表13中的映射關(guān)系,這也是絕大多數(shù)BIOS支持的方式。如果在一個x86處理器系統(tǒng)中,PCI橋下游總線的PCI設(shè)備使用的中斷映射關(guān)系與此不同,那么系統(tǒng)軟件程序員需要改動BIOS中的中斷路由表。

BIOS初始化代碼根據(jù)中斷路由表中的信息,可以將PCI設(shè)備使用的中斷向量號寫入到該PCI設(shè)備配置空間的Interrupt Line register寄存器中,該寄存器將在第2.3.2節(jié)中介紹。

1.3 中斷請求的同步

在PCI總線中,INTx信號是一個異步信號。所謂異步是指INTx信號的傳遞并不與PCI總線的數(shù)據(jù)傳送同步,即INTx信號的傳遞與PCI設(shè)備使用的CLK#信號無關(guān)。這個“異步”信號給系統(tǒng)軟件的設(shè)計帶來了一定的麻煩。

系統(tǒng)軟件程序員需要注意“異步”這種事件,因為幾乎所有“異步”事件都會帶來系統(tǒng)的“同步”問題。以圖11為例,當PCI設(shè)備11使用DMA寫方式,將一組數(shù)據(jù)寫入存儲器時,該設(shè)備在最后一個數(shù)據(jù)離開PCI設(shè)備11的發(fā)送FIFO時,會認為DMA寫操作已經(jīng)完成。此時這個設(shè)備將通過INTx信號,通知處理器DMA寫操作完成。

此時處理器(驅(qū)動程序的中斷服務(wù)例程)需要注意,因為INTx信號是一個異步信號,當處理器收到INTx信號時,并不意味著PCI設(shè)備11已經(jīng)將數(shù)據(jù)寫入存儲器中,因為PCI設(shè)備11的數(shù)據(jù)傳遞需要通過PCI橋1和HOST主橋,最終才能到達存儲器控制器。

而INTx信號是“異步”發(fā)送給處理器的,PCI總線并不知道這個“異步”事件何時被處理。很有可能處理器已經(jīng)接收到INTx信號,開始執(zhí)行中斷處理程序時,該PCI設(shè)備還沒有完全將數(shù)據(jù)寫入存儲器。

因為“PCI設(shè)備向處理器提交中斷請求”與“將數(shù)據(jù)寫入存儲器”分別使用了兩個不同的路徑,處理器系統(tǒng)無法保證哪個信息率先到達。從而在處理器系統(tǒng)中存在“中斷同步”的問題,PCI總線提供了以下兩種方法解決這個同步問題。

(1) PCI設(shè)備保證在數(shù)據(jù)到達目的地之后,再提交中斷請求。

顯然這種方法不僅加大了硬件的開銷,而且也不容易實現(xiàn)。如果PCI設(shè)備采用Posted寫總線事務(wù),PCI設(shè)備無法單純通過硬件邏輯判斷數(shù)據(jù)什么時候?qū)懭氲酱鎯ζ?。此時為了保證數(shù)據(jù)到達目的地后,PCI設(shè)備才能提交中斷請求,PCI設(shè)備需要使用“讀刷新”的方法保證數(shù)據(jù)可以到達目的地,其方法如下。

PCI設(shè)備在提交中斷請求之前,向DMA寫的數(shù)據(jù)區(qū)域發(fā)出一個讀請求,這個讀請求總線事務(wù)將被PCI設(shè)備轉(zhuǎn)換為讀完成總線事務(wù),當PCI設(shè)備收到這個讀完成總線事務(wù)后,再向處理器提交中斷請求。PCI總線的“序”機制保證這個存儲器讀請求,會將DMA數(shù)據(jù)最終寫入存儲器,有關(guān)PCI序的詳細說明見第9.3節(jié)。

PCI總線規(guī)范要求HOST主橋和PCI橋必須保證這種讀操作可以刷新寫操作。但問題是,沒有多少芯片設(shè)計者愿意提供這種機制,因為這將極大地增加他們的設(shè)計難度。除此之外,使用這種方法也將增加中斷請求的延時。

(2) 中斷服務(wù)例程使用“讀刷新”方法。

中斷服務(wù)例程在使用“PCI設(shè)備寫入存儲器”的這些數(shù)據(jù)之前,需要對這個PCI設(shè)備進行讀操作。這個讀操作也可以強制將數(shù)據(jù)最終寫入存儲器,實際上是將數(shù)據(jù)寫到存儲器控制器中。這種方法利用了PCI總線的傳送序規(guī)則,這種方法與第1種方法基本相同,只是使用這種方法使用軟件方式,而第1種方式使用硬件方式。第9.3節(jié)將詳細介紹這個讀操作如何將數(shù)據(jù)刷新到存儲器中。

第2種方法也是絕大多數(shù)處理器系統(tǒng)采用的方法。程序員在書寫中斷服務(wù)例程時,往往都是先讀取PCI設(shè)備的中斷狀態(tài)寄存器,判斷中斷產(chǎn)生原因之后,才對PCI設(shè)備寫入的數(shù)據(jù)進行操作。這個讀取中斷狀態(tài)寄存器的過程,一方面可以獲得設(shè)備的中斷狀態(tài),另一方面是保證DMA寫的數(shù)據(jù)最終到達存儲器。如果驅(qū)動程序不這樣做,就可能產(chǎn)生數(shù)據(jù)完整性問題。產(chǎn)生這種數(shù)據(jù)完整性問題的原因是INTx這個異步信號。

這里也再次提醒系統(tǒng)程序員注意PCI總線的“異步”中斷所帶來的數(shù)據(jù)完整性問題。在一個操作系統(tǒng)中,即便中斷處理程序沒有首先讀取PCI設(shè)備的寄存器,也多半不會出現(xiàn)問題,因為在操作系統(tǒng)中,一個PCI設(shè)備從提交中斷到處理器開始執(zhí)行設(shè)備的中斷服務(wù)例程,所需要的時間較長,處理器系統(tǒng)基本上可以保證此時數(shù)據(jù)已經(jīng)寫入存儲器。

但是如果系統(tǒng)程序員不這樣做,這個驅(qū)動程序依然有Bug存在,盡管這個Bug因為各種機緣巧合,始終不能夠暴露出來,而一旦這些Bug被暴露出來將難以定位。為此系統(tǒng)程序員務(wù)必要重視設(shè)計中出現(xiàn)的每一個實現(xiàn)細節(jié),當然僅憑謹慎小心是遠遠不夠的,因為重視細節(jié)的前提是充分理解這些細節(jié)。

PCI總線V2.2規(guī)范還定義了一種新的中斷機制,即MSI中斷機制。MSI中斷機制采用存儲器寫總線事務(wù)向處理器系統(tǒng)提交中斷請求,其實現(xiàn)機制是向HOST處理器指定的一個存儲器地址寫指定的數(shù)據(jù)。這個存儲器地址一般是中斷控制器規(guī)定的某段存儲器地址范圍,而且數(shù)據(jù)也是事先安排好的數(shù)據(jù),通常含有中斷向量號。

HOST主橋會將MSI這個特殊的存儲器寫總線事務(wù)進一步翻譯為中斷請求,提交給處理器。目前PCIe和PCI-X設(shè)備必須支持MSI中斷機制,但是PCI設(shè)備并不一定都支持MSI中斷機制。

目前MSI中斷機制雖然在PCIe總線上已經(jīng)成為主流,但是在PCI設(shè)備中并不常用。即便是支持MSI中斷機制的PCI設(shè)備,在設(shè)備驅(qū)動程序的實現(xiàn)中也很少使用這種機制。首先PCI設(shè)備具有INTx#信號可以傳遞中斷,而且這種中斷傳送方式在PCI總線中根深蒂固。其次PCI總線是一個共享總線,傳遞MSI中斷需要占用PCI總線的帶寬,需要進行總線仲裁等一系列過程,遠沒有使用INTx#信號線直接。

但是使用MSI中斷機制可以取消PCI總線這個INTx#邊帶信號,可以解決使用INTx中斷機制所帶來的數(shù)據(jù)完整性問題。而更為重要的是,PCI設(shè)備使用MSI中斷機制,向處理器系統(tǒng)提交中斷請求的同時,還可以通知處理器系統(tǒng)產(chǎn)生該中斷的原因,即通過不同中斷向量號表示中斷請求的來源。當處理器系統(tǒng)執(zhí)行中斷服務(wù)例程時,不需要讀取PCI設(shè)備的中斷狀態(tài)寄存器,獲得中斷請求的來源,從而在一定程度上提高了中斷處理的效率。本書將在第8章詳細介紹MSI中斷機制。

責(zé)任編輯:lq6

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

    關(guān)注

    112

    文章

    15924

    瀏覽量

    175583
  • pci總線
    +關(guān)注

    關(guān)注

    1

    文章

    202

    瀏覽量

    31703

原文標題:PCI總線的中斷機制

文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設(shè)計論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    usb主機控制器位于ahp總線上嗎

    關(guān)于“USB主機控制器是否位于AHP總線上”的問題,首先需要明確幾個概念: USB主機控制器 :在USB系統(tǒng)中,主機控制器控制所有USB設(shè)
    的頭像 發(fā)表于 09-25 09:20 ?75次閱讀

    CAN總線控制器是什么意思

    CAN總線控制器(Controller Area Network Bus Controller)是CAN總線通信系統(tǒng)中的核心部件,它扮演著接收、處理并轉(zhuǎn)發(fā)CAN總線數(shù)據(jù)的關(guān)鍵角色。下面
    的頭像 發(fā)表于 09-03 14:16 ?275次閱讀

    車載智能控制器 工程機械控制器 CAN總線控制器 碩博電子 #控制器 #can總線 #國產(chǎn)化替代

    控制器總線
    長沙碩博電子科技股份有限公司
    發(fā)布于 :2024年08月29日 10:43:57

    PCI1520/PCI1520I GHK/ZHK/PDV PC卡控制器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《PCI1520/PCI1520I GHK/ZHK/PDV PC卡控制器數(shù)據(jù)表.pdf》資料免費下載
    發(fā)表于 06-28 11:43 ?0次下載
    <b class='flag-5'>PCI</b>1520/<b class='flag-5'>PCI</b>1520I GHK/ZHK/PDV PC卡<b class='flag-5'>控制器</b>數(shù)據(jù)表

    移動機械控制器 車載智能控制器 CAN總線控制器

    控制器機械
    長沙碩博電子科技股份有限公司
    發(fā)布于 :2024年06月13日 17:02:51

    PCI總線PCB設(shè)計丨實現(xiàn)高效外圍部件互連的關(guān)鍵要素

    信號,提供3.3伏特的電源電壓。 PAR 奇偶校驗信號,用于奇偶校驗控制。 三、PCI總線的PCB設(shè)計 1、差分對采用25/14的過孔,并
    發(fā)表于 06-07 18:37

    總線控制器驅(qū)動是哪個驅(qū)動 總線驅(qū)動的作用

    數(shù)據(jù)能夠在各個設(shè)備之間傳遞。總線驅(qū)動通常包括線路驅(qū)動電路和電平轉(zhuǎn)換電路,用于將傳輸?shù)?b class='flag-5'>信號從一個電壓電平轉(zhuǎn)換為另一個電壓電平,以適應(yīng)不同設(shè)備之間的電信號傳輸要求。
    的頭像 發(fā)表于 01-24 13:59 ?1685次閱讀

    arm中斷是怎么實現(xiàn)的

    ARM中斷的實現(xiàn)是通過中斷控制器和異常模式實現(xiàn)的。ARM處理通過中斷控制器來接收和處理外部的中斷信號
    的頭像 發(fā)表于 01-05 15:18 ?653次閱讀

    基于FPGA與PCI總線的實時控制計算機的設(shè)計與實現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《基于FPGA與PCI總線的實時控制計算機的設(shè)計與實現(xiàn).pdf》資料免費下載
    發(fā)表于 10-25 11:04 ?0次下載
    基于FPGA與<b class='flag-5'>PCI</b><b class='flag-5'>總線</b>的實時<b class='flag-5'>控制</b>計算機的設(shè)計與實現(xiàn)

    STM32學(xué)習(xí)筆記一外部中斷

    STM32 的每個 IO 都可以作為外部中斷中斷輸入口。STM32F103 的中斷控制器支持 19 個外部中斷/事件請求。
    的頭像 發(fā)表于 10-24 14:12 ?1183次閱讀
    STM32學(xué)習(xí)筆記一外部<b class='flag-5'>中斷</b>

    基于FGPA的MVB總線控制器的研究

    電子發(fā)燒友網(wǎng)站提供《基于FGPA的MVB總線控制器的研究.pdf》資料免費下載
    發(fā)表于 10-13 10:50 ?2次下載
    基于FGPA的MVB<b class='flag-5'>總線</b><b class='flag-5'>控制器</b>的研究

    CLINT中斷控制器優(yōu)先級和搶占

    提供軟件、定時和外部中斷。CLINT 塊還保存與軟件和定時中斷相關(guān)的內(nèi)存映射控制和狀態(tài)寄存
    的頭像 發(fā)表于 10-08 09:30 ?610次閱讀
    CLINT<b class='flag-5'>中斷控制器</b>優(yōu)先級和搶占

    PLIC平臺級中斷控制器介紹

    平臺級中斷控制器(PLIC) PLIC:Platform-Level Interrupt Controller. 實際上,除了CLINT管理的軟件中斷和定時中斷,其他的
    的頭像 發(fā)表于 10-07 17:53 ?1002次閱讀
    PLIC平臺級<b class='flag-5'>中斷控制器</b>介紹

    基于PCI總線的雷達視頻高速數(shù)據(jù)采集接口設(shè)計?

    點擊上方 藍字 關(guān)注我們 本文提出了一種新的包括PCI9054單周期讀、寫和存儲映射傳輸?shù)脑O(shè)計,并討論了通用PCI總線高速數(shù)據(jù)采集卡的實現(xiàn)方案。
    的頭像 發(fā)表于 10-07 14:55 ?561次閱讀

    AXI中斷控制器(INTC)v4.1簡介

    LogiCORE? IP AXI中斷控制器(INTC)內(nèi)核接收來自外圍設(shè)備的多個中斷輸入,并將它們合并到或中斷輸出到系統(tǒng)處理。
    的頭像 發(fā)表于 10-07 11:45 ?1335次閱讀
    AXI<b class='flag-5'>中斷控制器</b>(INTC)v4.1簡介