fpga系列 HDL:ModelSim显示模拟波形以及十进制格式数值
-
FPGA中使用数字滤波器时,可通过观察模拟波形更好地查看滤波效果。可以通过ModelSim中的波形格式设置来实现更直观的波形显示。
-
右键波形
->Format
->Analog
-
效果
-
不同的数值格式显示:
右键波形
->Radix
->Decimal
-
效果
示例代码
verilog
/*
- 输出 是否找到同步头- 找正峰- 尝试找到超过正阈值的点作为潜在的正峰。- 对每个可能的正峰,进一步检查它是否是局部最大值(通过比较接下来的12个样本),并记录峰值的位置。- 验证正峰后的负峰 :- 一旦找到一个正峰,检查其后大约18或24个样本处是否存在低于负阈值的负峰。- 如果找到了符合条件的负峰,则认为找到了一个同步信号的开始,
*/ module MySyncDetect (input wire reset,input wire CLK_for_FIFO, // 同步FIFO控制信号input wire [15:0] DATA_FIR_from_DFIFO, // 来自FIFO的数据流input wire full_from_DFIFO, // FIFO满标志input wire [11:0] usedw_from_DFIFO, // FIFO已用深度output reg sync_detected, // 是否找到同步头output reg[2:0] state // 状态机状态
);parameter SYNCLEN = 64; // 同步长度参数,可以根据实际情况调整
parameter POS_THRESHOLD = 100; // 正阈值
parameter NEG_THRESHOLD = -100; // 负阈值
localparam DEPTH = 32; // 数据缓冲区深度
localparam FIND_RANGE = 20; // 数据缓冲区深度// 状态机定义
localparam IDLE = 3'b000;
localparam FIND_PEAK = 3'b001;
localparam CHECK_NEGATIVE_PEAK = 3'b010;
localparam SYNC_FOUND = 3'b011;
// reg [2:0] state;
reg [2:0] next_state;reg [15:0] data_buffer[0:DEPTH-1]; // 数据缓冲区
reg [4:0] buffer_index; // 缓冲区索引
reg [4:0] peak_index; // 峰值索引
reg bPeak; // 是否找到峰值
reg bFirstTag; // 第一个标签标记integer i=0;
integer j;
integer k;// 初始化状态always @(posedge reset) beginif (reset) beginstate = IDLE;next_state = IDLE;buffer_index = 5'b0;end
end// 控制信号
wire valid_data = (usedw_from_DFIFO > 0);// && !full_from_DFIFO;
wire [15:0] current_data = DATA_FIR_from_DFIFO;// 时钟边沿触发过程
always @(posedge CLK_for_FIFO) beginif (valid_data) begin// 更新数据缓冲区data_buffer[buffer_index] <= current_data;buffer_index <= (buffer_index == DEPTH-1) ? 0 : buffer_index + 1;end// 状态机转换state <= next_state;
end// 下一状态逻辑
always @(posedge CLK_for_FIFO) begin// next_state = state;case (state)IDLE: beginif (valid_data)next_state = FIND_PEAK;endFIND_PEAK: begin// 查找正峰if(buffer_index>= 12)begini = buffer_index-12;end else begin i = buffer_index + DEPTH - 12;endif (data_buffer[i] > POS_THRESHOLD) begin// 确认是否为局部最大值bPeak = 1;for (j = 1; j < 12; j = j + 1) beginif (data_buffer[(i+j) % DEPTH] > data_buffer[i]) beginbPeak = 0;endend// 是局部最大值if (bPeak) beginpeak_index = i;next_state = CHECK_NEGATIVE_PEAK;endendendCHECK_NEGATIVE_PEAK: begin// 验证正峰后的负峰for (k = 18; k <= 24; k = k + 1) beginif (data_buffer[(peak_index+k) % DEPTH] < NEG_THRESHOLD) begin// 找到符合条件的负峰next_state = SYNC_FOUND;endendendSYNC_FOUND: begin// 已经找到同步头next_state = IDLE;endendcase
end// 输出逻辑
always @(posedge CLK_for_FIFO) beginsync_detected <= 0;case (state)SYNC_FOUND: beginsync_detected <= 1;enddefault: beginsync_detected <= 0;endendcase
endendmodule
tb
// Testbench for SyncDetect`timescale 1ns/1psmodule MySyncDetect_tb;// Inputsreg CLK_for_FIFO;reg [15:0] DATA_from_DFIFO;reg full_from_DFIFO;reg [11:0] usedw_from_DFIFO;integer i;// Outputwire sync_detected;wire[2:0] state;// Instantiate the Unit Under Test (UUT)M2SyncDetect uut (.CLK_for_FIFO(CLK_for_FIFO),.DATA_FIR_from_DFIFO(DATA_from_DFIFO),.full_from_DFIFO(full_from_DFIFO),.usedw_from_DFIFO(usedw_from_DFIFO),.sync_detected(sync_detected),.state(state));// Clock generationinitial beginCLK_for_FIFO = 0;forever #5 CLK_for_FIFO = ~CLK_for_FIFO; // 10 ns clock periodend// Stimulusinitial begin// Initialize inputsDATA_from_DFIFO = -16'd23000;full_from_DFIFO = 0;usedw_from_DFIFO = 12'd0;// Apply test cases#100;DATA_from_DFIFO = -16'd23000; // Example datausedw_from_DFIFO = 12'd1;#20;DATA_from_DFIFO = -16'd1; // Example datausedw_from_DFIFO = 12'd2;#30;DATA_from_DFIFO = 16'h1234; // Example datausedw_from_DFIFO = 12'd3;#50;DATA_from_DFIFO = 16'hDEAD; // Example datausedw_from_DFIFO = 12'd4;// Apply test cases#10;for (i = 0; i < 5; i = i + 1) beginDATA_from_DFIFO = -16'd23000 + i; // Example data with variationfull_from_DFIFO = (i % 2 == 0) ? 1 : 0;usedw_from_DFIFO = 12'd100 + i * 10;#20;endfor (i = 0; i < 20; i = i + 1) beginDATA_from_DFIFO = -16'd23000 + i*10; // Example data with variation#20;end#50;$stop; // End simulation// Apply test cases#100;DATA_from_DFIFO = -16'd23000; // Example datausedw_from_DFIFO = 12'd1;#20;DATA_from_DFIFO = -16'd1; // Example datausedw_from_DFIFO = 12'd2;#30;DATA_from_DFIFO = 16'h1234; // Example datausedw_from_DFIFO = 12'd3;#50;DATA_from_DFIFO = 16'hDEAD; // Example datausedw_from_DFIFO = 12'd4;// Apply test cases#10;for (i = 0; i < 5; i = i + 1) beginDATA_from_DFIFO = -16'd23000 + i; // Example data with variationfull_from_DFIFO = (i % 2 == 0) ? 1 : 0;usedw_from_DFIFO = 12'd100 + i * 10;#20;endfor (i = 0; i < 20; i = i + 1) beginDATA_from_DFIFO = -16'd23000 + i*10; // Example data with variation#20;endendendmodule
相关文章:

