我正在调试我的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.
谢谢=)
答案 0 :(得分:1)
不要将共享变量用于可合成代码
如果您的代码需要是可综合的,那么请不要使用共享变量。
推断BlockRAM
如果您需要示例代码来实现内存而不使用共享变量,请使用为FPGA提供的文档。
示例文档链接:
希望这有帮助。