sábado, 23 de febrero de 2013
Convertidor Binario-BCD con displays en VHDL
Si consultaste Google, seguramente encontraste la función to_bcd()del blog VHDL Guru pero quizá te queden dudas sobre como implementarla en un código completo (Si, también tuve el mismo problema). Bien, en el caso del compilador ISE de Xilinx (se observará que estoy usando una tarjeta Basys 2) debe agregarse un archivo de paquete que incluya esta función. Esto puede hacerse usando la plantilla VHDL Package o creando simplemente un nuevo archivo .vhd en blanco y agregarlo al proyecto (El compilador detectará automáticamente que es un paquete al terminar de escribir el código).
El siguiente código es la correcta implementación del Paquete y Cuerpo de Paquete de manera que la función pueda ser utilizada en nuestro programa:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
package bcd is
function to_bcd (bin : std_logic_vector(7 downto 0)) return std_logic_vector;
end bcd;
package body bcd is
function to_bcd (bin : std_logic_vector(7 downto 0)) return std_logic_vector is
variable i : integer:=0;
variable bcd : std_logic_vector(11 downto 0) := (others => '0');
variable bint : std_logic_vector(7 downto 0) := bin;
begin
for i in 0 to 7 loop
bcd(11 downto 1) := bcd(10 downto 0);
bcd(0) := bint(7);
bint(7 downto 1) := bint(6 downto 0);
bint(0) :='0';
if(i < 7 and bcd(3 downto 0) > "0100") then
bcd(3 downto 0) := bcd(3 downto 0) + "0011";
end if;
if(i < 7 and bcd(7 downto 4) > "0100") then
bcd(7 downto 4) := bcd(7 downto 4) + "0011";
end if;
if(i < 7 and bcd(11 downto 8) > "0100") then
bcd(11 downto 8) := bcd(11 downto 8) + "0011";
end if;
end loop;
return bcd;
end to_bcd;
end bcd;
Al guardar el código agregado al proyecto, la función se agregará automáticamente a la librería "work". De manera que habrá que usarla en nuestro programa:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
library work;
use work.bcd.all; -- Aquí está nuestra función
entity display is
port ( salida : out std_logic_vector(7 downto 0);
selector: out std_logic_vector(3 downto 0);
binario : in std_logic_vector(7 downto 0);
clk : in std_logic );
end entity;
architecture mostrar of display is
signal a: std_logic_vector(1 downto 0) :=(others => '0');
signal PULSO: STD_LOGIC:='0';
constant SESENTA: integer :=99999;
signal RET: integer range 0 to SESENTA:=0;
signal BCD_out: std_logic_vector(11 downto 0);
signal bcd: std_logic_vector(3 downto 0);
begin
RETARDO: PROCESS(CLK) -- Divisor de frecuencia (de 50MHz a 50Hz)
BEGIN
IF (RISING_EDGE(CLK)) THEN
PULSO<='0';
RET<=RET+1;
IF RET=SESENTA THEN
RET<=0;
PULSO<='1';
END IF;
END IF;
END PROCESS;
process(pulso) begin -- Contador para selectores
if (pulso'event and pulso = '1') then
a <= a + 1;
end if;
end process;
BCD_out <= to_bcd(binario); -- Llamado a la función to_bcd
process (bcd) -- Decodificador BCD a 7 segmentos
begin
case bcd is
when "0000"=> salida <="00000011"; -- '0'
when "0001"=> salida <="10011111"; -- '1'
when "0010"=> salida <="00100101"; -- '2'
when "0011"=> salida <="00001101"; -- '3'
when "0100"=> salida <="10011001"; -- '4'
when "0101"=> salida <="01001001"; -- '5'
when "0110"=> salida <="01000001"; -- '6'
when "0111"=> salida <="00011111"; -- '7'
when "1000"=> salida <="00000001"; -- '8'
when "1001"=> salida <="00001001"; -- '9'
when others=> salida <="11111111"; -- 'x'
end case;
end process;
process (a) begin -- Ciclo de selectores
case a is
when "00" => bcd <= BCD_out(3 downto 0);
selector <= "0111";
when "01" => bcd <= BCD_out(7 downto 4);
selector <= "1011";
when "10" => bcd <= BCD_out(11 downto 8);
selector <= "1101";
when others => bcd <= "0000";
selector <= "1111";
end case;
end process;
end architecture;
miércoles, 13 de febrero de 2013
sábado, 2 de febrero de 2013
¿Cómo funciona el control PID?
Brian Douglas explica el funcionamiento del control PID como pocos profesores en la materia. Si no tienes problemas con el inglés, estas apunto de resumir tu curso entero de control en unos pocos minutos.
viernes, 1 de febrero de 2013
lunes, 28 de enero de 2013
St. George
Tengo una bandera de Inglaterra colgada justo arriba de la cabecera de mi cama. Si, la bandera de Saint George. La razón por la cual conseguí esta bandera y no la de Reino Unido es por los 4 espacios blancos. De otra manera la tinta negra de las firmas de mis amigos no tendrían tan buen contraste. A diferencia de muchos de mis compañeros de mi estancia en las islas británicas, les pedí a todos ellos escribir en sus lenguas maternas. Cada vez que siento que mi mundo se cae miro esa pared y recuerdo el inmenso tamaño de la Tierra. Veo entonces en un sólo cuadro las historias de la gente de todas las esquinas del mundo, separadas por la distancia pero envueltas en la misma lidia eterna con la vida. No, aunque hemos llegado a pensarlo muchas veces, nunca hemos estado realmente solos.
martes, 22 de enero de 2013
Des livres
¿Importan los autores que lea una persona a la hora de juzgarla? No, realmente. Cada quien es libre de elegir que quiere leer. Aquellos que critican a autores mainstream como Stephenie Meyer pasan por alto los cientos de miles de jóvenes que tomaron un libro por voluntad propia, quizá, por primera vez en su vida. ¿Importa el número de libros leídos en este mismo juicio? Por supuesto. Al contrario de la opinión de algunos, especialmente aquellos a los que la lectura les un placer fundamental, es un factor importante. No puedo evitar apreciar la objetividad de los números. Para explicarme mejor considera el tiempo como otra variable importante porque todas las ideas, palabras, conversaciones, tragedias, aventuras y personas con las que vamos a cruzarnos durante nuestra vida, están representadas por un número finito. El punto aquí es la posibilidad de maximizar el flujo de ideas sin limitarse a la época, el idioma o las naciones.
miércoles, 16 de enero de 2013
Generador de pulsos de 1Hz en VHDL (pulso por segundo)
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity segundo is
port ( pulso : inout std_logic:='0';
clk : in std_logic);
end entity;
architecture divisor of segundo is
signal count : integer :=1;
begin
process(clk) begin
if(clk'event and clk='1') then
count <=count+1;
if(count = 50000000) then --count = frec de reloj/frec deseada
PULSO <= not PULSO;
count <=1;
end if;
end if;
end process;
end architecture;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity segundo is
port ( pulso : inout std_logic:='0';
clk : in std_logic);
end entity;
architecture divisor of segundo is
signal count : integer :=1;
begin
process(clk) begin
if(clk'event and clk='1') then
count <=count+1;
if(count = 50000000) then --count = frec de reloj/frec deseada
PULSO <= not PULSO;
count <=1;
end if;
end if;
end process;
end architecture;
Nota: Variando el valor de count, se puede utilizar el componente como divisor de frecuencia y obtener cualquier frecuencia menor a la del reloj que se esté usando.
sábado, 12 de enero de 2013
jueves, 27 de diciembre de 2012
Friendzone
"A woman doesn't get attracted to you because you prove to her how attracted to her you are.
You can't manipulate her into feeling attraction for you by
giving her things or telling her how much she means to you.
All you're doing is put pressure on her by showing you are needy.
By talking about how attracted you are to her and by showing her
how much you like her you're simply driving her away.
You're making her feel guilty. You're giving your own power
and charisma away. And it makes you unattractive.
Because she's fond of you she tries to give it a chance and hopes for a miracle that somehow she will feel some sort of attraction for you. But now when she thinks about hanging out with you, all she feels is pressure, uncomfortableness, and guilt because she fears she's going to hurt your feelings. She also feels superior in the relationship, because you're the needy one that wants more from her so she feels even less attraction for you than before because of that"
- Stephan Erdman
Because she's fond of you she tries to give it a chance and hopes for a miracle that somehow she will feel some sort of attraction for you. But now when she thinks about hanging out with you, all she feels is pressure, uncomfortableness, and guilt because she fears she's going to hurt your feelings. She also feels superior in the relationship, because you're the needy one that wants more from her so she feels even less attraction for you than before because of that"
- Stephan Erdman
viernes, 21 de diciembre de 2012
Fechas
Suscribirse a:
Entradas (Atom)



