付長英,劉林海,沈貴元,常迎輝
(中國電子科技集團公司第五十四研究所,河北 石家莊 050081)
當前,SoC設計已經成為數字集成電路(Integrated Circuit,IC)設計的主流。一款SoC設計至少包含一顆微處理器核心,同時也包含不同類型、數量的外設接口模塊,以及用戶定制的邏輯電路。隨著SoC的規模不斷擴大,集成的IP模塊不斷增多,復雜度不斷加大,使得各個模塊之間通信的問題越來越突出。在片上系統領域中,主機與從機之間的通信需要考慮的因素很多,例如總線位寬、速率、實現難易程度等。因此,設計一種簡單易用的高速率傳輸總線是SoC設計初期著重考慮的。
該總線傳輸協議是為了實現主機與從機之間的高速寄存器讀寫操作,由3根信號線組成,分別是片選使能線、時鐘傳輸線、雙向數據傳輸線。片選使能線與雙向數據傳輸線復位之后默認的狀態為高電平,時鐘傳輸線復位之后默認的狀態為低電平。
該傳輸總線傳輸時,由主機首先拉低片選使能線;從機檢測到片選使能線為低之后,內部產生啟動信號。主機拉低片選使能線之后,產生總線時鐘,并通過時鐘傳輸線將時鐘傳輸給從機;總線時鐘可以為主機內部高頻時鐘的分頻時鐘,分頻比可為任意值。主機通過數據傳輸線發送數據,數據可以為多個字節;首先發送當前字節的高位,由高位到低位依次發送,雙向數據傳輸線的變化位于時鐘的下降沿。從機在總線時鐘的上升沿開始對數據進行采樣,并按照收取到的數據進行讀寫操作。主機傳輸數據完畢之后,停止總線時鐘才產生,拉高片選使能線,結束該次傳輸。
當主機發送數據與產生時鐘時,主機每次發起的數據傳輸,總是以固定數值的傳輸時鐘周期為一組,當從機接收到的時鐘周期不足一組時,舍棄最后傳輸的數據,數據傳輸完畢時,最少包含兩組固定數值的傳輸時鐘周期。
如圖1是三總線傳輸協議的概略圖,片選使能線為100,時鐘傳輸線為200,雙向數據傳輸線為300,傳輸首字節為310,第2個字節為320,第3個字節為330。首字節中起始位為讀寫使能311,后續數據位為起始地址312。

圖1 三總線傳輸協議概略圖
主機產生的分頻時鐘,分頻比包括1分頻,即傳輸時鐘與主機內部時鐘同頻,最高可以達到電路接口頻率的最高值。
該總線傳輸協議與其他總線相比,具有如下優點:①總線位寬只有3位,通過雙向數據傳輸線滿足讀寫的不同方向要求;②總線傳輸時鐘可以與主機內部時鐘同頻,傳輸速度較高;③根據總線傳輸協議中的要求,可以只發送一次起始地址,之后的讀寫操作均在此起始地址基礎上累加;④該總線傳輸協議比較簡單,易于理解,可操作性強,可以根據具體寄存器位寬進行字節位寬的調整。
主機通過數據傳輸線發送數據,當主機需要對從機進行寫操作時,首先需要發送的首字節為“寫使能1”加“從機起始地址”,第2個字節為需要寫入“從機起始地址”的數據,第3個字節為需要寫入“從機起始地址+1”的數據,以此類推,第N個字節為需要寫入“從機起始地址+N-2”的數據。其中,N為字節的個數。
圖2是三總線傳輸協議主機寫從機的流程圖。圖中片選使能線為100,雙向數據傳輸線為300.首字節為310,第2個傳輸字節320為寫入起始地址的數據,第3個傳輸字節330為寫入起始地址加一的數據,第3個傳輸字節340為寫入起始地址加二的數據,第N個傳輸字節350為寫入起始地址+(N-2)數據。首字節高位為寫使能311,首字節低位為起始地址312。

圖2 主機寫從機流程圖
當主機需要對從機進行讀操作時,首先需要發送的首字節為“讀使能0”加“從機起始地址”,之后主機將雙向數據傳輸線交予從機進行控制,主機只需要產生傳輸時鐘,從機由該傳輸時鐘進行數據的發出;當主機發出讀取的命令之后,由于從機接收到命令之后需要解析出指令時間,需要延時一個字節時間,在第3個字節時間將“從機起始地址”的數據傳輸給主機,第4個字節時間將“從機起始地址+1”的數據傳輸給主機,以此類推,第N個字節時,主機由雙向數據傳輸線讀取到的為“從機起始地址+N-3”的數據;其中,一個字節時間為固定數值的傳輸時鐘。
圖3是本設計的三總線傳輸協議主機讀從機寄存器狀態流程圖。圖中片選使能線為100,雙向數據傳輸線為300。首字節為310,第2個傳輸字節320為空閑周期,第3個傳輸字節330為起始讀地址的寄存器狀態值,第4個傳輸字節340為起始讀地址加1的寄存器狀態值,第N個傳輸字節350為起始讀地址+(N-3)的寄存器狀態值。首字節高位為讀使能311,首字節低七位為起始讀地址312。第2個傳輸字節320為用于主機、從機之間的雙向數據傳輸線的傳輸方向轉變。

