Código simple VHDL-AMS pero std_logic_vector para el problema de cantidad

0

Estoy trabajando en un modelo de señal mixta donde el símbolo se parece a lo siguiente,

Laseñalalaizquierdaescount_valqueesstd_logic_vector(7downto0)yp,msonlosterminalesquetienenqunatitiesvoltajevycorrienteI.

Esuncódigomuysimpleenelquetenemosqueusarlacuenta_valorparacalcularlaiactual.Entérminossimplesdeberíaserasí,I==0.00003*count_val.

Perocomoelvalordecuentaesstd_logic_vectoryIesuna"cantidad" que es analógica, esto hace que la fórmula anterior sea difícil de implementar. Intenté convertir el count_val a un tipo entero y usarlo en el forumla pero todavía no tuve suerte y el forumula 'I ==' acepta solo cantidades en él y no señales o std_logics. ¿Hay alguna manera de resolver este problema?

El diagrama de bloque general tiene este aspecto y en la parte inferior donde se encuentra el sumidero de corriente contorneable, es donde estoy atascado, ya que no puedo controlar el sumidero de corriente con el contador debido a las razones mencionadas anteriormente.

    

2 respuestas

1

Si dibuja un nuevo esquema con el editor incorporado, sería más fácil ver lo que está pasando.

¿Cómo controlará el contador la tensión y la corriente? Parece que necesitarás un DAC y un amplificador si realmente lo construyes.

Tengo que obligarme a pensar en sistemas reales cuando estoy diseñando con VHDL. No es como un HLL como Java o C ++. Esos idiomas intentan estar lo más lejos posible del hardware.

VHDL, sin embargo, modela circuitos reales ya que se usa para síntesis y P & R en un FPGA.

Aquí hay algunos ejemplos de conversión de tipos que muestran cómo cambiar un std_logic_vector en un int firmado o sin firmar (página 9).

Aquí hay una introducción para VHDL-AMS encontré en una búsqueda de Google.

    
respondido por el Digital Dude
1

Encontré la respuesta ahora, mientras utilizo VHDL-AMS si tiene que realizar una operación de asignación con una cantidad, por ejemplo

sea la cantidad que fluye a través del terminal de un lado a otro, entonces,

I == 0.0003 * Isc; --donde Isc también es otra cantidad

Esto sería posible fácilmente, pero cuando tenga que usar count, que es un std_logic_vector (7 downto 0) para la misma operación en lugar de Isc, por ejemplo

I == 0.0003 * cuenta; --Esto es incorrecto porque no puedes asignar un std_logic a una cantidad.

Por lo tanto, primero convierta el conteo std_logic_vector a un entero

cnt_integer < = CONV_INTEGER ((count)); - Convertir primero

Luego usa real para incluir este número entero en tu foro,

I == 0.0003 * real ((cnt_integer)); - ¡¡Esto funciona !!

Por lo tanto, este real ((x)) es importante y lo perdí antes.

    
respondido por el Bhuvanesh Narayanan

Lea otras preguntas en las etiquetas