Memory 在内存地址解码中,我们可以从内存地址37124H开始吗?

Memory 在内存地址解码中,我们可以从内存地址37124H开始吗?,memory,decoding,x86-16,Memory,Decoding,X86 16,在8086/8088微处理器的内存地址解码中,我们可以从内存地址37124H开始吗 以下是32k存储器的解码地址示例,其中起始地址为30000H,最后一个地址为37FFFH: 我认为我们不能这样做,因为起始地址的地址位必须是零,最后一个地址的地址位必须是1,而当起始地址是37124H时,这是不能做到的 是这样吗?有更好的答案吗?你做不到。。。只需要一个简单的解码器。对地址范围的要求是不改变部分的形式,然后是改变部分,改变0和1的所有可能组合只是为了简化电路:将内存的地址线连接到改变的位,将内存

8086/8088微处理器的内存地址解码中,我们可以从内存地址37124H开始吗

以下是32k存储器的解码地址示例,其中起始地址为30000H,最后一个地址为37FFFH:

我认为我们不能这样做,因为起始地址的地址位必须是零,最后一个地址的地址位必须是1,而当起始地址是37124H时,这是不能做到的


是这样吗?有更好的答案吗?

你做不到。。。只需要一个简单的解码器。对地址范围的要求是不改变部分的形式,然后是改变部分,改变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