Verilog código para filtrar sinc3 - 2s complemento cuestión

S

sammyt09

Guest
Hola,

Tengo una breve pregunta en relación a algunos de verilog sinc3 decimación filtro.

En el código, creo 2s complemento se está utilizando en el proceso de acumulación,
sin embargo, yo te comprendo perfectamente lo que está sucediendo.Como no tengo un simulador verilog en este momento, estoy esperando que alguien podría explicar a mí.La relativa partes del código en cuestión es la siguiente:

-----
/ * Definiciones * /
mdata1 de entrada;
reg [23:0] ip_data1;
reg [23:0] acc1;
reg [23:0] ACC2;
reg [23:0] acc3;

/ * Cambio de un 0 a un -1 para
la comp 2 * /
siempre @ (mdata1)
if (mdata1 == 0)
ip_data1 <= 0;
algo más
ip_data1 <= 1;

/ * Acumulación etapa * /
siempre @ (posedge mclk1 o posedge reset)

if (reset) comenzar
/ *
Inicialización de los registros según el restablecimiento * /
acc1 <= 0;
ACC2 <= 0;
acc3 <= 0;
final

más comenzar
/ * realizar proceso de acumulación * /
acc1 <= acc1 ip_data1;
ACC2 <= ACC2 acc1;
acc3 <= acc3 ACC2;
final
------------

(Tenga en cuenta, el código completo de verilog puede encontrarse aquí: http://www.analog.com/static/imported-files/data_sheets/AD7401A.pdf)

MI PREGUNTA:
Si 2s complemento se está utilizando, ¿por qué es' ip_data1 'se define como cualquiera de'0' o'1 '?Supuse que tendría que ser'00 .... 01 'o «11 .... 11',
es decir, más o menos 1 utilizando notación complemento 2s.

Si 'ip_data1' es'0 'o'1' el acumulador seguramente sólo se acumulan hacia arriba y nunca puede ser negativo.En cuyo caso, no es 2s complemento a todos los (?)

Si alguien puede ayudarme en mi comprensión de este fragmento de código,
estaría muy agradecido.Como digo, no tengo un simulador availalable en esta etapa, de lo contrario podría haber figurado esto yo mismo.

Muchas gracias de antemano!

sammyt09

 
Parece que el código en su puesto es ligeramente reordenada wrt la referencia. Archivo en formato pdf:
----------- ------------------------ Su puesto
/ * Cambio de un 0 a un -1 para
la comp 2 * /
siempre @ (mdata1)
if (mdata1 == 0)
ip_data1 <= 0;
algo más
ip_data1 <= 1;

------- En. Pdf -----------------
siempre @ (mdata1)
if (mdata1 == 0)
ip_data1 <= 0; / * cambio de un 0 a un -1 para
la comp 2 * /
algo más
ip_data1 <= 1;

-------------------------------------
..aparentemente se le está aconsejado editar el código fuente Verilog si desea utilizar el complemento
de 2 años

Wade Hassler

 
Hola Wade,

Muchas gracias por su respuesta, es muy apreciada.Me parece que simplemente han hecho un error en mi interpretación de este código
o comentario.

Ahora hace mucho más sentido y las líneas originales con mi entendimiento.Gracias de nuevo

sammyt09

 
No veo que nada ha de cambiar el código, a excepción de la interpretación del valor de salida.Diezmando una entrada un poco (0 .. 1) los resultados de forma positiva (recto binario) la salida de codificación.Invirtiendo la salida MSB, usted puede convertir en dos
de complementar código.

En general, en el sub y añadir, no hay diferencia entre firmados y sin firmar la operación, excepto para el significado de los bits vectores.Esto también se aplica para la CIC decimator en su conjunto.

 
Hola FVM,

Gracias por su amable respuesta!

Sólo para poner esto en contexto,
tengo actualmente aplicado este filtro en una VerilogA modelo.Estoy utilizando este modelo, en ausencia de tener un verdadero simulador de Verilog disponibles.Así que, supongo, que se puede decir que estoy utilizando un filtro ideal por el momento.

Quisiera tratar de comprender las implicaciones de la utilización de un real, por ejemplo, la realización de 24 bits.Por ejemplo, cuando se saturan los acumuladores?¿Cómo funciona el fondo del acumulador afectar el resultado, etc,
etc En esencia, sólo quiero tener una idea clara en mi cabeza de cómo funciona el hardware se refiere a la realización ideal realización.

Yo entiendo los fundamentos de decimación y complementar-2s (creo), pero todavía estoy perdiendo algo sobre la base de su respuesta ...

Si puedo entender la operación cuando la entrada es un medio de "0", entonces creo que esta todo tiene sentido.Por ejemplo, si la entrada es un promedio de cero, entonces la entrada sería algo así como " 1, -1, 1, -1" (igual número de
1 y s-1).

Sin embargo, como debo interpretar este código, ya que es, entonces seguramente los acumuladores sólo nunca y, finalmente, contar hasta saturar.Yo esperaría a contar hacia arriba y hacia abajo por igual y nunca un medio para saturar la entrada 0.Creo que lo que está diciendo es que puedo obtener de este interpretting el resultado diferente, pero yo no entiendo bien de qué manera?

¿Hay alguna posibilidad que podría darme un ejemplo sencillo, o mi punto en la dirección correcta?

Una vez más, muchas gracias por tomarse el tiempo para mirar mi pregunta!Recuerdos

sammyt09

 
Debido a que el promedio de entrada no es cero, en general, el acumulador se derramará, independiente de su bitwidth.Sin embargo, el nivel de señal de entrada se restablezca en la diferencia (filtro de peine) de la CIC decimator.

.

Hay mucha literatura que describe en detalle
la operación, comenzando con Hogenauer
del original en papel "Un económica de la clase de filtros digitales y decimación Interpolación".Todavía no veo a ningún uso de un bipolar / - 1 entrada de codificación.Es mejor utilizar la entrada 0 / 1 y el cambio de codificación de la salida decimator de 0x0000 al 0x8000 .. 0xFFFF .. 0x7FFF lugar, como se ha dicho.

 
Hola FVM,

Una vez más, gracias por su respuesta.Es muy apreciada.

Voy a mirar en la referencia que usted me ha dado y también tomar nota de su sugerencia con respecto a la bipolar / -1 de codificación.Saludos cordiales

sammyt09

 

Welcome to EDABoard.com

Sponsor

Back
Top