0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用FPGA驱动并行ADC和DAC芯片,使用不同编码方式的ADC与DAC时的注意事项

FPGA设计论坛 来源:FPGA设计论坛 2025-03-14 13:54 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

概述

ADCDACFPGA与外部信号接口,从数据接口类型的角度划分,有低速的串行接口和高速的并行接口。FPGA经常用来采集中高频信号,因此使用并行ADC和DAC居多。本文将介绍如何使用FPGA驱动并行ADC和并行DAC芯片。

并行接口包括两种数字编码方式:带符号数signed与无符号数unsigned。本文还将介绍使用不同编码方式的ADC与DAC时需要注意的问题。

接口协议

ADI公司的32M、8位ADC芯片AD9280和125M、8位DAC芯片AD9708为例(这是淘宝上最容易买到的AD/DA模块)。

AD9280的时序图如下:

a8e7f878-0098-11f0-9310-92fbcf53809c.jpg

AD9708的时序图如下:

a8f43188-0098-11f0-9310-92fbcf53809c.jpg

由时序图可知,AD9280在每个输入clock的上升沿对输入的模拟信号做一次采集,采集数据由数据总线data输出;AD9708也是在每个输入clock的上升沿读取数据总线DB0-DB7上的数据,将其转换为相应的电流IOUTA/IOUTB输出。

这两个芯片的管脚虽然很多,但大多数都是与硬件设计有关。其实几乎所有的并行ADC和并行DAC与FPGA之间的接口只有一条时钟线与一组数据总线,数据总线的位宽即为ADC/DAC的位数。每个时钟周期ADC都会完成一次采集(DAC完成一次输出),因此时钟频率也就是ADC和DAC的采样频率。

FPGA设计

并行ADC和DAC的接口时序驱动非常简单,只要利用Quartus或Vivado自带的时钟管理IP核生成预期采样频率的时钟信号,驱动时钟线,从数据总线上读出或写入数据即可。

比如下面的代码实现了将ADC采集到的数据再通过DAC输出:

