衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

FPGA開發(fā)中分治法的應(yīng)用

FPGA開發(fā)之路 ? 來源:FPGA開發(fā)之路 ? 2023-08-16 09:55 ? 次閱讀

分治法是經(jīng)典優(yōu)化算法之一。分治分治,即分而治之。分治,就是把一個復(fù)雜的問題分成兩個或更多的相同或相似的子問題,再把子問題分成更小的子問題……直到最后子問題可以簡單的直接求解,原問題的解即子問題的解的合并。

分治法的思想我們也可以用在FPGA開發(fā)中,使得設(shè)計更加高效。

本文以 leading zero count 為例來看一下分治法的應(yīng)用。

這個題目是計算一個 vector 的 leading zero 的數(shù)目。比如 8'b00001111,結(jié)果為4,而8'b00111111,結(jié)果為2。

Casex 優(yōu)先級選擇器

我們可以用最簡單的 casex 優(yōu)先級選擇器來實現(xiàn)。假設(shè)輸入的vector位寬為64。

always_comb begin
    count = 0;
    casex (vector)
       64'b00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000 : count = 64;
       64'b1???????_????????_????????_????????_????????_????????_????????_???????? : count = 0;
       64'b01??????_????????_????????_????????_????????_????????_????????_???????? : count = 1;
       64'b001?????_????????_????????_????????_????????_????????_????????_???????? : count = 2;
       ...
       64'b00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000001 : count = 63;
    encase
end

綜合結(jié)果如圖一所示。Vivado綜合完預(yù)估的slack為8.572ns,critical path是5級,共消耗71個LUT。

ca78a5c8-3b7d-11ee-9e74-dac502259ad0.png

圖1 - leading zero count 1

分治法 - Tree Structure

現(xiàn)在我們使用分治法來實現(xiàn)這個功能。通過一個 balanced tree structure 來實現(xiàn)。

首先將 64bit 的 vector 分成32個 2bit 的小 vector。先對2bit的小 vector 做encode:

case(small_vector)
    2'b00: encoded = 2'b10;  // 2 leading zeros
    2'b01: encoded = 2'b01;  // 1 leading zero
    2'b10: encoded = 2'b00;  // 0 leading zero
    2'b11: encoded = 2'b00;  // 0 leading zero
endcase

然后按照如下規(guī)則將相鄰的 encoded value 進行組合:

如果兩邊都是 1xxx,那么結(jié)果為 10..0

如果左邊是 0xxx,那么結(jié)果為 0[左邊]

如果左邊是 1xxx,那么結(jié)果為 01[右邊[msb-1:0]]

可以看到每個組合的操作是一個mux。每次組合后,新的vector位寬加1,然后新的vector再兩兩組合,直到得出最終的結(jié)果。

我們以8bit輸入的vector為例:8'b00000111

按照2bit分解: 00 00 01 11

Encoded value: 10 10 01 00

兩兩組合: 100 001

再組合: 0101 = 5 leading zeros

當(dāng)輸入為64bit的vector時,此 tree structure 的設(shè)計綜合結(jié)果如圖2所示。Vivado綜合后預(yù)估的slack為8.600ns,critical path為4級,消耗38個LUT。

ca9e57aa-3b7d-11ee-9e74-dac502259ad0.jpg

圖2 - leading zero count 2

可以看到相比于casex的設(shè)計,tree structure節(jié)省了超過50%的LUT,同時邏輯級數(shù)也減少了一級。

總結(jié)

分治法的思想也可以應(yīng)用在FPGA開發(fā)中。尤其是當(dāng)我們遇到大位寬數(shù)據(jù)的處理時,分治法往往可以提升設(shè)計的資源使用率和時序結(jié)果。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1630

    文章

    21798

    瀏覽量

    606067
  • 分治法
    +關(guān)注

    關(guān)注

    0

    文章

    3

    瀏覽量

    5771
  • FPGA開發(fā)
    +關(guān)注

    關(guān)注

    1

    文章

    43

    瀏覽量

    15043
  • Vivado
    +關(guān)注

    關(guān)注

    19

    文章

    815

    瀏覽量

    66897

原文標(biāo)題:分治法(Divide and Conquer)

