verilog学习-3

4.1 initial/always

initial 和always语句,它们是行为级建模的2种基本语句。

一个模块中可以包含多个initial和always语句,但是2种语句不能嵌套使用。这些语句在模块之间并行执行,与其在模块的前后顺序没有关系。但是initial语句或always语句内部可以理解为是顺序执行的(非阻塞赋值除外)。

每个initial语句或always语句都会产生一个独立的控制流,执行时间都是从0时刻开始。

初始语句

initial语句从0时刻开始执行,只执行一次,多个initial 块之间是相互独立的。

如果initial 块内包含多个语句,需要使用关键词begin和end组成一个块语句。

如果initial块内只要一条语句,关键词begin和end可使用也可不使用。

initial 理论上讲是不可综合的,多用于初始化,信号检测等。

`timescale 1ns/1ns
module test;
 reg bi;
 initial begin
     ai = 0;
     #25; ai = 1;
     #35; ai = 0; //60ns
     #40; ai = 1; //100ns
     #10; ai = 0; //110ns
  end 
 initial begin
     bi = 1;
     #70; bi = 0;
     #20; bi = 1;
  end
  
 initial begin
   forever begin
           100;
           if($time >= 1000) begin
             $finish;
     end
  end
 endmodule

4.2 verilog 过程赋值

关键词:阻塞赋值,非阻塞赋值,并行

过程性赋值是在initial或always语句块里的赋值,赋值对象是寄存器,整数,实数等类型。

这些变量在被赋值后,其值讲保持不变,直到重新被赋予新值。

连续性赋值总是处于激活状态,任何操作数的改变都会影响表达式的结果;过程赋值只有在语句执行的时候,才会起作用。这是连续性赋值与过程性赋值的区别。

verilog过程赋值包括:阻塞赋值与非阻塞赋值。

阻塞赋值

阻塞赋值属于顺序执行,即下一条语句执行前,当前语句一定会执行完毕

阻塞赋值语句使用等号 = 作为赋值符。

非阻塞赋值

非阻塞赋值属于并行执行语句,即下一条语句的执行和当前语句的执行是同时进行的,它不会阻塞位于同一条语句块中后面语句的执行。

非阻塞赋值语句使用小于等于号 < = 作为赋值符。

`timescale 1ns/1ns
    module test;
        reg [3:0] ai, bi;
        reg [3:0] ai2, bi2;
        reg [3:0] value_blk;
        reg [3:0] value_non;
        reg [3:0] value_non2;
        
initial begin
              ai = 4'd1;
              bi = 4'd2;
              ai2 = 4'd7;
              bi2 = 4'd8;
 //non_block_assignment with block-assignment
       ai = 4'd
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值