发布时间:2026/8/25 21:28:33
从近似0基础开始FPGA开发 -- part.2 仿真 Testbench的编写在了解了时钟之后为了方便时序概念的建立本章介绍fpga开发过程中的仿真部分。在时钟介绍章节通过将编译完成的bit下载到开发板上观察流水灯闪烁可以判断工程功能的正确性但在复杂的工程中采用硬件调试并不能实现快速定位因此通过仿真工具进行rtl代码功能正确性的验证提升开发效率。Vivado添加仿真文件以时钟章节的工程为例提供一段仿真代码参考timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // Company: // Engineer: // // Create Date: 2026/08/20 15:00:36 // Design Name: // Module Name: clk_wizard_TB // Project Name: // Target Devices: // Tool Versions: // Description: // // Dependencies: // // Revision: // Revision 0.01 - File Created // Additional Comments: // ////////////////////////////////////////////////////////////////////////////////// module clk_wizard_TB; reg sysclk_p; //时钟信号 reg sysclk_n; wire [1:0] up_led; //仿真的 LED 信号 clk_wizard_ip u_clk_wizard_ip( .I_sysclk_p(sysclk_p), .I_sysclk_n(sysclk_n), .O_up_led(up_led) ); initial begin sysclk_p 1b0; sysclk_n 1b1; end /////////////////////////////////////////////////////////////////// // // Clock generation // always #20 sysclk_p ~sysclk_p; //duty cycle 50%, period 20 ns; always #20 sysclk_n ~sysclk_n; Endmodule一个完整的 TB 通常包含以下 5 个核心部分模块声明TB 的模块没有输入输出端口上述代码中的module clk_wizard_TB信号声明定义与 DUT 被测试的设计连接的信号用 reg 给 DUT 提供输入用 wire 接收 DUT 的输出DUT 实例化将你的顶层设计像元器件一样例化进来并连线上述代码中例化了clk_wizard_ip这个模块产生激励使用 initial 或 always 过程块生成时钟、复位和测试数据上述代码中定义sysclk。检查与监控使用 $monitor、$display 打印信息或使用 assert 进行自动比对高级用法完成正确的TB编写后可以看到被测模块在层级上归属到TB文件下一级即被TB调用。通用模板*这里给出一份通用的仿真文件编写模板供参考////////////////////////////////////////////////////////////////////////////// // Testbench 模板 ////////////////////////////////////////////////////////////////////////////// timescale 1ns / 1ps // 时间单位/精度定义 module tb_example(); // 1. 空模块无端口 // 2. 信号声明 reg clk; // 给 DUT 的输入用 reg reg rst_n; // 给 DUT 的输入用 reg reg data_in; wire data_out; // 接收 DUT 的输出用 wire // ------------------------------------------------------------- // 3. 实例化被测试模块 (DUT) // ------------------------------------------------------------- your_top_module u_dut ( .clk (clk), .rst_n (rst_n), .data_in (data_in), .data_out (data_out) ); // ------------------------------------------------------------- // 4. 产生时钟 (Clock Generation) // ------------------------------------------------------------- // 方法使用 always 反转周期为 10ns (即 100MHz) always #5 clk ~clk; // 每 5ns 反转一次 - 周期 10ns // ------------------------------------------------------------- // 5. 产生激励 (Stimulus) // ------------------------------------------------------------- initial begin // 5.1 初始化所有输入为 0防止仿真出现 X 态 clk 0; rst_n 0; data_in 0; // 5.2 等待时钟稳定释放复位 (通常等 5~10 个周期) repeat(5) (posedge clk); // 等待 5 个上升沿 rst_n 1; // 释放复位 (低有效) // 5.3 注入测试数据 repeat(10) (posedge clk); data_in 1b1; repeat(5) (posedge clk); data_in 1b0; // 5.4 等待一段时间后结束仿真 repeat(20) (posedge clk); $display(Testbench finished successfully.); $finish; // 结束仿真 end // ------------------------------------------------------------- // 6. (可选) 波形转储与实时打印 // ------------------------------------------------------------- initial begin $dumpfile(waveform.vcd); // 生成 VCD 波形文件 $dumpvars(0, tb_example); // 记录所有层级信号 $monitor(Time%0t, clk%b, rst%b, out%b, $time, clk, rst_n, data_out); end endmodule运行仿真在完成仿真工程的构建后通过侧边栏点击Run Behavioral Simulation即可进行rtl功能仿真。附上不同仿真模式的行为差异正常按照行为仿真 - 综合后功能仿真 - 实现后时序仿真的顺序进行当然考虑效率也可以行为仿真完成确认功能无误后直接编bit上板卡调试。Vivado内置的Vivado Simulator界面如下Obeject下会根据选定的层级展示该层级下的所有数字信号通过右键即可添加信号到时序界面。在Vivado Simulator下添加的信号并不会直接展示仿真结果需要在添加完成后重新运行才能看到对应时序结果。而ModelSim添加信号可以实时显示如何安装ModelSim以及配置Vivado调用可以自行百度教程很多。添加全部想要观察的信号后通过工具栏运行/暂停仿真由于TB中没有添加stop语句因此开始运行仿真后会持续运行。在工程代码中led选取的时cnt[25:24]两位在实际仿真中会耗费非常长的等待时间因此可将工程代码中的led赋值改为cnt[5:4]可以快速看到目标信号的翻转。代码中cnt寄存器的累加发生在clk0时钟的上升沿与时序图相对应这里放一组实现后时序仿真的时序图作为对比可以看到信号翻转并不是在基于理想情况下的在时钟上升沿同步翻转这些布局布线导致的时延在复杂工程下就可能会导致竞争冒险。Fin在介绍完了rtl代码的仿真自查后下一篇文章介绍比特流的上板调试以及ila IP的使用这也是一般做FPGA项目开发的流程。

