System verilog 什么应该';{默认值:';1}在系统verilog中做什么?
我有一个数组,我想初始化为所有1。为此,我使用了以下代码段:System verilog 什么应该';{默认值:';1}在系统verilog中做什么?,system-verilog,System Verilog,我有一个数组,我想初始化为所有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 逻辑[15:0]存储器[8]; 始终_ff@(posedge clk或posedge重置)开始
logic [15:0] memory [8];
always_ff @(posedge clk or posedge reset) begin
if(reset) begin
memory <= '{default:'1};
end
else begin
...
end
end
逻辑[15:0]存储器[8];
始终_ff@(posedge clk或posedge重置)开始
如果(重置)开始
内存模拟器是正确的:内存我肯定会运行一个等价性检查并模拟门,以确保合成不会像lint那样出错。仅供参考,Quartus中有一个bug,其中默认值:'1
通常起作用,但是,如果您有嵌套结构,并且其中一个结构成员的文本使用了'1
,则会弄乱赋值。@Greg出于好奇,您能举一个不可合成赋值模式的示例吗?或者您指的是工具支持。假设LRM没有定义任何构造是否可合成。例如,从LRM§10.9.2struct{logic[7:0]a;位b;位符号[31:0]c;字符串s;}s2='{int:1,默认值:0,字符串:'}代码>无法合成,因为字符串
不可合成。理论上,可以合成以下内容,但不支持:LRM§10.9integer i='{31:1、23:1、15:1、8:1,默认值:0}代码>和struct{inta;struct{intb,C;}BC1,BC2;}ABC='{A:1,BC1:'{B:2,C:3},BC2:'{B:4,C:5}代码>。大多数项目都尝试不在同一个分配中混合使用异步设置/重置。我不确定在测试台外一次性分配复杂的sturct在哪里是切实可行的。我认为你可以有效地执行memory@Chiggs,那将非常好。我正在进行一个设计,它有一系列数组,任何简化语法的东西都值得赞赏。我会试试看。@Chiggs No dice:编译错误。它应该适用于压缩数组-我没有注意到您使用的是未压缩数组(我通常使用压缩数组)。。。使用Modelsim(未打包的阵列也会出现故障)。