gpt4 book ai didi

hardware - SystemVerilog 能否在不添加不可综合代码的情况下表示具有异步设置和重置的触发器?

转载 作者:行者123 更新时间:2023-12-02 07:59:38 26 4
gpt4 key购买 nike

我有 Verilog-95 背景,我正在尝试找出我不再需要跳过的 Verilog-95 障碍。

在 Verilog-95 中编写具有异步设置和复位功能的触发器的明显方法是:

always @(posedge clk or negedge resetb or negedge setb) begin
if (!resetb) q <= 0;
else if (!setb) q <= 1;
else q <= d;
end

这在综合中起作用。但是,如果我们同时断言resetb和setb,然后在取消断言setb之前取消断言resetb,那么这在模拟中不起作用,因为这些信号中的任何一个都没有posege触发器。我们需要添加以下内容(具体取决于您的综合工具),以使模拟与综合相匹配:

// synopsys translate_off
always @(resetb or setb)
if (resetb && !setb) force q = 1;
else release q;
// synopsys translate_on

是否有一个 SystemVerilog 构造可以让您在没有这些额外垃圾的情况下完成此操作?更好的是,有没有一种简单的方法可以在 Verilog-95 中做到这一点?

最佳答案

最好避免使用具有多个异步控制的触发器。确保它们正常运行所需的时序检查非常复杂且容易困惑。如果您确实需要使用它们,那么最好在需要的地方手动实例化它们。如果您让综合工具推断它们,它可能会在您不希望的地方使用它们,这会增加时序检查无法正确完成的风险。

最后,如果复位的有效边沿位于时间零并且在触发器初始化为 x 之前进行模拟,并且时钟未在重置。我相信有些模拟器有特殊情况来确保逻辑不按此顺序初始化。

也就是说,我很幸运将优先级逻辑移到顺序 always block 之外。请注意,为简单起见,我使用高电平有效信号。

assign s_int = s && !c;

always @(posedge clk or posedge s_int or posedge c) begin
if (c)
q <= 1'b0;
else if (s_int)
q <= 1'b1;
else
q <= d;
end

关于hardware - SystemVerilog 能否在不添加不可综合代码的情况下表示具有异步设置和重置的触发器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18641159/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com