📄 tg32pci.vhd
字号:
IOmem(ioaddr)(15 downto 0) := AD_Bus(15 downto 0); elsif C_BE_Bus = "0010" then IOmem(ioaddr)(31 downto 16) := AD_Bus(31 downto 16); IOmem(ioaddr)(7 downto 0) := AD_Bus(7 downto 0); elsif C_BE_Bus = "1010" then IOmem(ioaddr)(23 downto 16) := AD_Bus(23 downto 16); IOmem(ioaddr)(7 downto 0) := AD_Bus(7 downto 0); elsif C_BE_Bus = "0110" then IOmem(ioaddr)(31 downto 24) := AD_Bus(31 downto 24); IOmem(ioaddr)(7 downto 0) := AD_Bus(7 downto 0); elsif C_BE_Bus = "1110" then IOmem(ioaddr)(7 downto 0) := AD_Bus(7 downto 0); elsif C_BE_Bus(0) = '1' then report "Target device: Byte Enable word not valid !" severity Error; end if; when "01" => if C_BE_Bus = "0001" then IOmem(ioaddr)(31 downto 8) := AD_Bus(31 downto 8); elsif C_BE_Bus = "1001" then IOmem(ioaddr)(23 downto 8) := AD_Bus(23 downto 8); elsif C_BE_Bus = "0101" then IOmem(ioaddr)(31 downto 24) := AD_Bus(31 downto 24); IOmem(ioaddr)(15 downto 8) := AD_Bus(15 downto 8); elsif C_BE_Bus = "1101" then IOmem(ioaddr)(15 downto 8) := AD_Bus(15 downto 8); elsif C_BE_Bus(1) = '1' then report "Target device: Byte Enable word not valid !" severity Error; end if; when "10" => if C_BE_Bus = "0011" then IOmem(ioaddr)(31 downto 16) := AD_Bus(31 downto 16); elsif C_BE_Bus = "1011" then IOmem(ioaddr)(23 downto 16) := AD_Bus(23 downto 16); elsif C_BE_Bus(2) = '1' then report "Target device: Byte Enable word not valid !" severity Error; end if; when "11" => if C_BE_Bus = "0111" then IOmem(ioaddr)(31 downto 24) := AD_Bus(31 downto 24); elsif C_BE_Bus(3) = '1' then report "Target device: Byte Enable word not valid !" severity Error; end if; when others => null; end case; ioaddr := ioaddr + 1; elsif MemWrite = '1' then -- Master writes to target memory space case addr(1 downto 0) is when "00" => -- linear incrementing mode if C_BE_Bus = "0000" then Mem(memaddr) := AD_Bus; elsif C_BE_Bus = "0001" then Mem(memaddr)(31 downto 8) := AD_Bus(31 downto 8); elsif C_BE_Bus = "0010" then Mem(memaddr)(31 downto 16) := AD_Bus(31 downto 16); Mem(memaddr)(7 downto 0) := AD_Bus(7 downto 0); elsif C_BE_Bus = "0011" then Mem(memaddr)(31 downto 16) := AD_Bus(31 downto 16); elsif C_BE_Bus = "0100" then Mem(memaddr)(31 downto 24) := AD_Bus(31 downto 24); Mem(memaddr)(15 downto 0) := AD_Bus(15 downto 0); elsif C_BE_Bus = "0101" then Mem(memaddr)(31 downto 24) := AD_Bus(31 downto 24); Mem(memaddr)(15 downto 8) := AD_Bus(15 downto 8); elsif C_BE_Bus = "0110" then Mem(memaddr)(31 downto 24) := AD_Bus(31 downto 24); Mem(memaddr)(7 downto 0) := AD_Bus(7 downto 0); elsif C_BE_Bus = "0111" then Mem(memaddr)(31 downto 24) := AD_Bus(31 downto 24); elsif C_BE_Bus = "1000" then Mem(memaddr)(23 downto 0) := AD_Bus(23 downto 0); elsif C_BE_Bus = "1001" then Mem(memaddr)(23 downto 8) := AD_Bus(23 downto 8); elsif C_BE_Bus = "1010" then Mem(memaddr)(23 downto 16) := AD_Bus(23 downto 16); Mem(memaddr)(7 downto 0) := AD_Bus(7 downto 0); elsif C_BE_Bus = "1011" then Mem(memaddr)(23 downto 16) := AD_Bus(23 downto 16); elsif C_BE_Bus = "1100" then Mem(memaddr)(15 downto 0) := AD_Bus(15 downto 0); elsif C_BE_Bus = "1101" then Mem(memaddr)(15 downto 8) := AD_Bus(15 downto 8); elsif C_BE_Bus = "1110" then Mem(memaddr)(7 downto 0) := AD_Bus(7 downto 0); elsif C_BE_Bus = "1111" then report "Target device: Byte Enable word not valid !" severity Error; end if; memaddr := memaddr + 1; when "01" => -- reserved mode (disconnect after first data phase) if C_BE_Bus = "0000" then Mem(memaddr) := AD_Bus; elsif C_BE_Bus = "0001" then Mem(memaddr)(31 downto 8) := AD_Bus(31 downto 8); elsif C_BE_Bus = "0010" then Mem(memaddr)(31 downto 16) := AD_Bus(31 downto 16); Mem(memaddr)(7 downto 0) := AD_Bus(7 downto 0); elsif C_BE_Bus = "0011" then Mem(memaddr)(31 downto 16) := AD_Bus(31 downto 16); elsif C_BE_Bus = "0100" then Mem(memaddr)(31 downto 24) := AD_Bus(31 downto 24); Mem(memaddr)(15 downto 0) := AD_Bus(15 downto 0); elsif C_BE_Bus = "0101" then Mem(memaddr)(31 downto 24) := AD_Bus(31 downto 24); Mem(memaddr)(15 downto 8) := AD_Bus(15 downto 8); elsif C_BE_Bus = "0110" then Mem(memaddr)(31 downto 24) := AD_Bus(31 downto 24); Mem(memaddr)(7 downto 0) := AD_Bus(7 downto 0); elsif C_BE_Bus = "0111" then Mem(memaddr)(31 downto 24) := AD_Bus(31 downto 24); elsif C_BE_Bus = "1000" then Mem(memaddr)(23 downto 0) := AD_Bus(23 downto 0); elsif C_BE_Bus = "1001" then Mem(memaddr)(23 downto 8) := AD_Bus(23 downto 8); elsif C_BE_Bus = "1010" then Mem(memaddr)(23 downto 16) := AD_Bus(23 downto 16); Mem(memaddr)(7 downto 0) := AD_Bus(7 downto 0); elsif C_BE_Bus = "1011" then Mem(memaddr)(23 downto 16) := AD_Bus(23 downto 16); elsif C_BE_Bus = "1100" then Mem(memaddr)(15 downto 0) := AD_Bus(15 downto 0); elsif C_BE_Bus = "1101" then Mem(memaddr)(15 downto 8) := AD_Bus(15 downto 8); elsif C_BE_Bus = "1110" then Mem(memaddr)(7 downto 0) := AD_Bus(7 downto 0); elsif C_BE_Bus = "1111" then report "Target device: Byte Enable word not valid !" severity Error; end if; when "10" => -- cacheline wrap mode if C_BE_Bus = "0000" then Mem(memaddr) := AD_Bus; elsif C_BE_Bus = "0001" then Mem(memaddr)(31 downto 8) := AD_Bus(31 downto 8); elsif C_BE_Bus = "0010" then Mem(memaddr)(31 downto 16) := AD_Bus(31 downto 16); Mem(memaddr)(7 downto 0) := AD_Bus(7 downto 0); elsif C_BE_Bus = "0011" then Mem(memaddr)(31 downto 16) := AD_Bus(31 downto 16); elsif C_BE_Bus = "0100" then Mem(memaddr)(31 downto 24) := AD_Bus(31 downto 24); Mem(memaddr)(15 downto 0) := AD_Bus(15 downto 0); elsif C_BE_Bus = "0101" then Mem(memaddr)(31 downto 24) := AD_Bus(31 downto 24); Mem(memaddr)(15 downto 8) := AD_Bus(15 downto 8); elsif C_BE_Bus = "0110" then Mem(memaddr)(31 downto 24) := AD_Bus(31 downto 24); Mem(memaddr)(7 downto 0) := AD_Bus(7 downto 0); elsif C_BE_Bus = "0111" then Mem(memaddr)(31 downto 24) := AD_Bus(31 downto 24); elsif C_BE_Bus = "1000" then Mem(memaddr)(23 downto 0) := AD_Bus(23 downto 0); elsif C_BE_Bus = "1001" then Mem(memaddr)(23 downto 8) := AD_Bus(23 downto 8); elsif C_BE_Bus = "1010" then Mem(memaddr)(23 downto 16) := AD_Bus(23 downto 16); Mem(memaddr)(7 downto 0) := AD_Bus(7 downto 0); elsif C_BE_Bus = "1011" then Mem(memaddr)(23 downto 16) := AD_Bus(23 downto 16); elsif C_BE_Bus = "1100" then Mem(memaddr)(15 downto 0) := AD_Bus(15 downto 0); elsif C_BE_Bus = "1101" then Mem(memaddr)(15 downto 8) := AD_Bus(15 downto 8); elsif C_BE_Bus = "1110" then Mem(memaddr)(7 downto 0) := AD_Bus(7 downto 0); elsif C_BE_Bus = "1111" then report "Target device: Byte Enable word not valid !" severity Error; end if; memaddr := memaddr + 1; when "11" => -- reserved mode (disconnect after first data phase) if C_BE_Bus = "0000" then Mem(memaddr) := AD_Bus; elsif C_BE_Bus = "0001" then Mem(memaddr)(31 downto 8) := AD_Bus(31 downto 8); elsif C_BE_Bus = "0010" then Mem(memaddr)(31 downto 16) := AD_Bus(31 downto 16); Mem(memaddr)(7 downto 0) := AD_Bus(7 downto 0); elsif C_BE_Bus = "0011" then Mem(memaddr)(31 downto 16) := AD_Bus(31 downto 16); elsif C_BE_Bus = "0100" then Mem(memaddr)(31 downto 24) := AD_Bus(31 downto 24); Mem(memaddr)(15 downto 0) := AD_Bus(15 downto 0); elsif C_BE_Bus = "0101" then Mem(memaddr)(31 downto 24) := AD_Bus(31 downto 24); Mem(memaddr)(15 downto 8) := AD_Bus(15 downto 8); elsif C_BE_Bus = "0110" then Mem(memaddr)(31 downto 24) := AD_Bus(31 downto 24); Mem(memaddr)(7 downto 0) := AD_Bus(7 downto 0); elsif C_BE_Bus = "0111" then Mem(memaddr)(31 downto 24) := AD_Bus(31 downto 24); elsif C_BE_Bus = "1000" then Mem(memaddr)(23 downto 0) := AD_Bus(23 downto 0); elsif C_BE_Bus = "1001" then Mem(memaddr)(23 downto 8) := AD_Bus(23 downto 8); elsif C_BE_Bus = "1010" then Mem(memaddr)(23 downto 16) := AD_Bus(23 downto 16); Mem(memaddr)(7 downto 0) := AD_Bus(7 downto 0); elsif C_BE_Bus = "1011" then Mem(memaddr)(23 downto 16) := AD_Bus(23 downto 16); elsif C_BE_Bus = "1100" then Mem(memaddr)(15 downto 0) := AD_Bus(15 downto 0); elsif C_BE_Bus = "1101" then Mem(memaddr)(15 downto 8) := AD_Bus(15 downto 8); elsif C_BE_Bus = "1110" then Mem(memaddr)(7 downto 0) := AD_Bus(7 downto 0); elsif C_BE_Bus = "1111" then report "Target device: Byte Enable word not valid !" severity Error; end if; when others => null; end case; elsif CfgWrite = '1' then -- Master writes to target configuration space if C_BE_Bus = "0000" then Cfgmem(cfgaddr) := AD_Bus; elsif C_BE_Bus = "0001" then Cfgmem(cfgaddr)(31 downto 8) := AD_Bus(31 downto 8); elsif C_BE_Bus = "0010" then Cfgmem(cfgaddr)(31 downto 16) := AD_Bus(31 downto 16); Cfgmem(cfgaddr)(7 downto 0) := AD_Bus(7 downto 0); elsif C_BE_Bus = "0011" then Cfgmem(cfgaddr)(31 downto 16) := AD_Bus(31 downto 16); elsif C_BE_Bus = "0100" then Cfgmem(cfgaddr)(31 downto 24) := AD_Bus(31 downto 24); Cfgmem(cfgaddr)(15 downto 0) := AD_Bus(15 downto 0); elsif C_BE_Bus = "0101" then Cfgmem(cfgaddr)(31 downto 24) := AD_Bus(31 downto 24); Cfgmem(cfgaddr)(15 downto 8) := AD_Bus(15 downto 8); elsif C_BE_Bus = "0110" then Cfgmem(cfgaddr)(31 downto 24) := AD_Bus(31 downto 24); Cfgmem(cfgaddr)(7 downto 0) := AD_Bus(7 downto 0); elsif C_BE_Bus = "0111" then Cfgmem(cfgaddr)(31 downto 24) := AD_Bus(31 downto 24); elsif C_BE_Bus = "1000" then Cfgmem(cfgaddr)(23 downto 0) := AD_Bus(23 downto 0); elsif C_BE_Bus = "1001" then Cfgmem(cfgaddr)(23 downto 8) := AD_Bus(23 downto 8);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -