Verilog学习小白笔记(四)

2018.10.06
书目:verilog HDL数字设计与综合第二版 夏宇闻
第七章

一、结构化过程语句
1、initial语句:在整个仿真过程中只执行一次,如果一个模块包含若干initial则他们并行从仿真时刻0执行
2、initial语句由begin开始end结束,如果只有一条语句可不使用begin和end
3、always语句:从仿真0顺序执行其中的语句,最后一条执行完后再从第一条执行,循环往复

二、过程赋值语句
1、过程赋值语句左值可以为reg、整数型、实数型、时间寄存器变量、存储器单元、以及他们的位选、拼接、域选
2、过程赋值语句:阻塞赋值和非阻塞赋值
3、阻塞赋值语句:串行块中阻塞赋值语句按顺序执行、不会阻塞其后并行块语句执行,用“=”赋值
4、非阻塞赋值语句:允许赋值调度,不会阻塞位于同一个顺序块中其后语句的执行,使用“<=”赋值
5、二者不要再同一个always语句中使用

三、时序控制
1、基于延迟的时序控制:常规延迟控制、赋值内嵌延迟控制、零延迟控制
2、常规延迟控制:#10 a=0
3、赋值内嵌延迟控制 y=#5 x+z 相当于将表达式的值保存在临时变量中,五个时钟后赋值给y
4、零延迟控制:可以确保同时执行的语句中该句最后执行,当有多个零延迟语句时也不确定哪一个先执行
5、基于事件的时序控制:常规事件控制、命名事件控制、OR事件控制、电平敏感时序控制,事件指寄存器或线网变量发生变化
6、常规事件控制:@(clock)q=d clock变化即赋值
7、命名事件控制:关键词event控制,事件触发用->表示,判断是否发生用@识别
event received_data
always@(posedge clock)
begin
if(last_data_packet) ->received_datae;
end
always@(received_data) data_buf={data_pkt[0],data_pkt[0]}
8、OR事件控制:always@(reset or d),也可以用“,”来代替or
9、@和@()对其后语句块中的所有输入变量变化敏感
10、电平敏感时序控制:在某条件为真是执行,用wait启用:always wait(……)#20 count =count +1;

四、条件语句
1、if() true_statement;
2、if() true_statement;else false_statement;
3、if() true_statement1;
else if() true_statement2;
else default_statement;
4、如果判断后执行语句为多句,则用begin end 包括

五、多路分支语句
1、case语句:关键词case,endcase和default
case(expression)
alternative1:statament1;
alternative2:statament2;
alternative3:statament3;
……
default:default_statemnet
endcase
2、casex和casez分别将x和z作为无关值,只比较其余位

六、循环语句
1、循环语句只可以在always和initial中使用,循环语句可已包含延迟表达式
2、while(expression)
begin
……
end
3、for(初始条件;判断终止条件是否为真;改变控制变量的过程赋值语句)
for(count=0;count<128;count=count+1)
4、repeat循环的次数必须是一个常量,变量,信号的值,如果为变量和信号,则循环次数为他们的初始值
5、forever循环,永久循环直到$finish为止,如需退出,可使用disable语句

七、顺序块和并行块
1、顺序块:begin和end包括的语句块,顺序执行
2、并行块:fork和join声明,语句并发执行,执行顺序由各自延迟决定,且延迟是相对于语句块开始执行的时间
reg x,y;
reg [1:0] z,w;
initial
fork
x=1’b0; 0时刻完成
#5 y=1’b1; 5时刻
#10 z={x,y};10时刻
#20 w={y,x};20时刻
join
3、嵌套块、命名块和命名块禁用
4、块可以嵌套使用,顺序块和并行块可以混合在一起使用
5、块可以有自己的名字,成为命名块,可以声明局部变量,可以利用其层次名引用访问,可以被禁用
module top;
initial
begin:block1
integer i;//可以通过top.block1.i被其他模块访问
……
end

initial
fork:block2
reg i;//可以通过top.block2.i被其他模块访问
……
join
6、生成块:generate-endgenerate指定生成实例范围,可以是模块、用户自定义原语、门级原语、连续赋值语句、initial和always块
7、创建生成语句:循环生成、条件生成、case生成

猜你喜欢

转载自blog.csdn.net/weixin_41466479/article/details/82949182