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