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

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

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

二分法查找在實(shí)際電路中的應(yīng)用

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

1

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

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

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

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

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

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

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

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

這個(gè)過(guò)程跟求方程(近似)解也非常類似。二進(jìn)制搜索實(shí)現(xiàn)的逐次逼近常常用于需要校準(zhǔn)的場(chǎng)景中,比如SAR ADC、DRAM ZQ 校準(zhǔn)、儀器校準(zhǔn)算法等。因?yàn)槲覀兊男?zhǔn)代碼對(duì)應(yīng)的值是線性增加或者減小的,符合二進(jìn)制搜索法的條件。

2

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

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

SAR code配置DAC模塊得到。

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

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

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

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

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

第3次比較: 設(shè)置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ù)也會(huì)越來(lái)越多。

另外其第3次(最后一位)比較好像也沒(méi)有必要,因?yàn)槟惚容^完也無(wú)法得到一個(gè)相等值,可以把最后一位固定成1或者0,最大的誤差就是最后一位代表的權(quán)重1/8 Vref。

2

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

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

每次CLK go high ,走一步

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

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

最低位LSB最終固定為1

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

3

最后給出一個(gè)6位二進(jìn)制搜索SAR logic電路的SPEC:

Input

INCR

RSTB reset信號(hào),負(fù)沿有效

CLK

OUTPUT

PUCODE [5:0]

你覺(jué)得這個(gè)電路是用Verilog代碼實(shí)現(xiàn)呢?

還是自己搭電路比較好?

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

    關(guān)注

    172

    文章

    5922

    瀏覽量

    172316
  • 二進(jìn)制
    +關(guān)注

    關(guān)注

    2

    文章

    795

    瀏覽量

    41667

原文標(biāo)題:二進(jìn)制搜索算法(二分法查找)在實(shí)際電路中的應(yīng)用

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

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

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

    簡(jiǎn)單的查找算法

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

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

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

    淺析漸近表示二分法

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

    C語(yǔ)言教程之二分查找

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

    基于C語(yǔ)言二分查找排序源代碼

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

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

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

    圖像處理算法之二分查找

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

    如何利用verilog驗(yàn)證二分法查找的設(shè)計(jì)代碼

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

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

    我相信對(duì)很多讀者朋友來(lái)說(shuō),編寫二分查找的算法代碼屬于玄學(xué)編程,雖然看起來(lái)很簡(jiǎn)單,就是會(huì)出錯(cuò),要么會(huì)漏個(gè)等號(hào),要么少加個(gè) 1。
    的頭像 發(fā)表于 06-22 09:05 ?2817次閱讀
    詳解C語(yǔ)言<b class='flag-5'>二分</b><b class='flag-5'>查找</b>算法細(xì)節(jié)

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

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

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

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

    如何理解二分查找算法

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

    FPGA設(shè)計(jì)中二分法查表算法的實(shí)現(xiàn)

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