芯学长 | 掌握芯资讯,引领芯未来

您当前所在位置:首页 > 资源下载 > 技术文库

verilog菜鸟教程|Verilog语言基础知识:模块结构

发布时间:2023-08-10来源:芯学长

下载资料
文件概述:

verilog语法对于学习IC设计来说比较重要,它也是目前应用最为广泛的硬件描述语言,可以用来进行各种层次的逻辑设计,也可以进行数字系统的逻辑综合,仿真验证和时序分析等。芯学长带你了解verilog语法。

点击上方蓝色按钮可以免费下载verilog语法全部资料


一.Verilog语法知识简介

1.模块结构

image

一个完整的模块由以下四个部分组成:

●模块定义行:定义模块名称、输入输出参数列表;

●说明部分:定义不同的项,其中包括端口类型(input输入、output输出和inout双向端口)、寄存器(reg)、连线(wire)、参数(parameter)、函数(function)和任务(task);

●描述体部分:这一部分描述模块的行为和功能;

●结束行:以endmodule结束

下面以一个例子进行一个大致的认知,暂且先不管语句是什么意思,只需要理解结构即可。

image

(1)模块声明

格式如下:

module 模块名(端口名1,端口名2,…,端口名n);

●注意模块名只能以下划线和字母****开头!!!

(2)端口定义

●输入端口定义为

input 端口名1,端口名2,…,端口名n;

●输出端口定义为

output 端口名1,端口名2,…,端口名n;

●双向端口(不常用)

inout 端口名1,端口名2,…,端口名n

注意:定义完要有分号;

(3)信号类型声明

最常用的类型有wire(连线)和reg(寄存器);

●wire类型表示直通,一条连线,只要输入有变化输出马上无条件反映;

●reg类型表示一定要有触发,输出才会反应输入;

声明类型时也可以声明其位宽,如reg [2:0] A,其表示A为3bit位宽的寄存器。

不声明类型时默认为wire类型。

其实初学的时候比较难分清什么时候用wire,什么时候用reg,在这里先给大家说一下不严谨的判别方法,在设计文件里:

●输入一般都作为wire类型,因为他是模块外部驱动的传入到模块内部;

●输出既可以为wire也可以为reg,当希望某一输入或变量一变化输出立刻变化则采用assign语句赋值时,如assign A = B & C;这时将A定义为wire类型;当这个变量在过程块语句中被赋值时,将其定义为reg类型,可参考上面给出的例子。

可以这么理解,**assign(持续赋值语句)**赋值,该数据会一直被驱动,输入一变输出立刻变化,而过程块语句赋值(always过程块)往往需要等到时钟或某一变量的跳变等才能变化,但他需要把上一时刻的状态保存起来,因此需要存放在寄存器里。(但是这样理解不够严谨)

(4)逻辑功能定义

通常采用assign持续赋值语句、always过程赋值块和调用元件(元件例化,可以理解成C语言中调用函数,但不一样,verilog自身也有function)等方式构成逻辑功能。

●assign是持续赋值语句,只能用于对wire(连线)类型变量的赋值;


【免责声明】:本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。

文章评价

-   全部 0 条 我要点评