在system verilog 中这句话怎么理解,用sv代码举个例子:在处理clocking event时,clocking block应先更新自己的sampled values,然后采取trigger与它相关的event事件。event应该在observed region时触发,因此一个正在等clocking block的process可以保证读到updated sampled value。
时间: 2023-12-06 12:44:12 浏览: 31
这句话的意思是在处理时钟事件时,时钟块应该先更新自己的采样值,然后再触发与它相关的事件。事件应该在观察区域内触发,因此正在等待时钟块的进程可以确保读取到更新的采样值。
下面是一个简单的例子,用于说明观察区域和时钟事件的处理:
```
clocking my_clocking @(posedge clk);
input my_signal;
output my_result;
// 观察区域
input obs_signal;
output obs_result;
// 更新采样值
default input #1 output clocking_sampled;
assign obs_result = obs_signal;
// 触发事件
default input #1 output clocking_monitor;
event my_event = @(posedge obs_signal);
// 处理时钟事件
always @(my_event) begin
my_result <= my_signal;
end
endclocking
```
在这个例子中,`my_clocking` 时钟块包含一个观察区域 `obs_signal` 和一个触发事件 `my_event`。在 `default` 块中,使用 `clocking_sampled` 更新采样值,以确保正在等待时钟块的进程可以读取到最新的采样值。然后,在 `default` 块中的 `clocking_monitor` 输出触发信号,以便触发 `my_event` 事件。在 `always` 块中,处理 `my_event` 事件,更新 `my_result` 的值。