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:
- Detectar a pulsación e empezar a xerar o sinal
- Levar a conta do período de mostreo
- Obter o valor de cada 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:
- Implementación mediante ipcore.
- Tabulacións e interpolacións.
- 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.
- Emprego dun filtro IIR
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:
- So se require do almacenamento dun coeficiente por cada tono a xerar.
- Emprega somentes un multiplicador e un restador, ademais de 2 rexistros.
- 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.
- 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:
Publicar un comentario