Verilog 语言 顺序块学习

顺序块

关键字begin-end用于将多条语句组成顺序块。

在程序中,赋值语句,有顺序,只有前面的语句执行完成之后才能执行后面的语句,但不需要执行时间;如果语句包括延迟时间或时间控制,那么延迟总是相对于前面那条语句执行完成的仿真时间。

Verilog数字系统设计教程P60 略有修改程序,仿真中可以更理解顺序块语句的特点。

程序

`timescale 1ns / 1ps

module exa59(
x,y,a,b
);
input  x;
input  y;
output reg[0:0] a;
output reg[1:0] b;
wire  [0:0] x;
wire  [0:0]y;


always@(*)
begin
    b={y,x};
    a=x;
   
end
endmodule

仿真程序 

`timescale 1ns / 1ps
module tb_exa59();
//inputs
reg x;
reg y;
//outputs
wire a;
wire b;

exa59 uut(
.x (x),
.y (y),
.a (a),
.b (b)
);
initial//顺序块1
begin
    x=1'b0;
    y=1'b1;
   
end
initial//顺序块2
begin
    #5 x=1'b1;
     y=1'b0;
   
end
initial//顺序块3
begin
    #10 x=1'b0;
    #15 y=1'b1;
   
end
//reg CLK_0 = 0;
//always #10	CLK_0 = ~CLK_0;
endmodule

仿真结果分析

从仿真可以看出,不同的顺序块之间是并行的,顺序块内部是顺序执行的。

(1)赋值的开始,即顺序块1,仿真的0时刻,x,y,a,b的值位0,1,0,2;这里似乎看不出是顺序执行;

(2)在顺序块内部加上延时处理,即顺序块2中,在仿真5时刻,按照不同顺序块并行,在仿真0时刻,y应该为0,可以看出,x,y的值同时变化,是应为x的赋值在y之前,且顺序块内部顺序执行,(如果语句包括延迟时间,那么延迟总是相对于前面那条语句执行完成的仿真时间),所以在顺序块2中,x,y的值同时在仿真5时刻变化;

(3)顺序块3可以自行分析啦。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值