Estoy tratando de escribir un VHDL media móvil (ponderada uniformemente) módulo que utiliza FSMD (ata). De lo que yo entiendo, los estados necesitarían algo como buscar, dividir, salir. Debajo está el proceso que escribí, pero siento que mi lógica es un poco apagado. Tenga en cuenta que el promedio de Im de datos es sólo una matriz constante de números de 8 bits, así que pensé que debería estar bien para utilizar un diseño no causal. Los datos tienen 64 entradas, y en este momento la ventana para el promedio es 4. ¿Cómo equivocado este aspecto? Algunos problemas que puedo ver de inmediato: Usted no reinicializar temp en cualquier lugar. Lo que pasa con el patrón (counti) cuando se aproxima al límite ¿Cómo se vuelca) Su for-loop es de 0 a len - ¿está seguro de que usted no tiene ningún límite de verificación para contar (es un subtipo o sólo un entero natural / Usted no significó 0 a (len - 1) Puesto que su proceso entero de la descodificación del estado es reloj, usted no necesita realmente nstate en absoluto. Tenga en cuenta que ni siquiera está inicializando cstate (pero todavía lo está decodificando). Haga su estado decodificar un proceso combinacional separado o simplemente deshacerse de nstate y asignar a cstate directamente. De lo contrario, depende de sus objetivos de diseño. Si no se preocupa por el rendimiento, pero necesita ejecutar a una velocidad de reloj muy alta, es posible que desee realizar su adición secuencial en lugar de en paralelo, por ejemplo. Respondió Sep 5 14 at 13:32 gracias, eso definitivamente hace las cosas mejor. Sobre el rollover cuenta, I39m no estoy seguro de cómo hacerlo porque para cada patrón (contar) hasta 63, quiero mostrar su valor y el promedio de la ventana a su alrededor. Así que si vuelco en el coun-len, no debería salir de los límites pero no mostrará los datos completos. Si estaba haciendo una implementación causal que tendría un retraso en el comienzo, es una cosa similar que necesito aquí, pero al final ndash user1710566 Sep 5 14 at 23:23 mi solución fue: elsif (clk evento), a continuación, si cuenta 64 Then count lt 0 else calcular end if. Y en el bucle for poner una salida si count i fue mayor de 63. ndash user1710566 Sep 6 14 at 0: 05 Tengo una pregunta relacionada con el promedio continuo de ADCs valor. El enfoque que he utilizado es el promedio continuo de ejemplo 256 muestras. El valor adcaout (mostrado en el código de abajo) que recibo en mi GUI aumenta lentamente. Por ejemplo, si espero un valor de 100mA, Mi GUI muestra 4mA, 8mA, 15mA. Y después finalmente después de 2 minutos consigo el valor estable de 100mA. Quiero ver el 100mA directamente en mi GUI de adcaout en lugar de valores de incremento y la estabilización después de algún tiempo. Otra pregunta es que, ¿puedo de alguna manera hacer este proceso rápido para que no tenga que esperar 3 minutos para recibir 100 mA estable de adcaout. El reloj clk en el diseño digital a continuación es de 20 MHz. El reloj para recibir valores ADC en la placa FPGA es 15 KHz. - el archivo adc. vhd está abajo: Su código se modifica de la siguiente manera: La salida final que estoy viendo en mi GUI es slvvalue1 y slvvalue2 ¿Qué tal esto: al restablecer (o en cualquier otro momento si lo desea), asigne el Dato de valor a todos los elementos de la matriz de etapa. Esto debería establecer instantáneamente su promedio en el valor actual: El ejemplo siguiente muestra el código completo para una calculadora de promedio móvil. Mi sugerencia es que lo estudies hasta que lo entiendas. Luego, trate de usarlo en su diseño. Por último, y sólo después de que usted tiene un circuito básico de trabajo, se puede cambiar para satisfacer sus restricciones de diseño (ancho de los datos, el número de muestras, gama de números enteros, el uso de firmado vs entero, etc.) Por último, si desea utilizar El código anterior para mantener dos promedios separados para dos señales distintas, basta con instanciar la entidad de promedio dos veces: Editar: Según entiendo de sus comentarios, puede que necesite una entrada adicional para establecer el promedio instantáneamente al valor de entrada actual. En ese caso, puede utilizar una entrada de carga como se muestra a continuación: respondió 26 de noviembre 13 a las 15: 45Thread: promedio continuo utilizando VHDL Tengo una pregunta relacionada con la programación VHDL. Quiero calcular el promedio continuo. Mi código de ejemplo es: En cada borde positivo del reloj, el valor de quotout-valquot cambia. Quiero tomar continuamente el promedio de quotout-valquot. Quiero tomar un promedio de 32 valores de forma continua. ¿Hay una manera en la que puedo tomar un promedio de 32 valores de forma continua hasta que el reloj está funcionando. Por favor, hágamelo saber cómo puedo hacer eso. También puede modificar el código anterior. Muchas gracias, 19 de noviembre de 2013, 07:01 AM 2 Tengo una pregunta relacionada con la programación de VHDL. Quiero calcular el promedio continuo. Mi código de ejemplo es: En cada borde positivo del reloj, el valor de quotout-valquot cambia. Quiero tomar continuamente el promedio de quotout-valquot. Quiero tomar un promedio de 32 valores de forma continua. ¿Hay una manera en la que puedo tomar un promedio de 32 valores de forma continua hasta que el reloj está funcionando. Por favor, hágamelo saber cómo puedo hacer eso. También puede modificar el código anterior. Muchas gracias, primero usted necesita corregir su sintaxis (no utilice el guión pero el subrayado) Para el filtro medio corriente, la manera más fácil es entrada del retardo a través de 32 etapas. Restar la última etapa de la entrada y acumular el resultado. 19 de noviembre de 2013, 07:03 AM 3 Fecha de Ingreso Sep 2012 Mensajes 41 Rep Power 1 Re: Promedio continuo usando VHDL En realidad usé subrayado en mi código original. No sé por qué escribí-1 aquí. Su out1 Lo siento por la confusión. ¿Puede describir con un ejemplo cómo hacer un promedio continuo. 19 de noviembre de 2013, 07:22 4 Fecha de Ingreso Oct 2008 Ubicación London Puestos 3,389 Rep Power 1 Re: promediado continuo usando VHDL En realidad usé subrayado en mi código original. No sé por qué escribí-1 aquí. Su out1 Lo siento por la confusión. ¿Puede describir con un ejemplo cómo hacer un promedio continuo. Gtgtgt de entrada. 32 etapas ----------------- gt sustraer la etapa 32 de la entrada actual poner el sustractor al final del tubo de retardo para sustraer la última etapa de la entrada actual y luego tomar el resultado de la sustracción en un acumulador (Sumador de retroalimentación con un registro). Truncar la suma del acumulador como adecuada. El promedio continuo usando VHDL toma entonces el resultado de la substracción en un acumulador (sumador de la regeneración con un registro). Truncar la suma del acumulador como adecuada. Descarte 5 LSB del resultado del acumulador. Las primeras 31 muestras iniciales no serán correctas, pero el flujo se ajustará a la derecha. Kaz Sólo como un ejemplo, estoy haciendo promediado continuo para 4 valores. ¿Puede comprobar si mi enfoque es correcto. Sum es el valor promedio de salida. El código anterior funciona si tengo números sin firmar. Pero quiero que el promedio del vector stdlogic. El datain se define como: datain: in stdlogicvector (11 downto 0) Por favor, ayúdame a resolver este problema. Modifique el código anterior para poder obtener valores promediados continuos para el valor vectorial. 20 de noviembre de 2013, 12:09 PM 9 Fecha de Ingreso Oct 2008 Ubicación London Publicaciones 3,389 Rep Power 1 Re: Promedio continuo usando VHDL kaz A modo de ejemplo, estoy haciendo promediado continuo para 4 valores. ¿Puede comprobar si mi enfoque es correcto. Sum es el valor promedio de salida. El código anterior funciona si tengo números sin firmar. Pero quiero que el promedio del vector stdlogic. El datain se define como: datain: in stdlogicvector (11 downto 0) Por favor, ayúdame a resolver este problema. Modifique el código anterior para poder obtener valores promediados continuos para el valor vectorial. No veo cómo funciona su enfoque. Si soy yo, simplemente seguiré el diagrama que posteé anteriormente. Por ejemplo Re: promediado continuo usando VHDL Su enfoque no funcionó para mí. Comprobé la salida en el FPGA, pero no funcionó para mí. Básicamente estoy tratando de estabilizar los valores de salida ADC. Es por eso que estoy promediando los datos entrantes o los datos capturados con ADC. Outval y outval2 son las salidas ADC de 12 bits. Ill mostrar cómo he utilizado su enfoque a continuación. Corregirme amablemente si estoy equivocado: mido los valores de adc (corriente y voltaje) quotadcaout y adcboutquot después de usar el acercamiento antedicho y consigo valores incorrectos. Por favor, hágamelo saber dónde estoy haciendo mal.
No comments:
Post a Comment