[附代码]多输入AD模数转换,数据接受模块 Verilog 实现 (授人与渔)

2023-11-14

要素察觉:

  1. 本文基于 AD7888 八输入通道 模数转换芯片,对转换后的数据在 FPGA 中进行接收,所使用的 HDL 为 Verilog;
  2. 所有实现步骤依据 AD7888 DataSheet 中给出的相关数据和时序图,对原理和相应 Verilog 实现进行系统、完整说明;
  3. TestBench 测试程序可直接调用;
  4. 先看一下TestBench仿真测试结果
    在这里插入图片描述

一、为什么需要模数转换
在许多电路系统中会对一些变量进行收集,从而实现对相应电路模块的控制。这些变量无论是光照强度,还是温度和湿度,都通过一定的传感器电路变成电压这个模拟量。通过对电压模拟量的采集和AD转换,达到芯片进行读取和控制的目的。

二、AD转换原理
限于侧重点和不同需求,会另附链接进行说明。

三、Verilog 实现思想
1.端口操作
首先得知道:
(1)要对 AD7888 哪些端口进行操作
(2)这些端口对于 FPGA 来说是输入端口还是输出端口

下图是 AD7888 的管脚封装图以及各管脚的功能说明
在这里插入图片描述
实际上与 FPGA 相连的只有四个端口: SCLK、CS、DIN、DOUT。
这四个端口与 FPGA 之间的信号流向如下图所示:
在这里插入图片描述
由 FPGA 对 CS 端口进行片选操作;FPGA 生成串行时钟供给 SCLK 端口使用;DOUT 端口负责向 FPGA 发送模数转换后的结果。

DIN 端口负责接受来自 FPGA 的控制信号,下图是传输到 DIN 端口的 8 bit控制信号,图中 MSB 为第一个传输的 bit。
在这里插入图片描述
控制信号包括 :
[ADD2 ADD1 ADD0]:对 8 个输入端口(通道)的模数转换结果的通道选择;
[REF]:内部 REF 参考电压的使能与否;
[PM1 PM0]:AD7888 的工作模式。
注意在这里插入图片描述
在对某一通道数据采样结果进行传输的前一个传输周期就要在 DIN 中将这个通道的地址赋值好。

2.端口时序
下图是 AD7888 的数据传输时序图在这里插入图片描述
只要按照这个时序图来写 Verilog 程序就好。

(1)生成 SCLK 串行时钟
AD7888 与 FPGA 的所有数据传输完全基于 SCLK,查阅 AD7888 的DataSheet
在这里插入图片描述
发现其最大 SCLK 传输频率为 2MHz,本文以 2MHz作为其传输频率,以 FPGA 的时钟 CLK 为 65MHz 为例,要找一个寄存器变量counter_sclk 让其对 CLK 进行计数,从而生成 SCLK。
CLK:对应程序中寄存器变量 clk
SCLK:对应程序中寄存器变量 sclk_7888
计算过程:
(65M / 2M)/ 2 = 16.25 ,这里为方便取 17,即 counter_sclk 对 clk 每计数 17次后,让变量 sclk_7888[0:0] 进行翻转。

(2) 生成 CS 片选信号和沿信号
只有当 CS 为低电平时,数据传输才能进行。
查阅 DataSheet 发现,当 CS 由高变低的下降沿开始,SCLK 的第一个下降沿后开始进行数据传输。
那么什么时候 对CS 拉低?这里操作为:当 SCLK 的第一个上升沿的时候,对 CS 进行拉低。
所以接下来要采集 SCLK 的上升沿和下降沿,采沿的操作,和对异步信号采沿的操作一样(例如RS232)。
数据传输过程同样牵涉到 SCLK 上升沿和下降沿。
在这里插入图片描述

(3)DIN、DOUT 数据传输
采用 AD7888 主要就是可以对 8个模拟量进行数模转换,而转换结果只能通过一个通道 DOUT 传输。这就要对每一个通道的转换结果进行轮回传输,同时为保证每个通道最后输出结果逼近偏差小,连续采每个通道的几个值,进行平均。
最复杂的就是本步骤,要使用状态机进行轮回采样。

四、TestBench 测试仿真程序


**2.TestBench 测试仿真程序**

