jueves, 8 de mayo de 2008

Creación do sinal

Plantéxase agora a implementación do bloque central da nosa arquitectura, un sistema que a partires dun valor para a columna e outro para a fila obterá unha mostra en cada
período de símbolo do sinal correspondente a xerar mentres a tecla estea pulsada.
Deberemos realizar tres accións máis elementais para conseguir esto, dada a información da que dispón o bloque:
  1. Detectar a pulsación e empezar a xerar o sinal
  2. Levar a conta do período de mostreo
  3. Obter o valor de cada mostra
Para a primeira tarefa introduciremos unha máquina de estados, que se encargará, ademais, de dar a orde de conversión ao controlador do convertidor. Para a segunda precisaremos un contador, que reducirá a frecuencia do oscilador de 50MHz da placa por un factor de 1000 aproximadamente, xa que a frecuencia de mostreo será de 50KHz. Finalmente, para o terceiro propósito será necesario un par de osciladores discretos e un sumador, que, a partir dunha orde da máquina de estados, produzan a seguinte mostra.

Ata este punto non se mencionou nada novo, o que restan son detalles de implementación.
A máquina de estados non ten segredo ningún: cando se pulsa unha tecla indica aos osciladores discretos de que poden realizar as inicializacións necesarias e a continuación introdúcese nun bucle que se executa unha vez para cada mostra, no que,en cada iteración, se lles da a orde de obter unha mostra e se comproba se a tecla segue pulsada. A continuación figura o diagrama de estados:





Aclaramos que o sinal seg_mostra levántase cando o contador acada certa cantidade precisada, neste caso será aproximadamente 1000. Este é o punto no que podemos xustificar a non existencia dun sinal busy que proceda do controlador do DAC, xa que o periodo de mostreo é o suficientemente longo como para que a transmisión serie ao DAC e a conversión finalicen antes da seguinte mostra. Esto simplifica a presente máquina de estados.

Sobre a conta do periodo de mostreo non son necesarias aclaracións: será un contador de 10 bits seguido dun combinacional que obteña o sinal seg_mostra.

Finalmente falaremos dos osciladores discretos, que constitúen o corazón de todo o sistema. Plantexámonos diversas opcións:
  1. Implementación mediante ipcore.
  2. Tabulacións e interpolacións.
  3. Creación dun módulo que realizara a función coseno mediante unha aproximación polinómica (Taylor) e outro que fose introducindo a fase instantánea.
  4. Emprego dun filtro IIR
Para cada unha das opcións, ademais, sería necesaria certa cantidade de memoria para almacenar coeficientes e demais parámetros.A continuación discutiremos cada unha das alternativas.
Pra comezar, descartamos os ipcores por diversas razóns, entre elas que non temos acceso á estructura interna/código, e polo tanto non podemos coñecer o seu grado de adecuación para a aplicación en cuestión, nin no que se refire a área, nin a velocidade. Ademais, sería evadir a verdadeira problemática deste proxecto, a parte mais complexa e que mais nos pode aportar.
As opcións 2 e 3 foron descartadas inicialmente pola necesidade de manter a fase instantánea, é dicir, sería preciso levar conta do número de mostra actual, para o que sería necesario un contador. O número de bits deste limitaría o tempo que podería producirse sinal, xa que ao desbordar produciríase unha discontinuidade no sinal de saida. Ademais acarrean un coste computacional elevado e unha necesidade grande de almacenamento en memoria de constantes.
Finalmente, a opción 4 foi a máis adecuada desde o noso punto de vista por diversas razóns:
  1. So se require do almacenamento dun coeficiente por cada tono a xerar.
  2. Emprega somentes un multiplicador e un restador, ademais de 2 rexistros.
  3. Un oscilador feito deste modo é a contraparte discreta dos osciladores senoidales analóxicos que empregan realimentación positiva, e deste xeito aprendemos a realizar osciladores que poidan ser útiles en sistemas máis complexos que funcionan en dixital.
  4. A nosa especialidade é a de comunicacións e escollemos esta asignatura para por en práctica os nosos coñecementos sobre teoría do sinal en FPGAs.

Na seguinte entrada desenvolveremos a implementación destes módulos de maneira detallada, así como a verificación na placa do sistema constituido por esta parte e o controlador do DAC.

No hay comentarios: