gpt4 book ai didi

system-verilog - '{default:' 1} 在系统 verilog 中应该做什么?

转载 作者:行者123 更新时间:2023-12-01 12:42:55 27 4
gpt4 key购买 nike

我有一个数组,我想将其初始化为全部 1。为此,我使用了以下代码片段:

logic [15:0] memory [8];
always_ff @(posedge clk or posedge reset) begin
if(reset) begin
memory <= '{default:'1};
end
else begin
...
end
end

我的模拟器做了我认为正确的事情并将寄存器设置为 16'hFFFF复位时。但是,我的 lint 工具给了我一个警告,即位 0 具有异步设置,而位 1 到 15 具有异步重置。这意味着 linter 认为此代码分配了 16'h0001到寄存器。

由于这两个工具来自同一供应商,我提交了一个错误报告,因为它们不可能都是正确的。

问题是:根据规范,哪种行为是正确的?没有示例可以显示这种确切情况。第 5.7.1 节提到:

An unsized single-bit value can be specified by preceding the single-bit value with an apostrophe ( ' ), but without the base specifier. All bits of the unsized value shall be set to the value of the specified bit. In a self-determined context, an unsized single-bit value shall have a width of 1 bit, and the value shall be treated as unsigned.

'0, '1, 'X, 'x, 'Z, 'z // sets all bits to specified value



如果这是一个“自定上下文”,那么答案是将 1 位符号扩展到 16'h0001,但如果不是,那么我猜想“将所有位设置为指定值”的示例适用。我不确定这是否是一个自我确定的上下文。

最佳答案

模拟器正确:memory <= '{default:'1};将分配 memory 中的所有位到 1. linting 工具确实有一个错误。见 IEEE Std 1800-2012 § 10.9.1 数组分配模式:

  • The **default:***value* applies to elements or subarrays that are not matched by either index or type key. If the type of the element or subarray is a simple bit vector type, matches the self-determined type of the value, or is not an array or structure type, then the value is evaluated in the context of each assignment to an element or subarray by the default and shall be castable to the type of the element or subarray; otherwise, an error is generated. ...


LRM在分配模式方面超出了可综合的范围。并且大多数工具仍然支持所有 SystemVerilog 功能。试验以确保您的工具(模拟器、合成器、lint 工具、逻辑等效性检查器等)都为您想要的功能提供必要的支持。

关于system-verilog - '{default:' 1} 在系统 verilog 中应该做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22697639/

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