在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

深度解析FPGA時序的進位鏈

454398 ? 來源: 科學計算 technomania ? 作者:貓叔 ? 2020-11-16 16:35 ? 次閱讀

FPGA中我們寫的最大的邏輯是什么?相信對大部分朋友來說應該是計數器,從最初板卡的測試時我們會閃爍LED,到復雜的AXI總線中產生地址或者last等信號,都會用到計數器,使用計數器那必然會用到進位鏈。

可能很多剛開始接觸FPGA的同學沒聽過進位鏈,也就是Carry Chain,我們這里再回顧一下。FPGA的三個主要資源為:

1. 最低邏輯單元

可配置邏輯單元(CLB)

存儲單元

運算單元(DSP48)

2. 一流的I / O資源

3. 布線資源

其中,CLB在FPGA中最豐富,在7系列的FPGA中,一個CLB中有兩個Slice,Slice中包含4個LUT6、3個數據選擇器MUX,兩個獨立進位鏈(Carry4,Ultrascale是CARRY8)和8個主軸。

首先,我們來看下Carry Chain的結構原理,其輸入輸出接口如下:

其中,

CI是上一個CARRY4的進位輸出,位寬為1;

CYINT是進位的初始化值,位寬為1;

DI是數據的輸入(兩個加數的任意一個),位寬為4;

SI是兩個加數的異或,位寬為4;

O是加法結果輸出,位寬為4;

CO是進位輸出,位寬為4;(為什么進位輸出是4bit?后面有解釋)

Carry4的內部結構如下圖所示:

這里我們要先解釋一下FPGA中利用卡里鏈(Carry Chain)實現加法的原理,比如兩個加數分別為a = 4'b1000和b=4'b1100,其結果應該是8+12=20。

a = 4'b1000;
b = 4'b1100;

S = a ^ b = 4'b0100;
D = b = 4'b1100;          //D取a也可以
CIN = 0;                  //沒有上一級的進位輸入
CYINIT = 0;               //初始值為0
// 下面為CARRY4的計算過程,具體的算法跟上圖中過程一樣
S0 = 0;                  //S的第0位
O0 = S0 ^ 0 = 0 ^ 0 = 0;
CO0 = DI0 = 0;            //上圖中的MUXCY,S0為0時,選擇1,也就是DI0,S0為1是選擇2
S1 = 0;
O1 = S1 ^ CO0 = 0 ^ 0 = 0;
CO1 = DI1 = 0;
S2 = 1;
O2 = S2 ^ CO1 = 0 ^ 1 = 1;
CO2 = CO1 = 0;
S3 = 0;
O3 = S3 ^ CO2 = 0 ^ 0 = 0;
CO3 = DI3 = 1;

加法最終的輸出結果為:{CO3,O3,O2,O1,O0} = 5'b10100 =20。進位輸出在CARRY4的內部也使用到了,因此有4個位的進位輸出CO,但輸出給下一級的只是CO [3]。

再來看完下面的例子就更清晰了。Example的代碼如下:

module top(

 input clk,
 input [7:0] din_a,
 input [7:0] din_b,
 output reg[7:0] dout
    );

 always @ ( posedge clk )
 begin
    dout <= din_a + din_b;
 end  
endmodule

綜合之后的電路如下:

在本程序中,加數為din_a和din_b,圖中

1 表示CARRY4的進位輸出到下一級的進入輸入;

2 表示輸入的一個加數din_a(換成din_b也是可以的);

3 表示第二級輸入的DI端口,因為第二級CARRY是通過第一級的進位輸出進行累加,因此該接口為0;

4 表示輸入兩個加數的異或結果。

