Verilog的@简述

相信用过FPGA的朋友对Verilog一定不陌生,这篇文章来简单介绍一下Verilog中@的两个用处。

  1. 直接上实例来说明吧,首先我们经常见到到就是always块中的@:
always @(posedge clk or posedge reset) begin
...
end

@于此起到触发的作用,always表示一直执行的意思,而一直执行的周期是怎么样子的呢,所以通过一个@来表示执行条件(也就是触发条件),当检测到时钟信号或复位信号的上升沿的时候执行always中的语句。
类似的,还有在如下语句:

always @(*)begin
	if(key_in)
		led = ~led;
	else
		led = led;
end 

上面的语句表明在这个always语句中的驱动信号,只要发生变化就会触发always语句执行。所以只要上述语句中key_in信号发生变化,就会触发这个always信号了。

2.还有一种比较常见的用法用在仿真文件中,如下所示:

@(posedge clk);
@(negedge key_in_fall);

那么这样子的语句在仿真中又有什么意义呢。
在仿真中,这样子的语句表示等待触发的意思,我们来验证一下:

reg sign1;
reg sign2;
reg sign3;
reg sign4;

initial begin
    sign1 = 1'b0;
    sign2 = 1'b0;
    @(negedge sign3);
    sign1 = 1'b1;
    #100
    sign2 = 1'b1;
end 

initial begin
    sign3 = 1'b1;
    #100
    sign3 = 1'b0;
end 

initial begin
    sign4 = 1'b0;
    #100
    sign4 = 1'b1;
end 

上面代码所运行的仿真波形如下所示:
在这里插入图片描述
由上面的波形可以看出,第一个initial语句块中,@的作用就像是一个while,直到所需要的触发信号出现之后才会继续往下运行,否则就卡死在这里了,而像sign4,在另外一个initial中,就不受影响。

总结:两大作用,第一是触发,第二是等待。如果有朋友还能指出更多的作用,欢迎评论区留言。

  • 12
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值