我正在模拟基于处理器的设计,其中程序存储器内容保存在 BRAM 中。我正在使用 VHDL(推断 BRAM)实现程序存储器。我试图避免使用 CoreGen,因为我想保持设计的可移植性。最终该设计将进入 FPGA。
我想看看是否有一种方法可以使用 VHDL 泛型来初始化 BRAM 的内存内容?我知道 Coregen 使用 COE 文件来初始化 BRAM,但是我们是否有基于 VHDL 代码的方法来执行此操作?
也让我知道您的替代建议。
是的,这当然是可能的。看看Xilinx 综合工具 (XST) 用户指南 http://www.xilinx.com/support/documentation/sw_manuals/xilinx13_4/xst.pdf,特别是第187页。
他们建议执行此操作的代码复制如下。他们在用户指南中提供了有关将读取的文件格式的注释。请注意,此代码不直接使用泛型,但我可以想象您可以设置一个常量或泛型来保存文件名的名称......
--
-- Initializing Block RAM from external data file
--
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use std.textio.all;
entity rams_20c is
port(clk : in std_logic;
we : in std_logic;
addr : in std_logic_vector(5 downto 0);
din : in std_logic_vector(31 downto 0);
dout : out std_logic_vector(31 downto 0));
end rams_20c;
architecture syn of rams_20c is
type RamType is array(0 to 63) of bit_vector(31 downto 0);
impure function InitRamFromFile (RamFileName : in string) return RamType is
FILE RamFile : text is in RamFileName;
variable RamFileLine : line;
variable RAM : RamType;
begin
for I in RamType’range loop
readline (RamFile, RamFileLine);
read (RamFileLine, RAM(I));
end loop;
return RAM;
end function;
signal RAM : RamType := InitRamFromFile("rams_20c.data");
begin
process (clk)
begin
if clk’event and clk = ’1’ then
if we = ’1’ then
RAM(conv_integer(addr)) <= to_bitvector(din);
end if;
dout <= to_stdlogicvector(RAM(conv_integer(addr)));
end if;
end process;
end syn;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)