El CPLD solo reemplaza la lógica combinacional y secuencial tal como dice SpaceInvader, y aun así sigue siendo un proyecto 100% de fierros, lo único que cambia es que en vez de hacer conexiones en la placa entre componentes discretos, haces ese ruteo con las primitivas que te ofrece internamente el CPLD.
El CPLD (y los FPGAs) son programables de cualquier forma que puedas describir un sistema digital, y representar funciones booleanas, es decir con esquemáticos entre compuertas, de manera algebraica, etc.
La teoría de sistemas digitales que se enseña ahora no ha variado en las ultimas décadas, solo ha variado la forma en que puedes implementarla.
Es todo un mundo, y su curva de aprendizaje es muy empinada, antiguamente se usaba mucho esquemáticos y lenguajes como
ABEL o CUPL (que utilizan álgebra booleana, tablas de verdad, etc), que para un proyecto como este cart funciona muy bien, pero para diseños gigantes como una CPU, Codec, GPU, etc., no te servirá en la practica.
En la actualidad los dos lenguajes estándares de descripción de hardware, que te permiten expresar diseños de forma mas productiva son
VHDL y
Verilog, han estado allí por mucho tiempo y es necesario aprender al menos uno ellos para entender bien como funciona el diseño de sistemas digitales de gran tamaño.
En la actualidad se buscan alternativas aun mas productivas para describir propiedad intelectual, de los candidatos que tienen un futuro prometedor está Chisel (basado en Scala) y Migen (basado en Python), y no es que utilices código Scala o Python que será usado "en el chip", si no que lo usas para "expresar un esquemático complejo".
Respecto a este cart, es 100% equivalente al cart de Turbosoftware (y no al Atarimax como dice el autor), aquí está su definición
Código: Seleccionar todo
-- Engineer: Robin Edwards
-- Create Date: 09:31:23 02/22/2015
-- atarimax 8-mbit banking scheme
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity BankSwitch is
port (
CCTL, CLK : in std_logic; -- cartridge 'CCTL, PHI2
ADDR_IN : in std_logic_vector (7 downto 0); -- low 8 address lines of cartridge bus
BANK_OUT : out std_logic_vector (5 downto 0); -- to high EEPROM address bits
RD5 : out std_logic -- cart enable
);
end BankSwitch;
architecture Behavioral of BankSwitch is
signal cart_disabled : std_logic;
begin
RD5 <= NOT cart_disabled;
process (CLK)
begin
if (rising_edge(CLK)) then
if (CCTL = '0') then
if (ADDR_IN(7) = '1') then
cart_disabled <= '1';
BANK_OUT <= "000000";
else
cart_disabled <= '0';
BANK_OUT <= ADDR_IN(5 downto 0);
end if;
end if;
end if;
end process;
end Behavioral;