采用流水线技术实现8位加法器
?
說明
? ? ?本文基于FPGA和CPLD器件,采用非流水線和流水線技術實現8位加法器,并對比其Quartus II仿真結果和波形時序。
? ? ?器件選擇:
? ? ?Stratix:EP1S40F1020C5(FPGA)
? ? ?MAX7000S:EPM7064SLC44-5(CPLD)
?
實驗一? FPGA實現8位加法器
? ? ?程序清單:
1 /*******************8位加法器(非流水線)***********************/ 2 module adder_nonpipe(cout, sum, ina, inb, cin, enable); 3 4 output cout; 5 output [7:0] sum; 6 input [7:0] ina, inb; 7 input cin, enable; 8 9 reg cout; 10 reg [7:0] sum; 11 reg [7:0] tempa, tempb; 12 reg tempc; 13 14 always @(posedge enable) 15 begin 16 tempa = ina; 17 tempb = inb; 18 tempc = cin; 19 end 20 21 always @(posedge enable) 22 begin 23 {cout,sum} = tempa + tempb + tempc; 24 end 25 26 endmodule? ? ?Compilation編譯報告如圖1所示:
?
圖1 ?8位加法器(非流水線/FPGA)編譯結果
? ? ?RTL Viewer 提供設計的邏輯門級原理圖和層次結構列表,列出整個設計網表的實例、基本單元、引腳和網絡。可過濾顯示在視圖上的信息,瀏覽設計視圖的不同頁面來檢查設計并確定應當作的更改。實驗一的RTL原理圖如圖2所示:
圖2 ?8位加法器(非流水線/FPGA)RTL Viewer
? ? ?Technology Map Viewer 提供設計的底層或基元級特定技術原理表征。它包括一個原理視圖,以及一個層次列表,列出整個設計網表的實例、基本單元、引腳和網絡。實驗一的Techology Map Viewer結果如圖3所示:
圖3 ?8位加法器(非流水線/FPGA)Techology Map Viewer
? ? ?Simulation仿真波形如圖4所示:
圖4 ?8位加法器(非流水線/FPGA)仿真圖
?
?
實驗二? FPGA實現8位加法器(采用2級流水線)
? ? ?程序清單:
1 /*******************8位2級流水加法器*************************/ 2 module adder_pipeline(cout, sum, ina, inb, cin, enable); 3 4 output cout; 5 output [7:0] sum; 6 input [7:0] ina, inb; 7 input cin, enable; 8 9 reg cout; 10 reg [7:0] sum; 11 12 reg [3:0] tempa, tempb, firsts; 13 reg firstc; 14 always @(posedge enable) 15 begin 16 {firstc,firsts} = ina[3:0] + inb[3:0] + cin; 17 tempa = ina[7:4]; //高4位輸入寄存,使其與sum低4位在下級流水線同步輸入。tempb = inb[7:4]; //否則sum的高4位,與低四位分兩個時鐘周期輸出 18 end 19 20 always @(posedge enable) 21 begin 22 {cout,sum[7:4]} = tempa + tempb + firstc; 23 sum[3:0] = firsts; //不能合并為{cout, sum} = {tempa + tempb + firstc, firsts}; 位寬不匹配 24 end 25 26 endmodule
? ? ?另一個可用版本主體代碼如下:
1 reg [4:0] tempa,tempb; 2 reg [3:0] firsts; 3 reg firstc; 4 5 always @(posedge enable) begin //低4 位相加; 6 { firstc, firsts} = {ina[3], ina[3:0]} + {inb[3], inb[3:0]} + cin ; 7 tempa = {ina[7], ina[7:4]}; //似乎應該高位補零即{1’b0, ina[7:4]};才對 8 tempb = {inb[7], inb[7:4]}; 9 end 10 11 always @(posedge enable) begin //高4 位相加,并連成8位 12 {cout, sum} = {tempa + tempb + firstc, firsts} ; 13 end? ? ?注:設ina為Mbit,inb為Nbit,則{cout, sum}=a+b為M+N+1位,其中cout占1位,sum為M+N位。
? ? ?編譯后Total Logic Element為24個。
? ? ?RTL原理圖如圖5所示:
圖5? 8位加法器(2級流水線/FPGA)RTL Viewer
? ? ?Techology Map Viewer結果如圖6所示:
圖6? 8位加法器(2級流水線/FPGA)Techology Map Viewer
? ? ?Simulation仿真波形如圖7所示:
圖7? 8位加法器(2級流水線/FPGA)仿真圖
?
?
實驗三? CPLD實現8位加法器
? ? ?程序清單(單always):
1 /*******************8位加法器(非流水線)***********************/ 2 module adder_nonpipe(cout, sum, ina, inb, cin, enable); 3 4 output cout; 5 output [7:0] sum; 6 input [7:0] ina, inb; 7 input cin, enable; 8 9 reg cout; 10 reg [7:0] sum; 11 12 always @(posedge enable) 13 begin 14 {cout,sum} = ina + inb + cin; 15 end 16 17 endmodule? ? ?將Device替換為CPLD器件。在Project Navigator->Hierarchy窗口器件處右鍵->Device,即可打開器件選擇框,選擇所需的器件確定即可。此處選擇"MAX7000S:EPM7064SLC44-5"。
? ? ?Compilation編譯報告如圖8所示:
?
圖8 ?8位加法器(非流水線/CPLD)編譯結果
? ? ?Simulation仿真波形如圖9所示:
圖9 ?8位加法器(非流水線/CPLD)仿真圖-1
? ? ?接著考慮雙always形式的加法器(程序同實驗一,僅器件不同):
? ? ?Compile編譯后,Total Macrocell為42個。
? ? ?仍采用周期為10ns的時鐘enable,仿真結果如圖10所示:
圖10 ?8位加法器(非流水線/CPLD)仿真圖-2
? ? ?顯然sum值不正確。
? ? ?展開Compilation Report下面的Timing Analyzer,多了一項Clock Setup ‘enable’。從右側報告窗口可觀察到最長(最差時序)路徑需要13.5ns,對應fmax為74.07MHz,也就是最高工作頻率。
圖11 ?8位加法器(非流水線/CPLD)時序分析結果
? ? ?將時鐘周期改為13.5ns,重新運行仿真,結果如圖12所示:
圖12 ?8位加法器(非流水線/CPLD)仿真圖-3
? ? ?注意:
圖13 ?8位加法器(非流水線/CPLD)仿真圖-4
? ? ? ? ? 這也符合通常習慣,即一個時鐘沿周期采樣,下一個時鐘沿輸出。
?
?
實驗四? CPLD實現8位加法器(采用2級流水線)
? ? ?程序同實驗二,器件選擇同實驗三。
? ? ?編譯后Total Macrocell為32個。
? ? ?在Timing Analyzer詳細報告窗口可觀察到那些影響周期惡化的最差時序路徑,根據這些信息可找出關鍵路徑并進行時序分析。圖14顯示Clock Period為9.700ns,Frequency為103.09MHz。
圖14 ?8位加法器(非流水線/CPLD)時序分析結果
? ? ?觀察第一條路徑的時序報告,如圖15所示:
?
圖15? 8位加法器(2級流水線/CPLD)時序報告(局部)
? ? ?時鐘周期為10ns時,仿真波形如圖16所示:
圖16? 8位加法器(2級流水線/CPLD)仿真圖
? ? ?該波形與實驗三單always程序波形最主要的差別在于,sum=01001010之后一個周期的值是否正確。
? ? ?當時鐘周期取10ns時,仿真波形與實驗三雙always程序波形相同,但最高工作頻率卻由74.07 MHz提高到103.09MHz。可見最高工作頻率(系統工作速度)不能單純由仿真波形判斷。
?
?
總結
? ? ?1. FPGA中1個邏輯單元(Logic Element )相當于CPLD中0.78個宏單元(MacroCell).
? ? ?2. Quartus II中FPGA器件編譯速度比CPLD慢得多。
? ? ?3. Stratix的最高工作頻率大于MAX7000S的的最高工作頻率。如實驗一二中Timing Analysis Tool均顯示Frequency為Restricted to 422.12 MHz(這時不易比較采用流水線和非流水線的最高頻率)。
? ? ?4. 比較實驗一(非流水線)和實驗二(流水線)的RTL原理圖及工藝映射圖,可清楚地看到,流水線技術的本質是在組合邏輯之間插入寄存器,暫存前面的運算結果或輸入數據,并在下一個時鐘到來時將寄存值作為后一級運算的輸入。將流水線規則應用于FPGA中,只需要很少或根本不需要額外的成本。這是因為每個邏輯單元都包含兩個觸發器,大多數情況下這兩個觸發器或者沒有用到,或者用于存儲布線資源,那么就可利用其來實現流水線結構。若采用流水線后,加法器速度仍不能滿足需要,可采用串并轉換來進一步提高計算的并行度。
?
?
轉載于:https://www.cnblogs.com/clover-toeic/p/3784105.html
總結
以上是生活随笔為你收集整理的采用流水线技术实现8位加法器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: yui压缩js文件
- 下一篇: 集群中几种session同步解决方案的比