Vhdl PC和ROM之间的端口映射作为指令存储器

Vhdl PC和ROM之间的端口映射作为指令存储器,vhdl,Vhdl,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寄存器端口映射为 pc_reg: reg Port map

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寄存器端口映射为

pc_reg: reg Port map (clk=>clk, rst=>rst, D=>pc_din, Q=>PC, we=>ldPC);
现在的问题是如何映射mem组件,因为pc是16位的,地址是8位的

rom: mem port map(address=>???, clock=>clk, q=>instr_din);

可用内存小于CPU可以访问的内存空间是正常的

这只意味着您需要为处理器设计一个内存映射,并实现它。是否存在任何已知的限制条件以提供帮助

例如,一些处理器在重置时将PC设置为16#FFFE#,其他处理器设置为0。这意味着您需要在内存空间的顶部或底部有一页程序内存

还需要考虑该PC是字节地址还是字地址;以及(如果它是字节地址)它是否会是奇数(在这种情况下,您需要支持未对齐的地址)。既然您说它是RISC CPU,我就假设您不需要支持未对齐的地址,但这应该在某个地方指定

如果它是字节寻址的,您需要将字节地址转换为正确的字地址,只支持ROM对齐访问,这很容易;放下LSB

当您设计了内存映射后,您可以设计一个解码器,仅当高阶地址位是正确的值时才选择程序ROM。有时可以通过将ROM映射到多个地址(将某些地址位视为无关紧要)来简化此解码,但这并不总是一个好主意,因为这可能会导致以后扩展内存时出现问题

因此,假设字节寻址,仅对齐访问,并且您知道内存映射是什么样子的:

ROM_Address <= PC(8 downto 1);
ROM_Enable  <= some expression involving PC(15 downto 9);
ROM\u地址
rom: mem port map(address=>???, clock=>clk, q=>instr_din);
ROM_Address <= PC(8 downto 1);
ROM_Enable  <= some expression involving PC(15 downto 9);