Oscillateur

Principe de fonctionnement

L’entité Oscillator est un générateur de sinusoïdes. Son architecture n’effectue aucun calcul trigonométrique : elle s’appuie sur le tableau SINE_TABLE (voir le paquetage Vocoder_pkg) qui contient des valeurs de sinus calculées à l’avance et mises au format virgule fixe.

Pour remplir le tableau SINE_TABLE, nous avons calculé les échantillons d’une sinusoïde de fréquence 200 Hz, avec une fréquence d’échantillonnage de 20 kHz. Nous utiliserons le même tableau pour tous les oscillateurs du projet en considérant qu’ils produiront des sinusoïdes à des fréquences multiples de 200 Hz. Par exemple, pour générer une sinusoïde de fréquence 600 Hz, il suffit de parcourir le tableau SINE_TABLE en ne prenant qu’une valeur sur 3. Cette situation est illustrée sur cette figure :

Exemples de sinus échantillonés

En réalité, SINE_TABLE ne contient que les valeurs de sinus pour des angles de 0 à 90°. Pour obtenir les autres valeurs, on exploite les symétries de la fonction sinus.

Sens de parcours de la table des sinus

Sur la figure ci-dessus, les points en orange correspondent au contenu du tableau SINE_TABLE. Les points en bleu sont obtenus en changeant le sens de parcours et le signe de chaque élément :

L’entité Oscillator

Interface de l'entité Oscillator

L’entité Oscillator produit un flux de données en utilisant le protocole ready/valid. Elle joue le rôle de producteur :

Port Direction Type Rôle
clk_i Entrée Logique Le signal d’horloge global du système
reset_i Entrée Logique La commande de réinitialisation du système
step_i Entrée Entier Le pas de parcours du tableau SINE_TABLE, pour générer une sinusoïde de fréquence step_i×200 Hz
ready_i Entrée Logique Indique que le consommateur est prêt à recevoir un nouvel échantillon
data_o Sortie Virgule fixe (vocoder_coef_t) Une valeur de sinus

Comme la donnée de sortie est toujours valide, la présence d’un port valid_o n’est pas nécessaire : s’il y en avait un, il serait toujours à '1'.

Architecture

Nous ne vous demandons pas de réaliser l’architecture. Utilisez l’implémentation de référence fournie.

Implémentation de référence

Nous fournissons l’oscillateur prêt à l’emploi dans le fichier src/Oscillator/Oscillator-ref.vhd. Le contenu de ce fichier a été volontairement rendu illisible. Nous vous conseillons de ne pas perdre de temps à essayer de le rendre lisible.