基于FPGA與ADSP TS201的總線接口設(shè)計(jì)方案
2 FPGA設(shè)計(jì)
由于DSP的協(xié)議是相對(duì)固定的,FPGA只需按照協(xié)議進(jìn)行設(shè)計(jì)即可,下面以DSP訪問(wèn)FPGA內(nèi)部寄存器為例詳細(xì)介紹。筆者建議采用同步設(shè)計(jì),主要信號(hào)、輸出信號(hào)都由時(shí)鐘沿驅(qū)動(dòng),可以有效避免毛刺。
為了使所設(shè)計(jì)的模塊通用化,可設(shè)流水深度、數(shù)據(jù)總線位寬、寄存器位寬、寄存器地址可設(shè)。筆者建議采用參數(shù)化設(shè)計(jì),使用參數(shù)傳遞語(yǔ)言GENERIC將參數(shù)傳遞給實(shí)體,在實(shí)體內(nèi)部使用外if…else結(jié)構(gòu),這樣在一個(gè)程序中可以包含各種情況,但不會(huì)增加邏輯的使用量。下面以個(gè)別情況為例,詳細(xì)介紹。 function ImgZoom(Id)//重新設(shè)置圖片大小 防止撐破表格 { var w = $(Id).width; var m = 650; if(w
2.1 32位數(shù)據(jù)總線,32位寄存器,寫(xiě)操作
前面提過(guò),DSP采用流水協(xié)議寫(xiě)FPGA時(shí),流水深度固定為1,F(xiàn)PGA在前一時(shí)鐘沿采到地址、WRx信號(hào)有效,在下一時(shí)鐘沿就鎖存數(shù)據(jù),如圖3所示,F(xiàn)PGA在時(shí)鐘沿1采到地址總線上的地址與寄存器地址一致,WRx信號(hào)為低,寫(xiě)標(biāo)志信號(hào)S_W_FLAG置高,由于采用同步設(shè)計(jì),F(xiàn)PGA只有在時(shí)鐘沿2才能采到S_W_FLAG為高,一旦采到S_W_FLAG為高,F(xiàn)PGA就鎖存數(shù)據(jù)總線上的數(shù)據(jù),即在時(shí)鐘沿2鎖存數(shù)據(jù)。
2.2 32位數(shù)據(jù)總線,32位寄存器,讀操作
與寫(xiě)寄存器不一樣,讀寄存器時(shí)流水深度在1到4之間可設(shè),需要注意的是,為避免總線沖突,DSP不讀時(shí),F(xiàn)PGA數(shù)據(jù)總線應(yīng)保持三態(tài)。
如果流水深度設(shè)置為1,F(xiàn)PGA在前一時(shí)鐘沿采到地址、RD信號(hào)有效,應(yīng)確保在下一時(shí)鐘沿?cái)?shù)據(jù)已經(jīng)穩(wěn)定的出現(xiàn)在數(shù)據(jù)總線上,否則DSP不能正確讀取數(shù)據(jù),如圖3所示,在時(shí)鐘沿1采到地址總線上的地址與寄存器地址一致,RD信號(hào)為低,驅(qū)動(dòng)數(shù)據(jù)總線,在時(shí)鐘沿2數(shù)據(jù)已穩(wěn)定出現(xiàn)在數(shù)據(jù)總線上,DSP可以讀取。
如果流水深度設(shè)置為2,F(xiàn)PGA在前一時(shí)鐘沿采到地址、RD信號(hào)有效,應(yīng)確保隔一時(shí)鐘周期后,數(shù)據(jù)穩(wěn)定的出現(xiàn)在數(shù)據(jù)總線上,這樣就像寫(xiě)操作一樣,需要加一個(gè)標(biāo)志,當(dāng)條件滿(mǎn)足,標(biāo)志為高,一旦標(biāo)志為高,輸出數(shù)據(jù),如圖4所示。
綜上所述,流水深度加深一級(jí),F(xiàn)PGA就晚一個(gè)時(shí)鐘周期驅(qū)動(dòng)數(shù)據(jù)總線??梢钥闯?,雖然流水深度在1~4之間可設(shè),但是總能保證一個(gè)時(shí)鐘周期傳輸一個(gè)數(shù)據(jù)。 function ImgZoom(Id)//重新設(shè)置圖片大小 防止撐破表格 { var w = $(Id).width; var m = 650; if(w
2.3 32位數(shù)據(jù)總線,64位寄存器
前面提到,突發(fā)流水協(xié)議與普通流水協(xié)議數(shù)據(jù)傳輸機(jī)制是一樣的,只是多了一個(gè)指示信號(hào)BRST,當(dāng)寫(xiě)操作時(shí),F(xiàn)PGA如果在前一時(shí)鐘沿采到地址、WRx、BRST信號(hào)有效,在下一時(shí)鐘沿就鎖存數(shù)據(jù)到寄存器低位,而如果在前一時(shí)鐘沿采到地址、WRL有效,而B(niǎo)RST信號(hào)無(wú)效,在下一時(shí)鐘沿就鎖存數(shù)據(jù)到寄存器高位。同樣,當(dāng)讀操作時(shí),F(xiàn)PGA如果采到地址、RD、BRST信號(hào)有效,就將寄存器低位驅(qū)動(dòng)到數(shù)據(jù)總線上,而如果采到地址、RD有效,BRST而信號(hào)無(wú)效,就將寄存器高位驅(qū)動(dòng)到數(shù)據(jù)總線上,具體在哪個(gè)時(shí)鐘沿驅(qū)動(dòng),由流水深度決定。
3 DSP設(shè)置
ADSP TS201與FPGA通信時(shí),DSP是否采用流水協(xié)議,數(shù)據(jù)總線位寬,以及流水深度都可以通過(guò)系統(tǒng)配置寄存器SYSCON進(jìn)行設(shè)置,SYSCON詳細(xì)設(shè)置見(jiàn)文獻(xiàn)[3],以32位數(shù)據(jù)總線訪問(wèn)64位寄存器為例,一級(jí)流水,SYSCON設(shè)置為
4 結(jié)束語(yǔ)
文中實(shí)現(xiàn)了DSP通過(guò)外部總線接口訪問(wèn)FPGA內(nèi)部寄存器,但是如果需要傳輸?shù)臄?shù)據(jù)量很大,或者DSP與FPGA的時(shí)鐘不同步,就不能用寄存器來(lái)實(shí)現(xiàn),需要借助于雙口RAM或者FIFO,讀者可以在本文的基礎(chǔ)上加以改進(jìn)。
評(píng)論