2012-12-29 21 views
0

作业设计的RISC处理器。我有这样端口映射作为指令存储器

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信号源16位PC是

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; 

我有LPM由256单端口ROM用于指令存储器

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寄存器端口映射生成16是

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); 

回答

0

,这是正常的可用存储器为比存储空间内的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); 

和你做。

+0

它帮助。谢谢 – kajay