gpt4 book ai didi

embedded - VHDL 中的 BRAM_INIT

转载 作者:行者123 更新时间:2023-12-04 22:34:33 24 4
gpt4 key购买 nike

我正在模拟基于处理器的设计,其中程序存储器内容保存在 BRAM 中。我正在使用 VHDL(推断 BRAM)实现程序存储器。我试图避免使用 CoreGen,因为我想保持设计的可移植性。最终,这个设计将进入 FPGA。

我想看看是否有办法使用 VHDL 泛型初始化 BRAM 的内存内容?我知道 Coregen 使用 COE 文件来初始化 BRAM,但是我们是否有基于 VHDL 代码的方法来执行此操作?

让我知道你的替代建议。

最佳答案

是的,这当然是可能的。看看 Xilinx Synthesis Tool (XST) User guide ,特别是第 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;

关于embedded - VHDL 中的 BRAM_INIT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10555729/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com