- 博客(70)
- 收藏
- 关注
原创 Verilog HDL 学习笔记(十九)| 附录D:形式化语法定义
自然语言(如中文、英文)的语法是模糊的、有歧义的。但编程语言不同——它必须精确、无歧义,否则编译器无法正确解析。形式化语法就是用一套严格的数学符号系统,精确描述编程语言中所有合法的语句结构。BNF(Backus-Naur Form,巴科斯范式)是最常用的语法描述方法之一,由 John Backus 和 Peter Naur 在 1950 年代发明。endmodule// 完整形式input clk,// 模块内容endmodule// 最简形式// 模块内容endmodule。
2026-09-15 11:02:20
300
原创 Verilog HDL 学习笔记(十八)| 附录C:关键字、系统任务和编译指令
关键字(Keyword)是 Verilog 语言预定义的、有特殊含义的标识符。所有关键字全部小写,不能用作变量名、模块名等。⚠️重要提醒:Verilog区分大小写。always是关键字,Always和ALWAYS不是关键字(但也不建议用作变量名,容易混淆)。系统任务/函数是 Verilog 预定义的特殊任务/函数,以 $开头。它们用于执行仿真控制、输入输出、调试等操作。⚠️系统任务/函数不可综合,仅用于仿真。编译指令以反引号 `开头,在编译阶段生效,用于控制编译器的行为。⚠️区分反引号和单引号。
2026-09-15 10:41:20
217
原创 Verilog HDL 学习笔记(十七)| 附录B:PLI子程序清单
【代码】Verilog HDL 学习笔记(十七)| 附录B:PLI子程序清单。
2026-09-14 23:36:26
161
原创 Verilog HDL 学习笔记(十六)| 附录A:强度建模与高级线网类型
强度级别类型示例supply7(最强)驱动电源、地strong6驱动逻辑门输出、assignpull5驱动上拉/下拉电阻large4存储trireg(大电容)weak3驱动弱驱动medium2存储trireg(中电容)small1存储trireg(小电容)highz0(最弱)高阻三态门关闭。
2026-09-14 23:17:27
362
原创 Verilog HDL 学习笔记(十五)| 第15章 高级验证技术
断言(Assertion)是一种嵌入在设计中的检查器,用于验证设计是否满足特定的属性(Property)。断言就是你对设计行为的"期望",用Verilog代码写出来,让工具在仿真过程中自动检查是否满足。// 断言示例:握手协议检查// 期望:如果request为1,那么两个周期内acknowledge必须为1形式化验证(Formal Verification)是使用数学方法来证明设计是否满足特定属性的技术。💡核心区别仿真:给一组输入,看输出对不对——"测试"形式化验证。
2026-09-14 22:42:04
116
原创 Verilog HDL 学习笔记(十四)| 第14章 使用Verilog HDL进行逻辑综合
逻辑综合(Logic Synthesis),是在标准单元库(工艺库)和特定的设计约束(时序、面积、功耗等)的基础上,把数字设计的高层次描述(Verilog/VHDL代码)自动转换为优化的门级网表的过程。一句话理解:逻辑综合就是把你写的变成实际电路中一个真实的与门,把你写的变成一个真实的D触发器。
2026-09-14 20:52:08
184
原创 Verilog HDL 学习笔记(十三)| 第13章 编程语言接口(PLI)
Verilog虽然功能强大,但它毕竟是一种硬件描述语言,不是通用编程语言。在实际工程中,我们常常会遇到一些纯Verilog难以甚至无法完成场景纯Verilog的局限PLI的解决方案从外部文件读取复杂格式的数据$readmemb$readmemh格式固定用C语言实现任意格式的数据解析与C语言模型协同仿真Verilog无法直接调用C函数通过PLI在仿真中调用C模型自定义调试工具只能使用有限的系统任务创建自己的等调试工具提取设计层次信息无法获取当前模块的父模块名用PLI访问内部数据结构。
2026-09-03 13:53:55
288
原创 Verilog HDL 学习笔记(十二)| 第12章 用户自定义原语(UDP)
是 Verilog 允许用户自行定义的一种原语类型,其调用方式与andor等内置原语完全相同。对比维度模块(Module)定义关键字是否可实例化其他模块✅ 可以❌不可以(UDP内不能调用任何其他模块或原语)是否有端口列表可有可无必须有(至少1个输入+1个输出)是否可以建模时序✅ 可以✅ 可以(输出需声明为reg是否有内部变量✅ 可以有(wire, reg, integer等)❌不可以(只能有输入、输出和状态表)是否需要initial初始化视情况时序UDP需要(初始化输出寄存器)实现方式。
2026-09-03 11:19:20
400
原创 Verilog HDL 学习笔记(十一)| 第11章 开关级建模(Switch-Level Modeling)
MOS管(Metal-Oxide-Semiconductor Field-Effect Transistor)是数字电路中最基本的开关元件。当clk=1时,存储环断开,数据直通。中,多个设备共享同一条数据总线,通过双向开关实现分时复用。(supply强度),在整个仿真过程中始终提供稳定的逻辑值,不会被其他信号覆盖。0和1两种信号(NMOS传输0好、PMOS传输1好,两者并联刚好互补)。中,信号强度会逐渐减弱,阻抗开关可以模拟这种效应。,数据可以从输入流向输出,也可以反向流动(虽然通常建模为单向)。
2026-09-03 10:30:14
352
原创 Verilog HDL 学习笔记(十)| 第10章 时序和延迟
延迟反标注(Delay Back-Annotation)是将物理版图提取的真实延迟信息标注回门级网表的过程。简单说:前面的延迟都是"估算"的,而反标注是把芯片制造前的真实延迟填进去,让仿真结果更接近实际芯片。
2026-09-03 09:09:19
362
原创 Verilog HDL 学习笔记(九)| 第 9 章 实用建模技术
前面学过的过程赋值(在alwaysinitial块中用或<=)是"一次性"的——执行到这条语句时赋值一次,之后变量保持该值直到下一次被赋值。过程连续赋值则不同:它允许在一段时间内,将表达式的值持续地驱动到寄存器或线网上。它会改写(覆盖)该变量上原有的赋值,直到被显式取消。对比维度普通过程赋值过程连续赋值执行方式执行到该语句时赋值一次持续驱动,直到被取消能否被覆盖可以被后续赋值覆盖覆盖其他赋值,直到被取消适用场景常规逻辑描述异步复位、调试强制赋值注意:过程连续赋值只能在initial或。
2026-09-02 22:23:14
346
原创 Verilog HDL 学习笔记(八)| 第 8 章 任务和函数(Task & Function)
task [automatic] <任务名>;// 端口声明(input / output / inout)// 局部变量声明(reg / integer / time / real)begin// 行为语句(可以包含延迟、事件控制)endendtask<任务名> (端口1, 端口2, ...);function [automatic] [signed] [位宽或类型] <函数名>;input <输入1>;input <输入2>;// ... 更多输入// 局部变量声明begin。
2026-09-02 20:28:37
333
原创 Verilog HDL学习笔记(七)| 第7章 行为级建模——结构化过程语句与过程赋值
设计步骤说明1. 状态编码使用localparam定义状态,确保不会被意外修改2. 状态寄存器state和next_state两个寄存器3. 时序逻辑更新4. 输出逻辑根据state计算输出信号5. 状态转移逻辑根据state和输入信号计算next_state状态机编码风格:本书采用"三段式"状态机(时序逻辑、输出逻辑、状态转移逻辑各一个always块),这是最清晰、最易于维护的写法。也是实际工程中最常用的状态机编码风格。
2026-09-02 16:08:35
370
原创 Verilog HDL学习笔记(六)| 第6章 数据流建模
连续赋值(Continuous Assignment)是数据流建模的基础语句,用于驱动线网(wire)类型的变量。连续赋值语句始终处于激活状态。只要右边表达式中的任何一个操作数发生变化,表达式就会被重新计算,结果立即(或在指定延迟后)赋给左边的线网变量。assign #延迟 线网名 = 表达式;wire out;// out 始终等于 in1 AND in2。
2026-09-01 22:35:47
166
原创 Verilog HDL学习笔记(五)| 第5章 门级建模(上)——基本门原语与门延迟
/ 4位和输出// 最高位进位输出// 两个4位加数input c_in;// 来自低位的进位输入sum[3:0]:计算结果的低 4 位,对应的结果(不包括溢出位)。c_out:最高位产生的进位,用于判断结果是否溢出(例如 1111 + 0001 会输出c_out=1,表示结果需要第5位)。a和b:两个 4 位输入数,按位相加。c_in:从外部传入的进位,通常用于扩展加法器的位数,例如多个 4 位加法器级联形成 8 位加法器。
2026-09-01 21:20:33
340
原创 Verilog HDL学习笔记(四)| 第4章 模块和端口
在Verilog中,每个模块实例、信号或变量都处于设计层次中的唯一位置。层次命名允许你通过完整的路径名来访问设计中的任何信号或实例。层次名由一串用点顶层模块名.子模块实例名.子子模块实例名.信号名。
2026-09-01 18:27:11
321
原创 Verilog HDL学习笔记(三)| 第3章 基本概念(上)——词法约定与数据类型
define用于定义文本宏,在编译时进行文本替换。这是Verilog中最常用的编译指令。`define <宏名> <替换文本>`define WORD_SIZE 32 // 定义宏// 展开为 reg [31:0] data;// 定义别名// 常用定义示例define// 1. 定义常量// 2. 定义状态机状态编码// 3. 定义测试参数注意事项宏定义不受作用域限制,一旦定义在整个文件中都有效宏定义通常写在文件开头宏名通常用大写,便于识别。
2026-09-01 14:09:22
173
原创 Verilog HDL学习笔记(二)| 第2章 层次建模的概念
脉动进位计数器(Ripple Carry Counter)是一种最简单的计数器结构,由多个T触发器级联而成。每个T触发器在时钟下降沿(或上升沿)翻转一次前一级T触发器的输出作为后一级T触发器的时钟信号因为时钟信号像水波一样逐级"脉动"传递,所以称为脉动进位计数器模块(Module)是Verilog中最基本的设计单元。每一个模块都对应一个具有特定功能的硬件电路。C语言中的函数:有输入参数(input)、返回值(output)、内部局部变量(reg/wire)电路中的芯片。
2026-08-31 20:05:36
178
原创 Verilog HDL学习笔记(一)| 数字设计综述与层次建模概念
HDL是一种用于描述数字电路和系统的文本化语言。与普通编程语言(如C语言)不同,HDL的核心特点是并发性——它描述的是多个硬件模块同时工作的行为。
2026-08-31 08:54:48
213
原创 Python学习日记12
套接字是网络通信的端点,可以看作两个程序之间的信息通道。每个套接字由IP地址 + 端口号唯一标识。Twisted 是一个事件驱动的网络编程框架,功能强大,支持 HTTP、SMTP、POP3、IRC、SSH 等多种协议。# 安装 Twisted。
2026-08-29 12:27:00
211
原创 Python学习日记11
SQL 注入是攻击者通过构造恶意输入来执行非预期的 SQL 语句,从而破坏数据库的攻击方式。# 危险代码--"# 实际执行:SELECT * FROM users WHERE name = 'Alice';--'# ↑ 恶意代码被注入并执行。
2026-08-29 08:29:27
237
原创 Python学习日记10
是程序与用户交互的一种方式,通过窗口、按钮、文本框、菜单等可视化控件来接收用户输入和显示输出,相比命令行界面(CLI)更直观、更友好。
2026-08-24 21:06:13
196
原创 Python学习日记9
程序运行时,数据存储在内存中,但程序结束后数据就会丢失。:将数据保存到磁盘,程序重启后仍然存在:读取外部数据(数据集、配置文件),导出结果:逐行读取,避免一次性加载到内存。
2026-08-24 11:09:52
197
原创 Python学习日记8
包是包含多个模块的目录,必须包含文件。mypackage/__init__.py # 包的初始化代码module1.pymodule2.pymodule3.py# copy.py 中定义了 __all__ = ['Error', 'copy', 'deepcopy']from copy import * # 只导入 __all__ 中列出的名称。
2026-08-24 10:12:19
201
原创 Python学习日记7
_init__是 Python 中最常用的魔法方法,在对象创建后自动调用,用于初始化对象的属性。# 创建实例时自动调用 __init__代码解读__init__的第一个参数必须是self,指向当前实例其他参数在创建实例时传入参数可以设置默认值# 普通方法:需要 self# 类方法:使用 @classmethod,第一个参数是 cls# 静态方法:使用 @staticmethod,无特殊参数# 调用方式MyClass.normal_method(MyClass()) # 普通方法需要实例。
2026-08-23 18:01:27
357
原创 Python学习日记5
内置异常虽然丰富,但有时候需要更具体的异常类型来表示特定业务的错误,以便进行更精确的错误处理。继承Exception"""超光速推进装置相关的异常"""pass"""超光速推进装置过载异常"""pass"""冷却系统异常"""passtry:# 采取降速措施代码解读是的子类捕获时也会捕获其所有子类可以先捕获子类再捕获父类,实现更精细的错误处理。
2026-08-23 16:26:02
170
原创 Python学习日记6
defdef是 Python 中定义函数的关键字,后面跟函数名、参数列表(圆括号内)和冒号,函数体需要缩进。"""向指定的名字打招呼"""# 调用函数文档字符串是写在函数开头的字符串,用于说明函数的用途、参数和返回值。它会被 Python 保存为函数的属性,可以通过.__doc__或help()查看。"""计算一个数的平方并返回结果"""# 查看文档字符串print(square.__doc__) # 计算一个数的平方并返回结果# 使用 help 查看完整信息输出:square(x)
2026-08-23 13:43:54
380
原创 Python学习日记(1)
Python 交互式解释器是 Python 提供的一种,用户输入一行 Python 代码,解释器立即执行并返回结果。它通常被称为或。
2026-08-20 21:49:29
226
原创 数据结构作业:合并两个有序数组
(2)nums1中存在比nums2中大的数据,那么此时我们需要先找到nums1和nums2中的最大的元素,放到nums1中的最后一位。(1)nums1中最大的元素也比nums2中最小的元素小,那么我们可以直接定义两个逆序指针,一个指向nums2的末尾,一个指向nums1的末尾,将nums2的数据直接覆盖掉nums1中>m的那部分数据。逆向双指针,我们在思路二中是借用了一个新的数组将排完序的数据存储下来然后再赋值给nums1,那么我们能不能直接排完序后将数据直接给nums1呢?cmp函数的参数需要以。
2025-09-10 20:08:50
356
原创 数据结构:双向链表
int data;注意:双向链表为空的情况下只有一个哨兵位,如果连哨兵位结点都没有的话,这不是双向链表而是单链表。//定义双向链表的结构//指针保存下⼀个结点的地址//指针保存前⼀个结点的地址}LTNode;////双向链表的初始化 plist &plist//传地址:形参的改变影响实参//为了保持接口一致性,建议统一参数,都传一级:手动将实参置为NULL//传二级:未保持接口一致性//在pos位置之后插⼊数据。
2025-09-08 21:34:03
925
原创 数据结构:单链表以及链表题
链表是⼀种,数据元素的逻辑顺序是通过链表中的 指针链接次序实现的链表有很多种,单链表就是其中一种,也是线性表的一种。
2025-09-07 18:34:02
1147
1
原创 C语言宏的实现作业
答案:解析: 宏定义在 头文件中,是获取结构体成员偏移量的标准方法举例:(type*)0是将数值0强制转换为指向type类型的指针,相当于创建了一个指向地址0的虚拟结构体指针。->member,通过指针访问结构体成员,同时由于指针指向地址0,成员的地址就是它的偏移量。解释:将一个结构体指针指向地址0时,我们实际上是在创建一个"参考坐标系",结构体的起始位置就是地址0,成员的地址 = 起始地址 + 偏移量。数学理解:(char*)0就是地址0,而 = 加上偏移量,结果就是偏移量的数值。可视化理解
2025-08-23 11:05:42
943
原创 C语言翻译环境作业
将预处理完的文件逐一进行一系列词法分析、语法分析、语义分析及优化后,产生相应的汇编代码文件。编译是针对单个文件编译的,只校验本文件的语法是否有问题,不负责寻找实体。C 链接器将多个目标文件以及库文件合并成一个可执行程序。它的主要任务是。
2025-08-22 15:29:19
447
原创 C语言文件操作作业
答案:C解析:首先我们要知道b,wb,w等这些符号是什么意思这里可以这么记忆:r就是read(只读),w就是write(只写),a就是add(追加),后缀有b二进制文件,后缀有+读写同时。这里我们需要用二进制的方式打开一个文件,所以需要后缀带b,同时不存在fopenb函数,所以选项C符合标准。二答案:C解析:A fopen打开方式是“r”的时候,如果文件不存在就会打开失败B fopen打开方式是“w”的时候,如果文件不存在,就会创建该文件,并打开。
2025-08-22 14:25:28
658
原创 C语言作业:常见的动态内存错误
题目描述:注意题目描述:问的是不正确。答案:A解析:B:使用动态内存分配函数后,要对指针用free进行释放,同时将释放后的野指针置空,但是这里没有将malloc后的指针p进行释放,会出现内存泄露的问题这里C语言中是值传递,传递的是str的副本(一个NULL值),在这个函数中对副本p进行修改并不会影响主函数中str,主函数中str仍旧为NULL,因此在strcpy中向str写入字符串会出现程序崩溃。函数确实无法将malloc分配的内存地址"带回来"给调用者。
2025-08-21 11:57:53
777
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