总结Verilog中always语句的使用

always语句包括的所有行为语句构成了一个always语句块。该always语句块从仿真0时刻开始执行其中的行为语句;最后一条执行完成后,再开始执行其中的第一条语句,如此往复循环,直到整个仿真结束。因此,always语句块常用于对数字电路中一组反复执行的活动进行建模。比如大家熟知的时间信号发生,每半个时钟周期时钟信号翻转一次。

 
module clock(output reg clock)  
//在零时刻把clock变量初始化  
initial  
    clock = 1'b0;  
//每半个周期把clock信号翻转一次  
always  
     #10 clock=~clock;  
initial   
     #1000 $finish;//1000个时间单位后,停止仿真  
  
endmodule 

warning:在这个例子中,clock是在initial语句中被初始化的,如果放在always语句中,always每次执行都将初始化clock!(而不是只执行一次)所以,从C语言的角度看,always像一个无限循环语句

 

看下面一个例子:

always @(posedge clock)  
begin  
  ......
end

这就是条件循环语句了。

 

下面是今天做个一个小例子,4-2线编码器:

module enc4to2 (  
   
  input [3:0] a,  
   output [1:0] y  
);  
   assign y[1] = ~a[1] & ~a[0];  
   assign y[0] = ~a[2] & ~a[0];  
  
endmodule  

 

给出激励文件:

`timescale 100ns/1ns  
module testbench  ;   
   
  wire  [1:0]  y   ;   
  reg  [3:0]  a   ;   
  enc4to2    
   DUT  (   
       .y (y ) ,  
      .a (a ) );   
  
     initial  
     begin  
        a[0]=0;  
        a[1]=0;  
        a[2]=0;  
        a[3]=1;     
      end  
        always #2    
          begin  
        a[0]=~a[0];  
      end  
        always #4   
          begin  
        a[1]=~a[1];  
        end  
          always #6    
          begin  
        a[2]=~a[2];  
        end  
          always #8   
          begin  
        a[3]=~a[3];   
      end  
  
endmodule  

 

激励文件是用modesim自动生成的,自己写个initial之类就好

 

转自:总结Verilog中always语句的使用

 

 
 

转载于:https://www.cnblogs.com/xuexizhe/p/8072901.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值