ok seria una buena idea pero como se le hace
Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature currently requires accessing the site using the built-in Safari browser.
-- Contador de 7 bits --
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
Entity contador is
Port(clk : in std_logic;
X : inout std_logic_vector(2 downto 0):="000");
End contador;
Architecture flujo of contador is
begin
process (clk)
begin
if (clk'event and clk = '0') then
X <= X + 1;
end if;
end process;
end flujo;
Library IEEE;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
Entity div_50MHz is
port
(
osc_50MHz: in std_logic;
clk : buffer std_logic:='0'
);
end div_50MHz;
Architecture flujo of div_50MHz is
signal conteo: integer range 0 to 25000000;
begin
process(osc_50MHz)
begin
if(osc_50MHz' event and osc_50MHz='1')then
conteo<=conteo +1;
if(conteo=25000000)then
conteo<=0;
clk<=not(clk);
end if;
end if;
end process;
end flujo;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity Proyecto is --Declarando puertos, variables de entrada y salida
Port ( datos : in bit_vector(5 downto 0); --6 interruptores
right : in bit; --pulsador hacia la derecha
left : in bit; --pulsador hacia la izquierda
muestra : in bit; --pulsador para cargar
leds : out bit_vector(5 downto 0):="000000"; --leds
clock : in bit);--reloj
end Proyecto; --Fin de la declaración
architecture Digitales of Proyecto is --declaramos variables intermedias
signal temp: bit_vector(5 downto 0):="000000"; --registro
signal salida: bit_vector(5 downto 0):="000000"; --temporal para el desplazamiento
signal correi: bit:='0'; --ya duro los 250ms undido el pulsador hacia la izq
signal corred: bit:='0'; --ya duro los 250ms undido el pulsador hacia la der
signal contador: integer range 0 to 12500000; --contador para el clock de 50Mhz = 250ms
begin --iniciamos la programacion
process(clock) --cada vez que cambie el clock
begin
if clock'event and clock='1' then --revisa si hay flanco de subida
if muestra='1' then --si undi el pulsador para cargar
salida<=temp; --carguemelo en el registro
temp<=datos;
end if;
if left='1' then --si se presiona el de la izq
if contador=12500000 then --contador de 250ms
correi <='1'; --si ya duro los 250ms, active correi
contador<=0; --y reinicieme el contador
else --sino
contador<=contador+1; --siga contando
end if;
end if;
if correi='1' then --si se mantuvo presionado el pulsador por mas de 250ms
salida <= temp; --cargueme lo del registro al temporal
temp(5 downto 1) <=salida(4 downto 0); --desplace los 5 primeros bits hacia la izq
temp(0) <= salida(5); --y el ultimo de la derecha pasa a ser el primero de la izq
correi<='0'; --y desactivamos correi
end if;
if right='1' then --el mismo procedimiento que el desplazamiento a la derecha
if contador=12500000 then
corred <='1';
contador<=0;
else
contador<=contador+1;
end if;
end if;
if corred='1' then
salida <= temp;
temp(4 downto 0) <=salida(5 downto 1);
temp(5) <= salida(0);
corred <= '0';
end if;
leds <= temp; --mostramos el registro en los leds
end if;
end process;
end Digitales;
///////////////
asignacion de pines
/////////////
#PACE: Start of Constraints generated by PACE
#PACE: Start of PACE I/O Pin Assignments
NET "clock" LOC = "p77" ;
NET "datos<0>" LOC = "p89" ;
NET "datos<1>" LOC = "p88" ;
NET "datos<2>" LOC = "p87" ;
NET "datos<3>" LOC = "p86" ;
NET "datos<4>" LOC = "p84" ;
NET "datos<5>" LOC = "p83" ;
NET "leds<0>" LOC = "p46" ;
NET "leds<1>" LOC = "p45" ;
NET "leds<2>" LOC = "p44" ;
NET "leds<3>" LOC = "p43" ;
NET "leds<4>" LOC = "p42" ;
NET "leds<5>" LOC = "p41" ;
NET "left" LOC = "p57" ;
NET "muestra" LOC = "p58" ;
NET "right" LOC = "p59" ;
#PACE: Start of PACE Area Constraints
#PACE: Start of PACE Prohibit Constraints
#PACE: End of Constraints generated by PACE
algoritmo de cifrado MD5
me encuentro atorado tratando de hace un circuito que pueda recibir el mensaje, calcular la longitud y luego hacer el relleno de bits para que sea un nuevo mensaje multiplo de 512 bits.
aclaro es un trabajo para mi proyecto de fin de carrera
library ieee;
use ieee.std_logic_1164.all;
entity ALU is
port(A,B,Op : in std_logic_vector(2 downto 0);
CI:in std_logic;
CO:out std_logic;
res : out std_logic_vector(2 downto 0));
end;
architecture behavioral of ALU is
component suma1
port (A, B, CI :in std_logic;
S, CO : out std_logic);
end component;
signal X: std_logic_vector(1 downto 0);
begin
process(Op)
begin
case Op is
when "000" => x1: suma1 port map (A(0), B(0), CI, res(0), X(0));
x2: suma1 port map (A(1), B(1), X(0), res(1), X(1));
x3: suma1 port map (A(2), B(2), X(1), res(2), CO);
when others => res <= A;
end case;
end process;
end behavioral;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity nueve is
Port (
clk : in bit;
salida : out integer range 0 to 10
);
end nueve;
architecture algoritmo of nueve is
begin
process (clk)
variable temporal: integer range 0 to 10;
begin
if clk='1'and clk'event then
temporal:=temporal +1;
if temporal=10 then
temporal:=0;
end if;
end if;
salida<=temporal;
end process;
end algoritmo;
library ieee;
use ieee.std_logic_1164.all;
use work.std_arith.all;
entity cont9 is
port( clk,reset,updown: in std_logic; --en este caso puse un reset al contador, ademas de hacerlo ascendente-desdendente con updown
Q: out std_logic_vector(3 downto 0)); --en este caso para representar el nueve se necesitan 4 bits ya que en binario el nueve es '1001' puse un std_logic_vector el cual la cuenta se hace desde el 3 hasta el cero (3 downto) esto es traducido por el codigo como cuatro salidas: Q(3), Q(2), Q(1), y Q(0) todo eso anexado a Q
end cont9;
architecture arqcont9 of cont9 is
begin
process (clk,reset) begin
if (clk'event and clk = '1') then --la asignacion de la señal de reloj
if (updown = '1') then --aqui se usa un if para la condicion del updown el cual va a regir si es ascendente o desdendente, en este caso cuando sea 1 sera ascendente mi contador
Q <= Q + 1; --aqui se indica la condicion, Q pasara a ser Q + 1, esto significa que sumare un 1 a Q cada vez ke la señal de reloj este ne flanco de subida y tenga un 1 en updown
if (reset = '1' or Q = "1001") then --aqui hay una condicion anidada en otra condicion, ya que si no se implementa, nuestro contador llegara a su maxima cuenta de cuatro bits que es '1111' o en pocas palabras 15, pero como solo la cuenta es hasta el 9, cuando pase de ese conteo se reiniciara, asi que cuando Q sea igual a 9 en binario, o ('or' como esta implementado en mi condicion) mi señal de reset sea igual a 1 tendra que reiniciarse
Q <= "0000"; --nuestro Q regresara al principio
end if;
else --este else indica cuando updown es igual a 0
Q <= Q - 1; --en este caso a Q se le restara 1 cada flanco de subida de nuestro reloj
if (Q = "0000") then --aqui hay 2 if anidados, el primero me indica que si en el conteo llega a 0:
Q <= "1001"; --el siguiente conteo sera a 9
end if;
if (reset = '1') then --el otro if esta asignado a mi reset, cuando este vale 1:
Q <= "0000"; -- Q se reiniciara en 0
end if;
end if;
end if;
end process;
end arqcont9;