Verilog使用@标记来控制基于特定事件的执行流,SystemVerilog增强了@事件控制。
l有条件的事件控制
@标记的一个基本应用就是推断一个具有使能输入的锁存器。下面的例子演示了一个锁存器建模的基本风格。
这种编码风格对仿真来说是效率低下的,因为即使在使能输入无效的时候,数据输入的每次改变都会触发事件控制。
SystemVerilog在事件控制中加入了一个iff条件。只有iff条件为真的条件下,事件控制才会被触发。通过将使能判断移入到事件控制里面,使得只有在锁存器输出能够改变的时候事件控制才会被触发。例如:
l事件控制中的表达式
Verilog允许在@事件控制列表中使用表达式,例如:
在第一个例子中,是当操作数发生改变的时候还是只有当运算结果发生改变的时候才会触发事件控制?在第二个例子中,是当memory的地址发生变化的时候还是只有当memory的值发生变化的时候才会触发事件控制?当@事件控制中包含表达式的时候,IEEE Verilog标准允许进行不同的优化。这就可能导致在不同的间有不同的仿真结果,可能还会导致仿真与综合之间的结果不一致。SystemVerilog加入了一个changed关键字,在事件控制列表中它被用作一个修饰符。@(changed (表达式))能够显式地定义只有当表达式的结果发生改变的时候才会触发事件控制。例如:
l事件控制中的赋值
Verilog不允许在事件控制中使用赋值。SystemVerilog允许在事件控制中使用赋值表达式。事件控制仅仅敏感于赋值表达式右侧的变化。例如:
22. 新的过程
Verilog使用always过程来表示时序逻辑、组合逻辑和锁存逻辑的RTL模型。综合工具和其它软件工具必须根据过程起始处的事件控制列表以及过程内的语句来推断always过程的意图。这种推断会导致仿真结果和综合结果之间的不一致。SystemVerilog增加了三个新的过程来显式地指示逻辑的意图。
lalways_ff:表示时序逻辑的过程;
lalways_comb:表示组合逻辑的过程;
lalways_latch:表示锁存逻辑的过程。
例如:
软件工具能够检查事件控制敏感列表和过程的内容来保证逻辑的功能匹配过程的类型。例如,工具能够检查一个always_comb过程能够敏感过程内读取的所有外部值,对逻辑的每一个分支的相同变量进行赋值,并且检查分支是否覆盖了所有可能的条件。如果任何一个条件没有满足,软件工具均会报告该过程没有正确建模组合逻辑。
23. 动态过程
Verilog通过使用fork-jion提供了一种静态的并发过程。每一个分支都是一个分离的、并行的过程。fork-jion中任何语句的执行必须在组内的每一个过程完成后才会执行。例如:
initialbegin
fork
send_packet_task (1,255, 0);
send_packet_task (7,128, 5);
watch_result_task (1,255, 0);
watch_result_task (7,128, 5);
jion//所有的任务必须完成后才会到达这里
end
SystemVerilog通过process关键字加入了一个新的、动态的过程。它为一个过程产生分支,然后继续执行而无需等待其他过程完成。过程不会阻塞过程或任务内的语句执行。这种方式能够建模多线程的过程。例如:
initialbegin
processsend_packet_task (1,255, 0);
processsend_packet_task(7, 128, 5);
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-87180-6.html
服了你
rio其实很好喝年初开始接触喝了一个多月之后就开始断货之后再买到的就不是rio了