天天看點

簡單pipeline的寫法

     通常在設計中我們采用多級流水線對組合邏輯進行分割,流水線的設計不僅使系統擁有更好的timing 并且當流水線級數較多時還可以有效的壓縮bubble。 這裡簡單介紹一種基于ready/valid握手信号的pipeline的設計方法。一個三級流水線的結構如下圖所示:

簡單pipeline的寫法

對于如圖所示的pipeline 有 ready0=~(valid0&!ready1); ready1=~(valid1&!ready2); ready2=~(valid2&!ready_out);即對于每個fliflop 當資料準備好但與後一級握手失敗時才會将ready信号拉低。 [email protected](posedge clk) begin if(valid(x-1)&readyx)

data x<=data x-1;

end

always @(posedge clk) begin if(readyx) validx<=validx-1;

end

可以看到當輸出的ready_out拉低時 流水線不會馬上停住,仍然會讓每一個fliflop中吃滿資料時再停止工作。當pipeline處于停滞狀态時,當ready_out拉高後流水線可以馬上開始工作。是以采用流水線設計可以有效的壓縮bubble。且由于多級流水線将組合邏輯切斷,可以使系統擁有更大的吞吐率

繼續閱讀