AD9226 65M采样 模数转换

目录

AD9220_ReadTEST

AD9220_ReadModule

AD9226_TEST_tb

[自己再写个 260M的时钟,四分频来提供65M的时钟。](#自己再写个 260M的时钟,四分频来提供65M的时钟。)


用 vivado 写的

AD9226_ReadTEST
复制代码
module AD9226_ReadTEST(
input clk,
input rstn,

output clk_driver,	//模块时钟管脚
input [12:0]IO_data,	//模块数据管脚

output [11:0]ADC_Data,//12位ADC数据
output ADC_OTR			//信号过压标志位
);

wire areset, pll260m_lockedPIN;
wire pll_260M;
assign areset = ~rstn;

/*
锁相环:
用于产生240M时钟
*/



pll260m	U0_pll260m_inst (
	.clk_in1  ( clk ),
	.clk_out1 ( pll_260M ),
	.locked   ( pll260m_lockedPIN )
	);

/*
AD9226控制器:
将输入的260M时钟4分频(在AD9226_ReadModule.V中定义)后,用于驱动AD9226模块,并采集信号电压数据。
数据输入电压对应关系(受信号调理电路器件值公差影响,不同模块可能有微小差异):
信号(-10V)~(+10V):数据(0~4095)
*/
AD9226_ReadModule U1_AD9226_ReadModule(
.clk(pll_260M),
.rstn(rstn),

.clk_driver(clk_driver),
.IO_data(IO_data),

.ADC_Data({ADC_OTR, ADC_Data})
);

endmodule
AD9226_ReadModule
复制代码
module AD9226_ReadModule(
input clk,
input rstn,

output reg clk_driver,
input [12:0]IO_data,

output reg [12:0]ADC_Data
);

`define clkOutPeriod  4		//模块驱动时钟分频,clk_driver = clk/4 = 260M/4 = 65M
reg [31:0]clkCnt;
always @(posedge clk or negedge rstn)
	if(!rstn)
		clkCnt <= 32'd0;
	else if(clkCnt == (`clkOutPeriod-1)) begin
		clkCnt <= 32'd0;
	end
	else begin
		clkCnt <= clkCnt + 32'd1;
	end
	
always @(posedge clk or negedge rstn)
	if(!rstn) begin
		clk_driver <= 1'd0;
		ADC_Data <= 13'd0;
	end
	else if(clkCnt == `clkOutPeriod/2-1) begin
		clk_driver <= 1'd1;
		ADC_Data <= IO_data;
	end
	else if(clkCnt == `clkOutPeriod-1) begin
		clk_driver <= 1'd0;
		ADC_Data <= ADC_Data;
	end
	else begin
		clk_driver <= clk_driver;
		ADC_Data <= ADC_Data;
	end

endmodule
AD9226_TEST_tb
复制代码
`timescale 1ns/1ns

`define clock_period 20
module AD9226_TEST_tb;

reg Clock;
reg Rst_n;
//reg a,b,c;
wire clk_driver;
//wire [1:0]out;
reg [12:0]IO_data;
wire [12:0]ADC_Data;
	//block_nonblock block_nonblock0(Clock,Rst_n,a,b,c,out);
    
AD9226_ReadModule U0_AD9226_ReadModule(
    .clk(Clock),
    .rstn(Rst_n),
    .clk_driver(clk_driver),
    .IO_data(IO_data),
    .ADC_Data(ADC_Data)
);

initial Clock = 1;
always#(`clock_period/2) Clock = ~Clock;

initial begin
    Rst_n = 1'b0;
    IO_data <= 13'd0;
    #(`clock_period*200 + 1);
    Rst_n = 1'b1;
    #(`clock_period*200);		IO_data <= 13'd0;
    #(`clock_period*200);		IO_data <= 13'd1;
    #(`clock_period*200);		IO_data <= 13'd2;
    #(`clock_period*200);		IO_data <= 13'd3;
    #(`clock_period*200);		IO_data <= 13'd4;
    #(`clock_period*200);		IO_data <= 13'd5;
    #(`clock_period*200);		IO_data <= 13'd6;
    #(`clock_period*200);		IO_data <= 13'd7;
    #(`clock_period*200);
    $stop;	
end
	



endmodule
自己再写个 260M的时钟,四分频来提供65M的时钟。

OK 最终生成

相关推荐
szxinmai主板定制专家8 小时前
AMR 项目落地:机器人控制器硬件定制化需求复盘
arm开发·单片机·fpga开发·系统架构·机器人·am62x
FPGA小迷弟1 天前
FPGA 与卫星:从星载硬件到在轨智能的完整技术解析
fpga开发·架构·fpga·1024程序员节·无线电
NamoAmitabha1281 天前
CPU 内部结构是什么?---deepseek
fpga开发
abc light1 天前
ARM 裸机开发(6)——时钟树与定时器
arm开发·单片机·fpga开发
156082072192 天前
JFMZQ28DR、JFMZQ68DR、RFsoc XCZU47DR、XCZU48DR 信号处理板
fpga开发·信号处理
XMAIPC_Robot2 天前
-40~85℃宽温实测:RK3588 机器人控制器硬件底座,长时间 SLAM 定位稳定性验证
人工智能·fpga开发·机器人·边缘计算·arm+fpga·rk3588+fpga
樱木花道長2 天前
AMD Ross 深度系列 8:FAQ 七问七答(文末附网盘链接)
人工智能·fpga开发
FPGA小迷弟2 天前
FPGA 与无人机:从飞控实时性到智能载荷的硬件加速实践
人工智能·ai·fpga开发·架构·无人机·ai编程
低慢小uav2 天前
(已解决)Zynq芯片lwip协议栈,使用tcp作为服务器Service,接收大量数据时,长度接收正常,接收对数据校验,校验和异常分析
网络协议·tcp/ip·fpga开发
szxinmai主板定制专家2 天前
ARM+FPGA 数控机床控制器:选 CODESYS SoftMotion CNC,还是基于 LinuxCNC 自研搭建?架构、授权、实时性、量产风险深度对比
arm开发·fpga开发·codesys·数据采集卡·linuxcnc·rk3576