Diseño de la cadena de transporte en el ciclón IV

1

Estoy intentando implementar la cadena de transporte con Cyclone IV FPGA. Usaré la cadena de acarreo como línea de retardo, de modo que aquí hay una explicación rápida de mi programa: cuando la señal de entrada "cin" pasa a nivel alto, la señal comienza a propagarse a través de la cadena y en el momento en que se produce la PARADA, los registros muestrean la propagación. Para hacerlo, todo lo que se necesita es configurar todos los bits del primer operando (entrada a) en "1" y los bits del segundo operando en "0" (entrada b). El código que me funciona bien es:

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity SignedCounter2 is

    generic (

    DATA_WIDTH : natural := 10

               );

    port (

             cout   :out std_logic;
             izlaz: buffer signed ((DATA_WIDTH-1) downto 0);
             a: in signed ((DATA_WIDTH-1) downto 0) ;
             b: in signed ((DATA_WIDTH-1) downto 0) ;
             clk1: in std_logic;
             clk2: in std_logic;
             cin: in std_logic

          );

          end SignedCounter2;

architecture rtl of SignedCounter2 is

SIGNAL reg: signed ((DATA_WIDTH-1) downto 0);
SIGNAL buf: signed ((DATA_WIDTH-1) downto 0);
SIGNAL STOP: std_logic;

begin


STOP<=clk1 and clk2;

process (cin,clk1,STOP)
    variable s : signed ((DATA_WIDTH) downto 0);
    begin
    s := ('0' & a) + ('0' & b) + ('0' & cin);
    buf<=s((DATA_WIDTH-1) downto 0);
    cout <= s(DATA_WIDTH);

    if (rising_edge(STOP)) then
        izlaz<=buf((DATA_WIDTH-1) downto 0);
    end if;

    end process;


end rtl;

Con tal estructura de código obtengo exactamente lo que necesito; Cadena de transporte con rutas rápidas como se muestra en la siguiente imagen.

Estructuracelularconlíneasrápidas:

Elproblemaesquelosoperandos"a" y "b" deben declararse de alguna otra manera y luego introducir señales. Cuando trato de declararlos como ejemplo, la SEÑAL o CONSTANTE se deforma (las rutas rápidas no se utilizan o las celdas se colocan de forma extraña).

    
pregunta Ivan

1 respuesta

0

Lo que necesitas para convencer al sintetizador de que a y b pueden cambiar en cualquier momento, si cree que son constantes, las optimizará.

No importa cómo pueden cambiar. Una forma simple sería tener un registro de desplazamiento cuya entrada en serie provenga de un pin externo y cuyas salidas conduzcan a y b .

Puede conectar a tierra el pin externamente y luego colocar la lógica (por ejemplo, puertas XOR) entre el registro de desplazamiento y el sumador para producir los patrones de bits que realmente desea.

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas