付長英,劉林海,沈貴元,常迎輝
(中國電子科技集團公司第五十四研究所,河北 石家莊 050081)
當前,SoC設(shè)計已經(jīng)成為數(shù)字集成電路(Integrated Circuit,IC)設(shè)計的主流。一款SoC設(shè)計至少包含一顆微處理器核心,同時也包含不同類型、數(shù)量的外設(shè)接口模塊,以及用戶定制的邏輯電路。隨著SoC的規(guī)模不斷擴大,集成的IP模塊不斷增多,復(fù)雜度不斷加大,使得各個模塊之間通信的問題越來越突出。在片上系統(tǒng)領(lǐng)域中,主機與從機之間的通信需要考慮的因素很多,例如總線位寬、速率、實現(xiàn)難易程度等。因此,設(shè)計一種簡單易用的高速率傳輸總線是SoC設(shè)計初期著重考慮的。
該總線傳輸協(xié)議是為了實現(xiàn)主機與從機之間的高速寄存器讀寫操作,由3根信號線組成,分別是片選使能線、時鐘傳輸線、雙向數(shù)據(jù)傳輸線。片選使能線與雙向數(shù)據(jù)傳輸線復(fù)位之后默認的狀態(tài)為高電平,時鐘傳輸線復(fù)位之后默認的狀態(tài)為低電平。
該傳輸總線傳輸時,由主機首先拉低片選使能線;從機檢測到片選使能線為低之后,內(nèi)部產(chǎn)生啟動信號。主機拉低片選使能線之后,產(chǎn)生總線時鐘,并通過時鐘傳輸線將時鐘傳輸給從機;總線時鐘可以為主機內(nèi)部高頻時鐘的分頻時鐘,分頻比可為任意值。主機通過數(shù)據(jù)傳輸線發(fā)送數(shù)據(jù),數(shù)據(jù)可以為多個字節(jié);首先發(fā)送當前字節(jié)的高位,由高位到低位依次發(fā)送,雙向數(shù)據(jù)傳輸線的變化位于時鐘的下降沿。從機在總線時鐘的上升沿開始對數(shù)據(jù)進行采樣,并按照收取到的數(shù)據(jù)進行讀寫操作。主機傳輸數(shù)據(jù)完畢之后,停止總線時鐘才產(chǎn)生,拉高片選使能線,結(jié)束該次傳輸。
當主機發(fā)送數(shù)據(jù)與產(chǎn)生時鐘時,主機每次發(fā)起的數(shù)據(jù)傳輸,總是以固定數(shù)值的傳輸時鐘周期為一組,當從機接收到的時鐘周期不足一組時,舍棄最后傳輸?shù)臄?shù)據(jù),數(shù)據(jù)傳輸完畢時,最少包含兩組固定數(shù)值的傳輸時鐘周期。
如圖1是三總線傳輸協(xié)議的概略圖,片選使能線為100,時鐘傳輸線為200,雙向數(shù)據(jù)傳輸線為300,傳輸首字節(jié)為310,第2個字節(jié)為320,第3個字節(jié)為330。首字節(jié)中起始位為讀寫使能311,后續(xù)數(shù)據(jù)位為起始地址312。
圖1 三總線傳輸協(xié)議概略圖
主機產(chǎn)生的分頻時鐘,分頻比包括1分頻,即傳輸時鐘與主機內(nèi)部時鐘同頻,最高可以達到電路接口頻率的最高值。
該總線傳輸協(xié)議與其他總線相比,具有如下優(yōu)點:①總線位寬只有3位,通過雙向數(shù)據(jù)傳輸線滿足讀寫的不同方向要求;②總線傳輸時鐘可以與主機內(nèi)部時鐘同頻,傳輸速度較高;③根據(jù)總線傳輸協(xié)議中的要求,可以只發(fā)送一次起始地址,之后的讀寫操作均在此起始地址基礎(chǔ)上累加;④該總線傳輸協(xié)議比較簡單,易于理解,可操作性強,可以根據(jù)具體寄存器位寬進行字節(jié)位寬的調(diào)整。
主機通過數(shù)據(jù)傳輸線發(fā)送數(shù)據(jù),當主機需要對從機進行寫操作時,首先需要發(fā)送的首字節(jié)為“寫使能1”加“從機起始地址”,第2個字節(jié)為需要寫入“從機起始地址”的數(shù)據(jù),第3個字節(jié)為需要寫入“從機起始地址+1”的數(shù)據(jù),以此類推,第N個字節(jié)為需要寫入“從機起始地址+N-2”的數(shù)據(jù)。其中,N為字節(jié)的個數(shù)。
圖2是三總線傳輸協(xié)議主機寫從機的流程圖。圖中片選使能線為100,雙向數(shù)據(jù)傳輸線為300.首字節(jié)為310,第2個傳輸字節(jié)320為寫入起始地址的數(shù)據(jù),第3個傳輸字節(jié)330為寫入起始地址加一的數(shù)據(jù),第3個傳輸字節(jié)340為寫入起始地址加二的數(shù)據(jù),第N個傳輸字節(jié)350為寫入起始地址+(N-2)數(shù)據(jù)。首字節(jié)高位為寫使能311,首字節(jié)低位為起始地址312。
圖2 主機寫從機流程圖
當主機需要對從機進行讀操作時,首先需要發(fā)送的首字節(jié)為“讀使能0”加“從機起始地址”,之后主機將雙向數(shù)據(jù)傳輸線交予從機進行控制,主機只需要產(chǎn)生傳輸時鐘,從機由該傳輸時鐘進行數(shù)據(jù)的發(fā)出;當主機發(fā)出讀取的命令之后,由于從機接收到命令之后需要解析出指令時間,需要延時一個字節(jié)時間,在第3個字節(jié)時間將“從機起始地址”的數(shù)據(jù)傳輸給主機,第4個字節(jié)時間將“從機起始地址+1”的數(shù)據(jù)傳輸給主機,以此類推,第N個字節(jié)時,主機由雙向數(shù)據(jù)傳輸線讀取到的為“從機起始地址+N-3”的數(shù)據(jù);其中,一個字節(jié)時間為固定數(shù)值的傳輸時鐘。
圖3是本設(shè)計的三總線傳輸協(xié)議主機讀從機寄存器狀態(tài)流程圖。圖中片選使能線為100,雙向數(shù)據(jù)傳輸線為300。首字節(jié)為310,第2個傳輸字節(jié)320為空閑周期,第3個傳輸字節(jié)330為起始讀地址的寄存器狀態(tài)值,第4個傳輸字節(jié)340為起始讀地址加1的寄存器狀態(tài)值,第N個傳輸字節(jié)350為起始讀地址+(N-3)的寄存器狀態(tài)值。首字節(jié)高位為讀使能311,首字節(jié)低七位為起始讀地址312。第2個傳輸字節(jié)320為用于主機、從機之間的雙向數(shù)據(jù)傳輸線的傳輸方向轉(zhuǎn)變。
圖3 主機讀從機流程圖
圖4是設(shè)計的三總線傳輸從機解析主機寫操作的原理圖。空閑狀態(tài)為A,主機將片選拉低為A1,從機進行數(shù)據(jù)采樣為B,主從傳輸?shù)氖鬃止?jié)為C,首字節(jié)高位判斷器為C1,打開寫使能操作為D,從機進行時鐘上升沿采樣操作為E,片選為高判斷器為E1,字節(jié)收取完成判斷器為E2,寫入當前加一地址操作為E3。
圖4 從機解析主機寫操作原理圖
圖5是設(shè)計的三總線傳輸協(xié)議從機解析主機讀操作的原理圖??臻e狀態(tài)為A,片選拉低為A1,從機進行數(shù)據(jù)采樣為B,主從傳輸?shù)氖鬃止?jié)為C,首字節(jié)高位判斷其為C1,打開讀使能操作為G,等待一個字節(jié)時間為H,片選為高判斷器為H1,發(fā)送當前加一地址的寄存器狀態(tài)操作為I。
圖5 從機解析主機讀操作原理圖
本文涉及的總線是通信處理芯片的MCU接口,主要功能是接收MCU的控制和發(fā)送芯片的告警,MCU的總線作為主設(shè)備,通信處理芯片的總線接口作為從設(shè)備。根據(jù)功能需求,設(shè)計簡化了總線的完整協(xié)議,僅實現(xiàn)了從模式。采用VHDL語言實現(xiàn),用Modelsim對總線的讀寫操作進行了仿真驗證。
總線接口信號定義如圖6所示。rst_125信號是外部提供的硬件復(fù)位信號,低電平復(fù)位有效;CSN為總線訪問使能信號,低電平有效;SCLK為總線訪問輸入串行時鐘;MOSI為總線訪問輸入串行數(shù)據(jù);MISO為總線訪問輸出串行數(shù)據(jù);wr_addr[7:0]信號是通過總線接口操作內(nèi)部寄存器的地址信息,wr_data[7:0]信號為外部MCU通過總線訪問寄存器讀出的數(shù)據(jù),隨地址wr_addr[7:0]的變化而變化;rd_data[7:0]信號為外部MCU通過總線接口寫入寄存器的數(shù)據(jù),wd_reg為寫使能,wd_reg信號為高時,在SCLK的上升沿把rd_data[7:0]數(shù)據(jù)寫入到wr_addr[7:0]的地址中;rd_reg為讀使能信號,wd_reg為寫使能信號。
圖6 總線頂層模塊接口定義
在CSN為低時,判斷時鐘的上升沿,8個上升沿對輸入的數(shù)據(jù)進行采樣;第一個沿采到的數(shù)據(jù)指示的是讀(1)/寫(0),之后的7個數(shù)組合成為當前地址;如果是寫,就寫入當前地址;繼續(xù)接收就寫入下一地址;如果是讀,就讀出當前地址數(shù)據(jù),繼續(xù)就可以讀出后一地址數(shù)據(jù);通過總線傳輸?shù)臄?shù)據(jù),從高位先發(fā),存入接收寄存器r_shift[7:0];發(fā)送的時候,也是先發(fā)高位,通過發(fā)送寄存器t_shift[7:0]發(fā)送。
用VHDL語言編寫testbench對總線模塊進行測試,部分測試代碼如下:
procedure spi_tr(
shift:in std_logic_vector(7downto 0);
signal rdata:out std_logic_vector(7downto 0);
signal SCLK:out std_logic;
signal MOSI:out std_logic;
signal MISO:in std_logic
)is
begin
rdata<=x"00";
SCLK<=‘1’;
MOSI<=‘1’;
wait for30 ns;
SCLK<=‘0’;—第1個數(shù)據(jù)
wait for30 ns;
MOSI<=shift(7);
rdata(7)<=MISO;
……
SCLK<=‘0’;—第8個數(shù)據(jù)
rdata(0)<=MISO;
wait for30 ns;
SCLK<=‘1’;
wait for30 ns;
MOSI<=‘1’;
wait for30 ns;
end spi_tr;
仿真測試部分結(jié)果如圖7所示。
圖7 總線讀寫操作仿真驗證結(jié)果
設(shè)計的傳輸協(xié)議只有3根總線,采用VHDL語言實現(xiàn)硬件電路,并通過Modelsim驗證了協(xié)議的正確性。讀寫過程簡單明了,易于理解,針對不同位寬的寄存器,可以根據(jù)位寬和地址深度的要求定制從機對首字節(jié)的解析模塊,以滿足各自設(shè)計的特定需求,非常適合芯片之間的通信。
[1]張斌,劉宇,榮金峰.通用型SPI總線的IP設(shè)計與實現(xiàn)[J].中國集成電路,2011,7(146):43-46.
[2]周強.超大規(guī)模集成電路設(shè)計導(dǎo)論[M].北京:清華大學出版社,2005.
[3]侯伯亨,顧新.VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計[M].西安電子科技大學出版社,1999.
[4]王玨文,金偉信,蔡一兵,等.基于FPGA的SPI總線接口的實現(xiàn)[J].總線與網(wǎng)絡(luò),2010,14(325):102-104.
[5]王二萍.高速可復(fù)用SPI總線的設(shè)計與VerilogHDL實現(xiàn)[D].鄭州:河南大學,2007:70-77.
[6]趙杰.基于AMBA總線的SPI協(xié)議IP核的實現(xiàn)與驗證[D].中國科技大學,2009:22-25.
[7]高如云,陸曼茹,張企民.通信電子線路[M].西安:西安電子科技大學出版社,2008.
[8]榮蓉.基于SOC嵌入式片上系統(tǒng)應(yīng)用研究[J].煤炭技術(shù),2012,31(6):218-219.
[9]劉林海.AHB總線分析及從模塊設(shè)計[J].無線電通信技術(shù),2007,33(3):35-38.
[10]朱宏光,司靜.一種用于高速數(shù)據(jù)采集的SDRAM控制器[J].無線電工程,2010,40(4):62-64.