📄 tg32pci.vhd
字号:
elsif IOWrite = '1' then
-- Master writes to target I/O space
case addr(1 downto 0) is
when "00" =>
if C_BE_Bus = "0000" then
IOmem(ioaddr) := AD_Bus;
elsif C_BE_Bus = "1000" then
IOmem(ioaddr)(23 downto 0) := AD_Bus(23 downto 0);
elsif C_BE_Bus = "0100" then
IOmem(ioaddr)(31 downto 24) := AD_Bus(31 downto 24);
IOmem(ioaddr)(15 downto 0) := AD_Bus(15 downto 0);
elsif C_BE_Bus = "1100" then
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);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -