Verilog-2005标准详解篇
博主小飞十多年的FPGA设计经验总结,分享Verilog最后一个国际标准:Verilog-2005版本。
FPGA小飞
闲时写博客、分享FPGA相关内容!985高校,理工科博士毕业,专注FPGA设计!QQ:3887531702
展开
-
116,Verilog-2005标准篇:verilog实用函数与任务总结
函数(function)调用格式:任务(task)调用格式:函数(function)定义格式: 任务(task)定义格式:函数与任务例子:点赞加关注博主(ID:FPGA小飞)的博文,咱们一起系统学习verilog最终标准IEEE Std 1364-2005吧!原创 2024-08-31 00:08:38 · 776 阅读 · 0 评论 -
116,Verilog-2005标准篇:verilog实用操作符总结
算术运算符:单目运算符:逻辑运算符:赋值/拼接运算符:缩减运算符:点赞加关注博主(ID:FPGA小飞)的博文,咱们一起系统学习verilog最终标准IEEE Std 1364-2005吧!原创 2024-08-31 00:07:04 · 305 阅读 · 0 评论 -
115,Verilog-2005标准篇:verilog实用编译指令总结
Define类编译指令介绍:例子:Include编译指令介绍例子:timescale编译指令介绍:例子: 点赞加关注博主(ID:FPGA小飞)的博文,咱们一起系统学习verilog最终标准IEEE Std 1364-2005吧!原创 2024-08-31 00:05:05 · 616 阅读 · 0 评论 -
114,Verilog-2005标准篇:verilog实用注释语法总结
Verilog代码第一种注释方式:Verilog代码第二种注释方式:Verilog文件信息注释模版:点赞加关注博主(ID:FPGA小飞)的博文,咱们一起系统学习verilog最终标准IEEE Std 1364-2005吧!原创 2024-08-31 00:02:40 · 231 阅读 · 0 评论 -
113,完结!Verilog-2005标准篇:数学函数(Math functions)
将返回函数参数基2对数的上限,参数可以是整数或任意大小的向量值。参数应视为无符号值,参数值为 0 时,结果为 0。在实际应用中,该系统函数特别适合计算寻址给定大小的内存所需的最小地址宽度,或计算表示给定状态数所需的最小向量宽度。数学函数有整数和实数两种,数学系统函数可用于常量表达式!表1:Verilog至C语言实数函数映射列表。原创 2024-08-22 00:34:26 · 267 阅读 · 0 评论 -
112,Verilog-2005标准篇:Command line input(命令行输入)
该字符串在系统函数的第一个参数中指定为一个字符串或一个可解释为字符串的非实数变量,该字符串不应包括命令行参数的前导加号。如果提供的某个plusargs的前缀与提供的字符串中的所有字符匹配,函数将返回一个非零整数,字符串的剩余部分将转换为user_string中指定的类型,并将结果值存储到提供的变量中。匹配的plusarg的剩余字符串(剩余字符串是plusarg字符串中与用户plusarg_string匹配部分之后的部分)应从字符串转换为格式字符串所指示的格式,并存储在所提供的变量中。原创 2024-08-22 00:32:02 · 353 阅读 · 0 评论 -
111,Verilog-2005标准篇:概率分布函数(Probabilistic distribution functions)
种子参数应是一个整数变量,由用户初始化,仅由系统函数更新,这将确保实现所需的概率分布。对于exponential函数、poisson函数、chi-square函数、t函数和 erlang 函数,参数mean、degree_of_freedom 和 k_stage 应大于0。函数一起使用的标准差(standard_deviation)参数是一个整数输入,有助于确定密度函数的形状。函数一起使用的自由度(degree_of_freedom)参数是一个整数输入,有助于确定密度函数的形状。其中最常见的就是最简单的。原创 2024-08-22 00:31:26 · 374 阅读 · 0 评论 -
110,Verilog-2005标准篇:转换函数(Conversion functions)
转换系统函数可用于常量表达式,因此其不仅可用在仿真中,实际板级verilog代码也能使用,但其函数输入只能是常量。这些函数接受或生成的实数应符合IEEE 754实数表示法,转换结果应四舍五入到最接近的有效表示形式。:将实数转换为实数的 64 位表示(向量)。:通过截断实数值,将实数值转换为整数。相反,将位模式转换为实数。原创 2024-08-22 00:30:49 · 243 阅读 · 0 评论 -
109,Verilog-2005标准篇:仿真时间系统函数(Simulation time system functions)
在本例中,仿真时间为 16 ns 时,set值为 0,仿真时间为 32 ns 时,set值为 1。返回一个无符号整数,即 32 位时间,并按调用该函数的模块的时间刻度单位进行缩放。在本例中,由于10 ns是模块的时间单位,因此set中的事件时间是10 ns的倍数。b) 1.6 四舍五入为 2,3.2 四舍五入为 3,因为 $time 系统函数返回的是整数。-系统函数 $time 返回一个 64 位时间的整数,该时间按调用该函数的模块的时间刻度单位缩放。一样,它也是按调用该函数的模块的时间单位缩放的。原创 2024-08-22 00:30:09 · 336 阅读 · 0 评论 -
108,Verilog-2005标准篇:随机分析任务(Stochastic analysis tasks)
(q_id, q_stat_code, q_stat_value, status),该系统任务提供队列q_id活动的统计信息。(q_id, job_id, inform_id, status),该系统任务在队列中加入一个条目。(q_id, job_id, inform_id, status),该系统任务从队列中接收一个条目。(q_id, q_type, max_length, status),该系统任务创建新队列。(q_id, status),该系统函数会检查队列中是否还有空间容纳另一个条目。原创 2024-08-22 00:29:34 · 187 阅读 · 0 评论 -
107,Verilog-2005标准篇:可编程逻辑阵列建模系统任务
表1:PLA 建模系统任务语法。表2:PLA 建模系统任务。原创 2024-08-22 00:29:01 · 190 阅读 · 0 评论 -
106,Verilog-2005标准篇:仿真控制系统任务(Simulation control system tasks)
系统任务只是让仿真器退出并将控制权传回主机操作系统。如果为该任务提供了一个表达式,那么其值(0、1 或 2)将决定在发出提示之前打印的诊断信息(见下表1)。如果没有提供参数,则默认值为 1。系统任务会使仿真暂停。该任务使用一个可选的表达式参数(0、1 或 2)来决定打印何种类型的诊断信息。诊断信息的输出量随传递给 $stop 的可选参数值的增加而增加。原创 2024-08-22 00:27:53 · 198 阅读 · 0 评论 -
105,Verilog-2005标准篇:时标任务(Timescale tasks)
它指定%t格式规范如何报告 $write、$display、$strobe、$monitor、$fwrite、$fdisplay、$fstrobe 和 $fmonitor 系统任务组的时间信息,因此它将为源代码描述中后续所有模块中指定的所有%t格式设置时间单位、精度数、后缀字符串和最小字段宽度。-它指定了交互输入延迟的时间单位,因此其为所有稍后交互输入的延迟设置时间单位。原创 2024-08-21 21:24:30 · 237 阅读 · 0 评论 -
104,Verilog-2005标准篇:文件IO系统任务和函数简介
这些函数和c语言重点文件IO函数类似,咱们在仿真需要时,查阅函数具体用法即可,不必死记硬背。- 从文件中读取数值并加载到变量或内存中的任务和函数。- 打开和关闭文件的函数和任务。- 将值输出到变量的任务。- 向文件输出值的任务。原创 2024-08-21 21:23:52 · 216 阅读 · 0 评论 -
103,Verilog-2005标准篇:显示系统任务(Display system tasks)简介
该时间为当前仿真时间的结束时间,即该仿真时间内的所有仿真事件都已发生。实际应用在时,我们如果想在仿真时显示一些信息的话,就调用这两种任务即可,具体语法这里不再介绍,到时候用的时候查阅手册即可。该操作应在仿真时间向前推进之前和该时间的所有其他事件发生之后进行,这样写入的数据才能确保是该仿真时间的正确数据。系统函数除外),整个参数列表都会在时间步结束时显示出来,就像 $display 任务所报告的那样。可监控和显示作为任务task参数指定的变量或表达式的值。任务控制一个监控标志,用于启用或禁用监控。原创 2024-08-21 21:23:17 · 282 阅读 · 0 评论 -
102,Verilog-2005标准篇:Verilog系统任务与函数简介
概率分布函数(Probabilistic distribution functions)-随机分析任务(Stochastic analysis tasks)-仿真时间函数(Simulation time functions)-PLA建模任务(PLA modeling tasks)-转换函数(Conversion functions)-文件IO任务(File I/O tasks)-时标任务(Timescale tasks)-数学函数(Math functions)-显示任务(Display tasks)原创 2024-08-21 21:22:37 · 144 阅读 · 0 评论 -
101,Verilog-2005标准篇:`unconnected_drive 和`nounconnected_drive编译指令简介
源代码中最新出现的指令控制着未连接端口的情况,这些指令应在模块声明之外成对指定。之间出现的模块的所有未连接输入端口都会被上拉或下拉,而不是正常的默认值。时,所有未连接的输入端口都自动上拉。时,未连接的端口将被下拉。原创 2024-08-21 21:22:06 · 346 阅读 · 0 评论 -
100,Verilog-2005标准篇:`line指令简介
值 1 表示下一行是包含该文件后的第一行。当编译器处理文件的剩余部分和新文件时,每读取一行,行号就会递增,文件名也会更新为当前正在处理的新文件。开始读取包含文件时,应存储当前行和文件名,以便在包含文件结束时恢复,更新后的行号和文件名信息可供 PLI 访问。但在许多情况下,Verilog 源代码会被其他工具预处理,原始源文件的行和文件信息可能会丢失,因为预处理器可能会在源代码文件中添加额外的行,将多个源代码行合并为一行,串联多个源文件等。指定新的行号和文件名后,编译器就能正确引用原始源代码的位置。原创 2024-08-21 21:21:33 · 326 阅读 · 0 评论 -
99,Verilog-2005标准篇:`begin_keywords和`end_keywords编译指令介绍
可用于根据IEEE std 1364的特定版本,指定在源代码块中保留哪些标识符作为关键字,这一对指令只指定作为关键字保留的verilog标识符集,并不影响 Verilog 语言的语义、标记和其他方面。下一个示例与上一个示例的代码相同,只是明确指定应使用 IEEE Std 1364-2005 Verilog 关键字。是1364-2005标准中的保留关键字,指定使用 “1364-1995 ”Verilog 关键字列表也适用于本示例。如果没有该指令,该模块的保留关键字集将是编译器默认的保留关键字集。原创 2024-08-21 21:20:59 · 269 阅读 · 0 评论 -
98,Verilog-2005标准篇:`timescale编译指令用法
换句话说,在仿真时间 16 ns(1.6 × 10 ns)时,值 0 被分配给变量set,而在仿真时间 32 ns 时,值1被分配给变量set。time_precision 参数的精度至少应与 time_unit 参数的精度相同,不能指定比 time_unit 更长的时间单位。在这里,由于 time_unit 参数为 “1 ns”,因此指令后面模块中的所有时间值都是 1 ns 的倍数。由于 time_unit 参数为 “10 us”,因此该指令后面的模块中的时间值都是 10 us 的倍数。原创 2024-08-21 21:20:09 · 881 阅读 · 0 评论 -
97,Verilog-2005标准篇:`resetall编译指令用法
编译器指令时,所有编译器指令都将设置为默认值,这有助于确保只有编译特定源文件时需要的指令才会被激活。放在每个源文本文件的开头,然后紧接着是文件中需要的指令。注意,在module模块或 UDP 声明中指定。原创 2024-08-21 21:19:26 · 259 阅读 · 0 评论 -
96,Verilog-2005标准篇:`include编译指令用法
可以在 Verilog HDL 描述的任何地方指定。文件名是要已包含在源文件中的文件名。)编译器指令用于在编译过程中将源文件的全部内容插入另一个文件。编译的结果就好像被包含的源文件内容代替了。编译器指令可用于包含全局或常用定义和任务,而无需将重复代码封装在verilog模块内。编译器指令”,但包含文件的嵌套级数应是有限的,但至少应为 15 层。- 改进 Verilog HDL 源代码描述的组织结构。编译器指令被包含在源代码中的文件也可能包含其他。编译器指令同一行的只能是空白或注释。原创 2024-08-21 21:18:38 · 181 阅读 · 0 评论 -
95,Verilog-2005标准篇:`ifdef, `else, `elsif, `endif, `ifndef条件编译指令介绍
指令(而不是 `else),编译器会检查 text_macro_name 的定义。编译器指令检查 text_macro_name 的定义。条件编译指令用于在编译过程中选择性地包含 Verilog HDL代码,这些指令可以出现在源代码描述的任何地方。编译器指令,则按照 Verilog HDL 源代码描述中的编写顺序,像第一个。编译器指令,则按照 Verilog HDL 源代码描述中的编写顺序,像第一个。编译器指令,则忽略这些编译器指令和相应的行组。编译器指令,则忽略这些编译器指令和相应的行组。原创 2024-08-21 21:17:52 · 1169 阅读 · 0 评论 -
94,Verilog-2005标准篇:`define 和`undef指令介绍
但是,对于有一个或多个参数的文本宏,应通过将每个形式参数替换为宏用法中实际参数的表达式来进行扩展。要使用带参数定义的宏,文本宏名称后应加上括号中的实际参数列表,以逗号分隔。当使用形式参数定义文本宏时,形式参数的范围应延伸至宏文本的末尾,形式参数在宏文本中的使用方式与标识符相同。例如,在整个文本描述中经常重复使用常数的情况下,文本宏将非常有用,因为如果需要更改常数的值,只需修改整个文本描述中的一处即可。宏文本可以是空白的,在这种情况下,文本宏定义为空,使用宏时不会替换文本。宏文本可包含对其他文本宏的使用。原创 2024-08-21 21:17:04 · 848 阅读 · 0 评论 -
93,Verilog-2005标准篇:`default_nettype指令介绍
时,所有net都应明确声明。如果未明确声明net的类型,则会产生错误。控制为隐式net声明创建的net类型,它只能在模块定义之外使用。该指令在源代码中最新出现的一次将控制隐式声明的net类型。指令,隐式net的类型为。原创 2024-08-21 21:16:04 · 274 阅读 · 0 评论 -
92,Verilog-2005标准篇:`celldefine 和`endcelldefine指令介绍
搭配使用,但并非必须。源代码中最新出现的指令会控制模块是否被标记为单元模块。在一个源代码描述中,可能会出现多对这样的指令。这些指令可以出现在源代码描述的任何地方,但建议在模块定义之外指定这些指令。将module模块标记为单元模块。单元模块用于某些 PLI (PLI:Programming language interface)应用程序,如延迟计算。原创 2024-08-21 21:15:26 · 200 阅读 · 0 评论 -
91,Verilog-2005标准篇:Verilog编译指令简介
它与字符 (') 不同,后者是撇号字符(ASCII 0x27)。编译指令的作用范围从处理该指令开始,跨越处理的所有文件,直到另一条编译器指令取代该指令或文件处理完成为止。Verilog使用的所有编译指令前都有 (`) 字符,该字符称为“从下篇开始,咱们依次介绍这些指令的含义和使用方法~表1:verilog编译指令列表。原创 2024-08-21 21:14:36 · 240 阅读 · 0 评论 -
90,Verilog-2005标准篇:Verilog通配符介绍
其中以“/”结尾的路径应包括指定目录中的所有文件,其与 “/*”含义相同。路径 ./*.v 和 *.v 相同,都指定了当前目录下所有后缀为 .v 的文件。Verilog使用特定的符号(通配符)来指定文件或文件集的绝对路径或相对路径。// 匹配当前目录下所有后缀为 .vg 的文件。// 匹配当前目录下所有后缀为 .v 的文件。“*”:多字符通配符(匹配目录/文件名中的任意字符数,“...”:层级通配符(匹配任意数量的层级目录)”:单字符通配符(匹配任何单字符,“.”:指定包含lib.map的目录。原创 2024-08-20 22:39:52 · 241 阅读 · 0 评论 -
89,Verilog-2005标准篇:verilog层级名称说明
表达式的值应为数组的一个合法索引值。任何已命名的 Verilog 对象或层级名称引用都可以通过连接包含它的模块名称、模块实例名称、generate块、task、function或命名块来唯一引用其完整形式。任何对象的完整路径名都应从顶层(根)模块开始,也就是说路径名中的第一个节点名也是层级结构中的顶层名称。名称的层级结构可视为树形结构,其中每个模块实例、generate块实例、task、function或命名的。对于verilog中的标识符而言,层级结构名称树中的每个节点都应是一个独立的作用域。原创 2024-08-20 22:38:38 · 352 阅读 · 0 评论 -
88,Verilog-2005标准篇:未命名的generate块外部名称
给定作用域中的每个generate结构体都有一个编号。在该作用域中以文本形式首次出现的结构体的编号为 1,其后每个generate结构体的编号都将增加 1。所有未命名的生成块都将被命名为 “genblk”,其中 是分配给其外层generate结构体的编号。如果该名称与显式声明的名称相冲突,则会在数字前面加上前导零,直到名称不冲突为止。虽然未命名generate块没有可用于层级的名称,但它仍需要有一个名称,以便外部接口可以引用它。为此,系统将自动为每个未命名的generate块分配一个名称。原创 2024-08-20 22:37:18 · 167 阅读 · 0 评论 -
87,Verilog-2005标准篇:条件generate结构体介绍
如果被选中进行例化的generate块已被命名,那么该名称将声明一个生generate块实例,并成为它所创建的作用域的名称。但其中的声明不能使用层级结构名称来引用,只能从generate块本身例化的层级结构中引用。)根据elaboration过程中评估的常量表达式,从一组可供选择的generate块中最多选择一个generate块,被选中的generate块(如果有的话)将被例化。关键字,它仍然是一个generate块,与所有generate块一样,它在实例化时包含一个独立的作用域和一个新的层级结构。原创 2024-08-20 22:34:05 · 419 阅读 · 0 评论 -
86,Verilog-2005标准篇:循环(loop generate)结构体用法介绍
这是一个整数参数,它的名称和类型与循环索引变量相同,在生成块的每个实例中,它的值都是索引变量在实例生成时的值。关键字,它仍然是一个generate块,与所有generate块一样,它在实例化时包含一个独立的作用域和一个新的层级结构。如果generate块被命名,它就是一个generate块实例数组的声明,数组中的索引值是。在循环方案中使用循环索引变量之前,应在。不得在其他地方使用。具有相同的名称,因此在循环generate块中对该名称的任何引用都是对。在循环构造的generate块中,有一个隐式的。原创 2024-08-20 22:28:06 · 503 阅读 · 0 评论 -
85,Verilog-2005标准篇:generate结构体简介
generate编译方案是在verilog系统模型的elaboration阶段中进行评估的,而elaboration发生在解析 HDL 代码之后和仿真之前,elaboration阶段包括扩展模块实例、计算参数值、解析module层级名称、建立信号连接以及为仿真模型做初步准备。generate块可以是一个或多个模块的集合。generate块实例在某些方面类似于模块实例,但generate创建了一个新的module层级结构,使generate块中的对象、行为构造和模块实例得以存在。来定义generate区域。原创 2024-08-20 22:24:51 · 600 阅读 · 0 评论 -
84,Verilog-2005标准篇:module端口连接中的real实数表示
数据类型不能直接连接到模块的端口,verilog提供了一种间接连接方式,如下例所示。用于在模块端口间传递位模式。原创 2024-08-20 22:20:38 · 175 阅读 · 0 评论 -
83,Verilog-2005标准篇:基于名称的模块实例端口连接
在例化模块中列出的端口表达式与例化模块内部声明的端口之间建立联系的另一种方法是显式连接从模块声明名称到表达式的端口声明名称,即模块声明中使用的名称和实例化模块中使用的名称。顺序列表和基于名称的模块端口连接不得混用,与模块实例的端口连接应全部按顺序或全部按名称进行。在下面的示例中,实例化模块将其信号topA和topB连接到模块ALPHA定义的端口In1 和Out,ALPHA 定义的In2端口未被使用。在实例化模块中允许存在未使用的端口。由于上面这个例子的端口连接是按名称进行的,因此它们出现的顺序并不重要。原创 2024-08-20 22:19:03 · 292 阅读 · 0 评论 -
82,Verilog-2005标准篇:基于顺序列表的模块实例端口连接
在例化模块中列出的端口表达式与例化模块内部声明的端口之间建立联系的一种方法是顺序列表,即模块实例中列出的端口表达式应与模块声明中列出的端口顺序相同。在仿真 modB的b1实例时,与门g2首先启动,在int上产生一个值。下面的示例说明了一个顶层模块(topmod)实例化了模块(modB)。模块 modB 的端口通过一个顺序列表连接。- modB定义中的端口wa连接到 topmod 模块中的位选 v[0]在modB定义中,端口wa和wb被声明为。- 端口wb连接到 v[3]- 端口d连接到v[4] .原创 2024-08-20 22:17:11 · 257 阅读 · 0 评论 -
81,Verilog-2005标准篇:port端口介绍
上面的例子中,端口的定义太冗杂,verilog标准提供了另一种非常简单的端口定义和声明方法,每个声明的port端口都提供了有关端口的完整信息。端口的方向、位宽、net或variable类型,以及端口是有符号sigend还是无符号unsigned,都有完整的描述。隐式net应视为无符号net信号,连接到端口的net信号如果没有明确的有符号声明,则应视为无符号net信号,除非该端口被声明为有符号net。)属性可以附加在端口port声明或相应的net或reg声明上,也可以同时附加在这两个声明上。原创 2024-08-20 22:15:41 · 187 阅读 · 0 评论 -
80,Verilog-2005标准篇:module实例的参数值分配
使用这种方法时,不必为模块中的所有参数赋值,只需指定改写新值的参数。新值参数表达式填充是可选的,这样实例化模块就可以记录某个参数的存在,而无需为其赋值,但括号是必需的,在这种情况下,参数保留其默认值。因此,若要为模块内已声明参数的子集赋值,则构成该子集的参数声明应在不需要赋值的参数声明之前。另一种方法是为所有参数赋值,但对不需要新值的参数使用默认值(与模块定义中参数声明的值相同)。在下面的示例中,addr_width将被赋值为12,data_width将被赋值为16,mem_size 的值为4096。原创 2024-08-20 22:11:23 · 381 阅读 · 0 评论 -
79,Verilog-2005标准篇:defparam 声明规则
语句,用于覆盖顶层模块 top 中实例 m1 和 m2 的size和delay值。生成块实例或实例数组内部或其下层级结构中的defparam语句不得更改该层级结构之外的参数值。生成块的每个实例都被视为一个独立的层级结构作用域。因此,这条规则意味着,生成块中的。语句时,可以使用参数的层级结构名称在整个设计的任何模块实例中更改参数值。语句不能针对同一生成块的另一个实例中的参数,即使另一个实例是由同一个。语句在同一模块中声明,如果一个参数有多个。语句不得针对数组另一个实例中的参数。同样,数组实例中一个实例的。原创 2024-08-20 22:05:18 · 179 阅读 · 0 评论 -
78,Verilog-2005标准篇:module参数的覆盖规则说明
当有类型和/或范围限定的参数被覆盖时,新值将转换为该参数最初限定的类型和范围。因此,当重新定义其值时,参数类型和范围将与新值的类型和范围相同。- 有类型说明但无范围说明的参数应为指定类型,覆盖值应转换为参数的类型。有符号参数的范围应默认为分配给该参数的最终覆盖值的范围。- 有范围说明但无类型说明的参数,应为参数声明的范围,且为无符号类型。覆盖值应转换为参数的类型和范围。- 带符号类型说明和范围说明的参数应带符号,并应是其声明的范围。- 没有类型或范围说明的参数声明,应默认为参数最终覆盖值的类型和范围。原创 2024-08-20 22:01:47 · 334 阅读 · 0 评论