在FPGA中存储数组

时间:2014-11-30 08:36:07

标签: memory fpga spartan

我正在尝试实现一个简单的乘数。我有一个文本文件,其中有两列。我将第1列乘以第2列。这是Verilog中的代码:

module File_read(
input clk
);

reg [21:0] captured_data[0:10];
reg [21:0] a[0:8];
reg [21:0] b[0:8];
reg [43:0] product[0:5];
`define NULL 0 
integer n=0;
integer i=0;
initial 
$readmemh("abc.txt",captured_data);
always @(posedge clk) begin
   product[i]<=captured_data[n]*captured_data[n+1];
   n<=n+2;
   i<=i+1;
end
endmodule

我有XilinxSpartan®-6 LX45 FPGA板。它提供128M bit ddr2 ram和16Mbyte x4 SPI Flash,用于配置和配置。数据存储。

现在我想将我的文件存储到FPGA板中。那我该怎么做呢?我是否必须使用IP核来访问内存或任何其他来源?

P.S:这是我第一次,我在FPGA上存储任何内容。

问候!

AWAIS

1 个答案:

答案 0 :(得分:1)

首先不要使用DDR或闪存,除非你真的需要它们。您的FPGA有足够的BlockRAM来为您的乘法器存储数千个参数。

一种简单的方法是实例化2个BlockRAM,并在编译时使用文件中的数据加载它们。 Xilinx提供了像data2mem这样的工具来实现这一目标。

或者,您可以使用以太网或UART连接将测试数据发送到您的设计中。

编辑1 - 如何实例化BlockRAM

解决方案1:通用VHDL描述。

  type T_RAM is array(LINES - 1 downto 0) of std_logic_vector(BITS-1 downto 0);
  signal ram : T_RAM;
begin
  process (Clock)
  begin
    if rising_edge(Clock) then
      if (WriteEnable = '1') then
        ram(to_integer(WriteAddress)) <= d;
      end if;

      q <= ram(to_integer(ReadAddress));
    end if;
  end process;

解决方案2:IPCore生成器有一个向导来创建BlockRAM并分配外部文件。

解决方案3:手动实例化BlockRAM宏。每个FPGA系列都附带支持宏的HDL库指南。例如,Virtex-5在第311页上有一个RAMB36宏。

here描述了BlockRAM与data2MEM和* .bmm(BlockRAM内存映射)文件的使用。