当前位置: 首页 > news >正文

FPGA ad9248驱动

ad9248的最高时钟频率65mhz,采用cmos3.3v电压的并行io接口,做成电子模块后一般为双通道adc,有两个对外输出时钟cha_clk与chb_clk,一个并行输入端口,14分辨率的ddr_data,其模块逻辑如下,首先向adc发送一对差分时钟作为cha_clk和chb_clk,然后adc返回给fpga一个双沿数据ddr_data,通过iddr原语进行数据解析并将解析后的数据作为cha_data和chb_data输出,同时处理解析后数据的时钟为user_clk,而差分时钟由ad_clk产生。cha_over和chb_over表示接收到的外部电压是否超过量程+-5v。同时参数代表单极性输出还是双极性输出。

MMCM IP配置如下,需要注意user_clk与ad_clk相位差90

module ad9248_driver#(parameter   UNIPOLAR = 1
)(input               i_ad_clk50m     ,input               i_user_clk50m   ,input       [13:0]  i_ddr_data      ,input               i_cha_over      ,input               i_chb_over      ,output              o_cha_clk       ,output              o_chb_clk       ,output  reg [13:0]  o_cha_data      ,output  reg [13:0]  o_chb_data      );assign  o_cha_clk = i_ad_clk50m ;assign  o_chb_clk = !i_ad_clk50m;wire    [13:0]  w_cha_data  ;wire    [13:0]  w_chb_data  ;//超量程则将前一刻输出作为有效值	always@(posedge i_user_clk50m) begino_cha_data <= w_cha_data;o_chb_data <= w_chb_data;endgenvar i;generatefor(i = 0; i < 14; i = i + 1) beginIDDR #(.DDR_CLK_EDGE   ("SAME_EDGE_PIPELINED"  ),  .INIT_Q1        (1'b0                   ),  .INIT_Q2        (1'b0                   ),  .SRTYPE         ("SYNC"                 )   ) IDDR_inst (.Q1     (w_cha_data[i]  ),  // 上升沿数据.Q2     (w_chb_data[i]  ),  // 下降沿数据.C      (i_ad_clk50m    ),  // 时钟输入.CE     (1'b1           ),  // 时钟使能.D      (i_ddr_data[i]  ),  // 输入数据.R      (1'b0           ),  // 复位(可选).S      (1'b0           )   // 置位(可选));endendgenerate    reg		[15:0]		r_cnt	;always@(posedge i_user_clk50m) beginif(r_cnt < 1)r_cnt <= r_cnt + 1;elser_cnt <= 0;endreg					r_vld	;always@(posedge i_user_clk50m) beginif(r_cnt == 1)r_vld <= 1;elser_vld <= 0;endila_0 your_instance_name (.clk(i_user_clk50m), // input wire clk.probe0(i_cha_over), // input wire [0:0]  probe0  .probe1(i_chb_over), // input wire [0:0]  probe1 .probe2(o_cha_data), // input wire [13:0]  probe2 .probe3(o_chb_data), // input wire [13:0]  probe3.probe4(r_vld		) // input wire [0:0]  probe4
);endmodule

测试用的顶层文件


module ad_sample(input				i_clk50m		,input				i_rst_n			,input       [13:0]  i_ddr_data      ,input               i_cha_over      ,input               i_chb_over      ,output              o_cha_clk       ,output              o_chb_clk       );wire		w_ad_clk	;wire		w_usr_clk	;clk_wiz_0 
mmcm(.clk_out1	(w_ad_clk	),  .clk_out2	(w_usr_clk	), .resetn		(i_rst_n	), // input resetn.locked		(),       // output locked.clk_in1	(i_clk50m	)
);    wire		[13:0]	w_cha_data	;wire		[13:0]	w_chb_data	;ad9248_driver
ad9248_driver_u(.i_ad_clk50m    (w_ad_clk	),.i_user_clk50m  (w_usr_clk	),.i_ddr_data     (i_ddr_data	),.i_cha_over     (i_cha_over	),.i_chb_over     (i_chb_over	),.o_cha_clk      (o_cha_clk	),.o_chb_clk      (o_chb_clk	),.o_cha_data     (w_cha_data	),.o_chb_data     (w_chb_data	)
);endmodule

http://www.xdnf.cn/news/1439317.html

相关文章:

  • Windows/Linux下vscode+vcpkg管理C++包链接方法
  • CD75.【C++ Dev】异常
  • 从发现到恢复,看瑞数信息如何构建“抗毁重构”实战路径
  • 网站建设需要多少费用?网站建设的步骤和流程?
  • 01-Redis 发展简史与核心定位解析:从诞生到三大产品矩阵
  • 涉私数据安全与可控匿名化利用机制研究(上)
  • Zotero白嫖腾讯云翻译
  • AI优化SEO关键词策略指南
  • 计算机网络---CA证书体系(Certificate Authority)
  • 机器学习从入门到精通 - 逻辑回归为什么是分类之王?深入决策边界与概率校准
  • 亚马逊ASIN定位广告想爆单?先搞懂流量逻辑!多账号增效策略直接用
  • Java版本兼容性:JDK 21的SDK在JDK 1.8使用
  • 嵌入式学习 day63 LCD屏幕驱动、ADC驱动、HC-SR04、ds18b20
  • 什么是好的系统设计
  • LangGraph MCP智能体开发
  • 【JavaEE】(22) Spring 事务
  • 飞算JavaAI炫技赛:一天完成学生成绩综合统计分析系统开发(含源码)
  • 【Axure高保真原型】区间缩放柱状图
  • 数据结构从青铜到王者第二十话---Map和Set(3)
  • 漫谈《数字图像处理》之图像清晰化处理
  • 配置机载电脑开机自启动ros2节点和配置can0
  • 【第四章:大模型(LLM)】10.微调方法与实战-(1)Prompt Tuning
  • C++ 多线程编程
  • c++多线程(1)------创建和管理线程td::thread
  • logging:报告状态、错误和信息消息
  • 《用 Flask + SQLAlchemy 构建任务管理应用:从基础架构到实战优化》
  • 面试题:JVM与G1要点总结
  • 哪些AI生成PPT的软件或网站支持多平台使用?都支持哪些平台?
  • Linux之centos 系统常用命令详解(附实战案例)
  • 多路复用 I/O 函数——`select`函数解析