`timescale 1ns / 1ps

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

// 将ADC采集到的数据通过DAC输出

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

module adda_test

(

inputclk,

outputdaclk,

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

outputadclk,

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核产生ADC和DAC所需频率的时钟,Quartus中该IP核叫做“PLL”,Vivado中该IP核叫做“Clocking Wizard”。

为了保证DAC输出与ADC采集到的信号相同,将两者时钟频率设置相同,且连接二者的数据总线。上述代码可以使用开发板和AD/DA模块进行实际测试。

编码方式问题

上文用到的AD9280和AD9708都是无符号数编码,而我们知道无论是Vivado还是Quartus中大多数的IP核采用的都是带符号数二进制补码的编码方式(二进制原码、补码;有符号数、无符号数的问题可参考https://blog.csdn.net/fpgadesigner/article/details/80512067 ),这就导致ADC/DAC的数据总线不能与IP核接口直接对接,必须做一定的转换处理。

考虑到上述数字系统的特点,市场上也存在不少以带符号数二进制补码接口的ADC/DAC,比如65M、12位ADC芯片AD9226。如果使用这种编码方式的芯片,数据总线就可以直接与IP核接口对接,不需要做特殊处理。

但是,我们总会不可避免的遇到类似这样的情况:

1. ADC或DAC是无符号数编码,而设计中需要使用一些带符号数接口的IP核;

2. ADC是带符号数编码,而设计中仅需获取测量值,并不需要与其它带符号数接口的模块对接。

当遇到情况1时,需要进行无符号数编码与带符号数编码之间的转换。将ADC采集到的8位无符号数转换为带符号数补码形式的代码如下:

/****将addata转化为带符号二进制补码形式 ****/

reg[7:0] ad_data;

always@ (posedge clk or negedge rst_n)

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

elsead_data <= addata - 128;    //AD9280采集输入

将带符号数补码转换为8位无符号数通过DAC输出的代码如下:

/****将dadata转化为无符号数形式 ****/

reg[7:0] da_data;

always@ (posedge clk or negedge rst_n)

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

elseda_data <= dadata + 128;    //AD9708输出    

当遇到情况2时,需要将不易直接观察的带符号数补码形式转换为带符号数原码形式,使其更加直观。代码如下:

always @(posedge ad_clk) //AD9226采集

if(ad_ch1[11]==1'b1)begin //如果是负电压

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

ch1_sig<= 45;                                //'-' asic码

end

elsebegin

ch1_reg<=ad_ch1;

ch1_sig<=43;                                //'-' asic码

end

转换的依据是一个简单的运算关系:“补码的整数值”+“原码绝对值的整数值”=2^B,B为位宽。比如带符号数原码1110的补码为1010:1110取绝对值0110为6;1010为10,二者加起来为2^4=16。

上述代码便是利用了这个运算关系。为了节省位宽,先用12’hfff减掉补码,再加1,达到同样的效果,得到带符号数原码的绝对值。根据符号位便可以知道这个原码的正负情况。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 接口
    +关注

    关注

    33

    文章

    9452

    浏览量

    156231
  • adc
    adc
    +关注

    关注

    100

    文章

    7453

    浏览量

    553935
  • dac
    dac
    +关注

    关注

    44

    文章

    2701

    浏览量

    196462
  • 编码方式
    +关注

    关注

    0

    文章

    4

    浏览量

    5854

原文标题:并行ADC与DAC

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何使用FPGA驱动并行ADC并行DAC芯片

    ADCDACFPGA与外部信号的接口,从数据接口类型的角度划分,有低速的串行接口和高速的并行接口。
    的头像 发表于 02-22 16:15 5761次阅读
    如何使用<b class='flag-5'>FPGA</b><b class='flag-5'>驱动</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>?

    寻找合适的FPGAADCDAC

    有没有具有1个通道12位的ADC,4个通道14位DAC的模块,板子上有FPGA的板子;或者有没有具有1个通道12位的ADC,4个通道14位DAC
    发表于 12-08 15:10

    ADC/DAC的基础知识

    本博客旨在涵盖“ADC / DAC教程”一文中所述的一般概念。本文介绍了不同类型的ADC / DAC架构,以及选择ADC
    发表于 11-01 15:54

    请问是否有并行ADC并行DAC接口卡让我能够使用FX2 FMC连接器连接到FPGA板?

    嗨,您能指定哪种ADC / DAC适合Spartan 3AN入门套件吗?是否有任何生产(由任何公司)并行ADC并行
    发表于 06-20 14:07

    FPGA驱动并行ADC&DAC

    驱动并行ADC并行DAC芯片并行接口包括两种数字
    发表于 09-27 09:40

    Σ-Δ型ADCDAC的特点及构成有哪些?

    Σ-Δ型ADCDAC的特点及构成有哪些?Σ-Δ型立体声ADA电路TLC320AD75C的模拟与数字音频数据接口技术、DAC的串行控制接口技术及该类器件有什么注意事项
    发表于 04-07 06:55

    DACADC

    ADC 相反。在常见的数字信号系统中,大部分传感器信号被化成电压信号,而 ADC 把电压模拟信号转换成易于计算机存储、处理的数字编码,由计算机处理完成后,再由 DAC 输出电压模拟
    发表于 08-09 07:32

    注意ADCDAC使用

    超声波测距的距离作为输入。注意ADCDAC使用时写入PCF8591的控制字为0x41,高四位的”4“在ADCDAC时都要写入,让
    发表于 01-13 07:35

    ADC/DAC,ADC/DAC的原理是什么?

    ADC/DAC,ADC/DAC的原理是什么? 产生原因 随着现代科学技术的迅猛发展,特别是数字系统已广泛应用于各种学科领域及日常生活,微型计
    发表于 03-26 10:34 2.2w次阅读

    高速ADCDAC如何与FPGA配合使用

    许多数字处理系统都会使用FPGA,原因是FPGA有大量的专用DSP以及block RAM资源,可以用于实现并行和流水线算法。因此,通常情况下,FPGA都要和高性能的
    发表于 02-09 05:45 2317次阅读
    高速<b class='flag-5'>ADC</b>和<b class='flag-5'>DAC</b>如何与<b class='flag-5'>FPGA</b>配合使用

    Σ-Δ型ADCDAC的特点和使用注意事项

    本文介绍了Σ-Δ型ADCDAC的特点及构成,并详细论述了Σ-Δ型立体声ADA电路TLC320AD75C的模拟与数字音频数据接口技术、DAC的串行控制接口技术及该类器件的使用注意事项
    发表于 08-12 12:50 6238次阅读
    Σ-Δ型<b class='flag-5'>ADC</b>和<b class='flag-5'>DAC</b>的特点和使用<b class='flag-5'>注意事项</b>

    如何使用FPGA驱动并行ADC并行DAC芯片

    ADCDACFPGA与外部信号的接口,从数据接口类型的角度划分,有低速的串行接口和高速的并行接口。FPGA经常用来采集中高频信号,因此使
    的头像 发表于 04-21 08:55 8183次阅读

    SAR ADC 的输入注意事项

    SAR ADC 的输入注意事项
    发表于 11-04 09:52 1次下载
    SAR <b class='flag-5'>ADC</b> 的输入<b class='flag-5'>注意事项</b>

    并行接口的ADCDAC的测试方法

    并行接口的ADCDAC的测试方法 ADCDAC是两种最常见的数据转换器,用于模数(ADC)和
    的头像 发表于 11-07 10:21 3001次阅读

    STM32ADC中断的使用注意事项和优化建议

    使用中断是提高系统性能和精确度的关键。本文将详细介绍STM32ADC中断的使用注意事项和优化建议。 注意事项: 1. 合理选择中断触发方式:STM32
    的头像 发表于 01-12 15:17 4829次阅读