¿Es esta la forma correcta de Y dos señales?

0
ARCHITECTURE
    SIGNAL in_adc_1 : unsigned(0 DOWNTO 0)  := (OTHERS => '0');
    SIGNAL in_adc_2 : unsigned(0 DOWNTO 0)  := (OTHERS => '0');

    BEGIN PROCESS -- counter_4_bit
        var count : in std_logic_vector(3 downto 0);  
        IF (in_adc_1 = '1' and in_adc_2 ='1') THEN
            var_AddVoltage_ch16 <=  count + 1;
        END IF;
    END PROCESS;
END ARCHITECTURE rtl;
    
pregunta bojee

2 respuestas

0

Sin el proceso controlado por reloj, el contador probablemente no funcionará como se esperaba.

ARCHITECTURE
-- Change to std_logic here unless you really need it the other way for some reason
SIGNAL in_adc_1 : std_logic;
SIGNAL in_adc_2 : std_logic;

BEGIN PROCESS -- counter_4_bit
    var count : in std_logic_vector(3 downto 0);  
    -- Synchronize your counter
    IF rising_edge(clk) THEN
        IF (in_adc_1 = '1' and in_adc_2 ='1') THEN
            var_AddVoltage_ch16 <=  count + 1;
        END IF;
    END IF;
END PROCESS;
END ARCHITECTURE rtl;
    
respondido por el Humpawumpa
0

En primer lugar, no me queda claro por qué está utilizando unsigned type para vectores de un bit. Sin embargo, su declaración if generará un error en tiempo de compilación si lo escribe de esa manera. La forma correcta de escribir la misma declaración if usando el tipo unsigned será,

IF (in_adc_1 = "1" and in_adc_2 = "1") THEN

El "1" (entre comillas dobles) representa un vector de un solo bit .

La segunda declaración if proporcionada por usted en la sección de comentarios lee
IF (in_adc_1 and in_adc_2 := 1) . Nuevamente, esto tendrá que ser modificado de la siguiente manera, para que la declaración se compile correctamente.

IF ((in_adc_1 and in_adc_2) = "1") THEN

Ambas formas de AND-ing son correctas en lo que respecta a las herramientas de compilación.

Sin embargo, puede usar los tipos std_logic o bit para lograr la misma funcionalidad (como se señala en los comentarios). En este caso, la instrucción if anterior se debe volver a escribir como,

IF (in_adc_1 = '1' and in_adc_2 = '1') THEN

o como

IF ((in_adc_1 and in_adc_2) = '1') THEN

El '1' (en comillas simples) es un solo bit cuando la señal es de tipo std_logic o bit .

Nota: En VHDL, := se usa para asignaciones de variables o para proporcionar valores iniciales

    
respondido por el rvkrysh

Lea otras preguntas en las etiquetas