我需要在VHDL中制作16 * 16位存储器的块是什么?

时间:2014-12-16 20:21:48

标签: vhdl

我的问题是我需要使用它们在VHDL中制作内存插槽的块。 我想要这个块的名称来编写块的结构代码并将它们相互连接以形成内存槽。 谢谢你

1 个答案:

答案 0 :(得分:0)

对于简单的记忆,你可以用便携式VHDL推断它们。这允许您的代码在多个设备系列和制造商之间运行。您可能必须实例化库组件以获得更高级的功能,但大多数合成器可以推断出最常见的内存形式。详细信息在供应商的文档中。

该示例适用于生成同步RAM的大多数工具:

library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all;

entity ram is
  port (
    Clock   : in std_logic;
    Address : in unsigned;
    We      : in std_logic;
    Wr_data : in bit_vector;
    Rd_Data : out bit_vector
  );
end entity;

architecture simple of ram is
  constant MEM_SIZE : positive := 2 ** Address'length;
  type ram_mem is array (0 to MEM_SIZE-1) of bit_vector(Wr_data'length-1 downto 0);

  signal ram_data : ram_mem;
begin

  rd_wr: process(Clock)
  begin
    if rising_edge(Clock) then
      Rd_data <= ram_data(to_integer(Address));

      if We = '1' then
        ram_data(to_integer(Address)) <= Wr_data;
      end if;
    end if;
  end process;

end architecture;

地址和数据端口不受实例化时确定的宽度的限制。通过连接4位Address和16位Wr_dataRd_data信号,您可以获得16x16位内存。