0

VHDL プログラミングは初めてです。このプロジェクトは、メモリ アレイの障害の検出に関するものです。不正なデータとアドレスを取得しました。ここで、メモリ配列で見つかった特定のアドレスの対応する行番号または列番号を取得したいと考えています。VHDL でこれを実現するためのコードをいただければ幸いです。SRAM を作成し、読み取りおよび書き込み操作を実行するための簡単なコードを次に示します。

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

entity memory is   

port(   Clock :     in std_logic;     
      Write :       in std_logic;
      Read  :  in std_logic;
      -- Addr  :     in std_logic_vector(7 downto 0);
     Data_in :  in std_logic_vector(7 downto 0);
     Data_out:  out std_logic_vector(7 downto 0);
    Data_out_f: out std_logic_vector(7 downto 0);
     add_out  : out std_logic_vector(7 downto 0)

);
end memory;

architecture behav of memory is

--Declaration of type and signal of a 256 element RAM
--with each element being 8 bit wide.
type ram_type is array (0 to 255) of    std_logic_vector(7 downto 0);
signal tmp_ram: ram_type:=(others=>"00000000");

signal Addr  :  std_logic_vector(7 downto 0):="00000000";

begin   

process(Clock,addr,Write,read)
begin

if (Clock'event and Clock='1') then

 if addr <"00001111" and write='1' and Data_in(7)/='U' then    

    addr <= addr + '1';

 elsif  addr >"00000000" and read='1' then

    addr <= addr - '1';    

 end if;

end if;  

end process;               

-- Write Functional Section
process(Clock,Write,Addr)
 begin        

    if Write='1' then

        tmp_ram(conv_integer(Addr)) <= Data_in;         

    end if;   

end process;       

process(Clock,Read,Addr)
 begin          
    if Read='1' then

        Data_out <= tmp_ram(conv_integer(Addr));            

    end if;   

end process;

end behav;
4

1 に答える 1

0

SRAM について言及していると仮定すると、行と列が順序付けられる方法は実際のハードウェア レイアウトに固有のものであり、通常、RAM を使用する VHDL コードでは重要ではありません (手動で電力消費を最適化することに本当に関心がある場合を除きます)。例えば)。通常、いくつかの最下位ビットは列を参照し、最上位ビットは行を参照します。したがって、行と列の数がわかっている場合は、アドレス ビットを行アドレスと列アドレスに分割するだけで済みますが、これは SRAM が内部的に他のレイアウトを持っていないことを前提としています。

RAM を VHDL の配列としてコーディングする場合 (合成ツールに RAM を推測させる)、RAM 内のワード数を含む 1 次元配列のみをコーディングします。例えば:

type ram_type is array(0 to g_DATA_DEPTH-1) of std_logic_vector(g_DATA_WIDTH-1 downto 0);

g_DATA_DEPTH=1024 とすると、RAM の実際の構造があいまいであることは明らかです。1x1024、2x512、4x256 などの可能性があります。

したがって、RAM は、行と列に分割するのではなく、単語の 1 次元配列として表示するのが最適です。

于 2013-09-23T13:41:21.820 に答える