基于FPGA的并行ADC与DAC Verilog实现案例

时间:2025-11-01  作者:Diven  阅读:0

概述

基于FPGA的并行ADC与DAC Verilog实现案例

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

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

接口协议

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

AD9280的时序图如下:

AD9708的时序图如下:

由时序图可知,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(    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核产生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核接口对接,不需要做特殊处理。

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

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

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

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

      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采集输入将带符号数补码转换为8位无符号数通过DAC输出的代码如下:       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输出当遇到情况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     else begin       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,达到同样的效果,得到带符号数原码的绝对值。根据符号位便可以知道这个原码的正负情况。

序逻辑。或者更该程序代码,更该算法。到这一步就是没有办法的办法了。

第五:有些时候在程序中加入一些和项目不相关的代码,也可以提高正常程序的时钟约束余量,估计是不相关代码挤占了一些逻辑单元,使得正常程序在布局布线的时候,选择了其路径吧。这个办法不固定,瞎猫碰死耗子的事情。

主要就是这几种方法了,首先要选好芯片,这是最重要的,不然为了省成本,最后发现芯片速度不够,很烦人的。

最后提一下有些网友提到FPGA发热厉害的现象,看看你在项目中是不是将unused pin 接地了,这样芯片会发热,最好将unused pin 微上拉,或者设置为输入即可。

审核编辑:黄飞

 

猜您喜欢

二极管是重要的半导体器件,应用于电子电路中。主要功能是允许电流在一个方向上流动,而阻止反向电流的流动。这一特性使得二极管在开关电路中的应用变得非常重要。本文将详...
2025-04-05 18:30:35

瓷管电阻因其优良的耐高温、耐腐蚀性能以及稳定的电阻特性,应用于各种电子设备和工业控制系统中。作为瓷管电阻的重要品牌,格莱尔(GLE)凭借其很好的品质和丰富的产品...
2016-06-10 03:29:02

工厂不断寻求提高产能和性能的方式。同时,它们还受到监管要求,要减少对环境的负面影响。实现这一目标的最有效方法是通过工业自动化中使用的系统和传感器。因此,为了有效...
2023-07-31 16:52:00

2512贴片电阻,因其尺寸为2.5mm x 1.2mm而得名,是一种广泛应用于电子电路中的表面贴装元件。它的小巧身材使其成为现代电子设备小型化和轻量化趋势下的理...
2025-04-14 15:03:52

现代电子设备中,连接器扮演着非常重要的角色。CONN_24.9X16.1MM作为一种高性能连接器,因其独特的尺寸和优越的性能,广泛应用于各类电子产品中。本文将深...
2025-02-26 16:00:53

汽车保险丝是非常重要的配件。作为电路的安全卫士,保险丝能够有效防止电流过大引发的电路短路或火灾事故。卡亚斯(Kayas)作为知名的汽车保险丝品牌,高品质的产品和...
2024-01-29 01:29:30

现代电子设备的设计中,封装技术的选择对整体性能和可靠性至关重要。HLQFP32_7X7MM_EP是一种广泛应用于各种电子产品中的高效能封装解决方案。其独特的结构...
2025-02-24 16:41:35

安规电容是重要的电子元件。主要用于电气设备中。的作用是滤波和隔离。今天我们来探讨安规电容的工作原理。安规电容的定义安规电容是指符合安全标准的电容器。主要用于交流...
2025-03-22 05:30:34

毫米波雷达测试铁片的原理毫米波雷达是一种利用毫米波进行物体探测和测距的传感技术。它使用的频率范围通常位于30 GHz到300 GHz之间。对于测试铁片的原理...
2023-11-22 17:41:00

可插拔电缆是便捷的连接方式,应用于各种电子设备和工业机器中。根据不同的使用场景和需求,可插拔电缆主要可以分为以下几类。按照用途分类,可插拔电缆可分为电力电缆和信...
2009-10-20 00:00:00