IC验证学霸笔记2——Verilog基本语法之结构语句(七)

always语句

包含一个或一个以上的声明语句(如:过程赋值语句,任务调用,条件语句和循环语句等),在仿真运行的全过程中,在定时控制下被反复执行
在always块中被赋值的只能是register型变量(如reg,integer,real,time)。
每个always块在仿真一开始便开始执行,当执行完块中最后一个语句,继续从always块的开头执行。
格式:always<时序控制> <语句>
注1:如果always块中包含一个以上的语句,则这些语句必须放在begin...end和fork...join块中。
注2:always语句必须与一定的时序控制结合在一起才有用!如果没有时序控制,易形成仿真死锁。

例: always areg = ~areg; (仿真死锁)

例:在测试文件中,用于生成一个无限延续的信号波形——时钟信号

例:用always块语句产生T'FFh和8位二进制计数器
always块语句模板:
敏感信号表达式又称事件表达式,当其值发生改变时,则执行一遍块内语句
在敏感信号表达式中应列出影响块内取值的所有信号;(一般为输入信号)
敏感信号可以为单个信号,也可以为多个信号,中间需要用关键字or连接
敏感信号不要为x或者z,否则会阻挡进程。 
always 的时间控制可以为边沿触发(用于时序逻辑),也可为电平触发(用于组合逻辑)
关键字posedge表示上升沿,negedge表示下降沿。

可综合性问题:

   always块语句是用于综合过程的最有用的语句之一,但又常常是不可综合的(内部有不可综合语句时)。为得到最好的综合结果,always块程序应严格按一下的模板来编写:

注意:1.当always块有多个敏感信号时,一定要采用if..else if语句,而不能采用并列语句!否则易造成一个寄存器有多个时钟驱动,则出现编译错误。
2.通常采用异步清零,只有在时钟周期很小或清零信号为电平信号时(容易捕捉到清零信号)采用同步清零。

initial语句

用途:

在仿真的初始状态对变量进行初始化

在测试文件中生成激励波形作为电路的仿真信号;

例:对各变量进行初始化:




#你为什么选择硬件行业##做项目##芯片设计工程师##芯片IC验证工程师##不去互联网还可以去硬件行业#
全部评论
感谢学霸分享的笔记
点赞 回复 分享
发布于 2022-08-10 14:36

相关推荐

评论
点赞
5
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务