如何将数据分配给内部输入端口

问题描述 投票:0回答:1

我有一个FPGA试图在同一芯片上读取/写入SDRAM的值。 sdram看作IN的是什么,顶级看作OUT,否则。 SDRAM“路径”被实例化并被带到顶层。这些路径没有方向。但是,我知道顶级读写sdram。我尝试了所显示代码的变体并进行了编译。下面的代码是将两个值传递给SDRAM并读取第三个值的示例。我已经为路径指定了方向。我的逻辑是否正确,因为它发送了两个值并收到了第三个值?

使用IEEE.STD_LOGIC_UNSIGNED.ALL; - 参见VHDL电路设计第36页

port(
    -- ---------------------------------------------------------------------
    -- Global signals ------------------------------------------------------

    CLK   : in std_logic;
    RESET : in std_logic;

      A       : out std_logic_vector(15 downto 0);
      B       : out std_logic_vector(15 downto 0);
      C       : in  std_logic_vector(15 downto 0);

最终实体sigma_k_top;

function_top的架构rtl是

signal cntr     : std_logic_vector(31 downto 0);
signal sig_A    : std_logic_vector(15 downto 0);
signal sig_B        : std_logic_vector(15 downto 0);
signal sig_C        : std_logic_vector(15 downto 0);

开始

sdram_inst : entity work.sdram

port map (
    CLK               => sdram_CLK_in, --CLK shared by all
    A                 => sdram_A_in, -- Write to sdram
    B                 => sdram_B_in,--  Write to sdram
    C                 => sdram_C_out, --Read from sdram
);

 transfer: process(CLK)
 begin
    IF rising_edge(CLK) then
        cntr <= cntr + 1;
        if cntr = 1000 then -- 
            sig_A  <= "1000000000000000";
            sig_B  <= "1000000000000000";
        end if;             

        if cntr = 1001 then
            if  C(0) = '1' then
                sig_A  <= sig_A - 1; -- Writing 
                sig_B  <= sig_B + 1; -- Writing
                xfer   <= C ;        -- Reading 
            end if;
        end if;
        if cntr > 2000 then
            cntr <= (others => '0');
        end if;

    END IF;

 end process;

-- -------------------------------------------------------------------------
-- Top-level ports ---------------------------------------------------------


 TEST_LED(7 downto 0)   <= xfer(7 downto 0); -- Making some sdram output visible
 A <= sig_A; -- Sending value to sdram
 B <= sig_B; -- Sending value to sdram

结构建筑rtl;

input port vhdl assign
1个回答
0
投票

RAM中存在哪些输入和输出可能会根据您打算如何使用它而有所不同。如果RAM真的存在于FPGA芯片本身上,那么一个例子就是你想在一个Xilinx Block RAM库组件上使用一个简单的单端口RAM。

从代码中可以看出,sdram是在FPGA顶层实现的(RAM包含在fpga芯片中),看来RAM的输入/输出也应该是顶层的输入/输出。如果sdram在FPGA之外(因此超出FPGA的最高级别),它将被颠倒过来

通常,RAM往往是至少需要的顺序元素:

- 时钟(通常为1位宽信号)

- 一个地址(往往是log2(n)位宽,其中n是RAM数组的大小。所以如果数组有64个元素,你需要至少6位才能解决所有问题。相同的地址信号可能是用于读取和写入,或者您可能有2个单独的地址信号。)

- 写使能(最简单的可能是1位信号。最典型的用法是将该信号置位1个时钟周期,以更新地址信号当前地址的数据)

-data(宽度会有所不同,并且往往在FPGA上灵活/可配置。如果你想在每个RAM条目中存储16位数据应该是完全有效的。这可以是单个信号或2个单独的信号用于读取和写数据)。

只要进出RAM的信号向量至少具有这些基本功能,看起来你应该至少可以使用它作为一个简单的RAM。请注意,在代码中,sdram_ *信号既未声明也未连接到sdram实例本身以外的任何其他信号。

© www.soinside.com 2019 - 2024. All rights reserved.