Red de conocimiento informático - Problemas con los teléfonos móviles - Utilice VHDL para programar un contador reversible decimal

Utilice VHDL para programar un contador reversible decimal

¿La notación decimal es BCD? Puede ver cada cuatro dígitos individualmente.

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

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;

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