全功能SPI接口的設計與實現
當分頻時鐘用于產生SPICLK時,異或門XOR1的一個輸入端來自配置寄存器的Polarity端,用于控制時鐘極性。節點Y3作為D觸發器MTN1的輸出端,輸出方程為:

S0為0,D觸發器上升沿觸發。S0為1,D觸發器保持原狀態。通過MTN1后的分頻時鐘,其高電平時間和低電平時間相等或相差一個系統時鐘周期,這個時鐘即為主模式下產生的SPICLK,通過Phase和Polarity端的選擇將會有四種不同時鐘模式。
當分頻時鐘用于產生SPI控制器的內部時鐘時,MUX2的選擇端S來自配置寄存器的主/從模式選擇端,選擇內部時鐘還是外部時鐘通過。輸出端LANCLK用于SPI控制器的數據輸入/輸出鎖存時鐘。其方程為:

這里的DICLKn為通過MUX2后的分頻時鐘。由于時鐘極性對傳輸協議沒有影響,所以上式將使四種時鐘模式轉變成2種,即上升沿無延遲和下降沿有延遲,而后在用于控制數據的輸入/輸出鎖存。通過節點Y2的分頻時鐘經過控制邏輯傳送到輸出端CNTCLK和DATCLK,這兩個時鐘分別用于SPI控制器內部計數器的計數時鐘和移位寄存器的控制時鐘。
以上分析均是在SPI控制器工作在主模式的情況,當SPI控制器工作在從模式時,外部時鐘來自與門AND1的一個輸入,通過控制邏輯分別到達CNTCLK和DATCLK端。
在時鐘生成模塊里同時具有相應控制功能:Reset引腳,模塊的復位端,低有效。SPISTE引腳,SPI控制器的使能端,低有效。Susp_free和Susp_soft引腳,決定了當仿真器突然中斷時SPI模塊將采取何種動作,在時鐘生成模塊里,Susp_free和Susp_soft被置為00時,將關斷SPI CLK,使正在傳送的數據立即停止。
3 SPI控制器的仿真實現
SPI控制器的仿真使用Mentor公司的ModelSim軟件,該軟件可在windows,Linux平臺上使用,支持VHDL或Verilog硬件描述語言(HDL)仿真。它支持所有器件的行為級仿真、VHDL或Verilog仿真激勵。為了測試設計的正確性,編寫了testbench模塊,包括產生時鐘信號,控制寄存器的配置,收發的數據,產生的中斷等。
3.1 SPI控制器時鐘仿真驗證
當SPI工作在主模式下,全功能SPI控制器根據從控制器的時序要求會提供具有4種不同極性和相位的時鐘。圖6為SPI控制器內部時鐘生產模塊的仿真驗證,輸入DICLK為分頻后時鐘,其對系統時鐘進行了14分頻。時鐘生產模塊對DICLK進行處理,產生LANCLK,CNTCLK,DATCLK和4種不同極性和相位的SPICLK。本文引用地址:http://www.104case.com/article/153493.htm
3.2 SPI控制器工作在主模式下的驗證測試
通過配置寄存器選擇SPI工作在主模式,此時主SPI通過引腳SPICLK提供整個串行網絡的串行時鐘。SPI波特率寄存器決定發送和接收的傳輸速率。發送數據時,主控制器先發送SPICLK信號,然后向SPIDAT和SPITXBUF寄存器寫入數據C00F和8FF,寫入這兩個寄存器都可以啟動SPISIMO引腳上的數據發送(先發送最高有效位)。同時從控制器通過引腳SPISIMO將接收到的數據移入SPIDAT的最低位,當選定量的位發送完時,整個數據發送完畢,數據按照右對齊的格式存入SPIRXBUF中,以備系統讀取(一般為cpu),同時中斷標志位被置為1,當系統發出指令,讀取存在SPITXBUF的數據時,SPI中斷標志位被清零,仿真結果如圖7所示。
4 結束語
文中提出了一種全功能硬件SPI接口設計方法,實現了4種具有不同極性和相位的時鐘,它吸取了傳統軟硬件的優點,具有速度快、結構簡單的特點,并已通過功能仿真和FPGA驗證,結果證明本設計是可靠的,可直接用于FPGA中或者作為硬件電路嵌入具體芯片內。
評論