#delay和@和wait的时延区别

本文介绍了Verilog HDL中三种行为描述的方法:使用#delay进行延时操作;使用@(var)敏感变量来触发程序执行;使用Wait(var)等待特定条件成立后再执行。这些方法在数字电路设计中十分常见。

①、#delay

只要延时时间到来或结束,就继续执行后面的程序。

②、@(var1,var2,...)   //可以有多个敏感变量,电平或边沿

begin

  expression1;

  expression2;

  .....

end

other_expression;     //后续代码

  只要var1,var2,...任何有个变量的电平发或边沿发生变化,就程序马上执行begin-end块里面的代码。若var1,var2,...没任何一个变量的值发生变化,则程序跳过begin-end块里面的代码,而执行other_expession代码,即执行后续程序,该语句可以综合。

③、Wait(var)

begin

  expression1;

  expression2;

  .....

end

other_expression;          //后续代码

  当avr为真(非0)时,程序执行begin-end块里面的代码,然后继续执行other_expression代码。然而,当avr为假(0,x,z)时,程序暂停,一直等待avr变成真之后再继续执行,该语句不可以综合。可以像下面一样写代码:

Wait(avr)  @(a,b,c,d); //理解上面的道理,这句不难理解。

④、总结如下:

#dalay:等到延时时间的到来(结束)。

@(var):等到avr发生变化。

Wait(var):等到var变为真(非0值)。

转载于:https://www.cnblogs.com/ostien/p/3640816.html

#include <math.h> #include<stdio.h> float light_speed=2pow(10,5);//光信号在光纤中的传播速率(km/s) float r_delay=1;//交换设备转发时延(ms),包括处理时延+排队时延 /************************************************ 计算传播时延; router_num为A->B经过的交换设备数量, spacing表示结点等间距(Km); 返回:传播延时(ms). *************************************************/ float propagation_delay(int router_num,int spacing){ float p_delay=0; /********Begin 1 ***********/ /*********End 1 **********/ return p_delay; } /************************************************* 计算单个分组的发送时延; packet_len为分组长度(byte), send_rate接口发送速率(bit/s); 返回:发送延时(ms). *************************************************/ float transmission_delay(int packet_len,int send_rate){ float t_delay=0; /********Begin 2 ***********/ /*********End 2 **********/ return t_delay; } /************************************************* 计算发送一个分组并收到确认的延时,忽略确认分组的发送时延; packet_len为分组长度(byte), send_rate接口发送速率(bit/s); router_num为A->B经过的交换设备数量, spacing表示结点等间距(Km); 返回:单分组的往返延时(ms). *************************************************/ float network_delay(int packet_len,int send_rate,int router_num,int spacing){ float n_delay=0; /********Begin 3 ***********/ /*********End 3 **********/ return n_delay; } /************************************************* 计算发送一个文件并收到确认的延时,忽略确认分组的发送时延, 采用停等协议,每发一个分组,待确认后发下一个分组; file_len文件长度(byte) packet_len为分组最大长度(byte), send_rate接口发送速率(bit/s); router_num为A->B经过的交换设备数量, spacing表示结点等间距(Km); 返回:文件全部发送并收到确认的时延(ms). *************************************************/ float network_delay_stop_wait(int file_len,int packet_len,int send_rate,int router_num,int spacing){ float n_delay=0; /********Begin 4 ***********/ //确定需要的分组数量 //分组等长 //余下字节构建一个不足长的分组 /*********End 4 **********/ return n_delay; } /************************************************* 计算发送一个文件并收到确认的延时,忽略确认分组的发送时延, 采用滑动窗口协议,可以连续发送分组,不限制连续发送的分组数量, 可以看出分组后,各结点占发送的时延可以重叠,不用等全部文件发送后才开发转发; file_len文件长度(byte), packet_len为分组最大长度(byte), send_rate接口发送速率(bit/s); router_num为A->B经过的交换设备数量, spacing表示结点等间距(Km); 返回:文件全部发送并收到确认的时延(ms). *************************************************/ float network_delay_sliding_window(int file_len,int packet_len,int send_rate,int router_num,int spacing){ float n_delay=0; /********Begin 5 ***********/ //确定需要的分组数量 //如果分组等长,则整个时延是一个分组的时延+(所有分组-最后一个分组的)的发送时延 //不等长,意味着最后一个分组短于其他分组。实际分组为packet_num+1 /*********End 5 **********/ return n_delay; } /************************************************* 计算发送一个文件并收到确认的延时,忽略确认分组的发送时延, 采用滑动窗口协议,可以连续发送分组,但限制连续发送的分组数量; file_len文件长度(byte), max_window_num连续发送的最大分组数量, packet_len为分组最大长度(byte), send_rate接口发送速率(bit/s); router_num为A->B经过的交换设备数量, spacing表示结点等间距(Km); 返回:文件全部发送并收到确认的时延(ms). *************************************************/ float network_delay_sliding_window(int max_window_num,int file_len,int packet_len, int send_rate,int router_num,int spacing){ float n_delay=0; /********Begin 6 ***********/ //第一个分组确认的时延与窗口发送时间的差值 //如果在窗口内发送时长内收到第一个确认,则表示可以连续发送分组 //如果发送窗口内收不到确认则会多出窗口间的等待确认延时 /*********End 6 **********/ return n_delay; }测试输入: max_wnd_num:1 ,file_len:10900, pkt_len: 1000,send_rate:2000000, rt_num:9,spacing:100 —— 预期输出 —— max_wnd_num:1 ,file_len:10900, pkt_len: 1000, send_rate:2000000, rt_num:9,spacing:100 propagation_delay: 5.000 transmission_delay: 4.000 network_delay: 68.000 network_stop_wait: 744.000 sliding_window1: 107.600 sliding_window2: 744.000
05-31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值