Utilice VHDL para programar un contador reversible decimal
Por ejemplo, el código BCD q(11 hasta 0) puede representar del 0 al 999. Los primeros cuatro dígitos son dígitos, los cuatro dígitos del medio son decenas y los últimos cuatro dígitos son centenas. No sé cuáles son los requisitos para el desbordamiento, lo configuré para que se desborde sin realizar ninguna operación.
biblioteca ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all
entidad add_sub es; p>
entidad add_sub es
p>
puerto(
clk : en std_logic;
clr : en std_logic;
sl : en std_logic;
q : fuera std_logic_vector (11 hasta 0));
end add_sub
la arquitectura add_sub_arc de add_sub es
señal cnt: std_logic_vector(11 abajo a 0);
comenzar
proceso(clk,clr,cnt)
comenzar
si clr = '0' entonces
cnt < = (otros => '0');
elsif clk = '1' y clk'event entonces
si sl = '0' entonces -- sumador
si cnt /= " 100110011001" entonces
si cnt(3 abajo a 0) = "1001" entonces
cnt(3 hasta 0) <= (otros => ' 0'); -- unidad
cnt(7 hasta 4) <= cnt(7 hasta 4) + '1'; entero
else
cnt(3 hasta 0) <= cnt(3 hasta 0) + '1' -- unidad
fin si; p>
si cnt(7 hasta 4) = "1001 " entonces -- entero
cnt(7 hasta 4) <= (otros => '0' -- dígito de decenas<); /p>
cnt(11 hasta 8) <= cnt(11 hasta 8) + '1' -- dígito de centenas
finaliza si;
else
cnt <= cnt;
fin si;
else -- restador
si cnt /= "000000000000" entonces
si cnt(3 hasta 0) = "0000" entonces
cnt(3 hasta 0) <= "1001";
cnt(7 hasta 4) <= cnt (7 hasta 4 ) - '1';
else
cnt(3 hasta 0) <= cnt (3 hasta 0) - '1';
finaliza si;
si cnt(7 hasta 4 ) = "0000" entonces
cnt(7 hasta 4) <= "1001";
cnt(11 hasta 8 ) <= cnt (11 hasta 8) - '1' ;
finaliza si;.
> finalizar si;
finalizar si;
q <= cnt;
finalizar si;
finalizar proceso;
finalizar add_sub_arc