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