La logique de <tmp> ne correspond pas à un FF connue ...

C

caosmaker

Guest
Salut à tous ...
Je suis nouveau dans CPLD et Verilog.Je travaille sur un CPLD de faire rapport cyclique des signaux basés sur un 50Hz et 10kHz sources externes et contrôlées thrue un registre spi.

Au moins, je crois, le spi doit être facile, mais j'ai un problème étrange:
J'ai fait un registre spi, et construit comme bibliothèque.Si je vérifie la syntaxe est tous ok, mais quand je compile le i CPLD avez cette erreur:Analyser module <dutyCycle> <work> dans la bibliothèque.ERREUR: XST: 899 - "dutyCycle.v" ligne 46: La logique de <tmp> ne correspond pas à un FF connus ou Latch modèle.
Le style de description que vous utilisez pour décrire un registre ou un verrou est pas pris en charge dans la version actuelle du logiciel.Voici le code:
Code:

module de rapport durée période (

entrée fduty, / / 10KHz

entrée fbase, / / 50Hz

SDI, / / Serial Data Input

entrée CLK, / / Serial Clock

SS entrée, / / Serial Sélectionner

sortie devoir, / / Uscita Duty Cycle!

sortie sdo / / sortie série de données

);reg [7:0] tmp;

reg [7:0] mybyte;

reg [7:0] en vente libre;

reg dutybit;

reg a;always @ (CLK posedge ou posedge ss)

commencer

if (ss)

commencer

mybyte <= tmp;

finif ((clk) & & (ss == 0))

commencer

tmp = (tmp [6:0], sdi);

fin

fin

assigner sdo = tmp [7];always @ (fduty posedge)

commencer

if (counter! = 100)

counter = counter 1;

autre

dutybit = 1;

finalways @ (fbase posedge)

commencer

counter = 0;

dutybit = 0;

finalways @ (fbase negedge)

commencer

counter = 0;

dutybit = 0;

finattribuer droit = dutybit;

endmodule

 
Vous n'avez pas encore entièrement définies signaux tels que tmp, mybyte, compteur et dutybit.Par exemple, vous dire ce que mybyte est attribué lors de SS est élevé, mais vous ne dites pas ce que mybyte est attribué lorsque les art est faible.Cela est également vrai de tmp.

Vous n'avez pas quelque chose de similaire avec comptoir et dutybit plus tard dans le code.

Et comme vous avez noté, il existe plusieurs autres sujets que vous aurez à résoudre.

rb

 
Comme l'a dit, je suis nouveau en VHDL et Verilog ...
J'ai copyed une source d'un «guichet» à partir d'un site avec de nombreuses sources pour les pièces de base.
Donc, je pense que si le compteur est affecté pendant la partie salut de SS, elle gardent la même valeur au cours de la basse.Ce n'est pas vrai?

Au démarrage, je ne me soucie pas des valeurs ravail, car au premier cycle tout aille au bon niveau, donc pas de statrup valeurs assignées.

 
Quote:

Donc, je pense que si le compteur est affecté pendant la partie salut de SS, elle gardent la même valeur au cours de la basse.
Ce n'est pas vrai?
 
J'ai beaucoup changé ma source ...
Tout d'abord ...Maintenant, il est écrit en langage VHDL ...
...puis j'ai réduit certains compteurs.

Code:

-------------------------------------------------- --------------------------------

- Compagnie:

- Ingénieur du son:

--

- Create Date: 13:04:47 12/26/2008

- Nom Design:

- Module Name: droit - Behavioral

- Nom du projet:

- Target Devices:

- Outil versions:

- Description:

--

- Dépendances:

--

- Révision:

- Version 0.01 - Fichier Créé

- Des observations complémentaires:

--

-------------------------------------------------- --------------------------------

Bibliothèque IEEE;

utilisation ieee.std_logic_1164.all;

utilisation IEEE.STD_LOGIC_ARITH.ALL;

utilisation IEEE.STD_LOGIC_UNSIGNED.ALL;---- Uncomment la déclaration suivante si la bibliothèque de l'instanciation

---- Tout Xilinx primitives dans ce code.

- Bibliothèque UNISIM;

- l'utilisation UNISIM.VComponents.all;devoir entité est

Port (préréglage: in std_logic_vector (3 downto 0);

addr: in std_logic;

fbase: in std_logic; - 100 Hz: vers le bas sur une période de un "court".
Ce signal doit être synchronisé à l'extérieur pour fduty (en baisse pour 1 cycle fduty)

fduty: in std_logic; - 100 * 32 = 3.2 kHz fréquence de base du rapport cyclique.

ss: in std_logic; - Select.
Lorsque addr SS = '1 'et les signaux de préréglage sont valides.

devoir: out std_logic); - Cycle des signaux.
De 0 à 100%, 32 étapes.

fin à l'obligation;Behavioral architecture du devoir est

signal compteur: std_logic_vector (3 downto 0); - compteur interne

intset signal: std_logic_vector (3 downto 0); - interne prédéfini, de charger chaque cycle fbase

commencer

processus (ss, addr)

begin - processus

- Charge synchrone de la présélection sur l'élévation de la SS (cycle de quarts complète)

- Charger uniquement si "l'adresse" (adr) à faible signal

si ss'event et ss = '1 'alors

si addr = '1 'alors

intset <= préétablis;

End If;

End If;

Terminer le processus;processus (fduty)

commencer

if (fduty'event et fduty = '0 ') then

if (fbase = '0 ') then

counter <= intset;

autre

if (compteur = "1111") then

Duty <= '0 '; - Lock comptoir.
OFF.

elsif (counter / = 0) alors

counter <= counter - 1; - Count down ....
-> 0

Duty <= '0 ';

autre

Duty <= '1 '; - Si zéro, arrêtez-vous et réglez SIGNAL "droit" à 1.

End If;

End If;

End If;

Terminer le processus;

fin de comportement;

 
<intset_0> est intset (0).
<intset_3> est intset (3).

Ce sont des mises en garde, pas d'erreurs.
Lorsque vous recevez cet avertissement, c'est parce que toute utilisation du "devoir" entité utilise "Preset" valeurs avec celles bits définir ou désactiver, selon l'avertissement.

Pour les bits 0, vos chiffres sont tout même.
Pour les bits 3, vous les numéros sont tous> 7.

 

Welcome to EDABoard.com

Sponsor

Back
Top