SOC參數(shù)自動配置設(shè)計(jì)方法與功耗優(yōu)化
∥Synchronous FIFO.fifo _depth x fifo _width bit words。
module dma _fifo (clk,rstp,din,writep,readp,dout ,emptyp,fullp);
input clk;
input rstp;
input [15:0] din;
input readp;
input writep;
output [15:0]dout;
output emptyp;
output fullp;
reg emptyp;
reg fullp;
reg [15:0]dout;
reg [ (DEPTH-1):0 ] tail;
reg [ (DEPTH-1):0 ] head;
reg [ (DEPTH-1):0 ] count;
reg [15:0 ] fifomem [0:MAX_COUNT];
……
∥Update FIFO memory。
always @(posedge clk) begin
if ( rstp==1′b0 writep==1′b1 fullp==1′b0)
fifomem [head]= din [15:0];
end
∥Update the head register。
always @(posedge clk) begin
if ( rstp==1′b1)
head[1:0 ]=2′b0;
else
if (writep==1′b1 fullp==1′b0)
head[1:0 ]=head[1:0 ] + 1;
end
……
在上述程序段中, din [15:0 ] 對應(yīng)參數(shù)fifo_width=16 的情況, 如果在dma_top 模塊中用Vperl 語法例化了dma_fifo ( Instance(dmafifo);) ,那么Vperl把din[15:0]連接進(jìn)dma_top ,并進(jìn)而生成dma_top.v 代碼,即dma_top.v 的信號定義。
Vperl 實(shí)際上是接管了模塊間的信號連接工作,使得設(shè)計(jì)師不用擔(dān)心參數(shù)改變對模塊間關(guān)系的影響。 另外,Vperl 的另一項(xiàng)優(yōu)點(diǎn)就是省去了每個(gè)HDL 文件中繁瑣的信號定義,避免因?yàn)樾盘柖x引起的語法錯(cuò)誤(比如信號忘記定義、信號名打錯(cuò)等) ,大大加快源代碼的編寫速度。 當(dāng)然,使用Vperl 需要遵循一定的語法。
在參數(shù)自動配置機(jī)制中,結(jié)合Eperl 和Vperl這兩種工具就可以由選定的參數(shù)組合自動地配置硬件結(jié)構(gòu)。 對于軟件而言,由C 語言編寫的應(yīng)用程序不需要修改,但是編譯器需要針對不同的執(zhí)行單元的配置增加減少指令并進(jìn)行優(yōu)化。
SOC 參數(shù)優(yōu)化
一個(gè)SOC 中包括了P1 , P2 , P3 , ..., Pn 等參數(shù)。每個(gè)參數(shù)的值都可以從一個(gè)有限集合中選取。 為了選擇最優(yōu)的參數(shù)值,也就是為了達(dá)到最優(yōu)的系統(tǒng)配置,使功耗、性能和面積達(dá)到合理的目標(biāo),需要進(jìn)行參數(shù)優(yōu)化。 一種方法是運(yùn)行一次仿真后,記錄下指令序列(trace) ,將不同的參數(shù)配置結(jié)合指令序列通過純軟件的行為分析器進(jìn)行分析。 這種方法的優(yōu)勢是速度快。 但是在不同的結(jié)構(gòu)參數(shù)下,指令序列差別很大,特別是當(dāng)指令集都發(fā)生改變時(shí),結(jié)果的可信度大大降低;而且行為分析器對一些動態(tài)參數(shù),比如動態(tài)電壓,對功耗的影響無法估計(jì),所以可能不得不進(jìn)行多次仿真來獲得較準(zhǔn)確的功耗估計(jì)。 由于仿真時(shí)間一般較長,參數(shù)的優(yōu)化算法對設(shè)計(jì)周期的影響很大。
參數(shù)的屬性
在SOC 設(shè)計(jì)中的定制概念不再是晶體管級的定制,而是體現(xiàn)在模塊級層面上,具體表現(xiàn)為系統(tǒng)的結(jié)構(gòu)參數(shù)。 SOC 的系統(tǒng)參數(shù)具有一些屬性,如大多數(shù)系統(tǒng)參數(shù)是相互影響的,這些相關(guān)性必須在參數(shù)配置時(shí)予以考慮。 相關(guān)性可以區(qū)分為數(shù)值相關(guān)和性能相關(guān)。 參數(shù)自身也有單調(diào)性和層次性。
數(shù)值相關(guān)
兩參數(shù)的數(shù)值相關(guān)意味著一個(gè)參數(shù)的選擇限制了另一個(gè)參數(shù)的選擇范圍。 例如對于容量限制為64 ×8 bit s 的直接存儲器存取(DMA) 緩沖區(qū),可以緩沖64 個(gè)8 位數(shù)據(jù),但是當(dāng)用于緩沖32 位數(shù)據(jù)時(shí),只能放16 個(gè)數(shù)據(jù)。 在這里數(shù)據(jù)個(gè)數(shù)和數(shù)據(jù)格式是數(shù)值相關(guān)的。 再如可配置處理器的乘法器(MUL) 單元一般不會和乘累加器(MAC)單元一起出現(xiàn),因?yàn)閮烧叩墓δ苁侵丿B的。 在進(jìn)行參數(shù)選擇時(shí),利用數(shù)值相關(guān)性可以去除一些不可能的參數(shù)值,縮小參數(shù)的選擇范圍。
性能相關(guān)
兩參數(shù)的性能相關(guān)意味著一個(gè)參數(shù)的改變會影響另一個(gè)參數(shù)的最優(yōu)選擇。性能相關(guān)是有方向性的,如果參數(shù)B 與A 性能相關(guān), 則參數(shù)A 是B 的主動參數(shù),參數(shù)B 是A 的隨動參數(shù)。 在參數(shù)選擇時(shí),可以先確定A 再確定B 。如寄存器的個(gè)數(shù)相關(guān)與MUL 單元相關(guān)意味著MUL 單元是主動參數(shù),而寄存器個(gè)數(shù)是隨動參數(shù)。 兩個(gè)參數(shù)也可能互相相關(guān),也就是說參數(shù)A 和B 之間形成環(huán)路。 這時(shí)兩個(gè)參數(shù)必須同時(shí)調(diào)整才能得到最優(yōu)的方案。 例如高速緩存的組參數(shù)和每個(gè)緩存塊的容量參數(shù)的性能是相關(guān)的。 在進(jìn)行參數(shù)選擇時(shí),性能不相關(guān)的參數(shù)可以獨(dú)立選取最優(yōu)解。
單調(diào)性
很多參數(shù)對某一優(yōu)化目標(biāo)而言是單調(diào)函數(shù)。 例如決定UART 緩沖區(qū)大小的參數(shù),對功耗這一優(yōu)化目標(biāo),一般是緩沖區(qū)越大功耗越大。 參數(shù)的方向性也可以縮小參數(shù)的選擇范圍。
層次性
模塊參數(shù)只影響模塊自身,比如Cache 容量、Cache 行大小和關(guān)聯(lián)組個(gè)數(shù)。 多個(gè)模塊參數(shù)可以形成一個(gè)系統(tǒng)參數(shù),比如從系統(tǒng)角度來看,Cache 失配率就是一個(gè)系統(tǒng)參數(shù)。 利用參數(shù)的層次性可以進(jìn)行局部優(yōu)化。
評論