0

我正在尝试实现一个简单的乘法器。我有一个文本文件,其中有两列。我将第 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

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

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

PS:这是我第一次,我在FPGA上存储任何东西。

问候!

阿瓦伊斯

4

1 回答 1

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 宏。

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

于 2014-11-30T12:31:47.257 回答