最近很少更新文章,主要在设计板卡,目前使用高云的芯片比较纯熟,中等的项目中该芯片也用起来了,有空也更新一下文章,当然有兴趣学习高云的板卡的朋友可以去购买我的板卡,学习中有技术方面的问题都可以提供技术支持。
更新了一款2a18c的板卡,图片如下:主要采用模块化设计,主板采用排针引出bga的IO,以供外部以太网模块、ADC模块等等使用,外设部分模块后续会持续更新。
除了介绍硬件板卡之外,主要介绍高速ADC的例程,芯片采用adi的AD9288芯片,该芯片为8bit精度的双通道adc,使用的驱动代码非常简单,简单的讲解以下驱动的过程,该芯片做完硬件配置即原理图设计后,软件上只需要给时钟就可以拿到数据,我们用最简单的40Mhz采样率的adc来做,因为是并行的ADC数据接口,所以代码部分只需要定义一个接收dff即可,至于后续的数据是存储还是转发,看具体的数据使用要求,简单的给一个驱动代码:参考的时许图如下;
module ad9288_driver(
input clk,
input rst_n,
input [7:0] ad9288_dina,
input [7:0] ad9288_dinb,
output ad9288_dclka,
output ad9288_dclkb
);
/*adc输出时钟采用PLL直接输出*/
Gowin_rPLL u_Gowin_rPLL(
.clkout (clkout ), //output clkout
.lock ( ), //output lock
.clkin (clk ) //input clkin
);
assign ad9288_dclka = clkout;
assign ad9288_dclkb = ~clkout;
/*数据接收部分*/
reg [7:0] dat_ca_r;
reg [7:0] dat_cb_r;
always@(negedge ad9288_dclka )
if(!rst_n)
dat_ca_r <= 'd0;
else
dat_ca_r <= ad9288_dina;
always@(negedge ad9288_dclkb)
if(!rst_n)
dat_cb_r<= 'd0;
else
dat_cb_r<= ad9288_dina;
endmodule
驱动部分比较简单,后续添加高云的.rao 文件,观察adc输出的数据是否正确。