相关新闻

2026/8/25 21:23:32

【DRAM存储器七十四】LPDDR5 是怎么把功耗打下来的?

👉个人主页:highman110 👉作者简介:一名硬件工程师,持续学习,不断记录,保持思考,输出干货内容 参考资料:《JESD209-5C》 目录 一、动态电压频率缩放 DVFS:干活多就快跑,活少就躺平 二、时钟节能:高速 WCK 时钟,按需唤醒 三、多级睡眠模式:从浅睡到深度休眠…

2026/8/25 23:44:30

159、洞察驱动的实战标题——Android Camera HAL3状态机深度解析——从request到result的每一毫秒延迟来源

159、洞察驱动的实战标题——Android Camera HAL3状态机深度解析——从request到result的每一毫秒延迟来源 上周三凌晨两点,客户现场反馈:某旗舰机型在暗光预览下,取景画面出现周期性“卡顿感”,每三秒左右一次,每次持续约两百毫秒。抓了log,发现预览帧率在卡顿瞬间从30…

2026/8/25 23:44:30

从QClaw到AI Agent:揭秘GUI自动化与安全实践

1. 从“养龙虾”到AI Agent:一次技术概念的全民化传播最近,一个听起来有点“离谱”的消息在技术圈和普通用户间都引起了不小的讨论:“腾讯官宣,个人微信可以‘养龙虾’了!”。乍一看,这标题充满了噱头&…

2026/8/25 23:44:30

【C++八股文】面向对象

【C八股】面向对象-CSDN博客 上一个八股文背诵 说说构造函数有几种?分别有什么作用? C中的构造函数分别有4中:默认构造函数、初始化构造函数、拷贝构造函数、移动构造函数 默认构造函数和初始化构造函数:是在定义类的对象时候&…

2026/8/25 23:44:30

全文 - 第01 部分- openroad-flow-scripts UserGuide

原文 00. Document 首页 欢迎使用 OpenROAD Flow Scripts 文档! OpenROAD(“开放、可访问设计的 foundation 与实现”)项目于 2018 年 6 月在 DARPA IDEA 计划下启动。OpenROAD 旨在消除目前阻碍设计人员使用先进工艺进行硬件实现的成本、…

2026/8/25 23:39:30

OpenClaw:自然语言驱动的本地AI智能体框架实战指南

1. 从“小龙虾”到智能体:OpenClaw的破圈之路最近在AI开发者圈子里,一个代号“小龙虾”的项目热度持续攀升,它就是OpenClaw。如果你关注AI智能体领域,或者正在寻找一个能真正在本地跑起来、用自然语言就能驱动的开发框架&#xff…

2026/8/25 1:04:19

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 11:48:27

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/25 16:56:43

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/25 0:04:14

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory Meta Description:GetQzonehistory 是一个QQ空间历史说…

2026/8/25 0:04:14

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

【题目来源】 https://www.luogu.com.cn/problem/P7912 【题目描述】 小熊的水果店里摆放着一排 n 个水果。每个水果只可能是苹果或桔子,从左到右依次用正整数 1,2,…,n 编号。连续排在一起的同一种水果称为一个“块”。小熊要把这一排水果挑到若干个果篮里&#x…

2026/8/24 13:42:17

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/24 18:13:48

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/25 1:08:14

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…