流水線技術幾乎是最常用的提供系統工作速率的強有力手段。
• 它是面積換取速度思想的又一種具體體現。
考慮乙個電路每個時鐘週期執行n個操作,工作頻率為f。我們可以認為吞吐量為 n*f ops/sec。
• pipeline本質上是通過增加f來提高吞吐量,達到latency和area的tradeoff。
• 什麼決定了最高工作頻率呢?
• 回憶static timing analysis
• 在flip flops之間的最大延時
時序電路之間的組合電路延時決定整個電路的速度,即最大工作時鐘頻率
通過將algorithm演算法分為兩個部分,在中間插入觸發器;
其思想是利用暫存器將一條長路徑切分成幾段小路徑,從而達到提高工作速率的作用。
• 假設原路徑延時為t,加入2級流水線並且假設路徑切割均勻,則路徑延時可以減少到約t/3,從而系統速率
可以提高到原來的3倍左右。
• 當然要注意的是輸出同時會往後推遲3個時鐘週期。所以採用流水線技術時,要記得進行時序調整;
不使用流水線
module add(a, b, c);
input [7:0] a;
input [7:0] b;
output [8:0] c;
assign c[8:0] = + ;
endmodule
採用兩級流水線:第一級低 4bit,第二級高 4bit,進製訊號快取後在第二個時鐘一起計算
module add(clk,cin,cina,cinb,sum,cout);
input clk;
input cin;
input [7:0] cina;
input [7:0] cinb;
output [7:0] sum;
output cout;
reg cout;
reg cout1; //插入暫存器
reg [3 :0 ] sum1 ; //插入暫存器
reg [7 :0 ] sum;
reg [3:0] cina_reg; //插入暫存器
reg [3:0] cinb_reg;//插入暫存器
always @(posedge clk) //第一級流水
begin
<= cina[3:0] + cinb [3:0] + cin ;
endalways @(posedge clk)
begin
cina_reg <= cina[7:4];
cinb_reg <= cinb[7:4];
endalways @(posedge clk) //第二級流水
begin
<= + + cout1 ,sum1[3:0]} ;
endendmodule
FPGA之流水線演算法
pc 世界永恆不變的信條就是提高效能,其中乙個方法就是提高系統的時鐘頻率。在另外一篇 blog?靜態時序分析 sta?中已經總結過了,限制系統最大工作頻率的因素有很多,設計者能夠控制的是 dff 之間的組合邏輯的時延 tcomb,降低最大時延路徑 關鍵路徑,critical path 的時延 tco...
瀏覽器渲染流水線解析(二)
核心動畫,每一幀都是由 blink 生成,都需要產生乙個新的 main frame blink 觸發然後交由合成器執行,比如說傳統的 css translation 或者新的 animation api,如果它們觸發的動畫經由 blink 判斷可以交由合成器執行 使用 timer 或者 raf 由 ...
瀏覽器渲染流水線解析(一)
layer compositor 圖層合成器 接收 blink 的輸入,負責圖層樹的管理,圖層的滾動,旋轉等矩陣變幻,圖層的分塊,光柵化,紋理上傳等任務 display compositor 接收 layer compositor 的輸入,負責輸出最終的 opengl 繪製指令,將網頁內容通過 gl...