verilog菜鸟教程|Verilog语言基础知识:模块结构
发布时间:2023-08-10来源:芯学长
verilog语法对于学习IC设计来说比较重要,它也是目前应用最为广泛的硬件描述语言,可以用来进行各种层次的逻辑设计,也可以进行数字系统的逻辑综合,仿真验证和时序分析等。芯学长带你了解verilog语法。
点击上方蓝色按钮可以免费下载verilog语法全部资料
一.Verilog语法知识简介
1.模块结构
一个完整的模块由以下四个部分组成:
●模块定义行:定义模块名称、输入输出参数列表;
●说明部分:定义不同的项,其中包括端口类型(input输入、output输出和inout双向端口)、寄存器(reg)、连线(wire)、参数(parameter)、函数(function)和任务(task);
●描述体部分:这一部分描述模块的行为和功能;
●结束行:以endmodule结束
下面以一个例子进行一个大致的认知,暂且先不管语句是什么意思,只需要理解结构即可。
(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(连线)类型变量的赋值;
【免责声明】:本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。