可以拋光,當進行兩個兩個bit的數據進行加法操作時,會使用兩個CARRY4級聯,那如果是對48位的數據進行相加,那就會用到12個的CARRY4的級聯,這樣(此處需要注意的是,在Vivado的設置下,如果進行的是12bit以下的數據加1'b1的操作,那么Vivado綜合的結果并不會使用CARYY4,或者使用LUT來實現加法器)。

那如何解決這種問題呢?我們可以把加法操作進行拆解,比如拆解成3個16bit的計數器,那這樣就會只有4個CARRY4的級聯,時序情況就好了很多。

對比程序如下:

module top(

 input clk,
 input [47:0] din1,
 input [47:0] din2,
 output reg[47:0] dout1,
 output    [47:0] dout2
 );

 always @ ( posedge clk )
 begin
    dout1 <= din1 + 1'b1;
 end  

 genvar i;
 generate
 for(i = 0;i < 3;i=i+1) begin:LOOP
    wire carry_co;
    reg [15:0] carry_o=0;
    wire ci;
    if(i==0)  begin
        always @ ( posedge clk )
         begin
            carry_o <= din2[i*16+:16] + 1'b1;
         end
     end //if
     else begin
        always @ (posedge clk) begin
            if(LOOP[i-1].carry_co == 1)
                carry_o <= carry_o + 1'b1;
        end
     end //else
    assign LOOP[i].carry_co = (LOOP[i].carry_o==16'hffff)?1'b1:1'b0;
    assign dout2[i*16+:16] = LOOP[i].carry_o;

 end //for

 endgenerate

endmodule

:綜合后的schematic后可以發現,在dout2的輸出中,每4個CARRY4后都會有一級的觸發,這樣時序就會好很多,但造成的代價是LUT會增加。

編輯:hfy

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1630

    文章

    21802

    瀏覽量

    606413
  • 計數器
    +關注

    關注

    32

    文章

    2276

    瀏覽量

    95066
收藏 人收藏

    評論

    相關推薦

    FPGA驅動AD芯片之實現與芯片通信

    概述:?利用FPGA實現AD芯片的時序,進一步實現與AD芯片數據的交互,主要熟悉FPGA時序圖的實現,掌握時序圖轉換Verilog硬件描述
    的頭像 發表于 12-17 15:27 ?459次閱讀
    <b class='flag-5'>FPGA</b>驅動AD芯片之實現與芯片通信

    FPGA加速深度學習模型的案例

    FPGA(現場可編程門陣列)加速深度學習模型是當前硬件加速領域的一個熱門研究方向。以下是一些FPGA加速深度學習模型的案例: 一、基于FPGA
    的頭像 發表于 10-25 09:22 ?380次閱讀

    高速ADC與FPGA的LVDS數據接口中避免時序誤差的設計考慮

    電子發燒友網站提供《高速ADC與FPGA的LVDS數據接口中避免時序誤差的設計考慮.pdf》資料免費下載
    發表于 10-15 09:50 ?6次下載
    高速ADC與<b class='flag-5'>FPGA</b>的LVDS數據接口中避免<b class='flag-5'>時序</b>誤差的設計考慮

    FPGA深度學習能走多遠?

    ,共同進步。 歡迎加入FPGA技術微信交流群14群! 交流問題(一) Q:FPGA深度學習能走多遠?現在用FPGA深度學習加速成為一個熱
    發表于 09-27 20:53

    BQ79606A-Q1菊花通信時序

    電子發燒友網站提供《BQ79606A-Q1菊花通信時序.pdf》資料免費下載
    發表于 09-26 11:41 ?1次下載
    BQ79606A-Q1菊花<b class='flag-5'>鏈</b>通信<b class='flag-5'>時序</b>

    FPGA電源時序控制

    電子發燒友網站提供《FPGA電源時序控制.pdf》資料免費下載
    發表于 08-26 09:25 ?0次下載
    <b class='flag-5'>FPGA</b>電源<b class='flag-5'>時序</b>控制

    深度解析FPGA中的時序約束

    建立時間和保持時間是FPGA時序約束中兩個最基本的概念,同樣在芯片電路時序分析中也存在。
    的頭像 發表于 08-06 11:40 ?832次閱讀
    <b class='flag-5'>深度</b><b class='flag-5'>解析</b><b class='flag-5'>FPGA</b>中的<b class='flag-5'>時序</b>約束

    溫度補償振蕩器TG-3541CE的深度解析

    溫度補償振蕩器TG-3541CE的深度解析
    的頭像 發表于 07-18 17:48 ?371次閱讀

    FPGA時序課件下載

    方便FPGA愛好者學習
    發表于 07-12 11:45 ?2次下載

    FPGA 高級設計:時序分析和收斂

    今天給大俠帶來FPGA 高級設計:時序分析和收斂,話不多說,上貨。 這里超鏈接一篇之前的STA的文章,僅供各位大俠參考。 FPGA STA(靜態時序分析) 什么是靜態
    發表于 06-17 17:07

    加法進位的手動約束

    在激光雷達中,使用FPGA實現TDC時需要手動約束進位的位置。這里簡單記錄下。 在outflow下會生成一個.qplace文件?。用于指示布線的各個原語資源的分布位置 。 它的內容主是 是原語
    的頭像 發表于 05-20 11:38 ?1388次閱讀
    加法<b class='flag-5'>進位</b><b class='flag-5'>鏈</b>的手動約束

    FPGA工程的時序約束實踐案例

    詳細的原時鐘時序、數據路徑時序、目標時鐘時序的各延遲數據如下圖所示。值得注意的是數據路徑信息,其中包括Tco延遲和布線延遲,各級累加之后得到總的延遲時間。
    發表于 04-29 10:39 ?944次閱讀
    <b class='flag-5'>FPGA</b>工程的<b class='flag-5'>時序</b>約束實踐案例

    深入理解 FPGA 的基礎結構

    FPGA 的兩個最基本的部分是組合邏輯以及時序邏輯,分別實現這兩個基本部分的結構就是 FPGA 的基本單元。組合邏輯部分一般采用查找表(Look-Up-Table,LUT)的形式,時序
    發表于 04-03 17:39

    FPGA深度學習應用中或將取代GPU

    現場可編程門陣列 (FPGA) 解決了 GPU 在運行深度學習模型時面臨的許多問題 在過去的十年里,人工智能的再一次興起使顯卡行業受益匪淺。英偉達 (Nvidia) 和 AMD 等公司的股價也大幅
    發表于 03-21 15:19

    fpga時序仿真和功能仿真的區別

    FPGA時序仿真和功能仿真在芯片設計和驗證過程中各自扮演著不可或缺的角色,它們之間存在明顯的區別。
    的頭像 發表于 03-15 15:28 ?2441次閱讀
    主站蜘蛛池模板: 欧美一区二区三区大片 | 天堂在线最新版www中文 | 男人你懂的网站 | 四虎在线最新地址4hu | 美女扒开尿口给男人桶 | 亚洲三级毛片 | 天天鲁天天爽精品视频 | 男女交性视频播放 视频 视频 | 日本大片免费一级 | 一级片黄色免费 | 日本一级高清不卡视频在线 | 亚洲午夜在线观看 | 伊人五月婷婷 | 天天干夜夜笙歌 | 1024手机最新手机在线 | 人人人人干 | 色噜噜亚洲男人的天堂 | 国产成人亚洲综合a∨婷婷 国产成人一区二区三中文 国产成人一区二区在线不卡 | 免费无遮挡很爽很污很黄 | 四虎永久精品视频在线 | 亚洲精品福利你懂 | 日本三级视频 | 亚洲娇小性色xxxx | 国产爽视频 | 欧美69色| 午夜精品久久久久久久四虎 | 色视频网址 | 99精品国产高清自在线看超 | 2015xxxx欧美 | 综合色图 | 澳门色视频 | 日日操日日爽 | 在线观看黄网 | 久久免费国产 | 欧美黄色片在线 | 多男一女一级淫片免费播放口 | xxx性xxx| 成人看片免费无限观看视频 | 国产jlzzjlzz视频免费 | 中文字字幕码一二区 | 美女下面小内内的沟 |