**:
所謂流水線處理,如同生產裝配線一樣,將操作執行工作量分成若干個時間上均衡的操作段,從流水線的起點連續地輸入,流水線的各操作段以重疊方式執行。這使得操作執行速度只與流水線輸入的速度有關,而與處理所需的時間無關。這樣,在理想的流水操作狀態下,其執行效率很高。
如果某個設計的處理流程分為若干步驟,而且整個資料處理是單流向的,即沒有反饋或者迭代運算,前乙個步驟的輸出是下乙個步驟的輸入,則可以採用流水線設計方法來提高系統的工作頻率。
下面用8位全加器作為例項,分別列舉了非流水線方法、2級流水線方法和4級流水線方法。
(1)非流水線實現方式
module
adder_8bits(din_1, clk, cin, dout, din_2, cout);
input
[7:0] din_1;
input
clk;
input
cin;
output
[7:0] dout;
input
[7:0] din_2;
output
cout;
reg
[7:0] dout;
reg
cout;
always
@(
posedge
clk)
begin
<= din_1 + din_2 + cin;
end
endmodule
(2)2級流水線實現方式:
input
[7:0] cin_a;
input
[7:0] cin_b;
input
cin;
input
clk;
output
cout;
output
[7:0] sum;
reg
cout;
reg
cout_temp;
reg
[7:0] sum;
reg
[3:0] sum_temp;
always
@(
posedge
clk)
begin
= cin_a[3:0] + cin_b[3:0] + cin;
end
always
@(
posedge
clk)
begin
= + + cout_temp, sum_temp};
end
endmodule
注意:這裡在always塊內只能用阻塞賦值方式,否則會出現邏輯上的錯誤!
(3)4級流水線實現方式:
module
adder_8bits_4steps(cin_a, cin_b, c_in, clk, c_out, sum_out);
input
[7:0] cin_a;
input
[7:0] cin_b;
input
c_in;
input
clk;
output
c_out;
output
[7:0] sum_out;
reg
c_out;
reg
c_out_t1, c_out_t2, c_out_t3;
reg
[7:0] sum_out;
reg
[1:0] sum_out_t1;
reg
[3:0] sum_out_t2;
reg
[5:0] sum_out_t3;
always
@(
posedge
clk)
begin
= + + c_in;
end
always
@(
posedge
clk)
begin
= + + c_out_t1, sum_out_t1};
end
always
@(
posedge
clk)
begin
= + + c_out_t2, sum_out_t2};
end
always
@(
posedge
clk)
begin
= + + c_out_t3, sum_out_t3};
end
endmodule
總結:利用流水線的設計方法,可大大提高系統的工作速度。這種方法可廣泛運用於各種設計,特別是大型的、對速度要求較高的系統設計。雖然採用流水線會增大資源的使用,但是它可降低暫存器間的傳播延時,保證系統維持高的系統時鐘速度。在實際應用中,考慮到資源的使用和速度的要求,可以根據實際情況來選擇流水線的級數以滿足設計需要。
這是一種典型的以面積換速度的設計方法。這裡的「面積」主要是指設計所占用的fpga邏輯資源數目,即利用所消耗的觸發器(ff)和查詢表(lut)來衡量。「速度」是指在晶元上穩定執行時所能達到的最高頻率。面積和速度這兩個指標始終貫穿著fpga的設計,是設計質量評價的最終標準。
流水線技術原理和Verilog HDL實現
color darkred size medium 所謂流水線處理,如同生產裝配線一樣,將操作執行工作量分成若干個時間上均衡的操作段,從流水線的起點連續地輸入,流水線的各操作段以重疊方式執行。這使得操作執行速度只與流水線輸入的速度有關,而與處理所需的時間無關。這樣,在理想的流水操作狀態下,其執行效率...
流水線技術理解
流水線,這個詞語最早出於工廠裡面,是資本家為了提高產品的產量而採用的一種技術。我們姑且不去看他的定義,我們從生活中的例子理解什麼是流水線技術 假如我們有很多衣服要洗,現在有一台洗衣機和一台乾衣機,洗衣機用時30分鐘,乾衣機用時60分鐘。如果洗一桶衣服,如下圖所示 很顯然,總時間 洗衣時間 乾衣時間 ...
ARM ARM流水線技術
處理器按照一系列步驟來執行每一條指令,典型的步驟如下 1 從儲存器讀取指令 fetch 2 解碼以鑑別它屬於哪一條指令 decode 3 從指令中提取指令的運算元 這些運算元往往存在於暫存器 reg 中 4 將運算元進行組合以得到結果或儲存器位址 alu 5 如果需要,則訪問儲存器以儲存資料 mem...