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

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

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

二分法查找在實際電路中的應用

8ECz_icstudy ? 來源:未知 ? 作者:胡薇 ? 2018-10-29 10:03 ? 次閱讀

1

首先問大家一個問題,如果有一堆有序的數(shù)據(jù)

1,2,3,4,5,6,7,8,9,10,11,...100

如果想要找出55,你要怎么實現(xiàn)呢?

最直觀的是用線性查找,從頭開始一個個的查找,需要55次才能找到目標數(shù)值。

如果大家學過C或者C++,應該有二分法查找的概念,先把這堆數(shù)分成2堆,把第一堆的最后一個數(shù)跟55比較,發(fā)現(xiàn)55比它大,所以55應該在第2堆。再重復這個過程,大概需要7次就可以確定55的位置。

二分法查找效率顯而易見,它的時間復雜度T(n)=O(log(2)n),遠遠小于線性查找的T(n)=O(n)。

但二分法要求數(shù)據(jù)必須是有序排列的,這在實際電路世界里面往往是滿足的。

利用二進制搜索(二分法查找)實現(xiàn)的逐次逼近算法,每次都是選取比較范圍內(nèi)的中間點來跟參考值進行比較,通過比較結(jié)果來繼續(xù)縮小比較范圍,一直迭代直至找到最接近比較值的解。

這個過程跟求方程(近似)解也非常類似。二進制搜索實現(xiàn)的逐次逼近常常用于需要校準的場景中,比如SAR ADC、DRAM ZQ 校準、儀器校準算法等。因為我們的校準代碼對應的值是線性增加或者減小的,符合二進制搜索法的條件。

2

下圖是一個SAR ADC的基本架構(gòu):

電路的目標就是得到一個最接近Vin的VDAC,可以通過調(diào)整

SAR code配置DAC模塊得到。

假設我們的SAR(逐次逼近寄存器)的位數(shù)是3位,初始狀態(tài)設為SAR[2:0]=3'b100,也就是處于000-111的中間位置。

如果SAR的使能clock 開始toggle,比較過程就開始了:

如上圖所示,X軸表示時間,Y軸表示DAC輸出電壓VDAC:

第1次比較: 設置SAR[2:0]=3'b100,VDAC=1/2 Vref < Vin , 所以SAR[2]保持1,SAR[2:0]=3'b100;

第2次比較: 設置SAR[2:0]=3'b110,VDAC=(1/2 Vref + 1/4 Vref)> Vin , 所以SAR[1]最終取0,SAR[2:0]=3'b100;

第3次比較: 設置SAR[2:0]=3'b101,VDAC=(1/2 Vref + 1/8 Vref)> Vin , 所以SAR[0]最終取0,SAR[2:0]=3'b100;

最終我們可以得到與輸入電壓Vin最接近的VDAC,可以看出SAR的位數(shù)越多,精度越高,但是比較周期數(shù)也會越來越多。

另外其第3次(最后一位)比較好像也沒有必要,因為你比較完也無法得到一個相等值,可以把最后一位固定成1或者0,最大的誤差就是最后一位代表的權(quán)重1/8 Vref。

2

前面是具體的SAR ADC的例子,我們可以進一步把二進制搜索SAR的過程畫成流程圖的形式,方便后續(xù)電路或者Verilog代碼的實現(xiàn):

