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
相关推荐
小眼睛FPGA15 分钟前
【RK3568+PG2L50H开发板实验例程】Linux部分/FPGA dma_memcpy_demo 读写案例
linux·运维·科技·ai·fpga开发·gpu算力
幸运学者1 小时前
xilinx axi datamover IP使用demo
fpga开发
搬砖的小码农_Sky1 小时前
XILINX Zynq-7000系列FPGA的架构
fpga开发·架构
热爱学习地派大星9 小时前
FPGA矩阵算法实现
fpga开发
热爱学习地派大星13 小时前
Xilinx FPGA功耗评估
fpga开发·verilog·vivado·fpga功耗·xpe
搬砖的小码农_Sky18 小时前
XILINX Ultrascale+ Kintex系列FPGA的架构
fpga开发·架构
XvnNing18 小时前
【Verilog硬件语言学习笔记4】FPGA串口通信
笔记·学习·fpga开发
千宇宙航19 小时前
闲庭信步使用SV搭建图像测试平台:第二十七课——图像的腐蚀
图像处理·计算机视觉·fpga开发
尤老师FPGA11 天前
使用DDR4控制器实现多通道数据读写(十六)
fpga开发·ddr4
HX科技11 天前
STM32给FPGA的外挂FLASH进行升级
stm32·嵌入式硬件·fpga开发·flash·fpga升级