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)…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
9-Oracle 23 ai Vector Search 特性 知识准备
很多小伙伴是不是参加了 免费认证课程(限时至2025/5/15) Oracle AI Vector Search 1Z0-184-25考试,都顺利拿到certified了没。 各行各业的AI 大模型的到来,传统的数据库中的SQL还能不能打,结构化和非结构的话数据如何和…...
用js实现常见排序算法
以下是几种常见排序算法的 JS实现,包括选择排序、冒泡排序、插入排序、快速排序和归并排序,以及每种算法的特点和复杂度分析 1. 选择排序(Selection Sort) 核心思想:每次从未排序部分选择最小元素,与未排…...
python读取SQLite表个并生成pdf文件
代码用于创建含50列的SQLite数据库并插入500行随机浮点数据,随后读取数据,通过ReportLab生成横向PDF表格,包含格式化(两位小数)及表头、网格线等美观样式。 # 导入所需库 import sqlite3 # 用于操作…...
关于 ffmpeg设置摄像头报错“Could not set video options” 的解决方法
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/148515355 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…...
Unity-ECS详解
今天我们来了解Unity最先进的技术——ECS架构(EntityComponentSystem)。 Unity官方下有源码,我们下载源码后来学习。 ECS 与OOP(Object-Oriented Programming)对应,ECS是一种完全不同的编程范式与数据架构…...
Android多媒体——音/视频数据播放(十八)
在媒体数据完成解码并准备好之后,播放流程便进入了最终的呈现阶段。为了确保音视频内容能够顺利输出,系统需要首先对相应的播放设备进行初始化。只有在设备初始化成功后,才能真正开始音视频的同步渲染与播放。这一过程不仅影响播放的启动速度,也直接关系到播放的稳定性和用…...
如何用 HTML 展示计算机代码
原文:如何用 HTML 展示计算机代码 | w3cschool笔记 (请勿将文章标记为付费!!!!) 在编程学习和文档编写过程中,清晰地展示代码是一项关键技能。HTML 作为网页开发的基础语言&#x…...