初始化SAR的MSB=1, 其它bit為0 (比如4bit 4'b1000)

每次CLK go high ,走一步

如果INCR=1, 走圖中實線箭頭方向;

如果INCR=0, 走圖中虛線箭頭方向;

最低位LSB最終固定為1

4bit的SAR 一共需要走3步,也就是3個CLK周期后就可以得到最后的結(jié)果。

3

最后給出一個6位二進制搜索SAR logic電路的SPEC:

Input

INCR

RSTB reset信號,負沿有效

CLK

OUTPUT

PUCODE [5:0]

你覺得這個電路是用Verilog代碼實現(xiàn)呢?

還是自己搭電路比較好?

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

    關(guān)注

    172

    文章

    5818

    瀏覽量

    171631
  • 二進制
    +關(guān)注

    關(guān)注

    2

    文章

    772

    瀏覽量

    41542

原文標題:二進制搜索算法(二分法查找)在實際電路中的應用

文章出處:【微信號:icstudy,微信公眾號:跟IC君一起學習集成電路】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    如何用C語言實現(xiàn)高效查找二分法

    今天給分享一下使用C語言實現(xiàn)二分算法,主要包含以下幾部分內(nèi)容:二分查找算法介紹二分查找算法使用場景二分
    的頭像 發(fā)表于 06-04 08:04 ?832次閱讀
    如何用C語言實現(xiàn)高效<b class='flag-5'>查找</b>(<b class='flag-5'>二分法</b>)

    Java常用排序算法&程序員必須掌握的8大排序算法+二分法查找

    Java常用排序算法&程序員必須掌握的8大排序算法+二分法查找
    發(fā)表于 10-19 19:33

    簡單的查找算法

    ; } return 0;} 3. 有序數(shù)組表的查找:一般使用二分法查找。通過判斷查找元素與中間元素(mid)的大小來決定下一次的查找
    發(fā)表于 12-27 22:33

    Labview實現(xiàn)二分法查找數(shù)值區(qū)間

    二分法是檢索里經(jīng)常用到的一種方法,可以實現(xiàn)對有序數(shù)組進行檢索,本程序通過二分法實現(xiàn)對數(shù)據(jù)進行區(qū)間匹配,并輸出最小匹配區(qū)間和匹配區(qū)間的索引值,尤其適合多段函數(shù)的數(shù)值計算。
    發(fā)表于 04-18 13:22

    淺析漸近表示二分法

    《算法圖解》NOTE 1 算法的漸近表示以及二分法
    發(fā)表于 10-10 10:58

    C語言教程之二分查找

    C語言教程之二分查找,很好的C語言資料,快來學習吧。
    發(fā)表于 04-22 11:06 ?0次下載

    基于C語言二分查找排序源代碼

    本文檔內(nèi)容介紹了C語言歸并、選擇、直接插入、希爾、冒泡、快速、堆排序與順序、二分查找排序源代碼,分享給大家供大家參考。
    發(fā)表于 01-04 11:24 ?1次下載

    基于二分法與移動Sink的無線傳感器網(wǎng)絡數(shù)據(jù)收集協(xié)議

    傳感器節(jié)點能量的有限性,嚴重制約了無線傳感器網(wǎng)絡的推廣與發(fā)展。因此,如何改善傳感器節(jié)點能源的利用率、節(jié)約能耗以及提高整個網(wǎng)絡的生存周期成為該領(lǐng)域研究者面臨的挑戰(zhàn)之一。 為延長網(wǎng)絡生存周期,提出一種基于二分法與移動Sink的無線傳感器網(wǎng)絡數(shù)據(jù)收集協(xié)
    發(fā)表于 03-12 10:43 ?0次下載
    基于<b class='flag-5'>二分法</b>與移動Sink的無線傳感器網(wǎng)絡數(shù)據(jù)收集協(xié)議

    圖像處理算法之二分查找

    二分查找又稱折半查找,優(yōu)點是比較次數(shù)少,查找速度快,平均性能好;其缺點是要求待查表為有序表,且插入刪除困難。
    的頭像 發(fā)表于 03-17 11:29 ?4829次閱讀

    如何利用verilog驗證二分法查找的設計代碼

    下面是產(chǎn)生輸出文件的過程,這里我們設置輸出結(jié)果的格式是fsdb,當然我們也可以設置成vcd的格式。fsdb的文件size比較小,而且利用verdi的波形工具nWave看起來也比較方便。實際項目
    的頭像 發(fā)表于 11-26 14:39 ?5645次閱讀

    詳解C語言二分查找算法細節(jié)

    我相信對很多讀者朋友來說,編寫二分查找的算法代碼屬于玄學編程,雖然看起來很簡單,就是會出錯,要么會漏個等號,要么少加個 1。
    的頭像 發(fā)表于 06-22 09:05 ?2766次閱讀
    詳解C語言<b class='flag-5'>二分</b><b class='flag-5'>查找</b>算法細節(jié)

    現(xiàn)代混合云服務對未來托管數(shù)據(jù)中心的意義

    與以前的版本不同,新的混合云框架更易于部署,并且消除了“云計算vs托管數(shù)據(jù)中心”的二分法。
    的頭像 發(fā)表于 08-21 11:00 ?1804次閱讀

    筑基_C_5_對數(shù)組的二分查找

    C語言泛型編程,實現(xiàn)對數(shù)組某元素的二分查找
    發(fā)表于 12-06 10:21 ?9次下載
    筑基_C_5_對數(shù)組的<b class='flag-5'>二分</b><b class='flag-5'>查找</b>

    如何理解二分查找算法

    本文就來探究幾個最常用的二分查找場景:尋找一個數(shù)、尋找左側(cè)邊界、尋找右側(cè)邊界。 而且,我們就是要深入細節(jié),比如不等號是否應該帶等號,mid 是否應該加一等等。分析這些細節(jié)的差異以及出現(xiàn)這些差異的原因,保證你能靈活準確地寫出正確的
    的頭像 發(fā)表于 04-19 11:10 ?579次閱讀
    如何理解<b class='flag-5'>二分</b><b class='flag-5'>查找</b>算法

    FPGA設計中二分法查表算法的實現(xiàn)

    二分查找算法是軟件中廣泛應用的一種算法,那么FPGA的設計是否可以用這種算法呢?什么場景下會可能用到這種算法呢?
    的頭像 發(fā)表于 09-06 18:26 ?903次閱讀
    FPGA設計中<b class='flag-5'>二分法</b>查表算法的實現(xiàn)