优化RAM

时间:2014-01-15 11:32:52

标签: vhdl ram

我正在调试我的DPRAM。像往常一样,模拟工作完美,但在现实生活中它失败了。语法如下:

ram[Address][Data]

我可以将数据写入前8个地址,但是数据刚刚丢失(即使在chipcope上)。作为一种解决方法,我将两个DPRAM与一个简单的逻辑开关拼接在一起,在数据到达第八个地址后将数据重新路由到第二个DPRAM。这有效,但它看起来很混乱。

我的想法是,它正在被优化,即使不是这将是一个很好的学习曲线(并且欢迎任何想法)。

这是DPRAM中的信号变量,我努力阻止它被优化掉:

type ram_array is array(16 downto 0) of std_logic_vector(31 downto 0);
shared variable ram: ram_array;


attribute KEEP: string;
attribute KEEP of ram_array : type is "TRUE";

我想我需要在UCF文件中添加一行,虽然我似乎无法正确使用语法,实体名称路径明显改变了:

NET "entity/name/path/dpram/ram_array" KEEP ="TRUE";

如果我想停止优化,那么我是如何添加代码的呢?

编辑:

输出(猜测没有优化):

Found 17x32-bit dual-port RAM <Mram_ram> for signal <ram>. Summary: inferred 1 RAM(s). inferred 65 D-type flip-flop(s). Unit <dpram> synthesized.

谢谢=)

1 个答案:

答案 0 :(得分:1)

不要将共享变量用于可合成代码

如果您的代码需要是可综合的,那么请不要使用共享变量。

推断BlockRAM

如果您需要示例代码来实现内存而不使用共享变量,请使用为FPGA提供的文档。

示例文档链接:

希望这有帮助。