在ModelSim Altera版本10.4中的Verilog初始构造与以前不同

在ModelSim Altera版本10.4中的Verilog初始构造与以前不同,verilog,system-verilog,modelsim,intel-fpga,quartus,Verilog,System Verilog,Modelsim,Intel Fpga,Quartus,从10.4版开始,初始块出现问题。像这样: reg [31:0] init_ram[15:0]; initial begin init_ram[0] = 32'h1234_5678; init_ram[1] = 32'h8765_4321; ... end always_ff @(posedge clk) init_ram[addr] <= data; reg[31:0]初始化内存[15:0]; 初始开始 初始ram[0]=32'h1234_5678; 初始r

从10.4版开始,初始块出现问题。像这样:

reg [31:0] init_ram[15:0];

initial begin
   init_ram[0] = 32'h1234_5678;
   init_ram[1] = 32'h8765_4321;
   ...
end

always_ff @(posedge clk)
   init_ram[addr] <= data;
reg[31:0]初始化内存[15:0];
初始开始
初始ram[0]=32'h1234_5678;
初始ram[1]=32'h8765_4321;
...
结束
始终_ff@(posedge clk)

init_ram[addr]解决问题的一个方法是添加一个
reset
信号,并使用它初始化寄存器的值

嗯,可能是这个 这是给你的人字拖一个初始值的好方法

这应该是这样的:

reg [31:0] init_ram[15:0];
input reset;

always_ff @(posedge clk) begin
   if (reset) begin
      init_ram[0] <= 32'h1234_5678;
      init_ram[1] <= 32'h8765_4321;
   end
   else begin
      init_ram[addr] <= data;
reg[31:0]初始化内存[15:0];
输入复位;
始终_ff@(posedge clk)开始
如果(重置)开始

init_ram[0]关于
always_ff
always_comb
构造的问题之一是,它们应该在模拟过程中检查可合成性,只是没有可合成的标准。如果意图是
初始
块仅用于模拟,则需要将
始终_ff
更改为
始终
或将
初始
块改为使用
强制/释放

使用内存块重置这不是一个好主意。RAM不支持复位。对于输出信号,我只能使用异步复位来获得正确的加电状态,而不需要时钟。ModelSim支持-输出寄存器a=1'b1-但Quartus合成忽略它
reg [31:0] init_ram[15:0];
input reset;

always_ff @(posedge clk) begin
   if (reset) begin
      init_ram[0] <= 32'h1234_5678;
      init_ram[1] <= 32'h8765_4321;
   end
   else begin
      init_ram[addr] <= data;
module test(
   input clk,
   input reset,
   ...
   output reg a
);

always @(posedge clk) begin
   if (reset) begin
      a <= 1'b1;
   end
   else begin
      a <= ...;