基于事件的时序控制

在Verilog中,事件是指某一寄存器或者线网的值发生了改变。Verilog提供了4种类型的时间控制:常规事件控制、命名事件控制、OR事件控制和电平敏感时序控制。

常规事件控制

事件控制使用符号@来说明,语句执行的条件是信号的值发生改变。关键字posedge用于指明正向跳变,negedge用于指明负跳变。
@(clock) q = d;           //只要信号clock发生改变,就执行q = d语句
@(posedge clock) q = d;   //只要信号clock正向跳变,就执行q = d语句
q = @(posedge clock) d;   //立即计算d的值,在clock正向跳变的时候赋值给q

命名事件控制

Verilog语言提供了命名事件控制机制。用户可以在程序中声明 event 类型的变量,触发该变量,并且识别该事件是否发生。命名事件有关键字 event 声明,它不能存储任何值。事件触发用符号 -> 表示;判断事件是否发生使用符号@来识别。
event received_data;             //定义一个名为received_data的事件

always @(posedge clk)
begin 
    if (last_data_packet)        //如果这是最后一组数据
    begin
        ->received_data;         //触发接受数据事件(received_data)
    end
end

always @(received_data)          //等待接受数据事件的触发,当事件触发时,把数据存入数据缓存器
begin
    data_buf = {data_pkt[0],data_pkt[1],data_pkt[2],data_pkt[3]};

OR事件控制(敏感列表)

多个信号或者事件中发生的任意一个都能够触发语句或语句块的执行。
always @(reset or clk or d)       //or 可以用“,”代替,即always @(reset,clk,d)
begin
        if (reset)         q = 1'b0;
        else if (clock)    q = d;
end
当输入变量很多时,可以采用@(*)
always @(*)
begin
    out1 = a ? b + c : d + e ;
    out2 = f ? g + h : p + m ;
end 

电平敏感时序控制

Verilog同时也允许另一种形式表示的电平敏感时序控制(即后面的语句和语句块需要等到某个条件为真才能执行) Verilog语言用关键字 wait 来表示等待电平敏感的条件为真。
always 
    wait (count_enable) #20 count = count + 1;
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值