我模拟基于处理器的设计,其中程序存储器的内容,在BRAM举行。 我意识到使用VHDL(推断BRAMs)程序存储器。 我试图避免CoreGen,因为我想保持设计便于携带。 最终,这样的设计会去的FPGA。
我想看看是否有一种方法来初始化使用VHDL泛型BRAMs的存储内容? 据我所知,Coregen使用COE文件来初始化BRAM但我们有一个基于VHDL代码的方式来做到这一点?
让我知道您的备选建议,以及。
我模拟基于处理器的设计,其中程序存储器的内容,在BRAM举行。 我意识到使用VHDL(推断BRAMs)程序存储器。 我试图避免CoreGen,因为我想保持设计便于携带。 最终,这样的设计会去的FPGA。
我想看看是否有一种方法来初始化使用VHDL泛型BRAMs的存储内容? 据我所知,Coregen使用COE文件来初始化BRAM但我们有一个基于VHDL代码的方式来做到这一点?
让我知道您的备选建议,以及。
是的,它当然是可能的。 看看在Xilinx综合工具(XST)用户指南 ,特别是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;
另外,不要打扰使用泛型或读取文件; 只需要声明的封装中的恒定阵列。 把它放在一个包,而不是主要的架构,甚至可以自动使用脚本(比如,阅读汇编输出或文本文件)写的包。
library ieee;
use ieee.std_logic_1164.all;
package ProgMem is
type Word is std_logic_vector(7 downto 0);
constant ROM : array (0 to 3) of Word :=
(
X"C3",
X"00",
X"00",
"UUUUUUUU" );
end package Progmem;
真正的程序可能会更长,但是这说明了模式