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

相关推荐
坏孩子的诺亚方舟15 天前
FPGA系统架构设计实践15_高云Arora V系列时钟体系
fpga开发·系统架构
FPGA小徐15 天前
入门 CNN 结构全解析|从流程图理论到 FPGA Verilog 硬件实现(含习题带讲解)
fpga开发
FPGA小徐15 天前
FPGA 数字信号处理:并行 FIR 与串行滤波器设计原理、对比与完整 Verilog 实现
fpga开发
Saniffer_SH16 天前
【高清视频】Gen6 服务器还没到,Gen6 SSD 怎么测?Emily 现场演示三种测试环境
人工智能·驱动开发·测试工具·缓存·fpga开发·计算机外设·压力测试
zlinear数据采集卡16 天前
双核架构深度解析:ARM+FPGA如何让数据采集卡实现500Ksps高性能?
arm开发·fpga开发·架构
9527华安16 天前
FPGA实现GTH Transceivers Wizard传输2路视频,基于aurora 8b10b编解码架构,提供4套工程源码和技术支持
fpga开发·gth·aurora 8b10b·transceivers
FPGA小徐17 天前
FPGA 数字信号处理(二):并行 FIR 滤波器的 Verilog 全流程设计与实现
fpga开发
国科安芯17 天前
基于AS32S601ZIT2型抗辐照MCU的商业航天卫星姿态确定与控制系统研究
单片机·嵌入式硬件·安全·fpga开发·架构·risc-v
ALINX技术博客17 天前
【黑金云课堂】FPGA技术教程FPGA基础:I2C 总线通信技术
fpga开发·i2c
Hello-FPGA17 天前
Xilinx KU040 FPGA Camera Link 图像采集
c++·fpga开发