fpga系列 HDL:ModelSim显示模拟波形以及十进制格式数值
FPGA中使用数字滤波器时,可通过观察模拟波形更好地查看滤波效果。可以通过ModelSim中的波形格式设置来实现更直观的波形显示。 右键波形->Format-> Analog 效果 不同的数值格式显示:右键波形->Radix-> Decimal 效果 示例代码 ver…...

Linux 基本指令
目录 1.常见指令 1.1 ls指令 1.2 pwd指令 1.3 cd指令 1.4 touch指令 1.5 mkdir指令 1.6 rm和rmdir指令 1.7 man指令 1.8 cp指令 1.9 mv指令 编辑 1.10 cat指令 1.11 more指令 1.12 less指令 1.13 head指令 1.14.tail指令 1.15 时间相关的指令 1.16 cal…...

GO语言基础面试题
一、字符串和整型怎么相互转换 1、使用 strconv 包中的函数 FormatInt 、ParseInt 等进行转换 2、转换10进制的整形时,可以使用 strconv.Atoi、strconv.Itoa: Atoi是ParseInt(s, 10, 0) 的简写 Itoa是FormatInt(i, 10) 的简写 3、整形转为字符型时&#…...

要查询 `user` 表中 `we_chat_subscribe` 和 `we_chat_union_id` 列不为空的用户数量
文章目录 1、we_chat_subscribe2、we_chat_union_id 1、we_chat_subscribe 要查询 user 表中 we_chat_subscribe 列不为空的用户数量,你可以使用以下 SQL 查询语句: SELECT COUNT(*) FROM user WHERE we_chat_subscribe IS NOT NULL;解释: …...

小程序基础 —— 10 如何调试小程序代码
如何调试小程序代码 在进行项目开发的时候,不可避免需要进行调试,那么如何调试小程序呢? 打开微信开发者工具后,有一个模拟器,通过模拟器能够实时预览自己写的页面,如下: 在上部工具栏中有一个…...

