Verilog RAM的默认值

Verilog RAM的默认值,verilog,hdl,Verilog,Hdl,我在写Verilog HDL进行合成,我想用默认值(零)实例化一个双端口RAM,怎么做 谢谢,Netanel正如您提到的Virtex-7-查看中有关如何编写推断内存块的Verilog的示例 在附录C中,您可以找到以下代码: // Dual-Port Block RAM with Two Write Ports // File: HDL_Coding_Techniques/rams/rams_16.v module v_rams_16 (clka,clkb,ena,enb,wea,web,addr

我在写Verilog HDL进行合成,我想用默认值(零)实例化一个双端口RAM,怎么做


谢谢,Netanel

正如您提到的Virtex-7-查看中有关如何编写推断内存块的Verilog的示例

在附录C中,您可以找到以下代码:

// Dual-Port Block RAM with Two Write Ports
// File: HDL_Coding_Techniques/rams/rams_16.v
module v_rams_16 (clka,clkb,ena,enb,wea,web,addra,addrb,dia,dib,doa,dob);
  input clka,clkb,ena,enb,wea,web;
  input [9:0] addra,addrb;
  input [15:0] dia,dib;
  output [15:0] doa,dob;
  reg [15:0] ram [1023:0];
  reg [15:0] doa,dob;
always @(posedge clka) begin if (ena)
begin
  if (wea)
    ram[addra] <= dia;
    doa <= ram[addra];
  end
end
always @(posedge clkb) begin if (enb)
begin
  if (web)
    ram[addrb] <= dib;
    dob <= ram[addrb];
  end
end
endmodule
//具有两个写入端口的双端口块RAM
//文件:HDL_Coding_technologies/rams/rams_16.v
模块v_rams_16(clka、clkb、ena、enb、wea、web、addra、addrb、dia、dib、doa、dob);
输入clka、clkb、ena、enb、wea、web;
输入[9:0]addra,addrb;
输入[15:0]直径,dib;
输出[15:0]doa,dob;
reg[15:0]ram[1023:0];
reg[15:0]doa,dob;
始终@(posedge clka)如果(ena)开始
开始
国际单项体育联合会

ram[addra]ram不是verilog存在的东西。获取ram的方法是编写一些看起来像ram行为的verilog,然后使用特定于合成器的方法告诉合成器将逻辑块合成为ram。但在verilog语言中没有“ram”这样的东西。如果是针对ASIC,您的流程供应商可能有包含双端口ram的库。不,它是针对XILINX Virtex-7 FPGA设备的。然后使用Core Generator实例化双端口ram。默认情况下,它是用0初始化的。要初始化,您可以添加重置,或在启动序列中写入所有0。@Morgan:您可以这样做,但FPGA块RAM不是这样工作的-它们是在配置时初始化的,即在重置开始之前(有点像你建议的,在启动序列中,但不是在用户的运行时控制下)。重置无法在一个刻度内清除整个阵列,因此如果你为此编写代码,ram将在寄存器和MUX中实现,这会变得大、快!很好的一点。我假设它们会有一个异步活动低重置。