Red de conocimiento informático - Conocimiento del nombre de dominio - ¿Cómo utilizar VHDL para escribir un programa de contador ascendente y descendente binario de ocho bits con reinicio asíncrono, configuración síncrona y habilitación de conteo?

¿Cómo utilizar VHDL para escribir un programa de contador ascendente y descendente binario de ocho bits con reinicio asíncrono, configuración síncrona y habilitación de conteo?

A continuación se muestra un ejemplo que escribí, usando las teclas c1 y c2 para controlar la cantidad de sumas y el número que se suma. Como tengo que realizar un examen recientemente, todas las teclas no tienen vibración para controlar la suma o la resta. No dijiste agregarlos todos, solo omitiré el redondeo. Añádelo tú mismo si es necesario.

Tenga en cuenta también:

Errores en el diseño del contador reversible. Si los dos procesos tienen el mismo criterio de condición, habrá problemas de conflicto de señales paralelas. No se permite asignar la misma señal en múltiples procesos; de lo contrario, serán varios controladores.

biblioteca ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

use ieee.std_logic_arith.

la entidad adderOrsubber es

port(

clk: en std_logic;

rst: en std_logic; --fuwei

rec: en std_logic; --zhishu

as.in std_logic; -- agregar o sub

c1, c2: en std_logic --control num1, num2

zhishu: en std_logic_vector(7 hasta 0);

resultnum: out std_logic_vector(7 hasta 0)

end; /p>

la arquitectura uno de adderOrsubber es

señal num1, num2: std_logic_vector(7 hasta 0);

señal tempnum: std_logic_vector(7 hasta 0);

indicador de señal: std_logic:='0';

comenzar

resultnumlt;=tempnum )

--control num1 num2;

--zhi 0

proceso(primero, clk)

comenzar

si(primero = '0') entonces

num1lt;="00000000";

num2lt;="00000000";

elsif (rising_edge(clk)) entonces

if(c1 = ' 0') entonces

num1lt;=num1 1;

elsif(c2 = '0') entonces

num2lt;=num2 1;

finalizar si;

finalizar si

finalizar el proceso

--y o sub

proceso(as)

comenzar

if(as = '0')

luego marcar lt; = no marcar

finalizar

finalizar proceso;

---figura zhishu

proceso(num1, num2, flag, rec, clk)

comenzar

si rise_edge(clk) entonces

if(rec = '0') entonces

tempnumlt;=zhishu;

elsif(flag = '0 ') entonces

tempnumlt;=num1 num2;

elsif(bandera = '1') entonces

tempnum lt;=num1-num2;

finaliza si

finaliza

> finalizar proceso;

finalizar uno;