首页 > 其他分享 >verilog中结构说明语句

verilog中结构说明语句

时间:2022-10-05 23:45:51浏览次数:48  
标签:语句 逻辑 函数 always initial 说明 verilog

结构说明语句

Verilog语言中的任何过程模块都从属于以下四种结构的说明语句。

1) initial说明语句

2) always说明语句

3) task说明语句

4) function说明语句

initial和always说明语句在仿真的一开始即开始执行。initial语句只执行一次。相反,always语句则是不断地重复执行,直到仿真过程结束。但always后面的过程块是否运行,则要看它的触发条件是否满足。

在一个模块中,使用initial和always语句的次数是不受限制的,它们都是同时开始运行的。

//所有结构说明语句都是并行的,同时开始运行的,这是硬件语言的特点。

1) initial说明语句

initial语句的格式如下:

initial

begin

语句1;

语句2;

......

语句n;

end

2) always说明语句

always语句在仿真过程中是不断重复执行的。其声明格式如下:

always <时序控制> <语句>

always语句由于其不断重复执行的特性,只有和一定的时序控制结合在一起才有用。如果没有时序控制,由于always的重复运行特性,语句将产生死锁。当多个信号都能触发always事件时,Verilog中用“or”或者“,”来连接事件,被连接的信号名被称为敏感列表。也可以使用符号@*和@(*)来表示后面语句块中所有输入变量的变化是敏感的。

沿触发的always块常常描述时序逻辑,如果符合可综合风格要求可用综合工具自动转换为表示时序逻辑的寄存器组和门级逻辑,而电平触发的always块常常用来描述组合逻辑和带锁存器的组合逻辑,如果符合可综合风格要求可转换为表示组合逻辑的门级逻辑或带锁存器的组合逻辑。

//initial块内的语句只执行一次,不符合电路的运行模式,因此是不可综合的,它一般用来初始化赋值。always块内的数据是可以反复执行的,一般写成always@(posedge clk or negedge reset)或者always@*的形式来分别表示时序逻辑和组合逻辑。

3) task说明语句

定义任务的语法如下:

task <任务名>;

<端口及数据类型声明语句>

<语句1>

<语句2>

.....

<语句n>

endtask

启动任务并传递输入输出变量的声明语句的语法如下:

任务的调用:<任务名>(端口1,端口2,...,端口n)

4) function说明语句

Verilog模块中使用函数时是把它当作表达式中的操作符,这个操作符的结果值就是这个函数的返回值。

定义函数的语法:

function <返回值的类型或范围> (函数名);

<端口说明语句>

<变量类型说明语句>

begin

<语句>

........

end

endfunction

当声明函数时,Verilog的仿真器都会隐含地声明一个同名的寄存器变量,函数的返回值通过这个寄存器传递回调用处。

函数的调用是通过将函数作为表达式中的操作数来实现的。其调用格式如下:

<函数名> (<表达式><,<表达式>>*) 其中函数名作为确认符。

函数的使用规则:

1) 函数的定义不能包含有任何的时间控制语句,即任何用#、@、或wait来标识的语句。

2) 函数不能启动任务

3) 定义函数时至少要有一个输入参量

4) 在函数的定义中必须有一条赋值语句给函数中的一个内部变量赋以函数的结果值,该内

部变量具有和函数名相同的名字。

Verilog中函数是不能进行递归调用的。设计模块中若某个函数在两个不同的地方被同时并发调用,由于这两个调用同时对同一块地址空间进行操作,那么计算结果将是不确定的。

如果在函数声明时使用了关键字automatic,那么该函数将成为自动的或者可递归的,即仿真器为每一次函数调用动态地分配新的地址空间,每一个函数调用对各自的地址空间进行操作。因此,自动函数中声明的局部变量不能通过层次名进行访问。而自动函数本身可以通过层次名进行调用。

任务和函数的不同点:

(1) 函数只能与主模块共用同一个仿真时间单位,而任务可以定义自己的仿真时间单位。

(2) 函数不能启动任务,而任务可以启动其他任务和函数。

(3) 函数至少要有一个输入变量,而任务可以没有或者有多个任何类型的变量。

(4) 函数返回一个值,而任务则不返回值。

//函数和任务的区别是笔试、面试常考点;在验证中也需要理解应用这一块知识点。

标签:语句,逻辑,函数,always,initial,说明,verilog
From: https://www.cnblogs.com/amxiang/p/16756785.html

相关文章

  • Verilog 基本语句
    VerilogHDL语句包括过程语句、块语句、赋值语句、条件语句、循环语句、编译导向语句等。类别语句赋值语句持续赋值语句:assign过程赋值:=,<=块语句串行......
  • verilog行为级描述与结构级描述
    verilog行为级描述与结构级描述1、在使用verilog描述电路时,既可以进行行为级的描述,也可以进行结构级的描述。(1)行为级描述:侧重对模块行为功能的抽象描述。(......
  • 完蛋,公司被一条 update 语句干趴了!
    大家好,我是小林。昨晚在群划水的时候,看到有位读者说了这么一件事。大概就是,在线上执行一条update语句修改数据库数据的时候,where条件没有带上索引,导致业务直接崩......
  • 不就是SELECT COUNT语句吗,竟然能被面试官虐的体无完肤
    数据库查询相信很多人都不陌生,所有经常有人调侃程序员就是CRUD专员,这所谓的CRUD指的就是数据库的增删改查。在数据库的增删改查操作中,使用最频繁的就是查询操作。而在所有......
  • liunx的三个时间atime,mtime,ctime详细说明与使用场景
    导航:一、文件与文件夹三个时间:atime,mtime,ctime的含义二、ll命令查看文件时间三、stat命令查看文件的时间四、测试创建/修改文件的时间五、常用命令关于文件时间相关--......
  • verilog实现rgb2gray
    前言  项目算法需求,需要将RGB彩色图像转换为灰度图像,算法原理是很简单的,但是对于刚接触FPGA的宝宝来说,进行时序的设计和调试还是不那么容易的,为了省事儿,就按照上一篇中值......
  • Java学习 三大循环语句和switch语句
    Java学习三大循环语句和switch语句 while循环语句(当)只要布尔表达式为true,循环就回一直执行下去。**我们大多是情况会让循环停止下来的,我们需要一个让表达式时效......
  • python 函数的说明文档
    可以给函数加上说明文档,辅助理解函数作用语法如下:deffun(x,y):"""函数说明,功能是什么:paramx:形参x的说明:paramy:形参y的说明:......
  • 简单查询语句
    查询一个字段:select字段名from表名;其中要注意:select和from都是关键字字段名和表名都是标识符强调:对于SQL语句来说,是通用的所有的SQL语句以“;”结尾另外SQL语句......
  • Netty 学习(八):新连接接入源码说明
    Netty学习(八):新连接接入源码说明作者:Grey原文地址:博客园:Netty学习(八):新连接接入源码说明CSDN:Netty学习(八):新连接接入源码说明新连接的接入分为3个过程检测到有新......