SystemVerilog Assertions应用指南 Chapter1.34 :SVA中的多时钟定义

SVA允许序列或者属性使用多个时钟定义来采样独立的信号或者子序列。SVA会自动地同步不同信号或子序列使用的时钟域下面的代码显示了一个序列使用多个时钟的简单例子。

复制代码
sequence s_multiple_clocks;
	@(posedge clk1) a ##1 @(posedge clk2) b;
endsequence

序列 s_multiple_clocks检验在时钟"clkl"的任何上升沿,信号"a"为高,接着在时钟"clk2"的上升沿,信号"b"为高。当信号"a"在时钟"clk1"的任意给定上升沿为高时,序列开始匹配。接着"##1"延迟构造将检验时间移到时钟"clk2"的最近的。

上升沿,检查信号"b"是否为高。当在一个序列中使用了多个时钟信号时,只允许使用"##1"延迟构造。序列 s_multiple_clocks不能被重写成下面这种形式。

复制代码
sequence s_multiple_clock_illegall;
	@(posedge clk1) a ##0 @(posedge clk2) b;
endsequence

sequence s_multiple_clock_illegal2:
	@(posedge clk1) a ##2 @(posedge clk2) b;
endsequence

使用"##0"会产生混淆,即在信号"a"匹配后究竟哪个时钟信号才是最近的时钟。这将引起竞争,因此不允许使用。使用#2也不允许,因为不可能同步到时钟"ck2"的最近的上升沿。相似的技术可以用来建立具有多个时钟的属性。如下面的例子所示:

复制代码
property p_multiple_clocks;
	@(posedge clk1) s1 ##1 @(posedge clk2) s2;
endproperty

它假定序列s1没有被时钟驱动,或者它的时钟定义和"clk1"样。它又假定序列s2没有被时钟驱动,或者它的时钟定义和"clk2"一样。同样的,属性可以在序列定义之间使用非交叠蕴含运算符。下面是一个简单的例子:

复制代码
property p_multiple_clocks_implied;
	@(posedge clk1) s1 |=> @(posedge clk2) s2;
endproperty

禁止在两个不同时钟驱动的序列之间使用交叠藴含运算符。因为先行算子的结束和后续算子的开始重叠,可能引起竞争的情况,这是非法的。下面的代码显示了这种非法的编码方式:

复制代码
property p_multiple_clocks_implied_illegal;
	@(posedge clk1) s1 |-> @(posedge clk2) s2;
endproperty
相关推荐
FPGA小迷弟2 小时前
FPGA 与千兆以太网校验和:从原理到 Verilog 实现
嵌入式硬件·fpga开发·无人机·ai编程·fpga
码农小韩20 小时前
FPGA学习(二)——LED闪烁
fpga开发·verilog·fpga·led·组合逻辑·分频设计
9527华安2 天前
FPGA纯verilog实现DP视频接口,支持2K60帧分辨率,提供3套工程源码和技术支持
fpga开发·音视频·dp
ChaseVLSI2 天前
FPGA与ASIC的区别详解:内部结构、开发成本与适用场景,项目选型到底该选哪个
嵌入式硬件·fpga开发·硬件架构·硬件工程
9527华安3 天前
FPGA实现ARINC818总线协议,基于GT Transceivers Wizard高速收发器,提供7套工程源码和技术支持
fpga开发·transceivers·arinc818
小蘇的FPGA3 天前
fpga-wide-data-crc32
fpga开发
落雨无风4 天前
fpga板级调试常见问题
fpga开发
码农小韩4 天前
FPGA学习(一)——LED点灯与开发流程
学习·fpga开发·入门·环境配置·仿真·点灯
FPGA小迷弟4 天前
FPGA 与千兆以太网:各类物理接口的形式、区别、使用方法与应用场景详解
tcp/ip·macos·fpga开发·udp·fpga
NamoAmitabha1284 天前
Zynq 的 AXI GPIO,是“ARM 通过一条国际标准高速公路(AXI 总线),去遥控 FPGA 里的一个寄存器”。---deepseek
fpga开发·zynq--ps