VHDL实现PCI配置寄存器
时间:10-02
整理:3721RD
点击:
PCI的配置寄存器的首部格式为64个双字,用AD[7..2]寻址它们时地址是什么样的,是线性递增1,还是线性递增4?我是这样写的:
WHEN"000000"=>
SFG_DATA<="00011000011000000001000010110101";
WHEN"000001"=>
SFG_DATA<="00000000000001000000010000000000";
WHEN"000010"=>
SFG_DATA<="00010001100000000000000000000000";
WHEN"000011"=>
SFG_DATA<="00000000000000000000000000000000";
WHEN"000000"=>
SFG_DATA<="00011000011000000001000010110101";
WHEN"000001"=>
SFG_DATA<="00000000000001000000010000000000";
WHEN"000010"=>
SFG_DATA<="00010001100000000000000000000000";
WHEN"000011"=>
SFG_DATA<="00000000000000000000000000000000";
VHDL实现PCI配置寄存器
你这不是线性递增四么?
VHDL实现PCI配置寄存器
你需要正确理解寻址的概念。
你可以这样理解,寻址的基本单位是字节,例如:地址线是A[7:0],则0x00、0x01、0x02...都是对应各个字节。如果要以DWORD(4个字节)为单位寻址,则需使用地址线A[7:2],A[1:0]用于选择DWORD内的各个字节。
关于更加准确的解释,你可以随便参考一本有关计算机的教材。
VHDL实现PCI配置寄存器
原来是这样的啊
VHDL实现PCI配置寄存器
我是以DWORD(4个字节)为单位寻址的,用的是AD[7..2],但是在配置空间读写时,设备的IDSEL引脚有效,且AD[1..0]=00时,该设备被选为配置读写的目标,AD[7..2]用于寻址64个双字配置寄存器的头部空间。在配置空间读写时AD[1..0]只能是00吧?
VHDL实现PCI配置寄存器
是啊!而且如果是“类型0”的配置周期AD[10:8]也是000