⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tg32pci.vhd

📁 pci CORES 从外国网站上弄下来的
💻 VHD
📖 第 1 页 / 共 5 页
字号:
        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 + -