Симуляция VHDL Modelsim двухпортовой RAM с 2 тактами - PullRequest
0 голосов
/ 25 мая 2020

Мне нужна помощь с тестовым стендом для Dualport RAM с 2 часами, где адрес A (запись) синхронизируется с CLK A, а адрес B (чтение) с CLK B. Вот код в ModelSim:

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use ieee.std_logic_unsigned.all;


entity RAM is 
port(
    d_in    : in 
   std_logic_vector(7 downto 
    0);
    ADDRA   : in 
    std_logic_vector(2 downto 
    0);
    ADDRB   : in 
    std_logic_vector(2 downto 
    0);
    WEA     : in std_logic ;
    REA  : in std_logic ;
    CLKA    : in std_logic ;
    CLKB    : in std_logic ;
    d_out   : out std_logic_vector(7 downto 0)
);

 end RAM ;
 Architecture behav of RAM is

type Memory is ARRAY(7 downto 0) of std_logic_vector(7 downto 0);
signal mem : Memory;

BEGIN

process(CLKA)
begin
    if(rising_edge(CLKA)) then 
        if(WEA = '1') then
            mem(to_integer(signed(ADDRA))) <= d_in;
        end if;
    end if;
end process;

    process(CLKB)
begin
    if(rising_edge(CLKB)) then
        if ( REA = '1') then
          d_out <= mem(to_integer(signed(ADDRB))) ;
    end if;
    end if;
end process;
end behav ;

Я пытался создать файл тестовой среды, используя разные стратегии, но он никогда не работал должным образом и продолжает выдавать ошибки.

1 Ответ

0 голосов
/ 26 мая 2020

Адресация RAM, вероятно, должна быть беззнаковой.

  mem(to_integer(unsigned(ADDRA))) <= d_in;

и

   d_out <= mem(to_integer(unsigned(ADDRB))) ;

При подписанной адресации ввод адреса b"111" будет соответствовать целому числу с дополнением до двух -1 вместо 7.

Изменить: здесь я сделал очень простой рабочий тестовый стенд: https://www.edaplayground.com/x/2Mq7

...