用双时钟模拟VHDL-Modelsim双端口RAM

用双时钟模拟VHDL-Modelsim双端口RAM,vhdl,ram,modelsim,test-bench,Vhdl,Ram,Modelsim,Test Bench,我需要一个有两个时钟的双端口RAM测试台的帮助,其中地址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

我需要一个有两个时钟的双端口RAM测试台的帮助,其中地址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 ;
ieee库;
使用ieee.std_logic_1164.all;
使用ieee.numeric_std.all;
使用ieee.std_logic_unsigned.all;
实体RAM是
港口(
迪恩:在
标准逻辑向量(7下至
0);
艾德拉:在
标准逻辑向量(2向下至
0);
地址:在
标准逻辑向量(2向下至
0);
WEA:标准逻辑;
REA:标准逻辑中;
CLKA:标准逻辑;
CLKB:标准逻辑中;
输出:输出标准逻辑向量(7到0)
);
端头闸板;
RAM的体系结构行为是
类型存储器是std_逻辑_向量(7到0)的数组(7到0);
信号存储器:存储器;
开始
过程(CLKA)
开始
如果(上升沿(CLKA)),则
如果(WEA='1'),则

mem(to_integer(signed(ADDRA))RAM寻址可能应该是无符号的

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

mem(to_integer(unsigned(ADDRA)))请参阅<代码>它从未正常工作并不断给我错误
对于一个看不见的测试台的问题陈述来说有点模糊。注释或。。。(问题是什么?@user1155120对不起,我不理解你的评论。你是在暗示我不应该试图帮助你,因为这个问题并不完美吗?OP要么含蓄地要求引用双端口RAM测试台的实现,要么希望有人会编写一个(Stackoverflow上没有)。请参阅“回答好的问题”一节,这是问题吗?因为类型
内存
被定义为
数组(从7到0)
使用有符号还是无符号并不重要。事实上,该设计将与超出范围的致命碰撞。如图所示:我同意我没有回答隐含的问题。但现在我已经为OP做了一个有效的例子,所以也许他得到了他想要的。
   d_out <= mem(to_integer(unsigned(ADDRB))) ;