CPLD: mi primer proyecto

Primero, publiqué una pregunta similar en el foro de usuarios de CPLD/FPGA, sin embargo, no parecen ser tan activos como StackExchange. Por lo tanto, espero que me ayude a ponerme en marcha con los CPLD y que también sea información útil para otros principiantes.

Después de investigar un poco, me convencí de centrarme en los CPLD de Xilinx porque, en opinión de algunas personas, parece ser más amigable para los estudiantes y el proveedor ofrece software gratuito. No tengo una placa de desarrollo o el chip, solo trato de simular primero antes de comprar. Entonces, después de descargar el software ISE WebPack , comencé mi primer tutorial . Me quedé atascado en el paso 5 "Implementación de un nuevo diseño de nivel superior". No "encaja" en el diseño:

ingrese la descripción de la imagen aquí

El registro me da la respuesta a mi error, pero realmente no sé qué hacer a continuación. Aunque seguí todos los pasos del tutorial, probablemente hay algo que me estoy perdiendo. Intenté Floor Plan IO y asigné pines IO, pero no funcionó. ¿Algunas ideas? ¿Algún otro buen tutorial para principiantes absolutos?

Aquí está el guión:

ingrese la descripción de la imagen aquí

Las primeras advertencias aparecieron durante la síntesis y sospecho que tienen la clave.
Puede publicar el código para obtener más consejos detallados, pero el mensaje de error le dice mucho: no parece tener ningún puerto de salida, por lo que, en última instancia, no hay un diseño que el instalador pueda colocar.
@fru1tbat ¿Qué debo hacer para hacer un diseño? El tutorial no prevé eso.

Respuestas (2)

No hay nada en la arquitectura de su diseño, por lo que se sintetiza sin puertas. Sin puertas, no hay nada que conectar a las señales de salida, por lo que las señales de salida se eliminan. Asimismo, las señales de entrada se eliminan porque no se conectan a nada. Por lo tanto, no había pasadores ni puertas que encajaran en el diseño. Estoy bastante seguro de que las advertencias del paso de síntesis le habrían dicho esto.

Sí, tiene usted razón. Pero, ¿qué tengo que hacer para crear arquitectura? ¿Conoce algún buen tutorial sobre CPLD que me guíe a través de todos los pasos necesarios, comenzando con la creación de un proyecto y terminando con la simulación? Simplemente no puedo entender qué paso se salta en el tutorial al que hice referencia en mi pregunta. Al parecer este paso no me deja avanzar.
Debe escribir el código VHDL que describe el comportamiento que desea del hardware. Si no sabe cómo hacerlo, debería alejarse un poco de las herramientas de diseño y aprender sobre VHDL.
¿No deberían permanecer los pines estén o no conectados a alguna lógica, ya que las opciones configuradas en un pin pueden afectar su comportamiento eléctrico [por ejemplo, si hay bus-keepers, etc.]? Si bien la mayoría de las opciones de configuración afectan el comportamiento eléctrico, no esperaría que la lógica de síntesis distinga las que sí lo hacen de las que no.
Las herramientas de síntesis intentan optimizar su diseño a menos que explícitamente les impida hacerlo. La optimización incluye eliminar cualquier lógica o pines que no tengan efecto en la función del diseño. Si no hay señal que vaya a un pin de salida, entonces el sintetizador no tiene idea de qué hacer con esa señal. ¿Qué diferencia hace el comportamiento eléctrico si el valor lógico no está definido?
Sí, leer este libro desde la primera página hasta la última página ayudó a resolver el problema.

El proyecto de ejemplo debe contener el código correcto.

Esta página indica abrir el proyecto jc2_abl. Esto se encuentra navegando a su directorio ISEExamples en su instalación de ISE (lo que le sugieren que haga, que se encuentra en <Install Dir>/14.5/ISE_DS/ISE/ISEexamples), o por File -> Open Example.

Mi instalación particular de ISE no tenía jc2_abl como ejemplo, pero tenía jc2_vhd, que contiene el código vhd para el ejemplo, copiado aquí:

library IEEE;
use IEEE.std_logic_1164.all;            -- defines std_logic types

entity jc2_top is
  port (
    left  : in  std_logic;                     -- Active-low switch #3 (left)
    right : in  std_logic;                     -- Active-low switch #0 (right)
    STOP  : in  std_logic;                     -- Active-low switch #2
    CLK   : in  std_logic;
    Q     : out std_logic_vector (3 downto 0)  -- Active-low LEDs
    );
--To pass pin location constraints from this HDL source file rather than 
--through a User Constraints Format (UCF) file, uncomment the six attribute 
--declarations below and remove jc2_top.ucf from the project.
--    attribute pin_assign : string;
--    attribute pin_assign of clk : signal is "A7";
--    attribute pin_assign of left : signal is "G7";
--    attribute pin_assign of right : signal is "B2";
--    attribute pin_assign of stop : signal is "F2";
--    attribute pin_assign of q : signal is "G5 F6 C6 B4";
end jc2_top;

architecture jc2_top_arch of jc2_top is
  signal DIR   : std_logic                     := '0';     -- Left=1, Right=0
  signal RUN   : std_logic                     := '0';
  signal Q_int : std_logic_vector (3 downto 0) := "0000";  -- Internal signal driving Q output; Active-low LEDs
begin

  process (CLK, right, left, STOP, RUN, DIR, Q_int)
  begin
    if (CLK'event and CLK = '1') then   -- CLK rising edge
      -- DIR register:
      if (right = '0') then
        DIR <= '0';
      elsif (left = '0') then
        DIR <= '1';
      end if;

      -- RUN register:
      if (STOP = '0') then
        RUN <= '0';
      elsif (left = '0' or right = '0') then
        RUN <= '1';
      end if;

      -- Counter section:
      if (RUN = '1') then
        if (DIR = '1') then
          Q_int(3 downto 1) <= Q_int(2 downto 0);  -- Shift lower bits (Left Shift)
          Q_int(0)          <= not Q_int(3);  -- Circulate inverted MSB to LSB
        else
          Q_int(2 downto 0) <= Q_int(3 downto 1);  -- Shift upper bits (Right Shift)
          Q_int(3)          <= not Q_int(0);  -- Circulate inverted LSB to MSB
        end if;
      end if;

    end if;
    Q <= Q_int;
  end process;

end jc2_top_arch;