47.简易电压表的设计与验证(2)

(1)Verilog 代码:

module adc_collect(input                   clk         ,input                   reset_n     ,input   [7:0]           adc_data    ,output                  clk_adc     );wire                clk_adc_a       ;wire                clk_adc_turn    ;wire                locked          ;wire    [31:0]      n_volt          ;wire    [31:0]      p_volt          ;wire    [31:0]      data_n          ;wire    [31:0]      data_p          ;reg     [10:0]      ad_cnt          ;reg     [19:0]      sum_ad          ;reg     [27:0]      adc_mid         ;reg     [31:0]      volt_n          ;reg     [31:0]      volt_p          ;assign clk_adc = clk_adc_a  ; pll_20M         pll_20M_inst
(.clk_adc(clk_adc_a),                  // output clk_adc.clk_adc_turn(clk_adc_turn),        // output clk_adc_turn.resetn(reset_n),                    // input resetn.locked(locked),                    // output locked.clk(clk)                           // input clk
);      ila_volt        ila_volt_inst
(.clk(clk),                       // input wire clk.probe0(n_volt),                // input wire [31:0]  probe0  .probe1(p_volt)                 // input wire [31:0]  probe1
);//adc累加计数器
always@(posedge clk_adc_turn or negedge locked)if(!locked)    ad_cnt  <= 11'd0;else if(ad_cnt == 11'd1025)ad_cnt  <= 11'd1025;else ad_cnt  <= ad_cnt + 11'd1;//adc前1024个数据累加       
always@(posedge clk_adc_turn or negedge locked)if(!locked)sum_ad <= 20'd0;else if(ad_cnt <= 11'd1024)sum_ad <= sum_ad + adc_data;else    sum_ad <= sum_ad;//adc中值计算     
always@(posedge clk_adc_turn or negedge locked)if(!locked)adc_mid <= 28'd0;else if(ad_cnt == 11'd1024)adc_mid <= sum_ad >> 10;else if(ad_cnt == 11'd1025)adc_mid <= adc_mid;else adc_mid <= 28'd0;//精度定义   显示数据为4位数,其中第一位为个位,后三位为十分位,百分位,千分位。     40960_000 = 5* 2^13 * 1000assign data_n = (ad_cnt == 11'd1025)? 40960_000/(adc_mid + 1) : 0;assign data_p = (ad_cnt == 11'd1025)? 40960_000/(256 - adc_mid) : 0;    //电压计算
always@(posedge clk_adc_turn or negedge locked)if(!locked)volt_n <= 32'd0;else if((ad_cnt == 11'd1025) && (adc_data < adc_mid))volt_n <= (data_n * (adc_mid - adc_data)) >> 13;else    volt_n <= 32'd0;always@(posedge clk_adc_turn or negedge locked)if(!locked)volt_p <= 32'd0;else if((ad_cnt == 11'd1025) && (adc_data >= adc_mid))volt_p <= (data_n * (adc_data - adc_mid)) >> 13;else    volt_p <= 32'd0;   //传入ILAassign n_volt = volt_n;assign p_volt = volt_p;endmodule

(2)仿真文件:

`timescale 1ns / 1psmodule adc_collect_tb;reg         clk         ;
reg         clk_sample  ;
reg         reset_n     ;
reg   [7:0] adc_data    ;
reg   [7:0] data_reg    ;
reg         data_en     ;wire        clk_adc     ;initial clk = 1'd1;
always #10 clk = ~clk;initial clk_sample = 1'd1;
always #25 clk_sample = ~clk_sample;initial beginreset_n <= 1'd0;#25;reset_n <= 1'd1;#200; data_en <= 1'd0;#2000000;data_en <= 1'd1;    #2000000;$stop;
endalways@(posedge clk_sample or negedge reset_n)if(!reset_n)data_reg <= 8'd0;else if(data_en)data_reg <= data_reg + 8'd1;else data_reg <= 8'd0;always@(posedge clk_sample or negedge reset_n)if(!reset_n)adc_data <= 8'd0;else if(!data_en)adc_data <= 8'd125;else adc_data <= data_reg ;adc_collect     adc_collect_inst(.clk         (clk),.reset_n     (reset_n),.adc_data    (adc_data),.clk_adc     (clk_adc));endmodule

(3)仿真波形(仿真前先把ILA注释掉):

  • 整体波形图:

e91e78efd7254f989a58bd07c77ff99a.png

  • PLL时钟波形图:

    de1dcd648a1a4fe28f8b6c5f9aac8207.png

  • 求中值中,累加计数器和中间值的计算:

    921f51120959493dbe26e3eca4c0027e.png

  • 后续dac数据的赋值以及精度的波形:8caca2e454164766bde69262996afcd1.png
  • 数值波形:d1bf8d3b05c84929b13a8b2c9ff0e0ed.png

(4)XDC文件:

set_property IOSTANDARD LVCMOS33 [get_ports {adc_data[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {adc_data[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports clk_adc]
set_property IOSTANDARD LVCMOS33 [get_ports {adc_data[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {adc_data[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {adc_data[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports reset_n]
set_property IOSTANDARD LVCMOS33 [get_ports {adc_data[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports {adc_data[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {adc_data[2]}]
set_property PACKAGE_PIN W19 [get_ports clk]
set_property PACKAGE_PIN N15 [get_ports reset_n]
set_property PACKAGE_PIN L13 [get_ports {adc_data[0]}]
set_property PACKAGE_PIN M13 [get_ports {adc_data[1]}]
set_property PACKAGE_PIN M16 [get_ports {adc_data[2]}]
set_property PACKAGE_PIN M15 [get_ports {adc_data[3]}]
set_property PACKAGE_PIN M20 [get_ports {adc_data[4]}]
set_property PACKAGE_PIN N20 [get_ports {adc_data[5]}]
set_property PACKAGE_PIN M22 [get_ports {adc_data[6]}]
set_property PACKAGE_PIN N22 [get_ports {adc_data[7]}]
set_property PACKAGE_PIN L14 [get_ports clk_adc]

(5)实验现象:

编译遇到报错:

5a279abbdaba48698fffe837e4bb21b7.png

解决方法:

0a041d34bbe3427ab0027af9406fa7f9.png

未接线,0v时,ILA波形: 

98f9f2159c674d9f83d88055e677dffe.png

c52a3e7f8593412da068c704ef0db6c5.png

-2.3v时,ILA波形: 

23d5d16c710e4411b424a79636c81213.png

c77a6cbe40454f449691fc9942a9150e.png

-1.5v时,ILA波形:

17c44a677c954b5a9f686b3da816e80b.jpeg

0db4663918024724a00cdea3ca7e74df.png

0.5v时,ILA波形:

61de4648ec7e4d6a9ad158d13b355167.jpeg

4c813f5035f147edaf6dbac7aebeadd5.png

2.7v时,ILA波形:

4dd3136328bc4da495b39867c7055323.jpeg

f76211b777dc4c2b8eb092c3cec9ab57.png

3.75v时,ILA波形:

20a01f22e92a494899e4f72db1fbfff5.jpeg

3f75a27d3d024f979c66f4a7734836d9.png

4.85v时,ILA波形:

d853597830434250910d1ca8bc149130.jpeg

e2c0c32b86c94c83b84e67518ab2a11a.png

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/383364.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大文件分片上传(前端TS实现)

大文件分片上传 内容 一般情况下&#xff0c;前端上传文件就是new FormData,然后把文件 append 进去&#xff0c;然后post发送给后端就完事了&#xff0c;但是文件越大&#xff0c;上传的文件也就越长&#xff0c;如果在上传过程中&#xff0c;突然网络故障&#xff0c;又或者…

【Linux操作系统】:进程间通信

目录 进程间通信介绍 1、进程间通信的概念 2、进程间通信的目的 3、进程间通信的本质 4、进程间通信的分类 管道 匿名管道 匿名管道的原理 pipe函数 创建匿名管道 管道的四种情况和五种特性 命名管道 使用命令创建命名管道 创建一个命名管道 命名管道的打开规则 …

【ROS2】高级:安全-理解安全密钥库

目标&#xff1a;探索位于 ROS 2 安全密钥库中的文件。 教程级别&#xff1a;高级 时间&#xff1a;15 分钟 内容 背景安全工件位置 公钥材料 私钥材料域治理政策 安全飞地 参加测验&#xff01; 背景 在继续之前&#xff0c;请确保您已完成设置安全教程。 sros2 包可以用来创…

Qt自定义下拉列表-可为选项设置标题、可禁用选项

在Qt中,ComboBox&#xff08;组合框&#xff09;是一种常用的用户界面控件,它提供了一个下拉列表,允许用户从预定义的选项中选择一个。在项目开发中&#xff0c;如果简单的QComboBox无法满足需求&#xff0c;可以通过自定义QComboBox来实现更复杂的功能。本文介绍一个自定义的下…

Python研究生毕业设计,数据挖掘、情感分析、机器学习

最近在学校毕业了&#xff0c;其中有很多毕业论文使用到的代码&#xff0c;如数据挖掘、情感分析、机器学习、数据预测处理、划分数据集和测试集&#xff0c;绘制分类任务&#xff0c;词汇表示&#xff1a;使用TF-IDF向量化器&#xff0c;线性回归、多元线性回归、SVR回归模型&…

一文入门SpringSecurity 5

目录 提示 Apache Shiro和Spring Security 认证和授权 RBAC Demo 环境 Controller 引入Spring Security 初探Security原理 认证授权图示​编辑 图中涉及的类和接口 流程总结 提示 Spring Security源码的接口名和方法名都很长&#xff0c;看源码的时候要见名知意&am…

grafana对接zabbix数据展示

目录 1、初始化、安装grafana 2、浏览器访问 3、安装zabbix 4、zabbix数据对接grafana 5、如何导入模板&#xff1f; ① 设置键值 ② 在zabbix web端完成自定义监控项 ③ garafana里添加nginx上面的的三个监控项 6、如何自定义监控项&#xff1f; 以下实验沿用上一篇z…

二、原型模式

文章目录 1 基本介绍2 实现方式深浅拷贝目标2.1 使用 Object 的 clone() 方法2.1.1 代码2.1.2 特性2.1.3 实现深拷贝 2.2 在 clone() 方法中使用序列化2.2.1 代码 2.2.2 特性 3 实现的要点4 Spring 中的原型模式5 原型模式的类图及角色5.1 类图5.1.1 不限制语言5.1.2 在 Java 中…

免费【2024】springboot 趵突泉景区的智慧导游小程序

博主介绍&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围&#xff1a;SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

开发桌面程序-Electron入门

Electron是什么 来自官网的介绍 Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许您保持一个 JavaScript 代码代码库并创建 在Windows上运行的跨平台应用 macOS和Linux——不需要本地开发 经验。 总…

普中51单片机:DS1302时钟芯片讲解与应用(十)

文章目录 引言基本特性什么是RAM&#xff1f;什么是涓流充电&#xff1f; 电路图和引脚说明通信协议以及工作流程寄存器控制寄存器日历/时钟寄存器 DS1302读写时序代码演示——数码管显示时分秒 引言 DS1302 是一款广泛使用的实时时钟 (RTC) 芯片&#xff0c;具有低功耗、内置…

本地部署VMware ESXi服务实现无公网IP远程访问管理服务器

文章目录 前言1. 下载安装ESXi2. 安装Cpolar工具3. 配置ESXi公网地址4. 远程访问ESXi5. 固定ESXi公网地址 前言 在虚拟化技术日益成熟的今天&#xff0c;VMware ESXi以其卓越的性能和稳定性&#xff0c;成为了众多企业构建虚拟化环境的首选。然而&#xff0c;随着远程办公和跨…

《昇思25天学习打卡营第19天|基于MobileNetv2的垃圾分类》

基于MobileNetv2的垃圾分类 本文档主要介绍垃圾分类代码开发的方法。通过读取本地图像数据作为输入&#xff0c;对图像中的垃圾物体进行检测&#xff0c;并且将检测结果图片保存到文件中。 1、实验目的 了解熟悉垃圾分类应用代码的编写&#xff08;Python语言&#xff09;&a…

机器学习 | 回归算法原理——多项式回归

Hi&#xff0c;大家好&#xff0c;我是半亩花海。接着上次的最速下降法&#xff08;梯度下降法&#xff09;继续更新《白话机器学习的数学》这本书的学习笔记&#xff0c;在此分享多项式回归这一回归算法原理。本章的回归算法原理基于《基于广告费预测点击量》项目&#xff0c;…

html+css+js前端作业 王者荣耀官网5个页面带js

htmlcssjs前端作业 王者荣耀官网5个页面带js 下载地址 https://download.csdn.net/download/qq_42431718/89574989 目录1 目录2 目录3 项目视频 王者荣耀5个页面&#xff08;带js&#xff09; 页面1 页面2 页面3 页面4 页面5

分布式Apollo配置中心搭建实战

文章目录 环境要求第一步、软件下载第二步、创建数据库参考文档 最近新项目启动&#xff0c;采用Apollo作为分布式的配置中心&#xff0c;在本地搭建huanj 实现原理图如下所示。 环境要求 Java版本要求&#xff1a;JDK1.8 MySql版本要求&#xff1a;5.6.5 Apollo版本要求&…

机器学习(二十):偏差和方差问题

一、判断偏差和方差 以多项式回归为例&#xff0c;红点为训练集数据&#xff0c;绿点为交叉验证数据。 下图的模型&#xff0c;训练集误差大&#xff0c;交叉验证集误差大&#xff0c;这代表偏差很大 下图的模型&#xff0c;训练集误差小&#xff0c;交叉验证集误差小&#x…

SpringBoot上传超大文件导致OOM,完美问题解决办法

问题描述 报错: Caused by: java.lang.OutOfMemoryError at java.io.ByteArrayOutputStream.hugeCapacity(ByteArrayOutputStream.java:123) ~[?:1.8.0_381] at java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:117) ~[?:1.8.0_381] at java.…

Windows下载、安装、部署Redis服务的详细流程

本文介绍在Windows电脑中&#xff0c;下载、安装、部署并运行Redis数据库服务的方法。 Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源、高性能的键值存储系统&#xff0c;最初由Salvatore Sanfilippo在2009年发布&#xff0c;并由Redis Labs维护。Redis因其…

【word转pdf】【最新版本jar】Java使用aspose-words实现word文档转pdf

【aspose-words-22.12-jdk17.jar】word文档转pdf 前置工作1、下载依赖2、安装依赖到本地仓库 项目1、配置pom.xml2、配置许可码文件&#xff08;不配置会有水印&#xff09;3、工具类4、效果 踩坑1、pdf乱码2、word中带有图片转换 前置工作 1、下载依赖 通过百度网盘分享的文…