引言
在數(shù)字IC/FPGA設(shè)計(jì)的過(guò)程中,對(duì)PPA的優(yōu)化是無(wú)處不在的,也是芯片設(shè)計(jì)工程師的使命所在。此節(jié)主要將介紹performance性能的優(yōu)化,如何對(duì)時(shí)序路徑進(jìn)行優(yōu)化,提高工作時(shí)鐘頻率。
好的優(yōu)化就應(yīng)該是在代碼書(shū)寫(xiě)之前或書(shū)寫(xiě)時(shí)進(jìn)行考慮,設(shè)計(jì)完成再進(jìn)行優(yōu)化,只能是修改代碼。即便如此,修改代碼優(yōu)化設(shè)計(jì)速度也是值得提倡的。本文討論了如何減少關(guān)鍵路徑延時(shí)、邏輯復(fù)制、插入寄存器增加流水、寄存器平衡、使用并行結(jié)構(gòu)以及消除代碼中的優(yōu)先級(jí)等優(yōu)化設(shè)計(jì)速度的方法。
一. 組合邏輯中插入寄存器(Pipeline) + 重定時(shí)(retiming)
在FPGA或者是數(shù)字IC設(shè)計(jì)中,優(yōu)化時(shí)序最常用且效果最明顯的方法就是在組合邏輯中插入寄存器,也叫做插入流水線。如下圖所示。

該方法額外插入寄存器增加的時(shí)鐘周期延時(shí)并不會(huì)違反整個(gè)設(shè)計(jì)的規(guī)范要求,從而不會(huì)影響設(shè)計(jì)的總體功能性實(shí)現(xiàn),也即額外插入的寄存器在保持吞吐量不變的情況下改善了設(shè)計(jì)的時(shí)序性能,隨之帶來(lái)的是面積的增加,因此需要權(quán)衡好面積和時(shí)序要求。
很多同學(xué)可能會(huì)疑惑,我應(yīng)該在哪里插入寄存器比較好呢?插入寄存器的方法我認(rèn)為有兩種,一種是人為評(píng)估組合邏輯的長(zhǎng)度后在組合邏輯中插入寄存器,另外一種就是直接在組合邏輯的輸出直接插入寄存器再由EDA工具自動(dòng)retiming重定時(shí),如下圖。

什么是retiming重定時(shí)并且它的作用是什么呢?retiming就是人為或者是工具在不增加寄存器個(gè)數(shù)的前提下,通過(guò)改變寄存器的位置來(lái)優(yōu)化關(guān)鍵路徑,起到了平衡寄存器件的組合邏輯長(zhǎng)度的作用。
注意的是有時(shí)候并不需要插入寄存器直接進(jìn)行retiming也能一定程度上優(yōu)化時(shí)序路徑。

DC如何啟動(dòng)retiming
方法1 自適應(yīng)retiming(Adaptive retiming)
Adaptive retiming一般是處理常規(guī)設(shè)計(jì),關(guān)鍵路徑的組合邏輯基本上是只會(huì)移動(dòng)到相鄰的寄存器。
compile_ultra -retime
方法2 流水線retiming(pipelined retiming)
Pipelined retiming主要處理pipelined設(shè)計(jì),當(dāng)關(guān)鍵路徑比較長(zhǎng)時(shí),路徑多打幾拍。綜合時(shí),采用pipelined retiming,會(huì)將路徑分?jǐn)偟蕉鄠€(gè)寄存器中,進(jìn)而提升頻率。Pipelined retiming一般針對(duì)某個(gè)模塊進(jìn)行retiming。相應(yīng)的DC指令如下所示。
# set_optimize_registers 設(shè)置需要retiming的designs模塊,可以使用通配符*set_optimize_registerstrue-design [get_designs piped_adder*] compile_ultra
NOTE:對(duì)于retiming對(duì)設(shè)計(jì)的變動(dòng)比較大,需要特別關(guān)注formality是否通過(guò),同時(shí)在設(shè)計(jì)前期比較推薦只對(duì)模塊進(jìn)行retiming,確保設(shè)計(jì)的一致性。
二、組合邏輯平衡(操作符平衡)
操作符平衡就是通過(guò)合理使用括號(hào)來(lái)對(duì)邏輯進(jìn)行分組,通過(guò)這種技術(shù)可以增加設(shè)計(jì)性能,平衡所有輸入到輸出的延時(shí),而整個(gè)設(shè)計(jì)的功能并不會(huì)改變,代價(jià)是可能增加部分面積。如下圖所示,通過(guò)合理使用括號(hào),平衡乘法操作符,使得輸入到輸出的延時(shí)從三級(jí)乘法操作減少到兩級(jí)。

