UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

AR# 3543

LogiCORE PCI - Can an I/O Base Address Register be set to greater than 256 bytes on an x86 processor?

Description

General Description:

Why can't an I/O Base Address Register be set to greater than 256 bytes on an x86 processor?

Solution

No, an I/O Base Address Register should never be set to greater than 256 bytes on an Intel x86 system.

Early Intel x86 microprocessors only supported 64K I/O address space. However, early IBM PCs used the first ten bits (SA<0-9>), thus limiting the maximum range of the I/O addresses to 1K. The upper 6 lines (SA<10-15>) were not decoded and were treated as DON'T CARE bits. The ultimate effect of this is the 1K space is "aliased", or repeated, 64 times.

The first 256 bytes of this 1K were used by the PC, leaving 768 bytes for ISA cards that decode the 10 bits only. When the full 16 bits were decoded on later machines, such as the XT, 16-bit PC cards could not use the initial 768 bytes or any of its 63 other aliases, as any 10-bit card would be sitting in all 64 spaces. The only solution was to use one of the 63 256 byte aliases. Therefore, to prevent I/O space conflicts, only the first 256 byte range of each 1K of I/O space is available.

AR# 3543
Date Created 08/21/2007
Last Updated 12/15/2012
Status Active
Type General Article