色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

FPGA上可以用一個(gè)比較器實(shí)現(xiàn)ADC的功能?1

jf_78858299 ? 來源:硬禾學(xué)堂 ? 作者:蘇老師 ? 2023-04-25 11:18 ? 次閱讀

使用的平臺(tái):

圖片

多數(shù)FPGA芯片上沒有ADC的功能,而一些應(yīng)用則需要用到ADC對(duì)一些模擬信號(hào),比如直流電壓等進(jìn)行量化,有沒有特別簡(jiǎn)單、低成本的實(shí)現(xiàn)方法呢?

在要求轉(zhuǎn)換速率不高的情況下,完全可以借助一顆高速比較器(成本只有幾毛錢)來實(shí)現(xiàn)對(duì)模擬信號(hào)的量化,Lattice的官網(wǎng)上一篇文章就介紹了如何制作一個(gè)簡(jiǎn)易的Sigma Delta ADC,如果FPGA能夠提供LVDS的接口,連外部的高速比較器都可以省掉。由于我們的小腳丫FPGA核心模塊在設(shè)計(jì)的時(shí)候沒有考慮到LVDS的應(yīng)用場(chǎng)景,所以還是需要搭配一個(gè)高速的比較器來實(shí)現(xiàn)Lattice官網(wǎng)上推薦的簡(jiǎn)易Sigma Delta ADC的功能。

讓小腳丫FPGA通過鎖相環(huán)PLL運(yùn)行于120MHz的主時(shí)鐘(還可以更高,提速到240MHz、360MHz都應(yīng)該沒有問題),測(cè)試1KHz以內(nèi)的模擬信號(hào)是沒有問題的。

Lattice的官網(wǎng)上就可以下載到簡(jiǎn)易Sigma Delta ADC的Verilog源代碼,可以非常方便地用在其它品牌、其它系列的FPGA上。

下面的截圖就是采用120MHz的主時(shí)鐘實(shí)現(xiàn)的對(duì)1KHz模擬信號(hào)的采樣,并通過DDS/DAC輸出,口袋儀器M2000采集并顯示的模擬信號(hào)波形。

圖片

M2000口袋儀器顯示的1KHz的波形

工作原理

詳細(xì)的工作原理介紹可以參考項(xiàng)目https://www.eetree.cn/project/detail/255 及項(xiàng)目頁(yè)面中的參考資料,在這里以幾幅圖片來示例一下。

圖片

簡(jiǎn)易Sigma Delta ADC的工作原理

圖片

直接連接 - 被測(cè)模擬信號(hào)的幅度范圍為0-3.3V

圖片

通過電阻分壓網(wǎng)絡(luò)輸入,并在比較器+端提供參考電壓,則被采集模擬信號(hào)的電壓變化范圍可以擴(kuò)展

圖片

簡(jiǎn)易Sigma Delta ADC的性能與邏輯電路的工作頻率

圖片

在不同的FPGA平臺(tái)上消耗的邏輯資源

以下就是我們的電賽綜合訓(xùn)練板上簡(jiǎn)易Sigma Delta ADC部分的電路連接

圖片

核心代碼:

頂層調(diào)用代碼:

wire [7:0] sd_adc_out; // sigma delta adc data output


wire sample_rdy;    // flag for adc conversion


