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 最终生成

相关推荐
zlinear数据采集卡11 小时前
D223的PWM电机控制:6路独立脉冲+加减速算法深度解析
arm开发·stm32·嵌入式硬件·算法·fpga开发·架构
zlinear数据采集卡15 小时前
ZLinear产品线全景对比:D223 vs DABL7606 vs DABL-G511选型指南
arm开发·嵌入式硬件·算法·fpga开发·开源
何事误红尘19 小时前
ZYNQ学习FPGA笔记(一):vivado安装、XC7Z045
fpga开发
zlinear数据采集卡2 天前
D223的SRAM硬件记录仪:外部触发与瞬态波形捕获方案
arm开发·嵌入式硬件·fpga开发·开源
szxinmai主板定制专家2 天前
基于 RK3588 + Xilinx Kintex-7 FPGA 异构工业主控板设计方案
arm开发·人工智能·嵌入式硬件·fpga开发·zynq
Rambo.xia2 天前
RFSoC高速采集卡设计项目:一块板卡串联综合优化5大核心技术
单片机·嵌入式硬件·fpga开发
XMAIPC_Robot2 天前
RK3588+STM32:高性能机器人运动控制解决方案,兼顾实时性与AI算力
人工智能·stm32·嵌入式硬件·算法·fpga开发·机器人·arm+fpga
zlinear数据采集卡2 天前
D223的DDS信号发生器:10000点查找表与4通道16位DAC波形输出
arm开发·嵌入式硬件·fpga开发·开源
物质波波波2 天前
WS-RPE:面向边缘物理AI实时特征值计算的硬件工作窃取调度器与冗余PE激活架构
人工智能·fpga开发·架构·系统架构·硬件架构
我爱C编程3 天前
基于FPGA的DSB调制解调系统verilog开发
fpga开发·verilog·fpga·dsb