第 2 章 Verilog HDL 开发环境搭建【轻量化开发环境】
2.1 Icarus Verilog 安装Icarus Verilog 是Verilog 编译仿真工具提供iverilog编译命令和vvp仿真命令添加环境变量必须勾选 Add executable directories to the user PATH官方网址https://bleyer.org/icarus/打开 cmd 终端 输入以下命令若能正常输出版本信息说明环境配置成功iverilog-v# 验证 Icarus Verilog 安装gtkwave-v# 验证 GTKWave 安装若提示“不是内部或外部命令”手动添加环境变量右键“此电脑”→属性→高级系统设置→环境变量→用户变量→PATH→编辑→添加Icarus Verilog 安装路径例如D:\FPGA_Tools\Icarus\bin重启CMD后重试即可2.1.1 Icarus Verilog 编译和仿真命令在 CMD 终端 执行以下命令# 编译iverilog 设计块文件 激励块文件# 仿真vvp 仿真文件# 查看波形图gtkwave 波形图文件2.2 Verilog 案例设计块激励块分离版【了解即可用于体验开发流程】2.2.1 Icarus Verilog 仿真流程Icarus Verilog 仿真需要二步 iverilog编译→ vvp执行Vivado 仿真需要三步 xvlog编译→ xelab链接→ xsim执行2.2.2 仿真文件仿真文件是编译「设计块激励块」后生成的、可执行文件——它整合了设计块的逻辑和激励块的测试驱动逻辑仿真文件仅用于仿真和 FPGA 烧录的网表文件、芯片综合文件无关唯一作用是运行仿真、生成波形设计块Verilog 里描述具体硬件功能如加法器、计数器的模块有输入输出端口是要被验证的核心对象。激励块TestbenchVerilog 里专门测试设计块的仿真模块无输入输出端口负责给设计块送测试信号、看输出结果。仿真文件的生成条件缺一不可必须同时输入「设计块激励块」仅设计块无法生成有效仿真文件必须指定**「顶层模块」**作为仿真的“入口”2.2.3 目录文件结构Verilog_Counter/ ├─ seq_0101.v // 设计块纯硬件逻辑 └─ tb_seq_0101.v // 激励块纯仿真逻辑2.2.4 设计块文件seq_0101.v带保护仅包含硬件可实现的逻辑无任何仿真专用语句可直接用于FPGA综合设计块保护SEQ_0101_V 防止 seq_0101 模块被重复定义// 防止seq_0101模块被重复定义 ifndef SEQ_0101_V // 检查SEQ_0101_V是否未定义 define SEQ_0101_V // 第一次包含时定义该标识符 timescale 1ns/1ps // 时序基准与激励块统一 module seq_0101( input clk, // 系统时钟5ns周期 input rst_n, // 低电平有效同步复位 output seq_out // 0101...交替序列输出 ); // 寄存器赋初始值避免仿真初始x reg seq_reg 1b0; // 时序逻辑逐时钟翻转持续输出0101... always (posedge clk) begin if(!rst_n) begin seq_reg 1b0; // 复位回到初始值0 end else begin seq_reg ~seq_reg; // 每时钟翻转0→1→0→1... end end // 序列输出赋值 assign seq_out seq_reg; endmodule endif // SEQ_0101_V 保护块结束2.2.5 激励块文件tb_seq_0101.v带保护 包含设计块仅包含仿真逻辑负责给设计块送测试信号、控制台输出、生成波形图无硬件逻辑激励块保护TB_SEQ_0101_V 防止激励模块被重复定义// 防止tb_seq_0101模块被重复定义 ifndef TB_SEQ_0101_V // 检查TB_SEQ_0101_V是否未定义 define TB_SEQ_0101_V // 第一次包含时定义该标识符 // 包含设计块即使多次包含seq_0101.v的保护块会避免重复 include ./seq_0101.v timescale 1ns/1ps module tb_seq_0101; // 1. 激励信号定义 reg clk 1b0; reg rst_n 1b0; wire seq_out; // 2. 例化设计块 seq_0101 u_seq_0101( .clk (clk), .rst_n (rst_n), .seq_out (seq_out) ); // 3. 生成时钟5ns翻转10ns周期 always #5 clk ~clk; // 4. 仿真逻辑 initial begin // 波形文件生成 $dumpfile(tb_seq_0101.vcd); $dumpvars(0, tb_seq_0101); // 保存所有层级信号 // 控制台输出ps单位时间准确 $monitor(Time%0t ps: seq_out%b, $time, seq_out); // 激励流程复位20ns → 持续输出0101... rst_n 1b0; #20; // 复位20ns20000ps rst_n 1b1; #180; // 运行180ns总200ns200000ps $finish; end endmodule endif // TB_SEQ_0101_V 保护块结束设计块 seq_0101.v 和激励块 tb_seq_0101.v 都加上 ifndef 条件编译保护彻底避免 “重复包含 / 重复定义” 错误同时保持代码可复用性设计块保护标识符SEQ_0101_V模块名 _V大写避免和变量重名激励块保护标识符TB_SEQ_0101_V激励模块名 _V保护块标识符要唯一不同模块用不同的标识符避免冲突保护块的作用范围seq_0101.v保护整个 seq_0101 模块即使被多次 include也只会编译一次tb_seq_0101.v保护整个激励模块同时包含设计块时设计块的保护块会自动防止重复定义。2.2.6 编译# 方式 1编译时指定两个文件# 1. 编译编译通过后会生成仿真文件 tb_seq_0101.outiverilog-Wall-otb_seq_0101.out seq_0101.v tb_seq_0101.v# -o 指定仿真文件名 默认a.out# -Wall 开启所有警告# seq_0101.v 设计块文件# tb_seq_0101.v 仿真块文件# 方式 2只编译激励文件靠 include 包含设计块iverilog-Wall-otb_seq_0101.out tb_seq_0101.v# 两种编译方式 都不会报 “重复定义” 错误且仿真结果完全一致2.2.7 运行仿真# 2. 运行仿真控制台输出持续的01交替vvp tb_seq_0101.out2.2.8 查看波形图# 3. 打开波形图查看规整的01交替方波gtkwave tb_seq_0101.vcdGTKWave 必加信号打开.vcd文件后默认不会显示任何信号必须手动选中并添加到 WaveView添加信号查看波形图clk规整的 5ns 周期方波作为时间基准。rst_n前 20ns 保持低电平复位之后变为高电平释放复位。seq_out复位期间恒为 0复位释放后开始严格的 0→1→0→1 交替翻转完全符合我们想要的持续 010101… 输出效果这说明你的 Verilog 代码和仿真流程已经完全跑通了

