芝麻饭团 发表于 2012-3-19 22:15:18

请教VHDL写双口ram的问题(附完整代码和时序图)

本帖最后由 芝麻饭团 于 2012-3-19 22:17 编辑

小弟最近正在学习FPGA编程,按照自己想法写了一个VHDL的双口ram程序,代码如下,两个process是一样的,各负责一个接口。但是仿真出现一个很奇怪的问题。就是在a口地址10写入数据15,则a口和b口回读地址10都可以得到数据15。但是b口在地址10写入数据(图中为数据11),然后a口和b口在地址10处读到的都是无效数据。
另外,如果去掉a口的process,那么b口可以正常读写。我猜是有什么冲突了,但不知原因为何,求指教!library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use IEEE.NUMERIC_STD.all;
--use ieee.std_logic_arith.all;
use work.pcs_package.all;

entity ram is
    port(
                --dual port asynchrous ram
      addr_a,addr_b: in std_logic_vector(6 downto 0);
      data_a,data_b: inout std_logic_vector(15 downto 0);
      we_a,we_b:   in std_logic;
      oe_a,oe_b:   in std_logic;
      cs_a,cs_b:   in std_logic
      );
end entity ram;

architecture rtl of ram is
TYPE ramblock IS ARRAY (0 to 99) OF std_logic_vector (n-1 downto 0);

SIGNAL memory        :ramblock;

    BEGIN
                -----dual ram on a side
      PROCESS(we_a,oe_a,cs_a)
      BEGIN
      IF cs_a='1' THEN                  
            data_a<="ZZZZZZZZZZZZZZZZ";
            ELSE
                IF we_a='0' THEN
                memory(to_integer(UNSIGNED(addr_a)))<=data_a;   --WRITE
                END iF;
                IF we_a='1' AND oe_a='0' THEN
                  data_a<=memory(to_integer(UNSIGNED(addr_a)));   --READ
                ELSE
                  data_a<="ZZZZZZZZZZZZZZZZ";                     --OUTPUT DISABLED
                END iF;
      END IF;
      END PROCESS;

      -----dual ram on b side
      PROCESS(we_b,oe_b,cs_b)
      BEGIN
      IF cs_b='1' THEN                  
            data_b<="ZZZZZZZZZZZZZZZZ";
            ELSE
                IF we_b='0' THEN
                                        memory(to_integer(UNSIGNED(addr_b)))<=data_b;   --WRITE
                                end if;
                IF we_b='1' AND oe_b='0' THEN
                  data_b<=memory(to_integer(UNSIGNED(addr_b)));   --READ
                ELSE
                  data_b<="ZZZZZZZZZZZZZZZZ";                     --OUTPUT DISABLED
                END iF;
      END IF;
      END PROCESS;
      
    END rtl;
   

芝麻饭团 发表于 2012-3-19 22:16:50

我的qq是707678413,希望对fpga比较感兴趣的可以加我多多交流。
页: [1]
查看完整版本: 请教VHDL写双口ram的问题(附完整代码和时序图)