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).