ROMっぽいもの

前回の記事から22日ほど経ってしまっているんですよね。 最近は勉強する習慣をつけてます。 django、vue、golang、cpu製作、web製作などなど 競プロなんかもちょっとずつやってます、はい。 目的は勉強なんですけど、最近ブログ更新してないなぁとか思っちゃったりしてるので、書きたいと思います!!

ROM書いてみた

言わずもがなROMです。定数か変数か変えれば、RAMになると思ってます。numeric_stdを使っているので、そのままFPGAっていうわけにはいかないかも(実験してない)だけど、シミュレーションでは良さげだったので。

ソースコード

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


entity ROM is
    -- change length of std_logic_vector
    port(address: in std_logic_vector(9 downto 0);
    output: out std_logic_vector(7 downto 0));
end entity;


architecture RTL of ROM is
    -- change size of array to match address
    type Memory1KB is array(0 to 1023) of std_logic_vector(7 downto 0);
    constant data: Memory1KB := (
"00000000",
"00000001",
"00000010",
"00000011",
...
"00000000",
"00000000",
"00000000",
"00000000",
"00000000",
"00000000",
"00000000");
begin
    output <= data(to_integer(unsigned(address)));
end architecture;

typeでaliasを付けつつ、ROMのサイズを指定(210 B = 1 KB)。 address幅もそれに合わせて 10 bit になってる。実際のデータは 0 番地には 0 を 1 番地には 1 を 2 番地には 2 を入れてある。 ROMのは210バイトだけど、1 バイトは1 ^ 8 -1 までしか表せないので、足りないところは 0 埋めでテストした。

f:id:b1u3:20181130005053p:plain
ROMのシミュレーション

シミュレーションでは、addressに 0 から順番にアドレスを入れていった。 FPGAとかに載せる時は、ベンダーが提供してるものを使うか、下から自作するのか、それともこのままいけるのかまだわかんないです。