ADC_top my_adc(.clk_in(clk_hs),.rstn(1'b1),.digital_out(sd_adc_out), .analog_cmp(comp_in),.analog_out(ad_pwm),.sample_rdy(sample_rdy));


assign dac_data = sd_adc_out;
assign dac_clk = clk_hs; //120MHz generated by PLL

Sigma Delta ADC頂層程序

//*********************************************************************
//
//  ADC Top Level Module
//
//*********************************************************************


module ADC_top (
  clk_in,
  rstn,
  digital_out,
  analog_cmp,  
  analog_out,
  sample_rdy);


parameter 
ADC_WIDTH = 8,              // ADC Convertor Bit Precision
ACCUM_BITS = 10,            // 2^ACCUM_BITS is decimation rate of accumulator
LPF_DEPTH_BITS = 3,         // 2^LPF_DEPTH_BITS is decimation rate of averager
INPUT_TOPOLOGY = 1;         // 0: DIRECT: Analog input directly connected to + input of comparitor
                            // 1: NETWORK:Analog input connected through R divider to - input of comp.


//input ports
input  clk_in;        // 62.5Mhz on Control Demo board
input  rstn;   
input  analog_cmp;      // from LVDS buffer or external comparitor


//output ports
output  analog_out;         // feedback to RC network
output  sample_rdy;
output [7:0] digital_out;   // connected to LED field on control demo bd.



//**********************************************************************
//
//  Internal Wire & Reg Signals
//
//**********************************************************************
wire              clk;
wire              analog_out_i;
wire              sample_rdy_i;
wire [ADC_WIDTH-1:0]      digital_out_i;
wire [ADC_WIDTH-1:0]      digital_out_abs;




assign clk = clk_in;


//***********************************************************************
//
//  SSD ADC using onboard LVDS buffer or external comparitor
//
//***********************************************************************
sigmadelta_adc #(
  .ADC_WIDTH(ADC_WIDTH),
  .ACCUM_BITS(ACCUM_BITS),
  .LPF_DEPTH_BITS(LPF_DEPTH_BITS)
  )
SSD_ADC(
  .clk(clk),
  .rstn(rstn),
  .analog_cmp(analog_cmp),
  .digital_out(digital_out_i),
  .analog_out(analog_out_i),
  .sample_rdy(sample_rdy_i)
  );


assign digital_out_abs = INPUT_TOPOLOGY ? ~digital_out_i : digital_out_i;  


//***********************************************************************
//
//  output assignments
//
//***********************************************************************


assign digital_out   = ~digital_out_abs;   // invert bits for LED display 
assign analog_out    =  analog_out_i;
assign sample_rdy    =  sample_rdy_i;


endmodule

Sigma Delta ADC主程序

//*********************************************************************
//
//  SSD Top Level Module
//
//*********************************************************************


module sigmadelta_adc (
  clk,                    
  rstn,                   
  digital_out,            
  analog_cmp,              
  analog_out,             
  sample_rdy);            


parameter 
ADC_WIDTH = 8,              // ADC Convertor Bit Precision
ACCUM_BITS = 10,            // 2^ACCUM_BITS is decimation rate of accumulator
LPF_DEPTH_BITS = 3;         // 2^LPF_DEPTH_BITS is decimation rate of averager


//input ports
input  clk;                            // sample rate clock
input  rstn;                           // async reset, asserted low
input  analog_cmp ;                    // input from LVDS buffer (comparitor)


//output ports
output  analog_out;                     // feedback to comparitor input RC circuit
output  sample_rdy;                     // digital_out is ready
output [ADC_WIDTH-1:0]  digital_out;    // digital output word of ADC


//**********************************************************************
//
//  Internal Wire & Reg Signals
//
//**********************************************************************
reg                         delta;          // captured comparitor output
reg [ACCUM_BITS-1:0]      sigma;          // running accumulator value
reg [ADC_WIDTH-1:0]          accum;          // latched accumulator value
reg [ACCUM_BITS-1:0]      counter;        // decimation counter for accumulator
reg              rollover;       // decimation counter terminal count
reg              accum_rdy;      // latched accumulator value 'ready' 


//***********************************************************************
//
//  SSD 'Analog' Input - PWM
//
//  External Comparator Generates High/Low Value
//
//***********************************************************************


always @ (posedge clk)
begin
    delta <= analog_cmp;        // capture comparitor output
end


assign analog_out = delta;      // feedback to comparitor LPF


//***********************************************************************
//
//  Accumulator Stage
//
//  Adds PWM positive pulses over accumulator period
//
//***********************************************************************


always @ (posedge clk or negedge rstn)
begin
  if( ~rstn ) 
    begin
    sigma       <= 0;
    accum       <= 0;
    accum_rdy   <= 0;
    end else begin
        if (rollover) begin
            // latch top ADC_WIDTH bits of sigma accumulator (drop LSBs)
            accum <= sigma[ACCUM_BITS-1:ACCUM_BITS-ADC_WIDTH];
            sigma <= delta;         // reset accumulator, prime with current delta value
        end else begin
            if (&sigma != 1'b1)         // if not saturated
                sigma <= sigma + delta; // accumulate 
        end
        accum_rdy <= rollover;     // latch 'rdy' (to align with accum)
    end
end


//***********************************************************************
//
//  Box filter Average
//
//  Acts as simple decimating Low-Pass Filter
//
//***********************************************************************


box_ave #(
    .ADC_WIDTH(ADC_WIDTH),
    .LPF_DEPTH_BITS(LPF_DEPTH_BITS))
box_ave (
    .clk(clk),
    .rstn(rstn),
    .sample(accum_rdy),
    .raw_data_in(accum),
    .ave_data_out(digital_out),
    .data_out_valid(sample_rdy)
);


//************************************************************************
//
// Sample Control - Accumulator Timing
//  
//************************************************************************


always @(posedge clk or negedge rstn)
begin
  if( ~rstn ) begin
    counter <= 0;
    rollover <= 0;
    end
  else begin
    counter <= counter + 1;       // running count
    rollover <= &counter;         // assert 'rollover' when counter is all 1's
    end
end
endmodule
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1630

    文章

    21796

    瀏覽量

    605257
  • 芯片
    +關(guān)注

    關(guān)注

    456

    文章

    51155

    瀏覽量

    426345
  • adc
    adc
    +關(guān)注

    關(guān)注

    99

    文章

    6533

    瀏覽量

    545462
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    fpga開發(fā)板使用教程之在K7Ibert實(shí)現(xiàn)基本的GTX測(cè)試

    測(cè)試,而且基本可以達(dá)到不用敲代碼就可以完成測(cè)試的目的。 下面按步驟,實(shí)現(xiàn)。重點(diǎn)的地方我
    發(fā)表于 12-31 15:36 ?7963次閱讀

    ADC實(shí)現(xiàn)個(gè)IO掛多個(gè)按鍵

    有時(shí)候做設(shè)計(jì)時(shí),我們會(huì)遇到外部按鍵比較多,IO口不夠用的情況。這時(shí)大部分人會(huì)考慮通過其它芯片擴(kuò)展IO,或者直接換一個(gè)IO口足夠的MCU。其實(shí),還有個(gè)方法可以
    發(fā)表于 09-01 13:25 ?3053次閱讀

    如何用STM32F407實(shí)現(xiàn)個(gè)可編程的模擬比較功能?

    STM32F407沒有獨(dú)立的模擬比較端口,如何能實(shí)現(xiàn)個(gè)可編程的模擬比較
    發(fā)表于 11-28 14:00

    STM32F303VCT6比較只有三個(gè)可以用

    STM32F303VCT6共有7個(gè)比較,為何只有COMP1、COMP2、COMP7這三個(gè)可以用
    發(fā)表于 02-13 07:13

    怎么利用FPGA和CPLD數(shù)字邏輯實(shí)現(xiàn)ADC?

    數(shù)字系統(tǒng)的設(shè)計(jì)人員擅長(zhǎng)在其印制電路板FPGA和CPLD將各種處理、存儲(chǔ)和標(biāo)準(zhǔn)的功能元件粘
    發(fā)表于 08-19 06:15

    如何利用FPGA實(shí)現(xiàn)高頻率ADC

    數(shù)字系統(tǒng)的設(shè)計(jì)人員擅長(zhǎng)在其印制電路板FPGA和CPLD將各種處理、存儲(chǔ)和標(biāo)準(zhǔn)的功能元件粘
    發(fā)表于 09-19 06:18

    可以用STM32實(shí)現(xiàn)什么?為什么使用STM32而不是8051

    你問,如何系統(tǒng)地入門學(xué)習(xí)STM32?本身就是個(gè)錯(cuò)誤的問題。假如你會(huì)使用8051 , 會(huì)寫C語(yǔ)言,那么STM32本身并不需要刻意的學(xué)習(xí)。你要考慮的是, 我可以用STM32實(shí)現(xiàn)
    發(fā)表于 02-25 06:43

    matlab來實(shí)現(xiàn)fpga功能的設(shè)計(jì)

    matlab來實(shí)現(xiàn)fpga功能的設(shè)計(jì) 摘要:System Generator for DSP是Xilinx公司開發(fā)的基于Matlab的DSP開發(fā)工具?熗?時(shí)也是
    發(fā)表于 01-16 18:10 ?1.1w次閱讀
    <b class='flag-5'>用</b>matlab來<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>fpga</b><b class='flag-5'>功能</b>的設(shè)計(jì)

    基于FPGA和CPLD數(shù)字邏輯實(shí)現(xiàn)ADC技術(shù)

    基于FPGA和CPLD數(shù)字邏輯實(shí)現(xiàn)ADC技術(shù) 數(shù)字系統(tǒng)的設(shè)計(jì)人員擅長(zhǎng)在其印制電路板FPGA
    發(fā)表于 05-25 09:39 ?1461次閱讀
    基于<b class='flag-5'>FPGA</b>和CPLD數(shù)字邏輯<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>ADC</b>技術(shù)

    基于fpga和cpld低頻/最小邏輯ADC實(shí)現(xiàn)

    數(shù)字系統(tǒng)的設(shè)計(jì)人員擅長(zhǎng)在其印制電路板FPGA和CPLD將各種處理、存儲(chǔ)和標(biāo)準(zhǔn)的功能元件粘
    發(fā)表于 04-26 11:53 ?1415次閱讀
    基于<b class='flag-5'>fpga</b>和cpld低頻/最小邏輯<b class='flag-5'>ADC</b><b class='flag-5'>實(shí)現(xiàn)</b>

    編寫個(gè)可以用GRUB來引導(dǎo)的簡(jiǎn)單x86內(nèi)核

    我們將從零開始,動(dòng)手編寫個(gè)可以用GRUB來引導(dǎo)的簡(jiǎn)單x86內(nèi)核,該內(nèi)核會(huì)在屏幕打印條信息,然后——掛起!
    的頭像 發(fā)表于 01-21 09:12 ?7670次閱讀

    如何制作個(gè)簡(jiǎn)易的Sigma Delta ADC?

    本文為備戰(zhàn)電賽的案例之,涉及到的知識(shí)技能: FPGA的使用 ADC的原理及構(gòu)成 PWM的產(chǎn)生 比較的應(yīng)用 數(shù)字濾波
    的頭像 發(fā)表于 04-01 10:27 ?4508次閱讀
    如何制作<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b>簡(jiǎn)易的Sigma Delta <b class='flag-5'>ADC</b>?

    FPGA搭配3個(gè)電阻、1個(gè)電容制作的1bit SDR接收機(jī)

    搭配3個(gè)電阻、1個(gè)電容制作的1bit SDR接收機(jī),接上喇叭,可以收聽中、長(zhǎng)波電臺(tái),連ADC都沒
    的頭像 發(fā)表于 11-09 09:15 ?5331次閱讀

    FPGA可以用個(gè)比較實(shí)現(xiàn)ADC功能?2

    多數(shù)FPGA芯片沒有ADC功能,而些應(yīng)用則需要用到ADC對(duì)
    的頭像 發(fā)表于 04-25 11:19 ?1185次閱讀

    文看懂電感可以用大的替換小的嗎

    需要盡快更換電感。那么,電路中的電感可不可以用大電感替換小電感呢?今天我們就來討論下這個(gè)問題。 是不是可以用大電感來替換小電感,我們還是要考慮多個(gè)因素: 1、封裝大小
    的頭像 發(fā)表于 01-13 21:56 ?892次閱讀
    主站蜘蛛池模板: 高H高肉强J短篇校园 | 人人看人人看 | 国内精品蜜汁乔依琳视频 | 国产亚洲日韩另类在线播放 | 美女久久久 | 国产 高清 无码 在线播放 | 欧美亚洲国产激情一区二区 | 3D内射动漫同人资源在线观看 | 三级视频黄色 | 露露的性战k8经典 | 麻豆XXXX乱女少妇精品-百度 | 国内精品久久影视免费 | 伊人在线视频 | 99热久久这里只精品国产WWW | 日韩高清一区二区三区不卡 | 久久青青草视频在线观 | 国产精品一区二区亚瑟不卡 | 国产欧美在线亚洲一区刘亦菲 | 久久只有这里有精品4 | 色呦呦导航 | 国产色欲一区二区精品久久呦 | 日韩亚洲欧洲在线rrrr片 | 国内精品久久久久久西瓜色吧 | 99久久99久久免费精品蜜桃 | beeg日本高清xxxx| 中文无码乱人伦中文视频播放 | 久久久午夜精品福利内容 | 被同桌摸出水来了好爽的视频 | 欧洲日韩av无线在码 | 添加一点爱与你电视剧免费观看 | 久草在线精彩免费视频 | 国产精品久久一区二区三区蜜桃 | 国产婷婷一区二区在线观看 | 欧洲人交xxx69 | 一区二区三区内射美女毛片 | 99视频精品全部免费 在线 | 国产成在线观看免费视频 | 国产呦精品一区二区三区网站 | 国产69精品久久久熟女 | 中文国产成人精品久久免费 | 在线观看成人免费 |