用双时钟模拟VHDL-Modelsim双端口RAM
我需要一个有两个时钟的双端口RAM测试台的帮助,其中地址a(写)与CLK a同步,地址B(读)与CLK B同步。 以下是ModelSim中的代码:用双时钟模拟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
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))) ;