惠為君



摘要:SOC內(nèi)部總線用于連接其內(nèi)部的各個(gè)部件,實(shí)現(xiàn)主控部件與從屬部件等的數(shù)據(jù)傳輸,是SOC設(shè)計(jì)必不可少的關(guān)鍵部件。本文分析了SOC總線特性、結(jié)構(gòu),對(duì)系統(tǒng)進(jìn)行了模塊劃分。在設(shè)計(jì)了仲裁協(xié)議的基礎(chǔ)上,基于quartus平臺(tái),verilogHDL語言實(shí)現(xiàn)了各模塊的設(shè)計(jì)。Modelsim仿真和FPGA下載驗(yàn)證表明,設(shè)計(jì)是有效的。
關(guān)鍵詞:總線;Verilog HDL;Modelsim;FPGA
中圖分類號(hào):TN91? ? 文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào):1009-3044(2021)14-0206-02
總線是SOC系統(tǒng)中CPU與內(nèi)存、IO設(shè)備之間的共享通道。內(nèi)部總線的設(shè)計(jì)往往決定了芯片的性能、時(shí)延及芯片的復(fù)雜度。SOC內(nèi)部總線一般具有數(shù)據(jù)傳送并行、連接部件多、全雙工通信的特點(diǎn)。
連接總線的部件分為主控部件和從屬部件。主控部件向總線申請(qǐng),總線經(jīng)過仲裁,批準(zhǔn)了該主控部件的使用權(quán),同時(shí)向從屬部件發(fā)出片選信號(hào),在此基礎(chǔ)上,主控部件與從屬部件通過總線實(shí)現(xiàn)數(shù)據(jù)傳輸。
1信號(hào)定義
主控部件、總線、從屬部件通信的信號(hào)定義如圖1所示。
主控部件和從屬部件掛在總線上,通過總線進(jìn)行通信,二者不直接有引腳連接。從圖1可以看出,主控部件和從屬部件通過總線實(shí)現(xiàn)全雙工并行通信,讀寫分開,提高了效率。
總線可以掛接若干主控部件和從屬部件。每個(gè)主控部件定義了7種引腳,引腳名稱、寬度等定義如表1所示。
從屬部件定義了5種引腳,引腳名稱、寬度等定義如表2所示。
2 總體設(shè)計(jì)
從功能上劃分,總線結(jié)構(gòu)分為四個(gè)部分,如圖2所示。為簡(jiǎn)單計(jì),主控部件和從屬部件都取三個(gè)。
按照功能劃分,總線結(jié)構(gòu)分為如下四個(gè)部分。
1)主控?cái)?shù)據(jù)選擇器:根據(jù)仲裁結(jié)果,選擇一個(gè)主控部件。
2)總線仲裁器:根據(jù)總裁機(jī)制,選擇一個(gè)主控部件擁有總線使用權(quán)。
3)地址譯碼器:主控部件輸出從屬部件地址,譯碼器根據(jù)地址生成從屬部件的片選信號(hào)。
4)從屬數(shù)據(jù)選擇器:根據(jù)片選信號(hào),選擇一個(gè)從屬部件。
3 模塊設(shè)計(jì)
總線仲裁器決定和一個(gè)主控部件通信的從屬部件。主控部件向仲裁器發(fā)出請(qǐng)求信號(hào)(req),仲裁器根據(jù)仲裁機(jī)制,發(fā)出有效的批準(zhǔn)信號(hào)(grt),授予一個(gè)主控部件總線使用權(quán)。
三個(gè)主控部件沒有優(yōu)先級(jí),隨機(jī)向總線申請(qǐng)使用權(quán)。仲裁器采用輪詢作為仲裁機(jī)制,按照請(qǐng)求的先后順序確定總線使用權(quán)。仲裁器是一種周期動(dòng)作的模塊電路,使用狀態(tài)機(jī)來設(shè)計(jì)。對(duì)應(yīng)主控部件數(shù),設(shè)計(jì)三個(gè)狀態(tài)。
1)狀態(tài)0:0號(hào)主控部件取得總線使用權(quán)。
2)狀態(tài)1:1號(hào)主控部件取得總線使用權(quán)。
3)狀態(tài)2:2號(hào)主控部件取得總線使用權(quán)。
在狀態(tài)0時(shí),也就是0號(hào)主控部件使用總線的時(shí)候,主控部件請(qǐng)求被批準(zhǔn)的順序?yàn)?號(hào)1號(hào)2號(hào)。依次類推,狀態(tài)1時(shí),批準(zhǔn)順序?yàn)?號(hào) 2號(hào) 0號(hào),狀態(tài)2時(shí),批準(zhǔn)順序?yàn)?號(hào)0號(hào)1號(hào)。 其狀態(tài)轉(zhuǎn)換圖如圖2所示。Req0、Req1和Req2為三個(gè)主控部件向總線申請(qǐng)使用權(quán)信號(hào),其值為1時(shí),表示申請(qǐng)使用權(quán),為0時(shí),表示撤銷申請(qǐng)使用權(quán)。
復(fù)位及默認(rèn)狀態(tài)時(shí),系統(tǒng)的狀態(tài)取狀態(tài)0。
3.1 主控?cái)?shù)據(jù)選擇器
接受一個(gè)主控部件的Addr、Rw、Addr_s、Wr_data信號(hào)。其中,Addr信號(hào)發(fā)給從屬地址譯碼器,其余信號(hào)發(fā)給從屬部件。
4 模塊實(shí)現(xiàn)及仿真
基于Verilog HDl實(shí)現(xiàn)各模塊。模塊的文件名,如表3所示。
4.1 總線仲裁器
實(shí)現(xiàn)仲裁控制的部分核心代碼如下:
case(owner)
2'b00 : begin
if(req0 == 1'b1) owner = 2'b00;
else if(req1 == 1'b1) owner = 2'b01;
else if(req2==1'b1) owner = 2'b10; end
2'b01 : begin
if(req1 == 1'b1) owner = 2'b01;
else if(req2 == 1'b1) owner = 2'b10;
else if(req0 == 1'b1) owner = 2'b00; end
2'b10 : begin
if(req2 == 1'b1) owner = 2'b10;
else if(req0 == 1'b1) owner = 2'b00;
else if(req1 == 1'b1) owner = 2'b01; end
default: owner = 2'b00;
模塊用一個(gè)摩爾狀態(tài)機(jī)來實(shí)現(xiàn),按照仲裁器狀態(tài)圖實(shí)現(xiàn)狀態(tài)機(jī)代碼。寄存器owner存儲(chǔ)輪詢狀態(tài),在時(shí)鐘的觸發(fā)下,不同的狀態(tài)授權(quán)不同的主控模塊取得總線使用權(quán)。
4.2 總線頂層模塊
實(shí)現(xiàn)了各模塊之后,按照?qǐng)D2總線結(jié)構(gòu)圖,實(shí)例化個(gè)模塊,完成總線設(shè)計(jì)。 實(shí)例化模塊部分代碼如下:
bus_arbiter u2(.clk(clk),.reset(reset),.req0(req0),.req1(req1),.req2(req2),.grant0(tgrant0),.grant1(tgrant1),.grant2(tgrant2));
bus_slave_addr_dec u3(.slave_addr(tslave_addr),.cs0(tcs0),.cs1(tcs1),.cs2(tcs2)) ;
模塊實(shí)現(xiàn)的symbol如圖4所示。輸入部分只顯示了一個(gè)主控部件信號(hào),其余信號(hào)可以類推。
4.3 總線模塊仿真
基于modelsim對(duì)頂層模塊bus進(jìn)行了仿真。仿真結(jié)果如圖5所示,可以看出,主控部件和從屬部件的數(shù)目都取三個(gè),總線輸出mdata和sdata的讀取是正確的。
5結(jié)束語
對(duì)SOC內(nèi)部總線的特征進(jìn)行了分析,在此基礎(chǔ)上,按照不同的功能進(jìn)行了模塊劃分。劃分的四個(gè)模塊分別是總線仲裁器、主控部件數(shù)據(jù)選擇器、從屬部件數(shù)據(jù)選擇器、從屬部件地址譯碼器。在分析了仲裁協(xié)議的基礎(chǔ)上,利用狀態(tài)機(jī)技術(shù)完成了仲裁器設(shè)計(jì)。完成了四個(gè)模塊設(shè)計(jì)以后,利用模塊實(shí)例化方法實(shí)現(xiàn)了頂層模塊設(shè)計(jì)。為了試驗(yàn)方便,本設(shè)計(jì)采用了較少的主控部件和從屬部件數(shù)目,在這一方面,設(shè)計(jì)還可以改善。
【通聯(lián)編輯:梁書】