-----------------------------------------------------------------------------
----------------------------------------------------------------------------
Modelo VHDL do circuito de redondeo/truncado e saturación.
-----------------------------------------------------------------------------
1.- Descrición do circuito.
Este circuito permite converter un dato numérico de 19 bits sen signo a un valor de 9 bits mediante unha operación de escalado e a posterior saturación do resultado. Ambos datos, no que segue, considéranse valores enteiros.
O escalado realízase sempre por un factor que é menor ou igual á unidade, o que en xeral dá lugar a cifras decimais que deben ser eliminadas, ben por un proceso de redondeo ou ben por truncamento directo. Para a elección dunha ou outra alternativa só é necesario varia-las opcións de implementación adecuadas (os parámetros xenéricos do modelo VHDL).
O factor de escalado pode establecerse dinamicamente (durante a operación do circuito) a través dun bus de entrada de dúas liñas, sendo sempre da forma 2^-(3*B) con B o valor numérico dese bus: 0,1,2 ou 3. Isto implica que o escalado é equivalente (e así se implementa na circuitería) a un desprazamento á dereita de 0, 3, 6 ou 9 bits, cun posíbel axuste posterior cando se seleccione o modo de traballo con redondeo.
Por último, o resultado do escalado pode limitarse a un valor arbitrario entre 1 e 2^9-1, que se fixa durante o deseño do circuito e unha vez implementado este permanece constante para tódalas operacións. Con esta saturación evítase o problema que se derivaría da asignación directa dos 9 bits menos significativos do valor escalado á saída: se algún bit de maior peso estivese activo obteriamos o mesmo valor ca no caso de que non estivera.
2.- Estructura interna.
No esquema UD_RD_SAT.jpg represéntase a forma máis xeral da Unidade de Redondeo/ Truncado e saturación. En función das opcións de implementación (isto é, os valores que asignemos ós parámetros xenéricos no modelo VHDL) podemos cambia-la estructura interna e conseguir dende un circuito totalmente combinacional a un circuito con procesado en pipeline e distintos niveis, así como seleccionar escalados con redondeo ou con truncado.
Os parámetros xenéricos afectan ó circuito da seguinte maneira:
- O parámetro REDONDEO pode tomar valor true ou false; cando se establece a true o circuito redondeará os valores escalados, mentres que se se establece a false estes só se truncarán. No esquema, a zona do interior do recadro punteado só existe cando se establece un modo de redondeo; en caso contrario só haberá un bus dende a saída do dato escalado ata a entrada da seguinte etapa.
- O parámetro NIVEL_PIPELINING pode tomar os valores 0, 1 ou 2, cos que se consegue varia-la cantidade de etapas de pipeline do circuito:
- Co valor 0 non se emprega ningún rexistro de pipeline: o circuito de redondeo/truncado e saturación será a cascada dunha serie de etapas combinacionais conectadas directamente, e polo tanto, posuirá un certo retardo combinacional (da orde dos 10ns nunha FPGA Virtex2pro) que haberá que ter en conta no deseño.
- Co valor 1 só se implementa un ou dous rexistros de pipeline, dependendo de se se elixe o modo de traballo con redondeo ou con truncamento: con redondeo instanciarase un rexistro intermedio e outro para os datos de saída (rexistros e biestábeis 2 e 4 no esquema), mentres que con truncamento só este último (rexistro e biestábel 4). Neste caso o circuito introduce unha latencia inicial de dous ciclos de reloxo en modo de redondeo, e de un ciclo en modo de truncado.
- Co valor 2 impleméntanse tódolos posíbeis rexistros de pipeline: un entre cada dúas etapas combinacionais máis outro final para os datos de saída. Se se traballa con modo de redondeo o circuito pasará polo tanto a ter catro etapas pipeline (rexistros e biestábeis 1, 2, 3 e 4) co que introducirá unha latencia de catro ciclos; no modo de truncado o circuito posuirá dous rexistros (r. e b. 3 e 4) o que supón unha latencia de só dous ciclos.
- O parámetro VALOR_MAXIMO determina o valor de saturación para a última etapa combinacional do circuito. Pode fixarse a calquera valor enteiro entre 1 e 511, e non inflúe na estructura do circuito, só no funcionamento.
3.- Descrición dos terminais de entrada e saída.
Os terminais de entrada son:
· D_IN: bus de datos de entrada de 19 bits.
· DV_in: sinal de datos válidos á entrada. Este sinal só é relevante cando se realiza unha implementación con pipelining: neste caso o valor establecido no bus D_IN captúrase no primeiro rexistro de pipelining cando DV_in está a nivel alto e ocorre un flanco de reloxo ascendente. Cabe destacar que o tempo de establecemento para este rexistro dependerá do número de etapas combinacionais que deba atravesa-lo sinal de entrada antes de acada-la entrada do rexistro, ou o que é o mesmo, do nivel de pipelining establecido.
Se se realiza unha implementación totalmente combinacional este terminal pontéase directamente ó terminal de saída DV_out.
· Escala: bus de dúas liñas para a elección do factor de escala.
· Escala_WE: sinal de habilitación de escritura para o bus Escala. A captura destes datos ocorrerá cando Escala_WE estea a nivel alto e se produza un flanco de reloxo ascendente. O valor de Escala non forma parte da estructura pipeline do circuito: o rexistro só evita a necesidade de manter estábel o dato no bus Escala constantemente.
Os terminais de saída son:
· D_OUT: bus de saída de datos de 9 bits.
· DV_out: sinal de datos válidos no bus D_OUT. Este sinal actívase durante un ciclo de reloxo por cada dato válido que se presente no bus D_OUT cando se realiza unha implementación con pipeline; noutro caso reflexará sempre o valor do terminal DV_in, xa que se pontean directamente.
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
No hay comentarios:
Publicar un comentario