Memory 在内存地址解码中,我们可以从内存地址37124H开始吗?
在8086/8088微处理器的内存地址解码中,我们可以从内存地址37124H开始吗 以下是32k存储器的解码地址示例,其中起始地址为30000H,最后一个地址为37FFFH: 我认为我们不能这样做,因为起始地址的地址位必须是零,最后一个地址的地址位必须是1,而当起始地址是37124H时,这是不能做到的Memory 在内存地址解码中,我们可以从内存地址37124H开始吗?,memory,decoding,x86-16,Memory,Decoding,X86 16,在8086/8088微处理器的内存地址解码中,我们可以从内存地址37124H开始吗 以下是32k存储器的解码地址示例,其中起始地址为30000H,最后一个地址为37FFFH: 我认为我们不能这样做,因为起始地址的地址位必须是零,最后一个地址的地址位必须是1,而当起始地址是37124H时,这是不能做到的 是这样吗?有更好的答案吗?你做不到。。。只需要一个简单的解码器。对地址范围的要求是不改变部分的形式,然后是改变部分,改变0和1的所有可能组合只是为了简化电路:将内存的地址线连接到改变的位,将内存
是这样吗?有更好的答案吗?你做不到。。。只需要一个简单的解码器。对地址范围的要求是不改变部分的形式,然后是改变部分,改变0和1的所有可能组合只是为了简化电路:将内存的地址线连接到改变的位,将内存中的
CS
行发送到解码器,解码器检测未更改的部分是否出现在相应的地址行中
但实际上,您可以构建一个电路,使得从您喜欢的任何地址开始映射一些内存成为可能(考虑到处理器的粒度)。假设您要在地址37124h
和3F123h
之间寻址内存32KB
:
您必须构建一个幅度比较电路,用于检测8088/8086
处理器的20位地址线是否位于这两个地址之间,从而启用内存中的CS
线
此外,您需要一个减法电路,该电路采用20位地址并从中减去数字317124h
,因此,在该减法器的输出处,当且仅当启用了CS
时,将有一个地址在00000h
到07FFFh
的范围内。此减法器的输出将转到内存的地址行
以下Verilog模块描述了此类设备:
module decoder (input [19:0] busaddr, /* addr from CPU */
output [15:0] memaddr, /* addr to memory */
output cs_n); /* active low CS to memory */
assign cs_n = (busaddr >= 20'h317124 && busaddr <= 20'h3F123)? 1'b0 : 1'b1;
assign memaddr = busaddr - 20'h317124h;
endmodule
模块解码器(输入[19:0]总线地址,/*来自CPU的地址*/
输出[15:0]memaddr,/*添加到内存*/
输出cs_n);/*主动低CS至存储器*/
分配cs_n=(busaddr>=20'h317124&&busaddr