在电平敏感行为中,输入值和当前状态足以决定输出值。边沿敏感行为的不同之处在于,输出的变化是由输入的特定转换触发的,这使得状态表成为一个转换表。
每行表项的输入最多只能有一个转换形式,且转换由括号中的一对值(如 (01))或转换符号(如 r)指定。例如以下两个转换形式表示是非法的:
(01) (01) 0 : 0 : 1 ;
所有未指定的转换默认输出值为x。
下面的示例描述了一个上升沿 D 触发器:
primitive d_edge_ff (q, clock, data);
output q; reg q;
input clock, data;
table
// clock data q q+
// obtain output on rising edge of clock
(01) 0 : ? : 0 ;
(01) 1 : ? : 1 ;
(0?) 1 : 1 : 1 ;
(0?) 0 : 0 : 0 ;
// ignore negative edge of clock
(?0) ? : ? : - ;
// ignore data changes on steady clock
? (??) : ? : - ;
endtable
endprimitive
(01) 等术语表示输入值的转换。具体来说,(01) 表示时钟从 0 到 1 的转换。前面 UDP 定义表中的第一行解释如下:当时钟值从 0 变为 1,数据等于 0 时,无论当前状态如何,输出都变为 0。当输入data等于0且当前状态等于1时,时钟从0到x的转换将导致输出q 变为x。
点赞加关注博主(ID:FPGA小飞)的博文,咱们一起系统学习verilog最终标准IEEE Std 1364-2005吧!