```c
module tb_AD7888_sample( );
	reg sys_clk;
	reg sys_rst_n;
	reg din_7888;

	wire dout_7888;
	wire  cs_7888;
	wire  sclk_7888;
	wire [7:0]sensor_1;
	wire [7:0]sensor_2;
	wire [7:0]sensor_3;
	wire [7:0]sensor_4;
	wire [7:0]sensor_5;
	wire [7:0]sensor_6;
	wire [7:0]sensor_7;
	wire [7:0]sensor_8;
	wire [2:0]channel_out;

AD7888_sample uut(
	.sys_clk (sys_clk),
	.sys_rst_n(sys_rst_n),
	.din_7888(din_7888),
	.dout_7888(dout_7888),
	.cs_7888(cs_7888 ),
	.sclk_7888(sclk_7888),
	.sensor_1(sensor_1 ),
	.sensor_2(sensor_2 ),
	.sensor_3(sensor_3  ),
	.sensor_4(sensor_4  ),
	.sensor_5(sensor_5  ),
	.sensor_6(sensor_6  ),
	.sensor_7(sensor_7  ),
	.sensor_8(sensor_8  ),
	.channel_out(channel_out)
);

initial begin
	sys_clk   = 0 ;
	sys_rst_n = 0 ;
	din_7888 = 0;
	
	#200 
	sys_rst_n = 1;
end

always #10 sys_clk <= ~sys_clk;

endmodule

3.时序仿真结果
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[附代码]多输入AD模数转换,数据接受模块 Verilog 实现 (授人与渔) 的相关文章

  • 网络安全-信息收集简介

    本文为作者学习文章 按作者习惯写成 如有错误或需要追加内容请留言 不喜勿喷 本文为追加文章 后期慢慢追加 什么是信息收集 信息收集是指通过各种方式获取所需要的信息 以便我们在后续的渗透过程更好的进行 比如目标站点IP 中间件 脚本语言 端口
  • 将pandas.core.frame.DataFrame转换为列表

    将pandas core frame DataFrame转换为列表 上代码 import pandas as pd df pd DataFrame Header A foo a bar a baz a Header B foo b bar

随机推荐

  • 基于unity的AR开发中使用shader遮盖原图像的解决办法

    解决问题 当识别图像并显示虚拟物体成功后 将原图片中存在的物体图像遮盖 使用的识别图形 图中含有瓶子 将该瓶子模型添加为为ImageTarget的子物体 将这个模型位置移动到与图片中瓶子位置一致 create plane 作为ImageTa
  • 为什么软件开发很难外包

    很多公司和团队选择把整个软件项目或项目中某些模块或过程 比如测试 整体外包给另一家公司或团队 本文将和你一起来探讨为什么公司或团队有外包的冲动 为什么项目外包问题多和我对外包的建议 01 为什么有外包的冲动 公司或团队选择把项目外包 无非就
  • 计算机网络知识汇总(超详细)

    目录 第一章 概念 组成 功能 和 分类 计算机网络概念 计算机网络功能 计算机网络的组成 计算机网络的分类 总结 标准化工作及相关组织 标准化工作 标准化工作相关组织 总结 计算机网路的速率 带宽 吞吐量 1 速率 2 带宽 3 吞吐量
  • IT项目管理-个人作业6

    1 教材练习题6 答 a 如下图所示 b 所有路径如下 路径1 A B E H K 10天 路径2 A B E I J K 14天 路径3 A C F H K 12天 路径4 A C F I J K 16天 路径5 A D G J K 15
  • 网络分析工具——WireShark的使用(超详细)

    网络分析工具 WireShark的使用 简介 WireShark软件安装 Wireshark 开始抓包示例 WireShark抓包界面 WireShark 主要分为这几个界面 TCP包的具体内容 Wireshark过滤器设置 wiresha
  • 素数环问题(回溯法)

    素数环是一个计算机程序问题 指的是将从1到n这n个整数围成一个圆环 若其中任意2个相邻的数字相加 结果均为素数 那么这个环就成为素数环 现在要求输入一个n 求n个数围成一圈有多少种素数环 规定第一个数字是1 include
  • Python实现常用的假设检验

    开门见山 这篇文章 教大家用Python实现常用的假设检验 服从什么分布 就用什么区间估计方式 也就就用什么检验 比如 两个样本方差比服从F分布 区间估计就采用F分布计算临界值 从而得出置信区间 最终采用F检验 建设检验的基本步骤 前言 假
  • Angular ng-model

    验证是否是邮箱
  • 【电源】开关电源工作原理

    1 开关电源的定义 输入交流电压 AC 经由整流滤波以后可获得一高压的直流电压 DC 1 4AC 此电压接入交换元件当做开关使用在20KHZ 100KHZ的高频状态 这时直流高压会被切割成高频的方波信号 这个方波信号经由功率隔离变压器 在二
  • Java类的声明及文件命名规范】- 在Java中定义公共类的正确姿势

    Java类的声明及文件命名规范 在Java中定义公共类的正确姿势 引言 在Java编程中 类的声明和文件的命名是非常重要的 这决定了代码的结构性和可维护性 本文将详细介绍如何在Java中声明公共类 并遵循正确的文件命名规范 以确保代码的可读
  • MSP430项目设计:2020年TI杯大学生电子设计竞赛 坡道行驶电动小车(C题)循迹小车(分享项目展示视频与源码)

    文章目录 题目要求 一 硬件设计 二 理论分析与计算 三 电路与程序设计 四 测试方案与测试结果 五 项目展示 2021年10月27 2022年1月1日 可承接毕业设计 课程设计 价格实惠 有意可添加Q2809786963 哔哩哔哩项目展示
  • 在eclipse下单步调试python

    在eclipse下可以单步调试python的方法 1 右键单击标尺栏添加断点 2 将鼠标移至需要添加断点的代码行 使用快捷键 Ctrl F10 在弹出的菜单栏中选择 Add Breakpoint 添加断点 添加好断点后 选择 Debug A
  • 软件工程实践作业----软件评测

    这个作业属于哪个课程 lt 软件工程23年春季 gt 这个作业要求在哪里 lt 软件工程实践作业 软件评测 gt 这个作业的目标 对产品调研评测 思考分析 建议和规划 其他参考文献 构建之法 目录 Bug严重性量化标准 一 第一部分 调研评
  • iphonex屏幕出现一条绿线_如何解决iPhone屏幕断触、触控不灵敏问题?

    虽然从显示技术和触控体验方面来说 iPhone 都能超过绝大多数智能手机 但是在日常使用过程中偶尔会存在一些问题 例如断触 触摸不灵敏 有些问题来自于系统本身 有些则可能是硬件原因 针对使用过程中遇到的屏幕问题 可以从以下 4 个方面解决
  • Unity 初识:坐标系与向量

    世界坐标系 场景中的绝对坐标系 场景上所有物体都是以该坐标系的原点来确定各自位置的 世界坐标即物体在世界坐标系中的位置 局部坐标系 以物体的世界坐标为原点 角度为朝向 大小为单位 所产生一个新的坐标系 该坐标系中 物体的位置 旋转 大小都会
  • 免费国外视频素材网站

    这里自己收藏几个可以免费下载国外视频的网站 希望大家喜欢 可以的话给个关注哟 Pexels Videos https videos pexels com Pexels 是一个著名的免费图片平台 每天都会有大量的设计师和博客写手来这里为他们的
  • 前端接入萤石云

    萤石云有两个方法使用 npm引入 非npm引入 两个方法中的js内容不同 所以容器初始化方法也不同 详情可到github查看 https github com Hikvision Ezviz npm引入 步骤一 首先通过npn下载 npm
  • 对字符串按照一定的长度来分行或者添加其他数据

    核心代码 对字符串按照一定的长度来分行或者添加其他数据 param str 原始字符串 param int length 插入的间隔长度 param string append 需要插入的字符串 return string 返回字符串 fu
  • 【程序员面试金典】实现一个函数,检查二叉树是否平衡,

    题目描述 实现一个函数 检查二叉树是否平衡 平衡的定义如下 对于树中的任意一个结点 其两颗子树的高度差不超过1 给定指向树根结点的指针TreeNode root 请返回一个bool 代表这棵树是否平衡 题目分析 lt 方法1 gt 平衡二叉
  • [附代码]多输入AD模数转换,数据接受模块 Verilog 实现 (授人与渔)

    要素察觉 本文基于 AD7888 八输入通道 模数转换芯片 对转换后的数据在 FPGA 中进行接收 所使用的 HDL 为 Verilog 所有实现步骤依据 AD7888 DataSheet 中给出的相关数据和时序图 对原理和相应 Veril