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

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

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

如何使用FPGA驅(qū)動并行ADC和并行DAC芯片

FPGA設(shè)計論壇 ? 來源:CSDN技術(shù)社區(qū) ? 作者:FPGADesigner ? 2022-04-21 08:55 ? 次閱讀

概述

ADCDACFPGA與外部信號接口,從數(shù)據(jù)接口類型的角度劃分,有低速的串行接口和高速的并行接口。FPGA經(jīng)常用來采集中高頻信號,因此使用并行ADC和DAC居多。本文將介紹如何使用FPGA驅(qū)動并行ADC和并行DAC芯片。

并行接口包括兩種數(shù)字編碼方式:帶符號數(shù)signed與無符號數(shù)unsigned。本文還將介紹使用不同編碼方式的ADC與DAC時需要注意的問題。

接口協(xié)議

ADI公司的32M、8位ADC芯片AD9280和125M、8位DAC芯片AD9708為例(這是淘寶上最容易買到的AD/DA模塊)。

AD9280的時序圖如下:

43c7b4a4-c100-11ec-bce3-dac502259ad0.jpg

AD9708的時序圖如下:

43e84dd6-c100-11ec-bce3-dac502259ad0.jpg

由時序圖可知,AD9280在每個輸入clock的上升沿對輸入的模擬信號做一次采集,采集數(shù)據(jù)由數(shù)據(jù)總線data輸出;AD9708也是在每個輸入clock的上升沿讀取數(shù)據(jù)總線DB0-DB7上的數(shù)據(jù),將其轉(zhuǎn)換為相應(yīng)的電流IOUTA/IOUTB輸出。

這兩個芯片的管腳雖然很多,但大多數(shù)都是與硬件設(shè)計有關(guān)。其實幾乎所有的并行ADC和并行DAC與FPGA之間的接口只有一條時鐘線與一組數(shù)據(jù)總線,數(shù)據(jù)總線的位寬即為ADC/DAC的位數(shù)。每個時鐘周期ADC都會完成一次采集(DAC完成一次輸出),因此時鐘頻率也就是ADC和DAC的采樣頻率。

FPGA設(shè)計

并行ADC和DAC的接口時序驅(qū)動非常簡單,只要利用Quartus或Vivado自帶的時鐘管理IP核生成預(yù)期采樣頻率的時鐘信號,驅(qū)動時鐘線,從數(shù)據(jù)總線上讀出或?qū)懭霐?shù)據(jù)即可。

比如下面的代碼實現(xiàn)了將ADC采集到的數(shù)據(jù)再通過DAC輸出

