Aprender CPLD desde cero [cerrado]

-3

a) ¿Debo aprender VHDL o Verilog? ¿Uno sobresale en alguna área mientras que el otro se ajusta mejor a otra área?

Para una "lógica de pegamento" simple, dice, de 5 a 30 chips TTL equivalentes, ¿cuál es mejor?

b) El primer ejercicio de aprendizaje es implementar un contador de cronómetro. Un pin de E / S para comenzar a contar. Un pin para parar. Un pin para despejar. Igual que MCU TIMER CAPTURE, pero mayor frecuencia de conteo. Fuente de ejemplo del programa apreciado.

c) El segundo ejercicio es el contador de CARGA PARALELO en el registro de desplazamiento. Envíe los datos a la MCU, usando los pines RELOJ y DATOS de control de software (o el SPI del hardware de la MCU), para reducir el pin como en paralelo. Ejemplo apreciado.

d) Altera WIZARD puede crear un contador parametrizado. ¿WIZARD será mejor que VHDL / Verilog para obtener la frecuencia de conteo más alta posible de 200MHz a 350MHz? ¿La PLANIFICACIÓN DEL PISO es fácil de aprender? ¿Se adaptará mejor a Wizard / VHDL la PLANIFICACIÓN DEL PISO?

e) Intento comprar la placa de desarrollo Altera EPM570. ¿Es adecuado para la aplicación anterior?

f) ¿Qué marca / modelo de consumo / industrial de IC (CPLD o FPGA) tiene la frecuencia de conteo más alta (200 a 600MHz) para contadores simples con START, STOP, CLEAR?

    
pregunta EEd

2 respuestas

6

(a) Mi propia preferencia es (fuertemente) para VHDL; de muchas maneras, con VHDL, usted sabe dónde se encuentra, más exactamente, que en Verilog. Describí algunas de estas formas en esta respuesta y otra respuesta allí dio this enlace útil.

Se dice que VHDL es más detallado, pero creo que sus características de HLL me permiten crear hardware a un nivel superior, y eso compensa la verbosidad y hace que mis diseños sean más pequeños y fáciles de entender.

Dicho esto, si C es su lenguaje de software favorito, es posible que prefiera Verilog, y cualquiera de los dos idiomas sin duda se encargará de su tarea. Así que todo se reduce a la preferencia.

De cualquier manera, aprenda el simulador y adquiera el hábito de escribir un banco de pruebas de autocomprobación junto con sus unidades de diseño. El progreso puede parecer inicialmente un poco más lento, pero definitivamente más suave.

(b) Ejemplo de contador ...

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
USE ieee.numeric_std.ALL;

entity count is
    Port ( clk   : in  STD_LOGIC;
            -- reset : in  STD_LOGIC;
           start : in  STD_LOGIC;
           stop  : in  STD_LOGIC;
           clear : in  STD_LOGIC;
           data  : out UNSIGNED (7 downto 0));
end count;

architecture Behavioral of count is

type State_Type is (Idle, Run);

begin

Counter : process(Clk) is
variable Count : UNSIGNED (7 downto 0);
variable State : State_Type := Idle;
begin
   if rising_edge(Clk) then
       -- if reset = '1' then ... setup power-up state here
       if clear = '1' then
           Count := (others => '0');
       elsif State = Run then 
           Count := Count + 1;
       end if;
       if start = '1' then
           State := Run;    -- variable assignment
       elsif stop = '1' then
           State := Idle;
       end if;         
       data <= Count;   -- signal assignment
    end if;
end process Counter;

end Behavioral;

Y un banco de pruebas. Tenga en cuenta que verifica las salidas y los informes de errores, en lugar de dejar que mire fijamente las formas de onda. Eso es lo que quise decir con autocontrol. Para ser aún más estricto, podría establecer el fallo de gravedad y abortarlo en el primer error que encuentre.

  LIBRARY ieee;
  USE ieee.std_logic_1164.ALL;
  USE ieee.numeric_std.ALL;

  ENTITY test IS
  END test;

  ARCHITECTURE behavior OF test IS 
  signal testclk  : STD_LOGIC := '1';
  signal start    : STD_LOGIC := '0';
  signal stop     : STD_LOGIC := '0';
  signal clear    : STD_LOGIC := '0';
  signal test_out : UNSIGNED (7 downto 0);

  constant Tcy : time := 10 ns;

  BEGIN

  UUT : entity work.count
    Port map ( clk => testclk,
             start => start,
             stop  => stop,
             clear => clear,
             data  => test_out );

  --  Test Bench Statements

  testclk <= not testclk after Tcy/2 ;  -- 100MHz

     tb : PROCESS
     BEGIN
        wait for Tcy/2; 
        clear <= '1';
        stop  <= '1';
        wait for Tcy; 
        clear <= '0';
        stop  <= '0';         
        -- check counter is stopped and clear
        wait for Tcy;
        assert test_out = 0 report "Counter is not clear" severity error;
        wait for 5*Tcy;           
        assert test_out = 0 report "Counter is not stopped" severity error;
        start  <= '1';
        wait for Tcy; 
        start  <= '0';  
        -- check counter can count!  
        wait for 5 * Tcy;         
        assert test_out = 5 report "Counter is not counting correctly" severity error;
        report "Counter has counted to " 
                  & natural'image(to_integer(test_out)) severity note;
        wait for 5 * Tcy;   
        report "Tests complete : not a failure!" severity failure;
     END PROCESS tb;
  END;

