国产FPGA安路 高集成低功耗SF1系列FPSoC新品测评【使用SF1 FPGA 进行ADC转换】
[复制链接]
本帖最后由 Grayson__ 于 2023-3-25 17:40 编辑
本期SF1测评使用 AD9280芯片与 SF1的 FPGA 部分进行模数转换,并将转换的数据通过uart IP核传输到电脑上。使用到的工具是安路的TD软件。
首先介绍一下 AD9280 ,它是 ADI 公司生产的 8 bit 、最高采样率为 32MHz的 A/D 转换器,A/D 转换器输入信号电压范围是 0~2V 。本次实验中我们将输入 -5V~+5V 的模拟电压,通过电压衰减电路后转换为 0~2V 即可进行 A/D 转换。A/D 的工作频率采用晶振输入的 25MHz。
本次实验中用到的 AD9280 转换器的转换图对应如下,这样8bit数据与输入电压的转换公式则为 y=25.5*x+127.5 (x为电压,y为量化后的8bit数据):
下面进行工程的设计。首先新建工程,配置 uart ip 核,如下,uart ip核配置的注意事项可在前几期中查看:
新建 AD 转换模块,代码如下:
module AD_rec(
input clk, //FPGA输入25MHz时钟
input rst_n, //低有效复位
input [7:0] ad_data, //AD输入数据
output ad_clk //AD驱动时钟
);
assign ad_clk = clk;
endmodule
新建AD_top顶层文件,例化 uart 与 AD 两个模块,设置 AD_top 为顶层模块,代码如下:
module AD_top(
//SYSTEM
input clk,
input rst_n,
//AD
input [7:0] ad_data,
output ad_clk,
//uart
output txd
);
AD_rec AD_rec_u1(
.clk(clk), //FPGA输入25MHz时钟
.rst_n(rst_n), //低有效复位
.ad_data(ad_data), //AD输入数据
.ad_clk(ad_clk) //AD驱动时钟
);
uart_interface uart_interface_u1(
.clk(clk),
.rst_n(rst_n),
.tx_data(ad_data),
.tx_en(1'b1),
.txd(txd)
);
endmodule
之后进行管脚约束:
set_pin_assignment { ad_clk } { LOCATION = B9; }
set_pin_assignment { ad_data[0] } { LOCATION = A10; }
set_pin_assignment { ad_data[1] } { LOCATION = A11; }
set_pin_assignment { ad_data[2] } { LOCATION = B10; }
set_pin_assignment { ad_data[3] } { LOCATION = B11; }
set_pin_assignment { ad_data[4] } { LOCATION = C10; }
set_pin_assignment { ad_data[5] } { LOCATION = C11; }
set_pin_assignment { ad_data[6] } { LOCATION = D10; }
set_pin_assignment { ad_data[7] } { LOCATION = D11; }
set_pin_assignment { clk } { LOCATION = D7; }
set_pin_assignment { rst_n } { LOCATION = H3; }
set_pin_assignment { txd } { LOCATION = A4; }
编译无误后,进行AD转换器与FPGA的管脚连接,进行bit文件的下载。使用 TI 的 HPI-1000 口袋仪器发出范围为 -5V~+5V 的直流电。打开串口显示工具,当输入电压为0时,串口显示接收到的数据为 0x81 , 与前面公式转换一致; 当输入电压为 2V 时,串口接收到0xB4,符合公式;当输入电压为 3V 时,串口接收到0xCE,符合公式。
DEMO板上可使用的 IO 较少,且只有一个uart串口,因此工程实现的功能无法做得大一些,测评结果验证的方法也比较局限。本想使用RISCV核进行AD读取,并在DEMO板上的OLED 显示所测电压值,但是RISCV可配置的功能引脚有限,无法支持实现。感兴趣的朋友可以测量正弦波,将串口输出的数据保存并在 matlab 上绘制图像。
本次测评的工程如下:
|