2009-12-10 11 views
1

Salutations à tous.Changement du mode temporel dans une horloge numérique de 12HR à 24HR en VHDL

Je suis en train de concevoir une horloge numérique en VHDL que je suis supposé synthétiser sur un FPGA. Je suis en cascade S1, S2, M1, M2, H1 et H2 où (S1 = seconde 1, M1 = Minute 1, H1 = heure 1 etc.). L'une des exigences est que l'horloge passe de l'affichage 24HR à l'affichage 12HR. Comment dois-je le faire étant donné que H1 et H2 sont représentés par 4 bits chacun, c'est-à-dire 8 bits au total pour afficher l'heure actuelle. Aurai-je besoin de concaténer HR1 et HR2, puis de soustraire 12 et de le dé-concaténer à nouveau? Gardez à l'esprit que X mod 12 n'est pas une opération synthétisable pour la mise en œuvre dans FPGA.

Merci beaucoup.

+0

'mod 12' peut ne pas être une opération de synthèse, mais il est facile de construire des compteurs mod12 ... – Marty

+1

mod12 est synthétisable –

Répondre

1

Fondamentalement, vous faites tout votre arithmétique en décimal codé binaire (BCD). Il suffit donc de construire un comparateur/soustracteur BCD:

if h1 = 1 and h2 > 2 
    subtract 1 off h1 
    subtract 2 off h2 
    if h2 wrapped 
    subtract 1 off h1 

Aucun accessoire requis!

0

Si vous disposez de ressources supplémentaires, vous pouvez doubler les registres H. Laissez H24-1 et H24-2 (comme vous l'avez déjà fait) et H12-1 et H12-2 "mod12" registres à côté. Les deux paires seront synchronisées tout le temps, donc vous aurez les deux formats prêts à chaque cycle d'horloge. Il suffit d'utiliser quelques MUX pour changer lequel d'entre eux sont affichés.