Coolrunner2 GSR Global Set / Reset

0

Por lo tanto, los CPLD de Coolrunner2 tienen una función llamada GSR o "Global Set / Reset". En las documentaciones encontré muchas referencias, pero no hay un capítulo que me diga cómo funciona exactamente el GSR y más importante: cómo usarlo.

También encontrar ejemplos en la red en el lenguaje VHDL no fue fructífero.

Ahora me gustaría agregar una funcionalidad de restablecimiento a mi diseño que me permita configurar los flip-flops en el mismo estado en que se encuentran justo después de encender el CPLD. GSR parece hacer exactamente esto.

¿Alguien puede arrojar algo de luz sobre cómo usar esta característica de un proyecto VHDL?

    
pregunta Nils Pipenbrinck

1 respuesta

1

Como dice Nick Johnson, la cadena de herramientas debería utilizar automáticamente las redes de configuración / reinicio global si cree que es óptimo hacerlo. Todo lo que tiene que hacer es usar una sola señal como un reinicio asíncrono en toda su lógica.

Sin embargo, si por alguna razón desea o necesita usar las redes GSR directamente, es posible:

En los dispositivos CoolRunner-II, el pin GSR es un pin de entrada específico. Mire la hoja de datos de la pieza específica (disponible en Sitio web de Xilinx ) para encontrar el pin. Aún debe declarar una señal de nivel superior que representará la conexión al pin GSR.

Luego puede crear una instancia del módulo primitivo Xilinx BUFGSR para usar explícitamente la entrada a través del búfer de entrada GSR especial. La documentación de esto se encuentra en Xilinx UG606 - CPLD Libraries Guide , página 82.

Aquí hay un ejemplo mínimo usando el RSG directamente:

library ieee;
use ieee.std_logic_1164.ALL;

library UNISIM;
use UNISIM.VComponents.all;  --BUFGSR and other primitives are defined in the Xilinx VComponents library

entity gsr_test is
    port ( CLK : in std_logic;
           Reset : in std_logic;
           Inp : in std_logic_vector (3 downto 0);
           Outp : out std_logic_vector (3 downto 0)
          );
end gsr_test;

architecture Behavioral of gsr_test is

signal s_gsr : std_logic;  --signal which will represent GSR internally

begin

--instansiate a BUFGSR to get direct access to the GSR net
i_bufgsr : BUFGSR
    port map ( I => Reset,  --signal/port which supplies the GSR net (this will need to be connected to the GSR pin on the device
               O => s_gsr  --bring the internal signal out
              );

pass_through : process (CLK, s_gsr)
begin
    if (s_gsr = '1') then
        Outp <= "1010";  --when GSR is high set to specific value
    elsif rising_edge(CLK) then
        Outp <= Inp;  --otherwise pass out the value of Inp
    end if;     
end process pass_through;   

end Behavioral;

Esto genera una lógica simple con flip-flops para cada elemento de la señal Outp con sus entradas PRE o CLR conectadas a la red GSR.

Aquí hay un esquema de tecnología de la lógica resultante:

    
respondido por el Xcodo

Lea otras preguntas en las etiquetas