Vue项目如何设置多个静态文件;如何自定义静态文件目录
Vite实现方案 安装插件 npm i vite-plugin-static-copy在vite.config.ts引入 import { viteStaticCopy } from vite-plugin-static-copy配置 plugins: [viteStaticCopy({targets: [{src: "要设置的静态文件目录的相对路径 相对于vite.config.ts的", dest: ./, // …...

CentOS Stream 9 安装 JDK
安装前检查 java --version注:此时说明已安装过JDK,否则为未安装。如若已安装过JDK可以跳过安装步骤直接使用,或者先卸载已安装的JDK版本重新安装。 安装JDK 官网下载地址:https://www.oracle.com/java/technologies/downloads…...

前端(htmlcss)
前端页面 Web页面 PC端程序页面 移动端APP页面 ... HTML页面 HTML超文本标记页面 超文本:文本,声音,图片,视频,表格,链接 标记:由许多标签组成 HTML页面运行到浏览器上面 vscode便捷插件使用 vs…...
py打包工具
pyinstaller 安装 大佬文档参考 pip install pyinstallerpyinstaller 参数 -i 给应用程序添加图标 -F 只生成一个exe格式的文件 -D 创建一个目录,包含exe文件,但会依赖很多文件(默认选项) -c 有黑窗口 -w 去掉黑窗口pyinstalle…...
华为OD E卷(100分)39-最长子字符串的长度(二)
前言 工作了十几年,从普通的研发工程师一路成长为研发经理、研发总监。临近40岁,本想辞职后换一个相对稳定的工作环境一直干到老, 没想到离职后三个多月了还没找到工作,愁肠百结。为了让自己有点事情做,也算提高一下自己的编程能力…...

Selenium+Java(21):Jenkins发送邮件报错Not sent to the following valid addresses解决方案
问题现象 小月妹妹近期在做RobotFrameWork自动化测试,并且使用Jenkins发送测试邮件的时候,发现报错Not sent to the following valid addresses,明明各个配置项看起来都没有问题,但是一到邮件发送环节,就是发送不出去,而且还不提示太多有用的信息,急的妹妹脸都红了,于…...

JSON结构快捷转XML结构API集成指南
JSON结构快捷转XML结构API集成指南 引言 在当今的软件开发世界中,数据交换格式的选择对于系统的互操作性和效率至关重要。JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)是两种广泛使用的数据表…...

【视觉惯性SLAM:四、相机成像模型】
相机成像模型介绍 相机成像模型是计算机视觉和图像处理中的核心内容,它描述了真实三维世界如何通过相机映射到二维图像平面。相机成像模型通常包括针孔相机的基本成像原理、数学模型,以及在实际应用中如何处理相机的各种畸变现象。 一、针孔相机成像原…...
网络编程:TCP和UDP通信基础
TCP 简易服务器: #include<myhead.h>int main(int argc, const char *argv[]) {int oldfd socket(AF_INET,SOCK_STREAM,0);if(oldfd -1){perror("socket");return -1;}//绑定要绑定的结构体struct sockaddr_in server {.sin_family AF_INET,.…...
声波配网原理及使用python简单的示例
将自定义的信息内容(如Wi-Fi配置、数字数据)转换为音波是一种音频调制与解调技术,广泛应用于声波配网、数据传输和近场通信中。这项技术的实现涉及将数字信息编码为音频信号,并通过解码还原信息。 实现方法 1. 数字数据编码 将原…...
深度学习任务中的 `ulimit` 设置优化指南
深度学习任务中的 ulimit 设置优化指南 1. 什么是 ulimit?2. 深度学习任务中的关键 ulimit 设置2.1 max locked memory(-l)2.2 open files(-n)2.3 core file size(-c)2.4 stack size(…...

【学生管理系统】权限管理
目录 6.4 权限管理(菜单管理) 6.4.1 查询所有(含孩子) 6.4.2 添加权限 6.4.3 核心3:查询登录用户的权限,并绘制菜单 6.4 权限管理(菜单管理) 6.4.1 查询所有(含孩子…...

Java编程题_面向对象和常用API01_B级
Java编程题_面向对象和常用API01_B级 第1题 面向对象、异常、集合、IO 题干: 请编写程序,完成键盘录入学生信息,并计算总分将学生信息与总分一同写入文本文件 需求:键盘录入3个学生信息(姓名,语文成绩,数学成绩) 求出每个学生的总分 ,并…...

JUC并发工具---线程协作
信号量能被FixedThreadPool代替吗 Semaphore信号量 控制需要限制访问量的资源,没有获取到信号量的线程会被阻塞 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore;public class Sem…...

Excel for Finance 08 `XNPV`和`XIRR` 函数
Excel 的 XNPV 函数用于计算基于特定日期的净现值(Net Present Value, NPV)。与标准的 NPV 函数相比,XNPV 更灵活,可以考虑不规则的现金流间隔,而不仅限于等间隔的期数。 语法: XNPV(rate, values, dates)…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...

通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...

DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...

springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...