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语句
用途:
在仿真的初始状态对变量进行初始化;
在测试文件中生成激励波形作为电路的仿真信号;
例:对各变量进行初始化:
注:优秀验证学员随堂笔记,已经征求到学生的同意,会持续给牛友们分享!
大家看完记得 一键三连!多多支持

