每日一摘 流水線

2022-05-24 08:24:09 字數 2542 閱讀 8817

一、什麼是流水線?

流水線設計就是將組合邏輯系統地分割,並在各個部分(分級)之間插入暫存器,並暫存中間資料的方法。目的是將乙個大操作分解成若干的小操作,每一步小操作的時間較小,所以能提高頻率,各小操作能並行執行,所以能提高資料吞吐率(提高處理速度)。

二、什麼時候用流水線設計?

使用流水線一般是時序比較緊張,對電路工作頻率較高的時候。典型情況如下:

1)功能模組之間的流水線,用桌球 buffer 來互動資料。代價是增加了 memory 的數量,但是和獲得的巨大效能提公升相

比,可以忽略不計。

2) i/o 瓶頸,比如某個運算需要輸入 8 個資料,而 memroy 只能同時提供 2 個資料,如果通過適當劃分運算步驟,使用

流水線反而會減少面積。

3)片內 sram 的讀操作,因為 sram 的讀操作本身就是兩極流水線,除非下一步操作依賴讀結果,否則使用流水線是自

然而然的事情。

4)組合邏輯太長,比如(a+b)*c,那麼在加法和乘法之間插入暫存器是比較穩妥的做法。

三、流水線的優缺點

1)優點: 流水線縮短了在乙個時鐘週期內給的那個訊號必須通過的通路長度,增加了資料吞吐量,從而可以提高時鐘

頻率,但也導致了資料的延時。舉例如下:

例如:乙個 2 級組合邏輯,假定每級延遲相同為 tpd,

1.無流水線的總延遲就是 2tpd,可以在乙個時鐘週期完成,但是時鐘週期受限制在 2tpd;

2.流水線:

每一級加入暫存器(延遲為 tco)後,單級的延遲為 tpd+tco,每級消耗乙個時鐘週期,流水線需要 2 個時鐘週期來獲得第乙個計算結果,稱 為首次延遲,它要 2*( tpd+tco),但是執行重複操作時,只要乙個時鐘週期來獲得最後的計算結果,稱為吞吐延遲( tpd+tco)。可見只要 tco 小於 tpd,流水線就可以提高速度。 特別需要說明的是,流水線並不減小單次操作的時間,減小的是整個資料的操作時間,請大家認真體會。

2) 缺點: 功耗增加,面積增加,硬體複雜度增加,特別對於複雜邏輯如 cpu 的流水線而言,流水越深,發生需要 hold 流水線或 reset 流水線的情況時,時間損失越大。 所以使用流水線並非有利無害,大家需權衡考慮。

四、乙個 8bit 流水線加法器的小例子

非流水線:

module add8( a, b, c);

input [7:0] a;

input [7:0] b;

output [8:0] c;

assign c[8:0] = + ;

endmodule

採用兩級流水線:第一級低 4bit,第二級高 4bit,所以第乙個輸出需要 2 個時鐘週期有效,後面的資料都是 1 個週期之後有效。

module

adder8_2(

clk,

cin,

cina,

cinb,

sum,

cout);

input

clk;

input

cin;

input [7:0

] cina;

input [7:0

] cinb;

output [7:0

] sum;

output

cout;

regcout;

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

這裡講到的流水線,主要是一種硬體設計的演算法,如第一條中表述的流水線設計就是將組合邏輯系統地分割,並在各個部分(分級)之間插入暫存器,並暫存中間資料的方法。針對處理器中的流水線結構。比如,比如 5—6 個不同功能的電路單元組成一條指令處理流水線,然後將一條指令分成 5—6 步後再由這些電路單元分別執行,這樣就能實現在乙個 cpu 時鐘週期完成一條指令,因此提高 cpu 的運算速度。 一般的 cpu 中,每條整數流水線都分為四級流水, 即指令預取、 解碼、 執行、 寫回結果, openrisc採用的是 5 級整數流水線。當然它們的核心思想都是利用並行執行提高效率。

總結一下,流水線就是插入暫存器,以面積換取速度。

流水線排程

n個作業要在由2臺機器m1和m2組成的流水線上完成加工。每個作業加工的順序都是先在m1上加工,然後在m2上加工。m1和m2加工作業i所需的時間分別為a i 和b i 你可以安排每個作業的執行順序,使得從第乙個作業在機器m1上開始加工,到最後乙個作業在機器m2上加工完成所需的時間最少。求這個最少的時間...

流水線冒險

流水線冒險 回顧一下常用五階段流水線 f 取指 d 解碼 e 執行 m 訪存 w 寫回 注意 對暫存器檔案的寫只有在時鐘上公升的時候才會更新!資料冒險的原因 對暫存器檔案的讀寫是在不同階段進行的 1.用暫停來避免資料冒險 暫停時,處理器會停止流水線中一條或多條指令,直到冒險條件不再滿足。在本該正常處...

渲染流水線

應用階段 cpu準備資料,skinmeshrender,meshfilter,meshrender 頂點資料,三角形資料,法線資料,切線資料,渲染設定指令,紋理資料,uv資料 由cpu傳送給gpu,即一次drawcall 幾何階段 頂點變換,計算頂點顏色 如逐頂點光照 齊次裁剪空間,透視除法,歸一化...