相关新闻

AI项目价值评估三维度:问题契合、成本控制与商业回报

AI项目价值评估三维度:问题契合、成本控制与商业回报

1. 项目概述:为什么我们需要重新审视AI的价值?最近和几个做产品的朋友聊天,发现一个挺有意思的现象:大家张口闭口都在谈AI,但一聊到“这个AI功能到底值多少钱”、“投入产出比怎么样”,会议室里的空气就突然…

2026/10/7 17:24:54 阅读更多 →
ComfyUI-nunchaku完全指南:如何通过4位量化技术实现AI绘画性能翻倍

ComfyUI-nunchaku完全指南:如何通过4位量化技术实现AI绘画性能翻倍

ComfyUI-nunchaku完全指南:如何通过4位量化技术实现AI绘画性能翻倍 【免费下载链接】ComfyUI-nunchaku ComfyUI Plugin of Nunchaku 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-nunchaku 在AI绘画和图像生成领域,内存限制和计算资…

2026/10/13 16:22:41 阅读更多 →
当 Checkpoint 稳定运行后,如何进一步优化 Flink 作业的启动和恢复速度,让大状态作业的扩缩容从“小时级”降到“分钟级”?

当 Checkpoint 稳定运行后,如何进一步优化 Flink 作业的启动和恢复速度,让大状态作业的扩缩容从“小时级”降到“分钟级”?

引言:从“跑得稳”到“起得快” 经过前面几篇文章的改造,你的 Flink 作业已经实现了: 高性能 Sink:通过 Pipeline 批量写入将吞吐从 1w 提升到 10w QPS系统性反压治理:掌握了从定位到解决反压的完整方法论稳定的 Check…

2026/10/13 8:52:32 阅读更多 →

最新新闻

PyTorch深度学习实践指南:动态图、自动求导与训练调试全攻略

PyTorch深度学习实践指南:动态图、自动求导与训练调试全攻略

做深度学习的人,几乎都绕不开 PyTorch。无论是写论文还是做工业落地,这个框架这几年已经成了默认选项之一。我第一次用 PyTorch 还是在它刚发布不久的时候,那时 TensorFlow 还是绝对的霸主,但 PyTorch 那种“写起来像原生 Python”…

2026/10/15 6:32:46 阅读更多 →
PyTorch内核认知地图:张量、自动微分与动态图原理

PyTorch内核认知地图:张量、自动微分与动态图原理

1. 项目概述:PyTorch不是“框架”,而是一套可编程的张量计算系统你点开这个标题,大概率是刚接触深度学习,被“PyTorch”三个字反复刷屏——课程推荐它、论文复现用它、大厂面试考它、开源项目标它为“首选”。但很多人学了三个月还…

2026/10/15 6:32:46 阅读更多 →
仓颉标准库 std.sort 排序包完全指南:稳定排序、自定义比较器与源码级原理剖析

仓颉标准库 std.sort 排序包完全指南:稳定排序、自定义比较器与源码级原理剖析

编程语言语言运行时标准库垃圾回收并发编程 【免费下载链接】cangjie_runtime 仓颉编程语言运行时与标准库。 项目地址: https://gitcode.com/Cangjie/cangjie_runtime 点击查看 免费下载 导读 本文面向使用仓颉(Cangjie)语言进行开发的工程…

2026/10/15 6:32:46 阅读更多 →
TensorFlow本质是机器学习操作系统,不是普通深度学习框架

TensorFlow本质是机器学习操作系统,不是普通深度学习框架

1. 项目概述:这不是一个“框架”那么简单,而是一套工业级机器学习操作系统很多人第一次听说tensorflow,是在某次技术分享会上听到“谷歌开源的深度学习框架”,或者在招聘JD里看到“熟悉tensorflow优先”。但如果你真把它当成一个和…

2026/10/15 6:32:46 阅读更多 →
PyTorch本质:张量计算系统与三层核心能力解析

PyTorch本质:张量计算系统与三层核心能力解析

1. 项目概述:PyTorch不是“框架”,而是一套可编程的张量计算系统很多人第一次听说PyTorch,是在某次技术分享里听到“比TensorFlow更灵活”“动态图好调试”这类说法。但如果你真把它当成一个“深度学习框架”来用,反而容易走偏——…

2026/10/15 6:32:46 阅读更多 →
Python字符串和运算符基础知识

Python字符串和运算符基础知识

一、字符串基础 在 Python 中,字符串就是一串文本,使用**单引号 或者双引号" "**包裹。 同时我们可以使用 f-string 快速格式化字符串,把变量嵌入文本中,非常常用。 # 字符串定义 str1 "hello python" str2 …

2026/10/15 6:31:46 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →