本發(fā)明涉及芯片設(shè)計領(lǐng)域,尤其涉及一種外圍總線APB總線橋。
背景技術(shù):
片上集成系統(tǒng)(SoC)一般包括多個功能模塊,如CPU(處理器)、DMA(Direct Memory Access,存儲器直接訪問)、GPU(Graphic Processing Unit,圖形處理器)、高速接口模塊、多媒體模塊等。各個功能模塊都可以經(jīng)由CPU訪問修改其內(nèi)部的控制寄存器來控制模塊乃至整個芯片系統(tǒng)的運行。
圖1為現(xiàn)有技術(shù)中的SoC系統(tǒng)的典型系統(tǒng)架構(gòu)示意圖,參見圖1所示,SoC系統(tǒng)涉及總線互聯(lián)的部分,包括主設(shè)備,如CPU、DMA、或者其他端口總線為AXI(Advanced eXtensible Interface)或者AHB(Advanced High performance Bus)等協(xié)議類型的主設(shè)備,主設(shè)備的個數(shù)取決于不同芯片的應(yīng)用需求;從設(shè)備,如端口總線為AXI總線、AHB或者外圍總線(APB,Advanced Peripheral Bus)等協(xié)議類型的從設(shè)備,從設(shè)備的個數(shù)也取決于不同芯片的應(yīng)用需求;互聯(lián)矩陣,實現(xiàn)對主設(shè)備的讀/寫請求的路由仲裁、總線協(xié)議轉(zhuǎn)換、總線位寬轉(zhuǎn)換、跨時鐘處理等功能。一般來說,CPU訪問配置從設(shè)備的控制寄存器時,不需要太大的數(shù)據(jù)吞吐量,只需通過APB總線訪問即可,即此時的從設(shè)備對應(yīng)圖1中的APB從設(shè)備。
圖2為現(xiàn)有技術(shù)中的基于互聯(lián)矩陣的總線架構(gòu)示意圖,參見圖2所示,互聯(lián)矩陣包括預(yù)處理模塊(pre_process)、路由模塊(router)以及后處理模塊(post_process),其中,預(yù)處理模塊對外與主設(shè)備相連,完成總線協(xié)議轉(zhuǎn)換、位寬轉(zhuǎn)換等功能,通過私有協(xié)議(PP,Private Protocol)與路由模塊相連;后處理模塊對外與從設(shè)備相連,完成總線協(xié)議轉(zhuǎn)換、位寬轉(zhuǎn)換等功能,同樣,通過 私有協(xié)議(PP,Private Protocol)與路由模塊相連。由于很多應(yīng)用的高帶寬要求,AXI、AHB協(xié)議工作的時鐘頻率越來越高,同樣地要求Router的工作頻率也越來越高,以滿足越來越大的數(shù)據(jù)吞吐量需求。但需要特別指出的是,許多從設(shè)備的吞吐量卻不大。比如,CPU通過從設(shè)備的APB總線接口訪問其控制寄存器時,所產(chǎn)生的吞吐量非常小,需要的帶寬并不大,而且對于控制寄存器的訪問延時也一般沒有特別的需求。因此,APB總線的時鐘頻率相對來說都是比較小的。圖3為現(xiàn)有技術(shù)中的總線互聯(lián)矩陣架構(gòu)及時鐘示意圖,參見圖3所示,圖3是在圖2的基礎(chǔ)上添加了時鐘以及一個APB從設(shè)備,其中,各個router_clk可以相同,也可以不同,pclk為APB總線時鐘,一般情況下,router_clk的頻率比pclk的頻率大很多,因此,后處理模塊需要完成時鐘轉(zhuǎn)換和協(xié)議轉(zhuǎn)換,但以往比較注重異步時鐘之間的跨時鐘域處理,并不存在一種APB總線在同步時鐘之間轉(zhuǎn)換的處理方案。
技術(shù)實現(xiàn)要素:
有鑒于此,本發(fā)明實施例期望提供一種外圍總線APB總線橋,以實現(xiàn)在時鐘頻率比為任意整數(shù)的兩個同步時鐘之間進(jìn)行轉(zhuǎn)換,提高了前端的設(shè)計效率。
為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實現(xiàn)的:
本發(fā)明實施例提供一種外圍總線APB總線橋,所述APB總線橋設(shè)置在互聯(lián)矩陣與從設(shè)備之間,主設(shè)備能夠通過所述互聯(lián)矩陣上的工作在第一時鐘的APB接口經(jīng)由所述APB總線橋?qū)ぷ髟诘诙r鐘上的所述從設(shè)備進(jìn)行讀/寫操作,所述第一時鐘與所述第二時鐘為同步時鐘,且頻率比為N,N為正整數(shù);所述APB總線橋包括:APB請求緩存模塊、APB請求輸出模塊、APB響應(yīng)緩存模塊及APB響應(yīng)輸出模塊;其中,所述APB請求緩存模塊,用于基于時鐘使能信號,分別對輸入的第一時鐘側(cè)的APB讀/寫請求信號、第一時鐘側(cè)的片選信號及第一時鐘側(cè)的使能信號在第一時鐘上進(jìn)行緩存,輸出緩存后的第一時鐘側(cè)的APB讀/寫請求信號、緩存后的第一時鐘側(cè)的片選信號及緩存后的第一時鐘側(cè)的使能信號,其中,所述第一時鐘側(cè)的APB讀/寫請求信號、所述第一 時鐘側(cè)的片選信號及所述第一時鐘側(cè)的使能信號是由所述互聯(lián)矩陣傳遞過來的,所述時鐘使能信號的置起間隔為N個第一時鐘周期,且有效時間為一個第一時鐘周期,用于控制所述APB請求緩存模塊與所述APB請求輸出模塊之間的寄存器到寄存器的時序路徑長度保持為一個第二時鐘周期;所述APB請求輸出模塊,用于分別對輸入的所述緩存后的第一時鐘側(cè)的APB讀/寫請求信號、所述緩存后的第一時鐘側(cè)的片選信號及所述緩存后的第一時鐘側(cè)的使能信號在第二時鐘上進(jìn)行緩存,輸出第二時鐘側(cè)的APB讀/寫請求信號、第二時鐘側(cè)的片選信號及第二時鐘側(cè)的使能信號,其中,所述第二時鐘側(cè)的APB讀/寫請求信號用于指示所述從設(shè)備進(jìn)行讀/寫操作;所述APB響應(yīng)緩存模塊,用于對輸入的第二時鐘側(cè)的準(zhǔn)備指示信號在所述第二時鐘上進(jìn)行緩存,輸出緩存后的第二時鐘側(cè)的準(zhǔn)備指示信號;所述APB響應(yīng)輸出模塊,用于對輸入的所述緩存后的第二時鐘側(cè)的準(zhǔn)備指示信號在所述第一時鐘上進(jìn)行緩存,輸出第一時鐘側(cè)的準(zhǔn)備指示信號,其中,所述第一時鐘側(cè)的準(zhǔn)備指示信號用于指示所述主設(shè)備完成對所述從設(shè)備的讀/寫操作。
在上述方案中,所述APB請求緩存模塊具有空閑態(tài),建立態(tài)和傳輸態(tài);所述APB請求緩存模塊,具體用于在自身處于所述空閑態(tài),且所述時鐘使能信號及所述第一時鐘側(cè)的片選信號均置1時,由所述空閑態(tài)進(jìn)入所述建立態(tài),對所述第一時鐘側(cè)的片選信號及所述第一時鐘側(cè)的讀/寫請求信號進(jìn)行緩存,輸出所述緩存后的第一時鐘側(cè)的片選信號及所述緩存后的第一時鐘側(cè)的APB讀/寫請求信號;在一個第一時鐘周期后,進(jìn)入所述傳輸態(tài),對所述第一時鐘側(cè)的使能信號進(jìn)行緩存,輸出所述緩存后的第一時鐘側(cè)的使能信號,直至所述APB響應(yīng)輸出模塊輸出的所述第一時鐘側(cè)準(zhǔn)備指示信號置起,將所述緩存后的第一時鐘側(cè)的片選信號及所述緩存后的第一時鐘側(cè)的使能信號置0,由所述傳輸態(tài)進(jìn)入所述空閑態(tài)。
在上述方案中,所述APB請求輸出模塊具有空閑態(tài)、建立態(tài)、傳輸態(tài)及結(jié)束態(tài);所述APB請求輸出模塊,具體用于在自身處于所述空閑態(tài)時,對所述緩存后的第一時鐘側(cè)的APB讀/寫請求信號及所述緩存后的第一時鐘側(cè)的片選信 號在所述第二時鐘上進(jìn)行采樣緩存,獲得所述第二時鐘側(cè)的片選信號及所述第二時鐘側(cè)的APB讀/寫請求信號,并將所述第二時鐘側(cè)的片選信號及APB讀/寫請求信號輸出給所述從設(shè)備;當(dāng)所述第二時鐘側(cè)的片選信號置1時,進(jìn)入所述建立態(tài),對所述緩存后的第一時鐘側(cè)的使能信號在所述第二時鐘上采樣緩存,獲得所述第二時鐘側(cè)的使能信號,并進(jìn)入所述傳輸態(tài);當(dāng)?shù)诙r鐘側(cè)的APB傳輸結(jié)束標(biāo)識置起時,將所述第二時鐘側(cè)的片選信號及所述第二時鐘側(cè)的使能信號置0,進(jìn)入所述結(jié)束態(tài)。
在上述方案中,所述APB請求輸出模塊,還用于在所述第二時鐘側(cè)的APB傳輸結(jié)束標(biāo)識撤銷時,進(jìn)入所述空閑態(tài),對所述緩存后的第一時鐘側(cè)的APB讀/寫請求信號、所述緩存后的第一時鐘側(cè)的片選信號在所述第二時鐘上進(jìn)行采樣緩存。
在上述方案中,所述APB總線橋還包括:第二時鐘側(cè)的APB傳輸結(jié)束標(biāo)識生成模塊,用于生成所述第二時鐘側(cè)的APB傳輸結(jié)束標(biāo)識,以控制所述APB請求輸出模塊的邏輯狀態(tài)的跳轉(zhuǎn)。
在上述方案中,所述APB響應(yīng)緩存模塊,具體用于將所述從設(shè)備輸入的將所述第二時鐘側(cè)的準(zhǔn)備指示信號與所述第二時鐘側(cè)的使能信號進(jìn)行邏輯運算后在所述第二時鐘上緩存兩拍,獲得并輸出所述緩存后的第二時鐘側(cè)準(zhǔn)備指示信號。
在上述方案中,所述APB響應(yīng)緩存模塊,還用于對所述緩存后的第二時鐘側(cè)準(zhǔn)備指示信號在所述第一時鐘上進(jìn)行采樣,并將采樣后的信號取反與所述緩存后的第二時鐘側(cè)準(zhǔn)備指示信號做邏輯與運算,得到第一時鐘上的APB傳輸響應(yīng)標(biāo)識,其中,所述第一時鐘上的APB傳輸響應(yīng)標(biāo)識持續(xù)有效時間為一個第一時鐘周期。
在上述方案中,所述APB響應(yīng)輸出模塊,具體用于當(dāng)?shù)谝粫r鐘上的APB傳輸響應(yīng)標(biāo)識置起時,對輸入的所述緩存后的第二時鐘側(cè)準(zhǔn)備指示信號在所述第一時鐘上進(jìn)行采樣,獲得并輸出所述第一時鐘側(cè)的準(zhǔn)備指示信號。
在上述方案中,所述APB響應(yīng)輸出模塊,還用于在所述第一時鐘側(cè)的準(zhǔn)備 指示信號置起后的下一個第一時鐘周期時,將所述第一時鐘側(cè)的準(zhǔn)備指示信號置0。
在上述方案中,所述APB響應(yīng)緩存模塊,還用于對輸入的第二時鐘側(cè)的錯誤指示信號在所述第二時鐘上緩存兩拍,獲得并輸出緩存后的第二時鐘側(cè)的錯誤指示信號;所述APB響應(yīng)輸出模塊,還用于當(dāng)?shù)谝粫r鐘上的APB傳輸響應(yīng)標(biāo)識置起時,對所述緩存后的第二時鐘側(cè)的錯誤指示信號在所述第一時鐘上采樣,獲得并輸出第一時鐘側(cè)的錯誤指示信號。
本發(fā)明實施例提供了一種外圍總線APB總線橋,設(shè)置在互聯(lián)矩陣與從設(shè)備之間,第一時鐘與第二時鐘為同步時鐘,且頻率比為正整數(shù)N,當(dāng)主設(shè)備通過互聯(lián)矩陣上工作在第一時鐘的APB接口經(jīng)由APB總線橋?qū)ぷ髟诘诙r鐘上的從設(shè)備進(jìn)行讀/寫操作時,由于設(shè)置了置起間隔為N個第一時鐘周期,有效時間為1個第一時鐘周期的時鐘使能信號,APB總線橋中的APB請求緩存模塊與APB請求輸出模塊之間的寄存器到寄存器的時序路徑長度保持為一個第二時鐘周期,即N個第一時鐘周期,這樣,該時序路徑就為多周期路徑,降低了后端的實現(xiàn)難度,且使得APB總線橋能夠在時鐘頻率比為任意整數(shù)的兩個同步時鐘之間進(jìn)行轉(zhuǎn)換,提高了前端的設(shè)計效率。
附圖說明
圖1為現(xiàn)有技術(shù)中的SoC芯片系統(tǒng)架構(gòu)示意圖;
圖2為現(xiàn)有技術(shù)中的總線互聯(lián)矩陣架構(gòu)示意圖;
圖3為現(xiàn)有技術(shù)中的總線互聯(lián)矩陣架構(gòu)及時鐘示意圖;
圖4為本發(fā)明實施例中的具有APB總線橋的互聯(lián)矩陣架構(gòu)及時鐘示意圖;
圖5為本發(fā)明實施例中的APB總線橋的接口示意圖;
圖6為本發(fā)明實施例中的pclk_m與pclk_s頻率比為4:1時的時序圖;
圖7為本發(fā)明實施例中的pclk_m與pclk_s頻率比為1:1時的時序圖;
圖8為本發(fā)明實施例中的APB總線橋內(nèi)部結(jié)構(gòu)示意圖;
圖9為本發(fā)明實施例中的APB總線的寫時序圖;
圖10為本發(fā)明實施例中的APB總線的讀時序圖;
圖11為本發(fā)明實施例中的APB總線橋的結(jié)構(gòu)示意圖;
圖12為本發(fā)明實施例中的pclk_m與pclk_s頻率比為4:1時的APB總線橋的讀時序圖;
圖13為本發(fā)明實施例中的pclk_m與pclk_s頻率比為4:1時的APB總線橋的寫時序圖;
圖14為本發(fā)明實施例中的pclk_m與pclk_s頻率比為1:1時的APB總線橋的讀時序圖;
圖15為本發(fā)明實施例中的pclk_m與pclk_s頻率比為1:1時的APB總線橋的寫時序圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述。
本發(fā)明實施例提供一種互聯(lián)矩陣。圖4為本發(fā)明實施例中的具有APB總線橋的互聯(lián)矩陣架構(gòu)及時鐘示意圖,參見圖4所示,該互聯(lián)矩陣中包括:預(yù)處理模塊41、路由模塊42、后處理模塊43以及APB總線橋44,預(yù)處理模塊41通過AXI、AHB等總線與主設(shè)備連接,路由模塊42通過PP協(xié)議分別與預(yù)處理模塊42以及后處理模塊43連接,后處理模塊43與APB總線橋44通過APB總線連接,APB總線橋44通過APB總線與從設(shè)備連接。
其中,工作在任意時鐘上的主設(shè)備能夠通過互聯(lián)矩陣上工作在第一時鐘上的APB接口經(jīng)由APB總線橋?qū)ぷ髟诘诙r鐘上的從設(shè)備進(jìn)行讀/寫操作,第一時鐘與第二時鐘為同步時鐘,且頻率比為N:1,也就是說,N個第一時鐘周期等于一個第二時鐘周期,第一時鐘為快時鐘,第二時鐘為慢時鐘。
下面具體介紹上述互聯(lián)矩陣中的APB總線橋。
圖5為本發(fā)明實施例中的APB總線橋的接口示意圖,參見圖5所示,該APB總線橋的接口包括第一時鐘信號pclk_m,第二時鐘信號pclk_s。
該APB總線橋在第一時鐘上存在以下控制信號:時鐘使能信號(pclk_en)、第一時鐘側(cè)的片選信號(psel_m)、第一時鐘側(cè)的使能信號(penable_m)、第一時鐘側(cè)的讀/寫請求信號(pwrite_m)、第一時鐘側(cè)的準(zhǔn)備指示信號(pready_m);以及存在以下數(shù)據(jù)信號:第一時鐘側(cè)的地址信號(paddr_m)、第一時鐘側(cè)的寫數(shù)據(jù)信號(pwdata_m)、第一時鐘側(cè)的讀數(shù)據(jù)信號(prdata_m)。
在第二時鐘上存在以下控制信號:第二時鐘側(cè)的片選信號(psel_s)、第二時鐘側(cè)的使能信號(penable_s)、第二時鐘側(cè)的讀/寫請求信號(pwrite_s)、第二時鐘側(cè)的準(zhǔn)備指示信號(pready_s);以及存在以下數(shù)據(jù)信號:第二時鐘側(cè)的地址信號(paddr_s)、第二時鐘側(cè)的寫數(shù)據(jù)信號(pwdata_s)、第二時鐘側(cè)的讀數(shù)據(jù)信號(prdata_s)。
需要說明的是,為了使APB總線能夠在時鐘頻率比為任意整數(shù)的兩個同步時轉(zhuǎn)換,pclk_en可將置起時間間隔設(shè)置為N個第一時鐘周期,且有效時間為1個第一時鐘周期。比如,當(dāng)pclk_m與pclk_s的頻率比為4:1時,pclk_en、pclk_m、pclk_s三者之間的時序關(guān)系如圖6所示;當(dāng)pclk_m與pclk_s的頻率比為1:1時,pclk_en、pclk_m、pclk_s三者之間的時序關(guān)系如圖7所示。當(dāng)然,pclk_en、pclk_m、pclk_s三者之間還可以存在其他時序關(guān)系,只要pclk_m與pclk_s的頻率比為N,pclk_en的置起間隔為一個pclk_s周期,有效時間為一個pclk_m周期,且pclk_en置起時間較時鐘pclk_s用于采樣的時鐘沿早一個pclk_m周期即可,本發(fā)明不做具體限定。
圖8為本發(fā)明實施例中的APB總線橋內(nèi)部結(jié)構(gòu)示意圖,參見圖8所示,該APB總線橋包括:APB請求緩存模塊81、APB請求輸出模塊82、APB響應(yīng)緩存模塊83及APB響應(yīng)輸出模塊84;
其中,APB請求緩存模塊81,用于基于pclk_en,分別對輸入的pwrite_m、psel_m以及penable_m在第一時鐘上進(jìn)行緩存,輸出緩存后的第一時鐘側(cè)的APB讀/寫請求信號(pwrite_m_dly)、緩存后的第一時鐘側(cè)的片選信號(psel_m_dly)以及緩存后的第一時鐘側(cè)的使能信號(penable_m_dly);
APB請求輸出模塊82,用于分別對輸入的pwrite_m_dly、psel_m_dly以及 penable_m_dly在第二時鐘上進(jìn)行采樣緩存,輸出pwrite_s、psel_s以及penable_s,其中,pwrite_s用于指示從設(shè)備進(jìn)行讀/寫操作;
APB響應(yīng)緩存模塊83,用于對輸入pready_s在第二時鐘上進(jìn)行緩存,輸出緩存后的第二時鐘側(cè)的準(zhǔn)備指示信號(pready_s_dly);
APB響應(yīng)輸出模塊84,用于對輸入的pready_s_dly在第一時鐘上進(jìn)行采樣緩存,輸出pready_m,其中,pready_m用于指示主設(shè)備完成對從設(shè)備的讀/寫操作。
下面對于上述各個模塊進(jìn)行分別介紹。
首先,介紹APB請求緩存模塊。
APB請求緩存模塊具有空閑態(tài),建立態(tài)和傳輸態(tài)。APB請求緩存模塊初始處于空閑態(tài),當(dāng)pclk_en以及psel_m均置1時,APB請求緩存模塊由空閑態(tài)進(jìn)入建立態(tài),對pwrite_m和psel_m進(jìn)行緩存,輸出pwrite_m_dly和psel_m_dly;在1個pclk_m周期后,APB請求緩存模塊進(jìn)入傳輸態(tài),對penable_m進(jìn)行緩存,輸出penable_m_dly,直至APB響應(yīng)輸出模塊輸出的pready_m置起,結(jié)束對psel_m和penable_m的緩存,將psel_m_dly以及penable_m_dly置0,此時,APB請求緩存模塊由傳輸態(tài)進(jìn)入空閑態(tài)。
其次,介紹APB請求輸出模塊。
APB請求輸出模塊具有空閑態(tài)、建立態(tài)、傳輸態(tài)以及結(jié)束態(tài)。當(dāng)APB請求輸出模塊處于空閑態(tài)時,APB請求輸出模塊對pwrite_m_dly以及psel_m_dly在第二時鐘上進(jìn)行采樣緩存,也就是對上述兩個信號緩存一個第二時鐘周期,獲得pwrite_s和psel_s,并輸出給從設(shè)備,當(dāng)psel_s為1時,表示從設(shè)備開始接收讀/寫請求,此時,APB請求輸出模塊進(jìn)入建立態(tài),并對penable_m_dly在第二時鐘上采樣,同樣是對penable_m_dly緩存一個第二時鐘周期,獲得并輸出penable_s,此時,APB請求輸出模塊進(jìn)入傳輸態(tài)。在APB請求輸出模塊處于傳輸態(tài)的過程中,若輸入的第二時鐘側(cè)的APB傳輸結(jié)束標(biāo)識(s_transfer_end)置起時,結(jié)束對psel_m_dly及penable_m_dly的采樣,將psel_s以及penable_s置0,同時APB請求輸出模塊進(jìn)入結(jié)束態(tài)。
進(jìn)一步地,APB請求輸出模塊,還用于在s_transfer_end撤銷時,進(jìn)入空閑態(tài),對psel_m_dly、pwrite_m_dly在第二時鐘上進(jìn)行采樣。
為了保證APB總線橋處理的正確性,s_transfer_end需滿足以下條件:1、pready_m的撤銷時間不晚于s_trans_end的撤銷時間,即APB請求緩存模塊跳轉(zhuǎn)到空閑態(tài)的時間不得晚于APB請求輸出模塊跳轉(zhuǎn)到空閑態(tài)的時間,這樣就可以保證APB請求緩存模塊完成一次APB傳輸請求傳遞(完成從空閑態(tài)、建立態(tài)、傳輸態(tài)再到空閑態(tài)的跳轉(zhuǎn))時,APB請求輸出模塊也只能完成一次APB傳輸請求的輸出(完成從空閑態(tài)、建立態(tài)、傳輸態(tài)再到結(jié)束態(tài)的跳轉(zhuǎn));2、pready_m的置起時間不早于s_trans_end的置起時間,這樣就可以保證APB請求緩存模塊跳轉(zhuǎn)到空閑態(tài)之前,APB請求輸出模塊已跳轉(zhuǎn)到結(jié)束態(tài),即APB請求緩存模塊開始下一次APB傳輸請求的傳遞時,APB請求輸出模塊已完成當(dāng)次APB傳輸請求的輸出。
在另一實施例中,上述APB總線橋還可以包括:第二時鐘側(cè)的APB傳輸結(jié)束標(biāo)識生成模塊,用于生成s_transfer_end,以控制APB請求輸出模塊的邏輯狀態(tài)的跳轉(zhuǎn)。
需要說明的是,在實際應(yīng)用中,如圖9所示,當(dāng)pwrite_m置1時,表明主設(shè)備對從設(shè)備進(jìn)行寫請求,那么,互聯(lián)矩陣在傳遞上述控制信號的同時還會向APB請求緩存模塊傳遞需要寫入從設(shè)備的數(shù)據(jù)信號,即第一時鐘側(cè)的地址信號(paddr_m)和第一時鐘側(cè)的寫數(shù)據(jù)信號(pwdata_m)。與上述控制信號一樣,APB請求緩存模塊對paddr_m和pwdata_m在第一時鐘上進(jìn)行緩存,獲得paddr_m_dly和pwdata_m_dly,并輸出給APB請求輸出模塊;進(jìn)一步地,與上述控制信號一樣,APB請求輸出模塊對paddr_m_dly和pwdata_m_dly在第二時鐘上進(jìn)行采樣緩存,獲得paddr_s和pwdata_s,并向從設(shè)備輸出,從設(shè)備接收到這些數(shù)據(jù)信號后,根據(jù)paddr_s將pwdata_s寫入相應(yīng)的存儲單元;如圖10所示,當(dāng)pwrite_m置0時,表明主設(shè)備對從設(shè)備進(jìn)行讀請求,那么,互聯(lián)矩陣在傳遞上述控制信號的同時,僅傳遞paddr_m,以告知從設(shè)備將要讀取數(shù)據(jù)的存儲位置。
再次,介紹APB響應(yīng)緩存模塊。
APB響應(yīng)緩存模塊與從設(shè)備連接,能夠由從設(shè)備輸入pready_s,同時還與APB請求輸出模塊連接,能夠由APB請求輸出模塊輸入penable_s。將pready_s與penable_s進(jìn)行邏輯與運算后,在第二時鐘上緩存兩拍,這里所說的緩存兩拍,就是在第二時鐘上打兩拍(Re-timing),也就是在第二時鐘上延時兩個第二時鐘周期,獲得pready_s_dly,并輸出。
進(jìn)一步地,APB響應(yīng)緩存模塊還可以對pready_s_dly在第一時鐘上進(jìn)行采樣緩存,也就是延時一個第一時鐘周期,并將采樣后的信號取反與pready_s_dly做邏輯與運算,得到transfer_rsp,這里所說的transfer_rsp持續(xù)有效時間為一個第一時鐘周期。
在實際應(yīng)用中,APB響應(yīng)緩存模塊還可以與第二時鐘側(cè)的APB傳輸結(jié)束標(biāo)識生成模塊連接,當(dāng)pready_s與penable_s進(jìn)行邏輯與運算之后,且在打拍之前,將與運算的結(jié)果輸出給第二時鐘側(cè)的APB傳輸結(jié)束標(biāo)識生成模塊,由該模塊生成上述s_transfer_end。
最后,介紹APB響應(yīng)輸出模塊。
若transfer_rsp置起,APB響應(yīng)輸出模塊則對輸入的pready_s_dly在第一時鐘上進(jìn)行采樣,即延時一個第一時鐘周期,獲得pready_m,然后,將pready_m輸出給互聯(lián)矩陣,以告知互聯(lián)矩陣讀/寫操作已完成,同時,還將pready_m輸出APB請求緩存模塊,以控制APB請求緩存模塊進(jìn)入空閑態(tài)。
進(jìn)一步地,在pready_m置起后的下一個第一時鐘周期時,將pready_m置0。
需要說明的是,在實際應(yīng)用中,如圖9所示,當(dāng)pwrite_m置1時,表明主設(shè)備對從設(shè)備進(jìn)行寫請求,那么,從設(shè)備在將互聯(lián)矩陣傳遞來的需要寫入的數(shù)據(jù)寫入以后,僅向APB響應(yīng)緩存模塊輸入pready_s,表明寫操作已完成;而如圖10所示,當(dāng)pwrite_m置0時,表明主設(shè)備對從設(shè)備進(jìn)行讀請求,從設(shè)備除了向APB響應(yīng)緩存模塊輸入pready_s以外,還會輸入第二時鐘側(cè)的讀數(shù)據(jù)信號(prdata_s),APB響應(yīng)緩存模塊對prdata_s在第二時鐘上緩存兩拍,獲得 prdata_s_dly,并輸出給APB響應(yīng)輸出模塊,當(dāng)transfer_rsp置起時,APB響應(yīng)輸出模塊在第一時鐘上對prdata_s_dly進(jìn)行采樣,獲得prdata_m,輸出給互聯(lián)矩陣,完成讀操作。
在另一實施例中,為了確保整個讀/寫過程的可靠性,在從設(shè)備側(cè)還設(shè)置有用于報錯的信號,即還存在第二時鐘側(cè)的錯誤指示信號(pslverr_s),那么,當(dāng)從設(shè)備在讀/寫過程中出錯后,從設(shè)備向APB響應(yīng)緩存模塊輸入pslverr_s,APB響應(yīng)緩存模塊在第二時鐘上對該信號緩存兩拍,獲得pslverr_s_dly,并輸出APB響應(yīng)輸出模塊,APB響應(yīng)輸出模塊在transfer_rsp置起時,對該信號在第一時鐘上進(jìn)行采樣,獲得第一時鐘側(cè)的錯誤指示信號(pslverr_m),并輸出給互聯(lián)矩陣,以向主設(shè)備報錯。
從上述各個實施例可以看出,以往APB總線橋的設(shè)計注重在減少APB總線系統(tǒng)的訪問延時、降低APB總線系統(tǒng)的動態(tài)功耗、或異步時鐘之間的跨時鐘域處理等方面,而上述APB總線橋,則注重自身內(nèi)部時序路徑的構(gòu)造以方便在APB總線信號在同步時鐘之間的轉(zhuǎn)換處理的物理實現(xiàn)。
進(jìn)一步地,由于采用了輸入/輸出皆打拍的方式,APB總線橋內(nèi)的時序路徑很短,當(dāng)?shù)谝粫r鐘和第二時鐘的時鐘樹延遲較大時,通過調(diào)節(jié)寄存器的時鐘通道和數(shù)據(jù)通道延時能夠很好地實現(xiàn)輸入輸出信號的同步轉(zhuǎn)換,同樣降低了物理實現(xiàn)的難度。
下面通過具體實例來對上述APB總線橋的工作過程進(jìn)行說明。
例如,上述一個或者多個實施例中所述的APB總線橋具體可以如圖11所示,那么,APB請求緩存模塊中包括一個邏輯與門、數(shù)據(jù)選擇器MUX1、MUX2、MUX3、MUX4、MUX5以及MUX6,還包括工作在第一時鐘上的寄存器Reg1、Reg2以及Reg3;APB請求輸出模塊中包括數(shù)據(jù)選擇器MUX7、MUX8、MUX9、MUX10以及MUX11,還包括工作在第二時鐘上的寄存器Reg4、Reg5以及Reg6;APB響應(yīng)緩存模塊包括兩個邏輯與門、一個邏輯非門、工作在第二時鐘上的寄存器Reg7、Reg8以及Reg9,還包括工作在第一是時鐘上的寄存器Reg10;APB響應(yīng)輸出模塊中包括數(shù)據(jù)選擇器MUX12、MUX13、MUX14以及MUX15,還 包括工作在第一時鐘上的寄存器Reg11、Reg12以及Reg13。
其中,Reg7~9各為級聯(lián)在一起的2個寄存器,實現(xiàn)將信號延時兩個時鐘周期。
那么,當(dāng)?shù)谝粫r鐘與第二時鐘的頻率比為4:1時,結(jié)合圖12,該APB總線橋執(zhí)行讀操作的過程如下:
首先,互聯(lián)矩陣傳遞APB總線信號psel_m、penable_m、pwrite_m和paddr_m給APB請求緩存模塊,其他模塊(如時鐘管理模塊)傳遞pclk_en信號給APB請求緩存模塊。APB請求緩存模塊初始處于空閑態(tài),當(dāng)pclk_en以及psel_m置1時,APB請求緩存模塊由空閑態(tài)進(jìn)入建立態(tài),對pwrite_m和psel_m進(jìn)行緩存。pclk_en和psel_m通過邏輯與門進(jìn)行邏輯與運算,運算后的信號作為MUX1和MUX2的選擇信號,此時,pwrite_m經(jīng)MUX1輸出,再經(jīng)過Reg1,緩存一個第一時鐘周期,獲得pwrite_m_dly,并輸出給MUX7;同時,psel_m依次通過MUX2、MUX3、MUX4,再經(jīng)過Reg2,緩存一個第一時鐘周期,獲得psel_m_dly,輸出給MUX8,APB請求緩存模塊在進(jìn)入建立態(tài)一個pclk_m周期后進(jìn)入傳輸態(tài)。penable_m依次通過MUX5、MUX6,再經(jīng)過Reg3,緩存一個第一時鐘周期,獲得penable_m_dly,并輸出給MUX10。
然后,當(dāng)APB請求輸出模塊自身處于空閑態(tài)時,pwrite_m_dly由MUX7輸出,經(jīng)過Reg4,緩存一個第二時鐘周期,獲得pwrite_s輸出給從設(shè)備;同時,psel_m_dly由MUX8輸出,再經(jīng)由MUX9和Reg5,psel_m_dly延時一個第二時鐘周期,獲得psel_s,輸出給從設(shè)備,其中,當(dāng)psel_s置1時,APB請求輸出模塊進(jìn)入建立態(tài);此時,penable_m_dly由MUX10輸出,并依次經(jīng)過MUX11和Reg6,penable_m_dly緩存一個第二時鐘周期,獲得penable_s,并輸出給從設(shè)備。
第三步,當(dāng)從設(shè)備完成讀操作后,從設(shè)備置起pready_s,并經(jīng)由prdata_s返回讀數(shù)據(jù),APB響應(yīng)緩存模塊接收pready_s和prdata_s;pready_s與上述penable_s通過一個邏輯與門進(jìn)行邏輯與運算,運算后的信號分成兩路,一路與運算后的信號輸入第二時鐘傳輸標(biāo)識生成模塊,由其生成s_transfer_end,控制 MUX9、MUX11輸出0,進(jìn)而將psel_s、penable_s置0,如此,APB請求輸出模塊進(jìn)入結(jié)束態(tài),結(jié)束對從設(shè)備的讀請求;而另一路與運算后的信號輸入Reg7,在第二時鐘上緩存兩拍,即延時兩個第二時鐘周期,獲得pready_s_dly,pready_s_dly也分成三路信號,第一路信號輸入Reg10,延時一個第一時鐘周期后,經(jīng)過邏輯非門后,再輸入另一個邏輯與門,第二路信號直接輸入邏輯與門,這兩路信號進(jìn)行邏輯與運算后,獲得transfer_rsp,第三路信號直接輸入至MUX12。在上述過程中,prdata_s經(jīng)過Reg9,在第二時鐘上緩存兩拍,即延時兩個第二時鐘周期后,獲得prdata_s_dly,并輸出至MUX15。
第四步,transfer_resp置起時,pready_s_dly由MUX12輸出,依次經(jīng)過MUX13、Reg11,緩存一個第一時鐘周期后,分成兩路,一路信號輸出至MUX4、MUX6,控制MUX4、MUX6輸出0,將psel_m_dly、penable_m_dly置0,此時,APB請求緩存模塊進(jìn)入空閑態(tài);另一路信號輸出給互聯(lián)矩陣,以告知主設(shè)備從設(shè)備已完成讀操作,準(zhǔn)備接收相應(yīng)的讀數(shù)據(jù)。此時,prdata_s_dly由MUX15輸出,經(jīng)過Reg13,緩存一個第一時鐘周期后,獲得pdata_m,并輸出給主設(shè)備。
另外,輸入信號paddr_m到輸出信號paddr_s的實現(xiàn)流程同pwrite_m到pwrites_s的實現(xiàn)流程完全一致,在此處以及下文不在贅述。prdata_s到prdata_m的各個比特轉(zhuǎn)換過程完全一致,且相互獨立,因此,上文沒有按照讀數(shù)據(jù)的位寬一一描述。
可選的,當(dāng)從設(shè)備在進(jìn)行讀操作的過程中出錯時,從設(shè)備輸出pslverr_s至Reg8,在第二時鐘上緩存兩拍,延時兩個第二時鐘周期后,獲得pslverr_s_dly,并輸出給MUX14,在transfer_rsp置起時,pslverr_s_dly依次經(jīng)過MUX14和Reg12,緩存一個第一時鐘周期,獲得pslverr_m,并輸出給互聯(lián)矩陣,以向主設(shè)備報錯。
至此,當(dāng)?shù)谝粫r鐘與第二時鐘的頻率比為4:1時,APB總線橋執(zhí)行讀操作的過程結(jié)束。
當(dāng)?shù)谝粫r鐘與第二時鐘的頻率比為4:1時,結(jié)合圖13,該APB總線橋執(zhí)行寫操作的過程如下:
首先,互聯(lián)矩陣傳遞APB總線信號psel_m、penable_m、pwrite_m、paddr_m和pwdata_m給APB請求緩存模塊,其他模塊(如時鐘管理模塊)傳遞pclk_en信號給APB請求緩存模塊。APB請求緩存模塊初始處于空閑態(tài),當(dāng)pclk_en以及psel_m置1時,APB請求緩存模塊由空閑態(tài)進(jìn)入建立態(tài),對pwrite_m和psel_m進(jìn)行緩存。pclk_en和psel_m通過邏輯與門進(jìn)行邏輯與運算,運算后的信號作為MUX1和MUX2的選擇信號,此時,pwrite_m經(jīng)MUX1輸出,再經(jīng)過Reg1緩存一個第一時鐘周期,獲得pwrite_m_dly,并輸出給MUX7;psel_m經(jīng)MUX2、MUX3、MUX4輸出,再經(jīng)過Reg2,緩存一個第一時鐘周期,獲得psel_m_dly,輸出給MUX8。APB請求緩存模塊在進(jìn)入建立態(tài)一個pclk_m周期后進(jìn)入傳輸態(tài),penable_m依次經(jīng)過MUX5、MUX6,再經(jīng)過Reg3緩存一個第一時鐘周期,獲得penable_m_dly,并輸出給MUX10。
然后,當(dāng)APB請求輸出模塊自身處于空閑態(tài)時,pwrite_m_dly由MUX7輸出,再經(jīng)過Reg4緩存一個第二時鐘周期,獲得pwrite_s,輸出給從設(shè)備;同時,psel_m_dly經(jīng)由MUX8、MUX9輸出,再經(jīng)由Reg5緩存一個第二時鐘周期,獲得psel_s,輸出給從設(shè)備,其中,當(dāng)psel_s置1時,APB請求輸出模塊進(jìn)入建立態(tài);此時,penable_m_dly經(jīng)由MUX10、MUX11輸出,再經(jīng)過Reg6緩存一個第二時鐘周期,獲得penable_s,并輸出給從設(shè)備,如此,從設(shè)備就能夠進(jìn)行寫操作了。
第三步,當(dāng)從設(shè)備完成寫操作后,從設(shè)備置起pready_s,APB響應(yīng)緩存模塊接收pready_s;pready_s與上述penable_s通過一個邏輯與門進(jìn)行邏輯與運算,運算后的信號分成兩路,一路與運算后的信號輸入第二時鐘傳輸標(biāo)識生成模塊,由其生成s_transfer_end,控制MUX9、MUX11輸出0,進(jìn)而將psel_s、penable_s置0,如此,APB請求輸出模塊進(jìn)入結(jié)束態(tài);而另一路與運算后的信號經(jīng)由寄存器組Reg7,在第二時鐘上緩存兩拍,獲得pready_s_dly,pready_s_dly也分成三路信號,第一路信號輸入Reg10,延時一個第一時鐘周期后,經(jīng)過邏輯非門后,再輸入另一個邏輯與門,第二路信號直接輸入邏輯與門,這兩路信號進(jìn)行邏輯與運算后,獲得transfer_rsp,第三路信號直接輸入至MUX12。
第四步,transfer_rsp置起后,pready_s_dly由MUX12輸出,依次經(jīng)過MUX13、Reg11,緩存一個第一時鐘周期后,分成兩路,一路信號輸出至MUX4、MUX6,控制MUX4、MUX6輸出0,即將psel_m_dly、penable_m_dly置0,此時,APB請求緩存模塊進(jìn)入空閑態(tài);另一路信號輸出給互聯(lián)矩陣,以告知主設(shè)備從設(shè)備已完成寫操作。
可選的,當(dāng)從設(shè)備在進(jìn)行寫操作的過程中出錯時,從設(shè)備輸出pslverr_s至Reg8,在第二時鐘上緩存兩拍,延時兩個第二時鐘周期后,獲得pslverr_s_dly,并輸出MUX14,在transfer_rsp置起時,pslverr_s_dly依次經(jīng)過MUX14和Reg12,緩存一個第一時鐘周期,獲得pslverr_m,并輸出給互聯(lián)矩陣,以向主設(shè)備報錯。
另外,從pwdata_m到pwdata_s的轉(zhuǎn)換過程同從pwrite_m到pwrite_s的轉(zhuǎn)換過程完全一致,此處不再贅述。
至此,當(dāng)?shù)谝粫r鐘與第二時鐘的頻率比為4:1時,APB總線橋執(zhí)行寫操作的過程結(jié)束。
在實際應(yīng)用中,第一時鐘與第二時鐘還可以是同頻時鐘,即頻率比為1:1,此時,APB總線橋的讀/寫時序參見圖14及圖15所示,在此就不再一一贅述了。
由上述可知,由于本發(fā)明實施例所提供的APB總線橋中創(chuàng)新性地引入了pclk_en信號,使得從APB請求緩存模塊到APB請求輸出模塊的reg2reg(寄存器到寄存器)路徑,可以設(shè)為多周期路徑,周期數(shù)為快慢時鐘頻率之間的倍數(shù)關(guān)系。
特別地,在芯片物理實現(xiàn)時,若互聯(lián)矩陣與從設(shè)備擺放位置比較近時,APB請求緩存模塊到APB請求輸出模塊的reg2reg路徑的數(shù)據(jù)端延遲較小,此時便沒有必要設(shè)置多周期路徑,此時可將APB總線橋的輸入信號pclk_en接常值1,進(jìn)而,APB請求緩存模塊到APB請求輸出模塊之間的reg2reg路徑的路徑長度為一個第一時鐘周期。當(dāng)pclk_m,pclk_s的時鐘樹時延(Clock Tree Latency)差異相對比較大時,調(diào)節(jié)APB請求緩存模塊到APB請求輸出模塊之間存在時序路徑的2個寄存器的時鐘端和數(shù)據(jù)端的延遲,即可方便實現(xiàn)信號同步轉(zhuǎn)換。
另外,由于從APB從設(shè)備輸入的信號,在APB響應(yīng)緩存模塊內(nèi)均打了2 拍,當(dāng)pclk_m,pclk_s的時鐘樹時延差異較大時,由于這2拍寄存器之間的數(shù)據(jù)端延遲較小,將第2拍寄存器的時鐘端與第一時鐘側(cè)的寄存器的時鐘端做好blance(平衡),調(diào)節(jié)這2拍寄存器之間的數(shù)據(jù)通道延遲也可方便實現(xiàn)響應(yīng)信號的同步處理。
進(jìn)一步地,本發(fā)明實施例中的APB總線橋不改變APB總線橋的功能,不影響其協(xié)議的有效性和一致性,總線接口時序完全符合APB總線協(xié)議標(biāo)準(zhǔn),通過輸入/輸出皆打拍將多周期路徑約束在APB總線橋內(nèi),這樣,方便后端設(shè)計實現(xiàn)。
進(jìn)一步地,本發(fā)明實施例中的APB總線橋即支持APB總線在滿足整數(shù)倍頻關(guān)系的快慢時鐘之間的信號轉(zhuǎn)換,也支持同頻時鐘之間或者相同時鐘上的信號轉(zhuǎn)換。
進(jìn)一步地,在芯片設(shè)計過程中,芯片總線使用的快慢時鐘頻率比變化時,芯片互聯(lián)矩陣(包括本發(fā)明實施例中所述的APB總線橋)的設(shè)計不需要改變,可自然適應(yīng)這種變化。
盡管已描述了本發(fā)明的優(yōu)選實施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對這些實施例作出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實施例以及落入本發(fā)明范圍的所有變更和修改。
顯然,本領(lǐng)域的技術(shù)人員可以對本發(fā)明進(jìn)行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。