我现在正在调试我的DPRAM。与往常一样,模拟工作得很好,但在现实生活中却失败了。语法是这样的:
ram[Address][Data]我可以让数据写到前8个地址,但是再多一些,数据就会丢失(甚至在chipscope上也是如此)。作为一种变通方法,我将两个DPRAM和一个简单的逻辑开关缝合在一起,以便在第二个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.谢谢=)
发布于 2014-01-16 00:19:20
对于可综合的代码,不要使用共享变量
如果你的代码需要是可综合的,那么不要使用共享变量。
推断BlockRAM
如果您需要在不使用共享变量的情况下实现内存的示例代码,请使用为FPGA提供的文档。
示例文档链接:
xilinx http://www.xilinx.com/support/documentation/sw_manuals/xilinx12_2/xst_v6s6.pdf
(
希望这能有所帮助。
https://stackoverflow.com/questions/21136307
复制相似问题