加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
    • 一个模块必须有输入/输出端口吗?
    • 什么是编译指令?
    • Verilog有哪些变量类型?
    • 寄存器类型变量是否就对应于硬件电路中的寄存器?
    • Verilog的3种描述方式是什么?
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

笔记 | verilog语法基础

2023/01/09
2860
阅读需 6 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

一个模块必须有输入/输出端口吗?

模块可大可小,大到一个复杂的微处理器系统,小到一个基本的晶体管,都可以作为一个模块来设计。Verilog中,模块(module)是基本的组成单位。建议在一个Verilog文件中,只放一个module定义,而且使文件名称和module名称一致。这是一个良好的设计习惯。

图1 标准module格式

通常module具有输入和输出端口,在module名称后面的括号中列出所有的输入、输出和双向的端口名称。

那么一个模块必须有输入输出端口吗?不一定。有的模块既没有输入端口,也没有输出端口。有的模块只有输入端口,有的模块只有输出端口。

有些module既没有输入端口也没有输出端口。例如,在仿真平台的顶层模块中,其内部已经实例化了所有的设计模块和激励模块,是一个封闭的系统,没有输入和输出。一般这种没有端口的模块都是用于仿真的,不用作实际电路

有的模块没有输入端口。例如 Tie cell。

图2  Tie cell

有的模块没有输出端口,例如某些power switch。

图3 某种power switch

什么是编译指令?

编译指令(Compiler directive)能够让仿真器和综合工具执行一些特殊的操作。特点:以`(重音符号)为前缀;从处理位置一直保持有效,除非被其他指令覆盖或者取消;`resetall指令将所有编译指令复位成默认值。常用编译指令如下:

⚬`timescale;

⚬`define,`undef;

⚬`ifdef,`else,`endif;

⚬`include;

⚬`resetall。

延伸阅读:

https://www.cnblogs.com/xing-usetc/p/16585290.html

Verilog有哪些变量类型?

在Verilog语言中,有两大变量类型:

⚬ 线网型:表示电路间的物理连线。

⚬ 寄存器型:Verilog中的一个抽象的存储数据单元。

① 凡是在always或initial语句中赋值的变量,一定是寄存器变量;

② 在assign中赋值的一定是线网变量。在线网类型下,分为几种子类,它们具有线网的共性:

⚬ wire、tri: 表示电路间连线,tri主要用于多驱动源建模;

⚬ wor、trior: 表示该连线具有“线或”功能;

⚬ wand、triand: 表示该连线具有“线与”功能;

⚬trireg: 表示该连线具有总线保持功能;

⚬tri1、tri0: 表示当无驱动时,连线状态为1(tri1)和0(tri0);

⚬supply1、supply0:分别表示电源和地信号。

在以上描述的线网类型中,除了trireg未初始化时为“X”以外,其余的未初始化时的值为“Z”。

线网类型主要用在连续赋值语句中,以及作为模块之间的互连信号。

寄存器类型变量在Verilog语言中通常表示一个存储数据的空间。尤其是在Verilog仿真器中,寄存器类型变量通常占据一个仿真内存空间。

⚬reg:  是最常用的寄存器类型数据,可以是1位或者多位,或者是二维数组(存储器);

⚬integer: 整型数据,存储一个至少32位的整数;

⚬time: 时间类型,存储一个至少64位的时间值;

⚬real,realtime: 实数和实数。

寄存器类型变量是否就对应于硬件电路中的寄存器?

“线网”变量可以理解为电路模块中的连线,但“寄存器”变量并不严格对应于电路上的存储单元,包括触发器(flip-flop)或锁存器(latch)。从纯粹语言表达的语义角度来说,寄存器类型变量的值,从一个赋值到下一个赋值被保存下来,并且在仿真过程中会保持而不会丢失。

Verilog的3种描述方式是什么?

我们使用HDL代码描述硬件功能的时候,主要有三种基本描述方式,即结构化描述方式、数据流描述方式和行为级描述方式。

结构化描述的抽象级别最低,是最接近实际硬件结构的描述方式。直接采用结构化描述语句描述,需要描述实现功能所需数字电路的逻辑关系,及其复杂;结构化描述语句常用于层次化模块间的调用、以及ip核的例化等。

数据流描述是使用连续赋值语句(assign)对电路的逻辑功能进行描述,该方式特别便于对组合逻辑电路建模。

行为级描述方式是使用过程块语句结构(always)和比较抽象的高级程序语句对电路的逻辑功能进行描述。

相关推荐

电子产业图谱

前华为海思工程师;与非网2022年度影响力创作者;IC技术圈成员。

微信公众号