TMS320C6678上电配置和FPGA复位DSP
生活随笔
收集整理的這篇文章主要介紹了
TMS320C6678上电配置和FPGA复位DSP
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
參考手冊:TMS320C6678用戶手冊。 https://blog.csdn.net/u014404875/article/details/79771589
1. DSP上電復(fù)位配置什么?
DSP的大、小端,自啟動(boot)模式,PCIe模式,網(wǎng)絡(luò)協(xié)處理器時鐘選擇需要在上電復(fù)位的時候選擇,怎么選擇? 依靠上電時候鎖定DSP Device Configuration pins(設(shè)備配置管腳)的邏輯電平。 配置管腳的邏輯電平怎么設(shè)置? 一般采用兩種方式:
- 第一種是把DSP的配置管腳全部和FPGA的IO連接,由FPGA上電控制(文末附FPGA復(fù)位DSP程序)
- 第二種是通過外部上拉/下拉電阻。
2. TMS320C6678設(shè)備配置管腳
(1) LENDIAN :決定DSP的大小端。 (2) BOOTMODE[12:0] :決定DSP的自啟動模式(詳情見BootLoader for the C66x DSP User Guide)。 (3) PCIESSMODE : 決定PCIe子系統(tǒng)處于EP、legacy EP還是RC。 (4) PCIESSEN : 決定是否使能PICe 子系統(tǒng),默認(rèn)是不使能。 (5) PACKSEL: 決定網(wǎng)絡(luò)協(xié)處理器的輸入時鐘是核時鐘還是PASSCLK時鐘。
3. DSP上電時序 DSP的上電時序,就是上電復(fù)位的時序。 設(shè)備初始化分為兩個階段: (1) 所有的供電電源穩(wěn)定,不同的電源有供電時序,可見下面時序圖。 (2) RESET、POR、RESERFULL按時序拉高,當(dāng)然還包括時鐘輸入穩(wěn)定。
上電時序圖 注意: (1) 在電源穩(wěn)定期間,POR要保持低電平,所以復(fù)位前拉低。 (2) DDRCLK、REFCLK應(yīng)該在POR拉高前觸發(fā)。 (3) 一旦獲得DVDD18供電,RESETSTAT拉低。 在DVDD18供電前,所有的LVCMOS輸入和雙向管腳不能驅(qū)動為低電平或拉高。 (4) 在DVDD18有效后,RESETSTAT可以在任何時刻被拉高。在POR控制boot下,RESET必須在POR拉高前拉高。 (5) 在電源穩(wěn)定后,POR必須持續(xù)保持低電平至少100us。至此,電源穩(wěn)定階段結(jié)束。 (6) 在電源穩(wěn)定階段后設(shè)備初始化需要500個REFCLK時鐘周期。最大時鐘周期是33.33nsec,所以在POR上升沿前延遲16us是必要的。在整個16us期間,時鐘必須是激活的。 (7) 在POR穩(wěn)定在高電平之后,RESETFULL必須要保持低電平24個REFCLK時鐘周期。 (8) 在RESETFULL上升沿,設(shè)備鎖定GPIO 配置管腳的電平,然后進行配置,到復(fù)位狀態(tài)位RESETSTAT信號拉高延遲大約10000到50000個時鐘周期。 (9) GPIO配置必須在RESETFULL上升沿前保持至少12個REFCLK時鐘周期(transitions)。 (10) GPIO配置必須在RESETFULL上升沿后保持至少12個REFCLK時鐘周期(transitions)。 總的來說: 在各個電源供電正常后,DSP的時鐘穩(wěn)定后,驅(qū)動RESET、POR、RESETFULL依次拉高,在RESETFULL的上升沿鎖定DSP復(fù)位配置的GPIO電平,然后RESETSTAT拉高,則DSP上電復(fù)位完成。
4. DSP的復(fù)位模式 總共四種復(fù)位模式,前三種復(fù)位模式都會觸發(fā)RESETSTAT,局部復(fù)位不會觸發(fā)RESETSTAT. (1) 上電復(fù)位 (2) 硬件復(fù)位 (3) 軟件復(fù)位 詳見手冊。 (4) 局部復(fù)位
局部復(fù)位時序圖 上電復(fù)位后,可以進行局部復(fù)位,即對每個核單獨復(fù)位。 局部復(fù)位可以被以下方式觸發(fā):
- LRESET pin
- Watchdog timer、CORESEL[3:0] and RSTCFG register
- LPSC MMRs(memory-mapped registers)??
一般我們不使用局部復(fù)位,如果上電復(fù)位后,發(fā)現(xiàn)某些核處于復(fù)位狀態(tài),而其他核可以連接使用,多半是局部復(fù)位造成的,應(yīng)該把LRESETNMIEN 設(shè)置為1,則可以避免這個問題。
5. FPGA控制DSP上電復(fù)位程序。 module DSP_RST(input clk_25m,input RESETSTAT, //DSP復(fù)位狀態(tài) 0表示復(fù)位態(tài) 1表示工作態(tài)input LOCKED, //時鐘模塊是否正常output ref LRESETNMIENz = 1'b0, //局部復(fù)位管腳output reg PORz=1'b0, //Power-on Resetoutput reg RESETFULL=1'b0, //Full Resetoutput reg RESET=1'b0 );reg [2:0] RES_STATE=2'b00;reg [15:0] por_counter=16'b0,resetfull_counter=16'b0,reset_counter=16'b0;parameter IDLE=2'b00,PULL_RESET=2'b01,PULL_POR=2'b10,PULL_RESETFULL=2'b11;always @(posedge clk_25m)if(LOCKED==1)begincase(RES_STATE)IDLE: RES_STATE<=PULL_RESET ;PULL_RESET: if(reset_counter<25000)beginreset_counter<=reset_counter+16'b1;RES_STATE<=RES_STATE;RESET<=1'b0;PORz<=1'b0;RESETFULL<=1'b0;endelsebeginRESET<=1'b1;LRESETNMIENz<=1`b1; //禁止局部復(fù)位。RES_STATE<=PULL_POR;endPULL_POR: if(por_counter<25000) beginpor_counter<=por_counter+16'b1;RES_STATE<=RES_STATE;PORz<=1'b0;endelsebeginPORz<=1'b1;RES_STATE<=PULL_RESETFULL;endPULL_RESETFULL:if(resetfull_counter<25000)beginresetfull_counter<=resetfull_counter+16'b1;RES_STATE<=RES_STATE;RESETFULL<=1'b0;endelsebeginRESETFULL<=1'b1;RES_STATE<=RES_STATE;endendcase endelsebeginreset_counter<=16'b0;resetfull_counter<=16'b0;por_counter<=16'b0;RES_STATE<=IDLE;RESET<=1'b0;PORz<=1'b0;RESETFULL<=1'b0;endendmodule`
總結(jié)
以上是生活随笔為你收集整理的TMS320C6678上电配置和FPGA复位DSP的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 测视力距离5米还是3米_7岁男孩近视猛涨
- 下一篇: mysql异常关闭7034,SQL IS