always @(posedge clk or negedge rst) begin if(rst==1) cnt_trig <= 28'd0; else begin if(cnt_trig == check_wide) cnt_trig <= 28'd0; else cnt_trig <= cnt_trig + 1'b1; end end 代码报错:[Synth 8-7213] Expression condition using operand 'rst' does not match with the corresponding edges used in event control [Synth 8-462] no clock signal specified in event control
时间: 2024-02-07 10:03:57 浏览: 359
syn_rst.rar_Always_时钟敏感信号
这个错误可能是因为 `rst` 信号在事件控制块 `(posedge clk or negedge rst)` 中被使用,但其实 `rst` 信号不是时钟信号,不能被用在这个事件控制块中。在事件控制块中,只能使用时钟信号或同步复位信号。
要解决这个错误,可以在事件控制块中指定一个同步复位信号,例如 `rst_s`。同时,需要确保 `rst_s` 信号与 `clk` 信号在同一个时钟域中,并且在复位信号下降沿时触发。
修改后的代码如下:
```
always @(posedge clk or negedge rst_s) begin
if(rst_s == 1)
cnt_trig <= 28'd0;
else begin
if(cnt_trig == check_wide)
cnt_trig <= 28'd0;
else
cnt_trig <= cnt_trig + 1'b1;
end
end
```
同时需要在模块声明中添加一个同步复位信号 `rst_s`,例如:
```
module my_module(
input clk,
input rst,
input some_input,
output some_output
);
wire rst_s = ~rst; // 生成同步复位信号 rst_s
// ... 其他模块代码
endmodule
```
这样就可以解决这个错误了。
阅读全文