首页 理论教育 FPGA过程语句:条件和变量要求

FPGA过程语句:条件和变量要求

时间:2023-10-28 理论教育 版权反馈
【摘要】:如果没有任何敏感信号发生变化,那么该段过程语句块,将永远不会被执行。always 过程语句中的赋值操作对象必须是reg 型变量。

FPGA过程语句:条件和变量要求

在Verilog HDL 中,结构化过程语句主要包含4 种:initial 结构、always 结构、task任务结构、function 函数结构。其中,always 结构属于可综合的过程语句,initial 结构通常用于仿真模块对激励信号的描述,或用于给寄存器变量分配初值,不可综合。

1. initial 语句

initial 语句引导的顺序代码段只执行一次,在仿真开始时执行initial 语句,其基本语法如下:

一般可以使用initial 语句和延时控制来产生一个特定序列信号,如下面的代码运行,产生如图3.10 所示的信号结果。

图3.10 生成的m 序列信号

2. always 语句

always 语句是Verilog 语言中最为重要的语句结构之一,因为它不是一条简单意义上的单行语句,它总是和其他相关语句一起构成一个功能完整单元块,因此一个复杂Verilog模块往往是由多个always 块语句构成,其语法结构如下:

(1)always 语句功能。

“always @”是固定关键词,用于引导顺序语句块,在Verilog 中,一切顺序语句都必须由always 引导。但always 引导的语句块整体又是一个并行结构,即当一个模块中有多个always 语句时,它们是并行结构,程序功能或执行过程与出现位置先后顺序没有关系。

(2)敏感信号列表或表达式。

“always @”旁边的括号内容称为敏感信号,其作用是引起always 语句被执行的条件,通常要求将过程语句中所有的输入信号都放在敏感信号列表中。当敏感信号不只1 个时,其括号中出现形式有以下几种:(www.xing528.com)

① 关键词“or”连接。

当有多个敏感信号需要放进括号时,可以用关键词“or”进行连接,表示逻辑或的关系,即当其中任何一个信号发生变化时,都将引起该过程语句执行。

② 逗号形式。

除了使用文字“or”以外,也可以用逗号分隔。

③ 省略形式。

因为目前的Verilog 综合器都默认过程语句的敏感信号列表中会列全了所有应该被列入的信号,所以即使设计者少列、漏列,也不会影响综合结果,最多在编译时给出警告信息。因此,敏感信号列表也可以不写任何信号名,而只写成(*),或写成“always@(*)”,都是可以的。

(3)always 执行过程。

过程语句的执行必须依赖于敏感信号列表中某个信号或几个信号的变化(也称事件发生),即只有当敏感信号列表中的信号发生变化时,过程语句块才会被执行。执行一次后返回到always 开始处,进入等待状态,直到下一次敏感信号发生变化,才会重新执行程序代码。如果没有任何敏感信号发生变化,那么该段过程语句块,将永远不会被执行。

(4)always 特殊结构。

在本项目【代码3.3】中,语句“always #50 i_sys_clk <=~i_sys_clk;”表示每间隔50 个时间单位,执行“i_sys_clk”变量翻转操作,实现产生周期时钟信号。

always 过程语句中的赋值操作对象必须是reg 型变量。

3. initial 和always 的区别

initial 和always 是两个基本的过程结构语句,在仿真的一开始就相互并行执行。其主要区别在于,always 语句是不断重复执行相应操作,而initial 语句则只执行一次。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