Actualmente estoy aprendiendo VHDL. Como ejercicio decidí implementar algunos de los chips de la serie 7400. A continuación se muestra el 74153 y, mientras lo probamos con ghdl / gtkwave, parece funcionar.
Pero estoy seguro de que esta implementación es ingenua (mucha repetición, uso de señales con retardo adicional (* _d), etc.). ¿Cuál sería la forma limpia de implementar un dispositivo de este tipo?
--
-- 74153 implementation
-- Dual 4-Line to 1-Line
--
library ieee;
use ieee.std_logic_1164.all;
entity TTL_74153 is
port(
c0, c1, c2, c3: in std_logic_vector(1 downto 0);
sel: in std_logic_vector(1 downto 0);
g: in std_logic_vector(1 downto 0);
y: out std_logic_vector(1 downto 0));
end TTL_74153;
architecture behav of TTL_74153 is
signal c0_d, c1_d, c2_d, c3_d: std_logic_vector(1 downto 0);
signal sel_d, g_d: std_logic_vector(1 downto 0);
begin
-- delays
c0_d <= c0 after 11 ns;
c1_d <= c1 after 11 ns;
c2_d <= c2 after 11 ns;
c3_d <= c3 after 11 ns;
sel_d <= sel after 20 ns;
g_d <= g after 18 ns;
-- logic
y(0) <= '0' when g_d(0) = '1' else
c0_d(0) when sel_d = "00" else
c1_d(0) when sel_d = "01" else
c2_d(0) when sel_d = "10" else
c3_d(0) when sel_d = "11";
y(1) <= '0' when g_d(0) = '1' else
c0_d(1) when sel_d = "00" else
c1_d(1) when sel_d = "01" else
c2_d(1) when sel_d = "10" else
c3_d(1) when sel_d = "11";
end behav;