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