文章 ID: 000080467 内容类型: 故障排除 上次审核日期: 2021 年 08 月 27 日

为什么在 英特尔® Quartus® Prime 软件 16.0 版本中忽略我的 RAM 属性"no_rw_check"?

环境

    英特尔® Quartus® Prime Pro Edition
    英特尔® Quartus® Prime 标准版
BUILT IN - ARTICLE INTRO SECOND COMPONENT
说明

由于英特尔® Quartus® Prime 软件版本 16.0 及更高版本出现问题,如果将 RAM 输出恢复到中间信号而不是输出端口,则可能会忽略"no_rw_check"的属性。英特尔 Quartus Prime 软件版本 15.1 及更早版本中不会出现此问题。

如果您有一个设计迁移到英特尔 Quartus Prime 软件 16.0 版本及更高版本,请在分析中查看报告,并合成 -> LPM_Parameter设置 - > RAM。如果使用"no_rw_check"属性,则参数READ_DURING_WRITE_MODE_MIXED_PORTS具有"请勿护理"的值。

下面的示例显示从 英特尔 Quartus Prime 软件 16.0 版本开始未检测到的属性"no_rw_check"代码:

LIBRARY ieee;

使用ieee.std_logic_1164.ALL;

实体 ram IS

端口(

时钟:IN STD_LOGIC;

数据:IN STD_LOGIC_VECTOR(2 DOWNTO 0);

write_address:INTEGER 范围 0 到 31;

read_address:INTEGER 范围 0 到 31;

我们:在STD_LOGIC;

问:OUT STD_LOGIC_VECTOR(2 DOWNTO 0)

);

END ram;

架构 rtl of ram IS

MEM IS 阵列(0 至 31)的STD_LOGIC_VECTOR(2 下托 0);

信号ram_block:MEM;

ATTRIBUTE ramstyle:string;

ram_block的 ATTRIBUTE Ramstyle:信号为"no_rw_check";

信号read_address_reg:整数范围为 0 至 31;

信号q_reg:STD_LOGIC_VECTOR(2 个 DOWNTO 0);

开始

流程(时钟)

开始

如果 (时钟事件和时钟 = "1"), 则

如果 (我们 = '1')

ram_block(write_address)

结束 IF;

read_address_reg

结束 IF;

从 英特尔 Quartus Prime 软件 16.0 版本开始未检测到属性"no_rw_check"缩放代码

------------------------------------------------------------------------------------

如果 (时钟事件和时钟 = "1"), 则

q_reg

结束 IF;

q

------------------------------------------------------------------------------------

最终过程;

END rtl;

解决方法

要解决此问题,在

分配 - >设置 - >编译器设置 - >高级设置 (合成)

用以下代码替换上面剪切的代码,将 RAM 的输出信号作为输出端口,无需使用中间信号:

------------------------------------------------------------------------------------

如果 (时钟事件和时钟 = "1"), 则

q

结束 IF;

------------------------------------------------------------------------------------

此问题计划在英特尔 Quartus Prime 专业版软件的未来发行版中修复。

相关产品

本文适用于 1 产品

英特尔® 可编程设备

1

本页面上的内容是原始英文内容的人工翻译与计算机翻译的组合。我们提供此内容是为了您的便利并且仅供参考,未必完整或准确。如果本页面的英文版与翻译版之间存在任何冲突,应以英文版为准。 查看此页面的英语版本。