Codigo VHDL tanques
Enviado por badboy8429 • 30 de Abril de 2024 • Síntesis • 709 Palabras (3 Páginas) • 62 Visitas
Se tienen dos depósitos de agua de los que se quiere conocer en cada momento el nivel de agua del que esté más vacio, y la diferencia de nivel respecto al mayor (en valor absoluto).
Para conocer el nivel, cada depósito tiene 7 sensores distribuidos a lo alto del depósito. Cada sensor dará un "I' lógico si está cubierto de agua, y un '0' lógico si está al aire.
La salida se dará mediante dos displays de 7 segmentos, uno para indicar el nivel del más vacio, y otro para
indicar la diferencia. Como se tienen 7 sensores para conocer el nivel, el rango de valores va desde 0 a 7. Se supone que ningún sensor va a fallar, por lo tanto, si un sensor indica un 'T' lógico, todos los sensores que estén debajo de él darán un "1" lógico (pues el agua los cubrirá también).
Realizar:
a) Diagrama de bloques del circuito lógico del problema "nivel de depósitos de agua.
b) Síntesis del circuito del apartado anterior, usando VHDL, y descripción de arquitectura tipo COMPORTAMENTAL ALGORITMICO. Para cada bloque funcional debe corresponder la descripción de un process() "descripción modular".
Simular el circuito usando University Waveform. Generar un vector de prueba (testhench) para validar el funcionamiento del circuito (generar estados de entrada suficientes, que permitan evidenciar el correcto funcionamiento), c) d) Implementación en FPGA Cyclone II.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity WaterLevel is
Port (
Sensor_Deposito1 : in STD_LOGIC_VECTOR (6 downto 0);
Sensor_Deposito2 : in STD_LOGIC_VECTOR (6 downto 0);
Display_Deposito1 : out STD_LOGIC_VECTOR (6 downto 0);
Display_Deposito2 : out STD_LOGIC_VECTOR (6 downto 0);
Display_Diferencia : out STD_LOGIC_VECTOR (6 downto 0)
);
end WaterLevel;
architecture Behavioral of WaterLevel is
signal Nivel_Deposito1 : integer range 0 to 7;
signal Nivel_Deposito2 : integer range 0 to 7;
signal Diferencia : integer range 0 to 7;
begin
process(Sensor_Deposito1, Sensor_Deposito2)
begin
-- Calcular nivel del depósito 1
Nivel_Deposito1 <= 0;
for i in 6 downto 0 loop
if Sensor_Deposito1(i) = '1' then
Nivel_Deposito1 <= 7 - i;
exit;
end if;
end loop;
-- Calcular nivel del depósito 2
...