riscプロセッサを設計するための宿題。私はこのような16ビットPCを持っています
signal pc_din, PC, pc_rel, pc_dir, pc_inc : std_logic_vector(15 downto 0); -- pc datapath
pc_inc <= pc + 1;
pc_dir <= pc(15 downto 13) & ADD;
pc_rel <= pc_inc + ext(15 downto 0);
PCソースのMuxは
with PCSrc select
pc_din <= A when from_A,
pc_rel when from_pcrel,
pc_dir when from_pcdir,
pc_inc when from_pcinc,
(others=>'-') when others;
命令メモリ用に16x256のシングルポートROMを生成したLPMがあります
component mem
PORT(
address : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
clock : IN STD_LOGIC ;
q : OUT STD_LOGIC_VECTOR (15 DOWNTO 0)
);
end component;
PCレジスタポートマップは
pc_reg: reg Port map (clk=>clk, rst=>rst, D=>pc_din, Q=>PC, we=>ldPC);
ここで問題となるのは、pcが16ビットで、アドレスが8ビットであるため、memコンポーネントをどのようにポートマップできるかということです。
rom: mem port map(address=>???, clock=>clk, q=>instr_din);