`timescale 1ns / 1ps

//-----------------------------------------------

// 將ADC采集到的數(shù)據(jù)通過DAC輸出

//-----------------------------------------------

module adda_test

(

input clk,

output daclk,

output [7:0] dadata, //DA data

output adclk,

input [7:0] addata //AD data

);

PLL PLL_inst

(

.clk_in1(clk), // IN

// Clock out ports

.clk_out1(adclk), // OUT 32Mhz

.clk_out2(daclk), // OUT 32Mhz

// Status and control signals

.reset(1'b0), // IN

.locked()

);

assign dadata = addata;

endmodule

上述代碼中實例化了一個PLL IP核產(chǎn)生ADC和DAC所需頻率的時鐘,Quartus中該IP核叫做“PLL”,Vivado中該IP核叫做“Clocking Wizard”。

為了保證DAC輸出與ADC采集到的信號相同,將兩者時鐘頻率設(shè)置相同,且連接二者的數(shù)據(jù)總線。上述代碼可以使用開發(fā)板和AD/DA模塊進(jìn)行實際測試。

編碼方式問題

上文用到的AD9280和AD9708都是無符號數(shù)編碼,而我們知道無論是Vivado還是Quartus中大多數(shù)的IP核采用的都是帶符號數(shù)二進(jìn)制補(bǔ)碼的編碼方式,這就導(dǎo)致ADC/DAC的數(shù)據(jù)總線不能與IP核接口直接對接,必須做一定的轉(zhuǎn)換處理。

考慮到上述數(shù)字系統(tǒng)的特點,市場上也存在不少以帶符號數(shù)二進(jìn)制補(bǔ)碼接口的ADC/DAC,比如65M、12位ADC芯片AD9226。如果使用這種編碼方式的芯片,數(shù)據(jù)總線就可以直接與IP核接口對接,不需要做特殊處理。

但是,我們總會不可避免的遇到類似這樣的情況:

1. ADC或DAC是無符號數(shù)編碼,而設(shè)計中需要使用一些帶符號數(shù)接口的IP核;

2. ADC是帶符號數(shù)編碼,而設(shè)計中僅需獲取測量值,并不需要與其它帶符號數(shù)接口的模塊對接。

當(dāng)遇到情況1時,需要進(jìn)行無符號數(shù)編碼與帶符號數(shù)編碼之間的轉(zhuǎn)換。將ADC采集到的8位無符號數(shù)轉(zhuǎn)換為帶符號數(shù)補(bǔ)碼形式的代碼如下:

/**** 將addata轉(zhuǎn)化為帶符號二進(jìn)制補(bǔ)碼形式 ****/

reg [7:0] ad_data;

always @ (posedge clk or negedge rst_n)

if (!rst_n) ad_data <= 8'd0;

else ad_data <= addata - 128;? ? //AD9280采集輸入

將帶符號數(shù)補(bǔ)碼轉(zhuǎn)換為8位無符號數(shù)通過DAC輸出的代碼如下:

/**** 將dadata轉(zhuǎn)化為無符號數(shù)形式 ****/

reg [7:0] da_data;

always @ (posedge clk or negedge rst_n)

if (!rst_n) da_data <= 8'd0;

else da_data <= dadata + 128;? ? //AD9708輸出

當(dāng)遇到情況2時,需要將不易直接觀察的帶符號數(shù)補(bǔ)碼形式轉(zhuǎn)換為帶符號數(shù)原碼形式,使其更加直觀。代碼如下:

always @(posedge ad_clk) //AD9226采集

if(ad_ch1[11]==1'b1) begin //如果是負(fù)電壓

ch1_reg<=12'hfff - ad_ch1 + 1'b1;

ch1_sig <= 45;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //'-' asic碼

end

else begin

ch1_reg<=ad_ch1;

ch1_sig<=43;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //'-' asic碼

end

轉(zhuǎn)換的依據(jù)是一個簡單的運(yùn)算關(guān)系:“補(bǔ)碼的整數(shù)值”+“原碼絕對值的整數(shù)值”=2^B,B為位寬。比如帶符號數(shù)原碼1110的補(bǔ)碼為1010:1110取絕對值0110為6;1010為10,二者加起來為2^4=16。

上述代碼便是利用了這個運(yùn)算關(guān)系。為了節(jié)省位寬,先用12’hfff減掉補(bǔ)碼,再加1,達(dá)到同樣的效果,得到帶符號數(shù)原碼的絕對值。根據(jù)符號位便可以知道這個原碼的正負(fù)情況。

原文標(biāo)題:FPGA學(xué)習(xí)—并行ADC與DAC

文章出處:【微信公眾號:FPGA設(shè)計論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

    關(guān)注

    1629

    文章

    21736

    瀏覽量

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

    關(guān)注

    98

    文章

    6498

    瀏覽量

    544628
  • dac
    dac
    +關(guān)注

    關(guān)注

    43

    文章

    2294

    瀏覽量

    191051

原文標(biāo)題:FPGA學(xué)習(xí)—并行ADC與DAC

文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設(shè)計論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    基于FPGA的ARM并行總線設(shè)計與仿真分析

    由于FPGA技術(shù)和ARM技術(shù)應(yīng)用越來越廣泛,通過設(shè)計并行總線接口來實現(xiàn)兩者之間的數(shù)據(jù)交換,可以較容易地解決快速傳輸數(shù)據(jù)的需求,因此設(shè)計滿足系統(tǒng)要求的FPGA并行總線顯得尤為重要。本文設(shè)
    發(fā)表于 08-15 10:44 ?7971次閱讀
    基于<b class='flag-5'>FPGA</b>的ARM<b class='flag-5'>并行</b>總線設(shè)計與仿真分析

    如何使用FPGA驅(qū)動并行ADC并行DAC芯片?

    ADCDACFPGA與外部信號的接口,從數(shù)據(jù)接口類型的角度劃分,有低速的串行接口和高速的并行接口。
    的頭像 發(fā)表于 02-22 16:15 ?3732次閱讀
    如何使用<b class='flag-5'>FPGA</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>并行</b><b class='flag-5'>ADC</b>和<b class='flag-5'>并行</b><b class='flag-5'>DAC</b><b class='flag-5'>芯片</b>?

    請問如何使用fx3芯片來對FPGA進(jìn)行并行配置?

    我閱讀過AN84868,了解到fx3可以對連接的FPGA芯片進(jìn)行串行配置;但是我的項目中,希望能盡量縮短FPGA配置的時間,因此希望能夠了解是否有辦法使用fx3芯片對外接的
    發(fā)表于 05-28 08:30

    fpga基礎(chǔ)篇(二):三大并行結(jié)構(gòu)

    `fpga基礎(chǔ)篇(二):三大并行結(jié)構(gòu)最近小編比較忙,所以這期給大家介紹一個基礎(chǔ)篇,比較簡單,但卻是FPGA編程的基礎(chǔ)。我們知道FPGA與單片機(jī)最大的區(qū)別就是
    發(fā)表于 04-13 10:23

    請問是否有并行ADC并行DAC接口卡讓我能夠使用FX2 FMC連接器連接到FPGA板?

    嗨,您能指定哪種ADC / DAC適合Spartan 3AN入門套件嗎?是否有任何生產(chǎn)(由任何公司)并行ADC并行
    發(fā)表于 06-20 14:07

    FPGA驅(qū)動并行ADC&DAC

    驅(qū)動并行ADC并行DAC芯片。并行接口包括兩種數(shù)字
    發(fā)表于 09-27 09:40

    【每日推薦】十七種電路設(shè)計原理圖解析,這里全告訴你了

    和高速的并行接口。FPGA經(jīng)常用來采集中高頻信號,因此使用并行ADCDAC居多。本文將介紹如何使用FP
    發(fā)表于 09-27 13:56

    在pcb設(shè)計中FPGA與高速并行DAC的布線應(yīng)該注意什么?

    在pcb設(shè)計中FPGA與高速并行DAC的布線應(yīng)該注意什么?
    發(fā)表于 04-11 17:30

    基于FPGA的ARM并行總線研究與仿真

    基于FPGA的ARM并行總線研究與仿真
    發(fā)表于 01-24 16:54 ?21次下載

    FPGA電源設(shè)計在并行工程中的應(yīng)用

    本文介紹了FPGA電源設(shè)計并行工程的合理性,講解了并行工程(CE)技術(shù)及其作用,討論了FPGA電源系統(tǒng)設(shè)計的復(fù)雜性和不確定性。
    發(fā)表于 10-13 13:00 ?5次下載
    <b class='flag-5'>FPGA</b>電源設(shè)計在<b class='flag-5'>并行</b>工程中的應(yīng)用

    基于FPGA和多DSP的多總線并行處理器設(shè)計

    基于FPGA和多DSP的多總線并行處理器設(shè)計
    發(fā)表于 10-19 13:40 ?4次下載
    基于<b class='flag-5'>FPGA</b>和多DSP的多總線<b class='flag-5'>并行</b>處理器設(shè)計

    AD9831:25 MHz并行加載DDS芯片10位DAC數(shù)據(jù)交換

    AD9831:25 MHz并行加載DDS芯片10位DAC數(shù)據(jù)交換
    發(fā)表于 05-10 12:19 ?5次下載
    AD9831:25 MHz<b class='flag-5'>并行</b>加載DDS<b class='flag-5'>芯片</b>10位<b class='flag-5'>DAC</b>數(shù)據(jù)交換

    基于數(shù)字后處理算法的并行交替采樣ADC系統(tǒng)

    ADC通道提供交替采樣時鐘:在FPGA芯片雙倍速I/0和內(nèi)部集成鎖相環(huán)的支持下,使用單片FPGA芯片接收
    發(fā)表于 09-17 12:22 ?5次下載
    基于數(shù)字后處理算法的<b class='flag-5'>并行</b>交替采樣<b class='flag-5'>ADC</b>系統(tǒng)

    基于FPGA的ARM并行總線設(shè)計原理

    電子發(fā)燒友網(wǎng)站提供《基于FPGA的ARM并行總線設(shè)計原理.pdf》資料免費下載
    發(fā)表于 10-10 09:31 ?1次下載
    基于<b class='flag-5'>FPGA</b>的ARM<b class='flag-5'>并行</b>總線設(shè)計原理

    并行接口的ADCDAC的測試方法

    并行接口的ADC、DAC的測試方法 ADCDAC是兩種最常見的數(shù)據(jù)轉(zhuǎn)換器,用于模數(shù)(ADC)和
    的頭像 發(fā)表于 11-07 10:21 ?1839次閱讀