三、適當(dāng)進(jìn)行邏輯復(fù)制以?xún)?yōu)化設(shè)計(jì)速度
邏輯復(fù)制用于當(dāng)某個(gè)信號(hào)的扇出比較大時(shí),會(huì)造成該信號(hào)到各個(gè)目的邏輯節(jié)點(diǎn)的路徑變得過(guò)長(zhǎng),從而成為設(shè)計(jì)中的關(guān)鍵路徑,為了解決這個(gè)問(wèn)題,可以通過(guò)在書(shū)寫(xiě)代碼的時(shí)候?qū)υ撔盘?hào)進(jìn)行復(fù)制,以達(dá)到“分擔(dān)”信號(hào)扇出過(guò)多的目的。邏輯復(fù)制的時(shí)候也分為組合邏輯復(fù)制和寄存器復(fù)制,下面例子是將對(duì)組合邏輯復(fù)制。
原電路
module ...
wire temp;
assign temp = a & b & c;
always @(posedge clk)begin
q1 <= temp;
if(en)
q2 <= temp;
end
endmodule

邏輯復(fù)制后電路
module ...
wire temp1;
wire temp2;
assign temp1 = a & b & c;
assign temp2 = a & b & c;
always @(posedge clk)begin
q1 <= temp1;
if(en)
q2 <= temp2;
end
endmodule

可以看到邏輯復(fù)制后,組合邏輯的扇出由2變成了1,能夠降低組合邏輯的延遲。當(dāng)然寄存器復(fù)制也是類(lèi)似的。
四、通過(guò)消除代碼中的優(yōu)先級(jí)優(yōu)化速度
根據(jù) Altera器件的特點(diǎn),一般if-else 嵌套長(zhǎng)度不要超過(guò)7級(jí)。那如何通過(guò)消除代碼中的優(yōu)先級(jí)來(lái)優(yōu)化設(shè)計(jì)的速度?所謂消除優(yōu)先級(jí),就是說(shuō)設(shè)計(jì)功能可以通過(guò)無(wú)優(yōu)先級(jí)方式來(lái)實(shí)現(xiàn),對(duì)于那些對(duì)優(yōu)先級(jí)有要求的功能模塊無(wú)法使用這個(gè)技巧。
有優(yōu)先級(jí)的寫(xiě)法
module ...
always @(posedge clk)begin
if(sel=4'b0001)
sig_out <= 4'b0001;
else if(sel=4'b0010)
sig_out <= 4'b0011;
else if(sel=4'b0100)
sig_out <= 4'b0101;
else if(sel=4'b1000)
sig_out <= 4'b0111;
else
sig_out <= 4'b1001;
end
endmodule

無(wú)優(yōu)先級(jí)的寫(xiě)法
假如說(shuō)上述代碼無(wú)優(yōu)先級(jí)要求,可以使用并行的case語(yǔ)句將代碼修改為:
module ...
always @(posedge clk)begin
case(sel)
4'b0001: sig_out <= 4'b0001;
4'b0010: sig_out <= 4'b0011;
4'b0100: sig_out <= 4'b0101;
4'b1000: sig_out <= 4'b0111;
default: sig_out <= 4'b1001;
endcase
end
endmodule

-
FPGA
+關(guān)注
關(guān)注
1655文章
22288瀏覽量
630340 -
寄存器
+關(guān)注
關(guān)注
31文章
5590瀏覽量
129076 -
時(shí)序
+關(guān)注
關(guān)注
5文章
403瀏覽量
38628
原文標(biāo)題:FPPA優(yōu)化之時(shí)序優(yōu)化
文章出處:【微信號(hào):gh_9d70b445f494,微信公眾號(hào):FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
FPGA高級(jí)時(shí)序綜合教程
FPGA中的I_O時(shí)序優(yōu)化設(shè)計(jì)
FPGA的時(shí)序優(yōu)化高級(jí)研修班
FPGA時(shí)序約束的幾種方法
FPGA時(shí)序約束的幾種方法
靜態(tài)時(shí)序優(yōu)化策略有哪些?
如何有效的管理FPGA設(shè)計(jì)中的時(shí)序問(wèn)題
靜態(tài)時(shí)序分析在IC設(shè)計(jì)中的應(yīng)用
FPGA設(shè)計(jì):時(shí)序是關(guān)鍵
如何有效地管理FPGA設(shè)計(jì)中的時(shí)序問(wèn)題
在FPGA設(shè)計(jì)中,時(shí)序就是全部
FPGA中的時(shí)序約束設(shè)計(jì)

數(shù)字IC/FPGA設(shè)計(jì)中的時(shí)序優(yōu)化方法
評(píng)論