圖3 主機讀從機流程圖
圖4是設計的三總線傳輸從機解析主機寫操作的原理圖。空閑狀態為A,主機將片選拉低為A1,從機進行數據采樣為B,主從傳輸的首字節為C,首字節高位判斷器為C1,打開寫使能操作為D,從機進行時鐘上升沿采樣操作為E,片選為高判斷器為E1,字節收取完成判斷器為E2,寫入當前加一地址操作為E3。

圖4 從機解析主機寫操作原理圖
圖5是設計的三總線傳輸協議從機解析主機讀操作的原理圖。空閑狀態為A,片選拉低為A1,從機進行數據采樣為B,主從傳輸的首字節為C,首字節高位判斷其為C1,打開讀使能操作為G,等待一個字節時間為H,片選為高判斷器為H1,發送當前加一地址的寄存器狀態操作為I。

圖5 從機解析主機讀操作原理圖
本文涉及的總線是通信處理芯片的MCU接口,主要功能是接收MCU的控制和發送芯片的告警,MCU的總線作為主設備,通信處理芯片的總線接口作為從設備。根據功能需求,設計簡化了總線的完整協議,僅實現了從模式。采用VHDL語言實現,用Modelsim對總線的讀寫操作進行了仿真驗證。
總線接口信號定義如圖6所示。rst_125信號是外部提供的硬件復位信號,低電平復位有效;CSN為總線訪問使能信號,低電平有效;SCLK為總線訪問輸入串行時鐘;MOSI為總線訪問輸入串行數據;MISO為總線訪問輸出串行數據;wr_addr[7:0]信號是通過總線接口操作內部寄存器的地址信息,wr_data[7:0]信號為外部MCU通過總線訪問寄存器讀出的數據,隨地址wr_addr[7:0]的變化而變化;rd_data[7:0]信號為外部MCU通過總線接口寫入寄存器的數據,wd_reg為寫使能,wd_reg信號為高時,在SCLK的上升沿把rd_data[7:0]數據寫入到wr_addr[7:0]的地址中;rd_reg為讀使能信號,wd_reg為寫使能信號。

圖6 總線頂層模塊接口定義
在CSN為低時,判斷時鐘的上升沿,8個上升沿對輸入的數據進行采樣;第一個沿采到的數據指示的是讀(1)/寫(0),之后的7個數組合成為當前地址;如果是寫,就寫入當前地址;繼續接收就寫入下一地址;如果是讀,就讀出當前地址數據,繼續就可以讀出后一地址數據;通過總線傳輸的數據,從高位先發,存入接收寄存器r_shift[7:0];發送的時候,也是先發高位,通過發送寄存器t_shift[7:0]發送。
用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個數據
wait for30 ns;
MOSI<=shift(7);
rdata(7)<=MISO;
……
SCLK<=‘0’;—第8個數據
rdata(0)<=MISO;
wait for30 ns;
SCLK<=‘1’;
wait for30 ns;
MOSI<=‘1’;
wait for30 ns;
end spi_tr;
仿真測試部分結果如圖7所示。

圖7 總線讀寫操作仿真驗證結果
設計的傳輸協議只有3根總線,采用VHDL語言實現硬件電路,并通過Modelsim驗證了協議的正確性。讀寫過程簡單明了,易于理解,針對不同位寬的寄存器,可以根據位寬和地址深度的要求定制從機對首字節的解析模塊,以滿足各自設計的特定需求,非常適合芯片之間的通信。
[1]張斌,劉宇,榮金峰.通用型SPI總線的IP設計與實現[J].中國集成電路,2011,7(146):43-46.
[2]周強.超大規模集成電路設計導論[M].北京:清華大學出版社,2005.
[3]侯伯亨,顧新.VHDL硬件描述語言與數字邏輯電路設計[M].西安電子科技大學出版社,1999.
[4]王玨文,金偉信,蔡一兵,等.基于FPGA的SPI總線接口的實現[J].總線與網絡,2010,14(325):102-104.
[5]王二萍.高速可復用SPI總線的設計與VerilogHDL實現[D].鄭州:河南大學,2007:70-77.
[6]趙杰.基于AMBA總線的SPI協議IP核的實現與驗證[D].中國科技大學,2009:22-25.
[7]高如云,陸曼茹,張企民.通信電子線路[M].西安:西安電子科技大學出版社,2008.
[8]榮蓉.基于SOC嵌入式片上系統應用研究[J].煤炭技術,2012,31(6):218-219.
[9]劉林海.AHB總線分析及從模塊設計[J].無線電通信技術,2007,33(3):35-38.
[10]朱宏光,司靜.一種用于高速數據采集的SDRAM控制器[J].無線電工程,2010,40(4):62-64.