文章出處:【微信號:FPGA開發(fā)之路,微信公眾號:FPGA開發(fā)之路】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    分治找出最大值和最小值的問題

    我用分治寫了一個程序,找出一個數(shù)組中最大值和最小值,可是運行時總是報錯段錯誤,我把源代碼貼出來,還請高手賜教指點。#include"stdio.h"int s[10]={56
    發(fā)表于 03-21 11:00

    字符串與數(shù)組分治遞歸算法

    字符串與數(shù)組分治遞歸算法。
    發(fā)表于 09-05 22:49

    FPGA至簡設(shè)計為什么這么簡單

    由潘文明先生開創(chuàng)的IC/FPGA至簡設(shè)計,具備劃時代的意義。這種設(shè)計方法不僅將IC/FPGA學(xué)習(xí)難度降到了最低,同時將設(shè)計過程變得簡單,并規(guī)范了代碼避免了混亂,將出錯幾率降到最低。下面我們來看
    發(fā)表于 12-15 15:10

    python算法之使用分治求解凸包

    《python算法教程》Day11 - 分治求解平面凸包問題
    發(fā)表于 11-01 09:14

    那里能找到關(guān)于在FPGA中實現(xiàn)DDC中分數(shù)倍重采樣的資料?

    請問,那里能找到關(guān)于在FPGA中實現(xiàn)DDC中分數(shù)倍重采樣的資料?不是指用CIC實現(xiàn),而是基于多相的結(jié)構(gòu)實現(xiàn)。
    發(fā)表于 07-30 16:50

    電子設(shè)計師設(shè)計思想篇--分治法利弊

      分治 (divide and conquer) 是解決復(fù)雜問題的一種有效策略。本質(zhì)上,它是把看似難以克服的問題分解成多個更小、更易于解決的部分。待這些部分被單獨解決之后,把結(jié)果
    發(fā)表于 09-09 09:48 ?2977次閱讀

    基于 FPGA XC3S1500開發(fā)板的太陽能自動跟蹤系統(tǒng)

      本設(shè)計采用傳統(tǒng)的視日運動跟蹤,利用Xilinx公司提供的FPGA開發(fā)環(huán)境ISE,設(shè)計完成了基于XC3S1500開發(fā)板的
    發(fā)表于 09-29 09:42 ?1272次閱讀
    基于 <b class='flag-5'>FPGA</b> XC3S1500<b class='flag-5'>開發(fā)</b>板的太陽能自動跟蹤系統(tǒng)

    Altera FPGA的選型及開發(fā)

    本資料是關(guān)于Altera FPGA的選型及開發(fā),內(nèi)容大綱是:Altera的 FPGA體系結(jié)構(gòu)簡介;Altera的 FPGA選型策略;嵌入式邏輯分析工具SignalTAPII的使用;基于
    發(fā)表于 08-15 14:48 ?104次下載
    Altera <b class='flag-5'>FPGA</b>的選型及<b class='flag-5'>開發(fā)</b>

    聚類和劃分的SAT分治判定

    滿足性來判定原公式的可滿足性,相當(dāng)于用分治將復(fù)雜問題分解為多個子問題來求解.這種分治判定方法一方面降低了原公式的可滿足性判定復(fù)雜度;另一方面,由于子句組的判定可以并行,因而判定速度能夠得到進一步的提高.對于不能直接產(chǎn)生布爾子句
    發(fā)表于 01-24 17:41 ?0次下載

    淺談FPGA設(shè)計中分頻電路設(shè)計

    通常情況下,時鐘的分頻在FPGA設(shè)計中占有重要的地位,在此就簡單列出分頻電路設(shè)計的思考思路。
    發(fā)表于 07-10 17:18 ?2511次閱讀

    分治算法詳解:表達(dá)式的不同優(yōu)先級

    ? ? ?我們號已經(jīng)寫了 動態(tài)規(guī)劃算法,回溯(DFS)算法,BFS 算法,貪心算法,雙指針?biāo)惴?,滑動窗口算法,現(xiàn)在就差個分治算法沒寫了,今天來寫一下,集齊七顆龍珠,就能召喚神龍了~ 其實,我覺得回溯
    的頭像 發(fā)表于 01-04 14:04 ?1803次閱讀

    Intel FPGA開發(fā)流程指南

    開發(fā)FPGA設(shè)計,最終的產(chǎn)品是要落在使用FPGA芯片完成某種功能。所以我們首先需要一個帶有Intel FPGA芯片的開發(fā)板。
    的頭像 發(fā)表于 07-14 09:42 ?3113次閱讀
    Intel <b class='flag-5'>FPGA</b><b class='flag-5'>開發(fā)</b>流程指南

    分治帶來的好處

    以 Leading Zero Count 為例解釋了分治帶來的好處,本篇文章再舉一個類似的例子。
    的頭像 發(fā)表于 09-06 10:05 ?548次閱讀

    fpga開發(fā)板是什么?fpga開發(fā)板有哪些?

    FPGA開發(fā)板是一種基于FPGA(現(xiàn)場可編程門陣列)技術(shù)的開發(fā)平臺,它允許工程師通過編程來定義和配置FPGA芯片上的邏輯電路,以實現(xiàn)各種數(shù)字
    的頭像 發(fā)表于 03-14 18:20 ?2232次閱讀

    fpga開發(fā)是什么意思

    FPGA開發(fā)是指利用現(xiàn)場可編程邏輯門陣列(Field Programmable Gate Array,簡稱FPGA)進行硬件設(shè)計和實現(xiàn)的過程。FPGA是一種可編程的邏輯器件,它允許用戶
    的頭像 發(fā)表于 03-15 14:28 ?1297次閱讀
    威尼斯人娱乐城网站| 云顶国际娱乐网| 百家乐官网庄闲几率| 奥斯卡百家乐官网的玩法技巧和规则 | 大发888真人娱乐场游戏平台| 武义县| 百家乐天天赢钱| 大发888在线扑| 新花园百家乐官网的玩法技巧和规则 | 大连棋牌网| 宝博百家乐官网娱乐城| 澳门百家乐技术| 龙虎斗 | 24风水| 青岛棋牌英雄| 3U百家乐官网的玩法技巧和规则| 老虎机游戏下载| 视频百家乐官网试玩| 百家乐正网包杀| 皇廷国际| 百家乐有没有绝| 名门国际娱乐| 百家乐官网投注信用最好的 | 百家乐发牌器8副| 白菜娱乐城| 百家乐庄闲点数| 骰宝 | 百家乐平注法技巧| 大发888老虎机平台| 百家乐官网游乐园| 大发888老虎机游戏| 百家乐官网过滤软件| 澳门新葡京赌场| 澳门百家乐有没有假| 西青区| 真人百家乐赌场娱乐网规则| 百家乐官网投注网址| 太阳城宾馆| 万达百家乐官网娱乐城| 浩博国际| 百家乐桌子豪华|