Intel® Quartus® Prime Pro Edition用户指南: 部分重配置

ID 683834
日期 5/11/2020
Public
文档目录

1.5.9. 对存有初始化内容的片上存储器实现时钟使能

请遵循以下准则为存有初始化内容的片上存储器实现时钟使能:
  1. 为避免在PR编程期间对存有初始化内容的存储器进行虚假写入,请在与M20K或MLAB RAM相同的PR区域中实现时钟使能电路。此电路取决于来自静态区域的高电平有效清除信号(active-high clear signal)。
  2. 在开始PR编程之前,置位此信号以禁用存储器的时钟使能。系统PR控制器必须在PR编程完成时置低清除信号。您可以为此目的使用冻结信号。
  3. 使用 Intel® Quartus® Prime IP Catalog或者Platform Designer例化On-Chip Memory和RAM Intel® FPGA IP core,其中包括自动添加此电路的选项。
图 16. 用于PR区域的RAM时钟使能电路

Verilog RTL for Clock Enable

  reg ce_reg;
    reg [1:0] ce_delay;

    always @(posedge clock, posedge freeze) begin
        if (freeze) begin
            ce_delay <= 2'b0;
        end
        else begin
            ce_delay <= {ce_delay[0], 1'b1};
        end
    end

    always @(posedge clock, negedge ce_delay[1]) begin
        if (~ce_delay[1]) begin
            ce_reg <= 1'b0;
        end
        else begin
            ce_reg <= clken_in;
        end
    end

    wire ram_wrclocken;
    assign ram_wrclocken = ce_reg;

VHDL RTL for Clock Enable

ENTITY mem_enable_vhd IS PORT(
        clock      : in  std_logic;
        freeze  : in  std_logic;
		clken_in : in std_logic;
        ram_wrclocken : out std_logic);
END mem_enable_vhd;

ARCHITECTURE behave OF mem_enable_vhd is
	SIGNAL ce_reg: std_logic;
	SIGNAL ce_delay: std_logic_vector(1 downto 0);
BEGIN
PROCESS (clock, freeze)
BEGIN
	IF ((clock'EVENT AND clock = '1') or (freeze'EVENT AND freeze = '1')) THEN
		IF (freeze = '1') THEN
			ce_delay <= "00";
		ELSE
			ce_delay <= ce_delay(0) & '1';
		END IF;
	END IF;
	
END PROCESS;

PROCESS (clock, ce_delay(1))
BEGIN
	IF ((clock'EVENT AND clock = '1') or (ce_delay(1)'EVENT AND ce_delay(1) = '0')) THEN
		IF (ce_delay(1) = '0') THEN
			ce_reg <= '0';
		ELSE
			ce_reg <= clken_in;
		END IF;
	END IF;
	
END PROCESS;

ram_wrclocken <= ce_reg;

END ARCHITECTURE behave;