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

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

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

3天內不再提示

FPGA上可以用一個比較器實現ADC的功能?1

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

使用的平臺:

圖片

多數FPGA芯片上沒有ADC的功能,而一些應用則需要用到ADC對一些模擬信號,比如直流電壓等進行量化,有沒有特別簡單、低成本的實現方法呢?

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

讓小腳丫FPGA通過鎖相環PLL運行于120MHz的主時鐘(還可以更高,提速到240MHz、360MHz都應該沒有問題),測試1KHz以內的模擬信號是沒有問題的。

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

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

圖片

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

工作原理

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

圖片

簡易Sigma Delta ADC的工作原理

圖片

直接連接 - 被測模擬信號的幅度范圍為0-3.3V

圖片

通過電阻分壓網絡輸入,并在比較器+端提供參考電壓,則被采集模擬信號的電壓變化范圍可以擴展

圖片

簡易Sigma Delta ADC的性能與邏輯電路的工作頻率

圖片

在不同的FPGA平臺上消耗的邏輯資源

以下就是我們的電賽綜合訓練板上簡易Sigma Delta ADC部分的電路連接

圖片

核心代碼:

頂層調用代碼:

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
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1629

    文章

    21752

    瀏覽量

    604118
  • 芯片
    +關注

    關注

    456

    文章

    50910

    瀏覽量

    424506
  • adc
    adc
    +關注

    關注

    98

    文章

    6509

    瀏覽量

    544960
收藏 人收藏

    評論

    相關推薦

    fpga開發板使用教程之在K7Ibert實現基本的GTX測試

    測試,而且基本可以達到不用敲代碼就可以完成測試的目的。 下面按步驟,實現。重點的地方我
    發表于 12-31 15:36 ?7893次閱讀

    ADC實現IO掛多個按鍵

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

    如何用STM32F407實現可編程的模擬比較功能

    STM32F407沒有獨立的模擬比較端口,如何能實現可編程的模擬比較
    發表于 11-28 14:00

    STM32F303VCT6比較只有三可以用

    STM32F303VCT6共有7比較,為何只有COMP1、COMP2、COMP7這三可以用
    發表于 02-13 07:13

    怎么利用FPGA和CPLD數字邏輯實現ADC

    數字系統的設計人員擅長在其印制電路板FPGA和CPLD將各種處理、存儲和標準的功能元件粘
    發表于 08-19 06:15

    如何利用FPGA實現高頻率ADC

    數字系統的設計人員擅長在其印制電路板FPGA和CPLD將各種處理、存儲和標準的功能元件粘
    發表于 09-19 06:18

    可以用STM32實現什么?為什么使用STM32而不是8051

    你問,如何系統地入門學習STM32?本身就是錯誤的問題。假如你會使用8051 , 會寫C語言,那么STM32本身并不需要刻意的學習。你要考慮的是, 我可以用STM32實現
    發表于 02-25 06:43

    matlab來實現fpga功能的設計

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

    基于FPGA和CPLD數字邏輯實現ADC技術

    基于FPGA和CPLD數字邏輯實現ADC技術 數字系統的設計人員擅長在其印制電路板FPGA
    發表于 05-25 09:39 ?1454次閱讀
    基于<b class='flag-5'>FPGA</b>和CPLD數字邏輯<b class='flag-5'>實現</b><b class='flag-5'>ADC</b>技術

    基于fpga和cpld低頻/最小邏輯ADC實現

    數字系統的設計人員擅長在其印制電路板FPGA和CPLD將各種處理、存儲和標準的功能元件粘
    發表于 04-26 11:53 ?1391次閱讀
    基于<b class='flag-5'>fpga</b>和cpld低頻/最小邏輯<b class='flag-5'>ADC</b><b class='flag-5'>實現</b>

    編寫可以用GRUB來引導的簡單x86內核

    我們將從零開始,動手編寫可以用GRUB來引導的簡單x86內核,該內核會在屏幕打印條信息,然后——掛起!
    的頭像 發表于 01-21 09:12 ?7650次閱讀

    如何制作簡易的Sigma Delta ADC

    本文為備戰電賽的案例之,涉及到的知識技能: FPGA的使用 ADC的原理及構成 PWM的產生 比較的應用 數字濾波
    的頭像 發表于 04-01 10:27 ?4466次閱讀
    如何制作<b class='flag-5'>一</b><b class='flag-5'>個</b>簡易的Sigma Delta <b class='flag-5'>ADC</b>?

    FPGA搭配3電阻、1電容制作的1bit SDR接收機

    搭配3電阻、1電容制作的1bit SDR接收機,接上喇叭,可以收聽中、長波電臺,連ADC都沒
    的頭像 發表于 11-09 09:15 ?5222次閱讀

    FPGA可以用比較實現ADC功能?2

    多數FPGA芯片沒有ADC功能,而些應用則需要用到ADC
    的頭像 發表于 04-25 11:19 ?1170次閱讀

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

    需要盡快更換電感。那么,電路中的電感可不可以用大電感替換小電感呢?今天我們就來討論下這個問題。 是不是可以用大電感來替換小電感,我們還是要考慮多個因素: 1、封裝大小
    的頭像 發表于 01-13 21:56 ?851次閱讀
    主站蜘蛛池模板: CHINESE老阿姨免费视频| 嫩草AV久久伊人妇女| 亚洲伊人久久一次| 欧美高跟镣铐bdsm视频| 国产午夜视频| 99久久婷婷国产麻豆精品电影| 亚洲国产精品特色大片观看| 欧美熟妇VIVOE精品| 精品国产乱码久久久久久人妻 | 午夜宅宅伦电影网| 美女被C污黄网站免费观看| 国产在线高清视频无码不卡| WWW国产无套内射久久| 18禁黄无遮挡禁游戏在线下载| 亚洲精品色播一区二区| 十分钟视频影院免费| 欧美v1deossexo高清| 久久久久久久伊人电影| 国产网址在线观看| 丰满人妻熟女色情A片| 99re5.久久热在线视频| 伊人久久大香线蕉综合网站| 亚洲成人免费在线观看| 涩涩视频下载| 日韩hd高清xxxⅹ| 亲胸揉胸膜下刺激视频在线观看| 猫咪www958ii| 玖玖爱精品视频| 久久久擼擼擼麻豆| 久久久高清国产999尤物| 果冻传媒视频在线播放 免费观看| 国产成人精品自线拍| 俄罗斯极品hd| 边摸边吃奶边做带声音| JizzJizzJizz亚洲成年| 99热这里只有精品8| 99国产精品人妻无码免费| 91嫩草私人成人亚洲影院| 中文字幕在线免费视频| 曰韩一本道高清无码av| 伊人久久大香线蕉综合影|