(c) dejado como ejercicio ...

(d) Para cosas simples como contadores, mi opinión es que la IP del proveedor es solo una buena manera de encerrarlo en un proveedor. Straight VHDL se puede sintetizar de manera muy eficiente y compilar para cualquier proveedor. Cuando llegas a los controladores de memoria DDR2 y las CPU, es un asunto diferente.

d2) Floorplanning puede comprarle un 30% más de velocidad si está dispuesto a tomarse el tiempo para aprender y jugar con el diseño del lugar. Mi experiencia aquí es Xilinx; para Altera, YMMV.

e) ¿Qué tal un enlace a la pizarra para que podamos comentar?

f) Última generación. Si la velocidad simple importa, elija el Virtex-6 más pequeño (costoso) sobre un Spartan-6 grande (barato), aunque supongo que incluso el S6 puede contar a más de 300 MHz. No puedo comentar sobre los productos de Altera.

    
respondido por el Brian Drummond
2

También soy un aprendiz de CPLD reciente desde cero. Elegí la tablero de desarrollo Digilent Xilinx Coolrunner II .

LasrazonesporlasqueloelegífueronqueXilinxesunabuenamarca,fueelprimerCPLDdelqueescuché,elprimeroenelqueleí,elprecioeraelcorrecto,ylaplacadedesarrollotienetodaslasfuncionesparaquepuedacomenzarAprendizajeynocableado.TambiénmesorprendióquelasCPLDpequeñasdeXilinxcostaranaproximadamente$1cadauna.Porsupuesto,soldarestosresultasermásdesafiante;-)

LaplacadedesarrolloquesemuestraenlafotoincluyeunCPLDbastantegrande,256macrocélulas.Estoserábuenoporquelepermitiráexperimentarsinobtenererroresdeajuste.Sipretendeproducirunproducto,puedeobtener 64 tableros de ruptura de macroceldas en Prototipos peligrosos por $ 15 cada uno. Incluyen un botón y un LED o dos, por lo que podría ser una pequeña placa de desarrollo. Sin embargo, lo más importante es que incluye un encabezado JTAG para que la programación sea fácil.

He encajado mi proyecto en 64 macrocélulas, pero todavía no lo he cargado en la placa DP; Necesito más cosas antes de poder hacer eso, así que estad atentos.

Los productos Xilinx son supuestos por el entorno de desarrollo ISE. Es bastante fácil de usar y básicamente 'compila' el Verilog (o VHDL) en un binario que puede cargarse en el CPLD o FPGA (Xilinx) de su elección.

No sé las diferencias entre los productos Xilinx y Altera. Mi proyecto es pequeño. Si fueran chips discretos de la vieja escuela, incluiría un contador de 12 bits, una pequeña memoria EPROM, unas cuantas chanclas, dos codificadores de 8 a 3 y un puñado de compuertas AND y OR. Era todo lo que podía hacer para que encajara en una huella macrocelular de 64. De hecho, tuve que aplicar la fuerza bruta usando una opción de compilación. ¡Gracias a Dios que esa característica existe!

Aprendí Verilog. Desde la perspectiva de mi principiante, fue una buena elección. Soy un programador de oficio, por lo que no estoy intimidado por Verilog o VHDL. Todo es lo mismo para mí. Ignoro que cualquiera de los dos es superior, solo que son diferentes.

A juzgar por lo poco que he aprendido, será difícil alcanzar los 200-600MHz que deseas. De acuerdo con el software de instalación / síntesis ISE de Xilinx, la velocidad máxima de reloj en mi diseño es de 25 MHz. Creo que es pesimista, pero sigue siendo un clip bastante bueno. 100MHz es aproximadamente el máximo para el CPLD que estoy usando.

    
respondido por el Tony Ennis

Lea otras preguntas en las etiquetas