精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

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

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

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

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

本文以 leading zero count 為例來看一下分治法的應用。

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

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

我們可以用最簡單的 casex 優(yōu)先級選擇器來實現。假設輸入的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

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

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

圖1 - leading zero count 1

分治法 - Tree Structure

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

首先將 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,那么結果為 10..0

如果左邊是 0xxx,那么結果為 0[左邊]

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

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

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

按照2bit分解: 00 00 01 11

Encoded value: 10 10 01 00

兩兩組合: 100 001

再組合: 0101 = 5 leading zeros

當輸入為64bit的vector時,此 tree structure 的設計綜合結果如圖2所示。Vivado綜合后預估的slack為8.600ns,critical path為4級,消耗38個LUT。

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

圖2 - leading zero count 2

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

總結

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

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

    關注

    1626

    文章

    21675

    瀏覽量

    601944
  • 分治法
    +關注

    關注

    0

    文章

    3

    瀏覽量

    5756
  • FPGA開發(fā)
    +關注

    關注

    1

    文章

    43

    瀏覽量

    14893
  • Vivado
    +關注

    關注

    19

    文章

    808

    瀏覽量

    66339

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

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

收藏 人收藏

    評論

    相關推薦

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

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

    字符串與數組分治遞歸算法

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

    FPGA至簡設計為什么這么簡單

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

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

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

    那里能找到關于在FPGA中實現DDC中分數倍重采樣的資料?

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

    電子設計師設計思想篇--分治法利弊

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

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

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

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

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

    聚類和劃分的SAT分治判定

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

    淺談FPGA設計中分頻電路設計

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

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

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

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

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

    分治帶來的好處

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

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

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

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

    FPGA開發(fā)是指利用現場可編程邏輯門陣列(Field Programmable Gate Array,簡稱FPGA)進行硬件設計和實現的過程。FPGA是一種可編程的邏輯器件,它允許用戶
    的頭像 發(fā)表于 03-15 14:28 ?1108次閱讀