VHDL binaire de 4 bits diviseur
Je suis en train de faire un diviseur binaire de faire partie d'une calculatrice à l'aide de VHDL, j'ai écrit le code qui je pense devrait fonctionner, mais ont été bloqués pendant des heures, quelqu'un peut s'il vous plaît aider moi.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity Div is
Port ( Ain : in STD_LOGIC_VECTOR (3 downto 0);
Bin : in STD_LOGIC_VECTOR (3 downto 0);
Q : out STD_LOGIC_VECTOR (3 downto 0);
R : out STD_LOGIC_VECTOR (3 downto 0));
end Div;
architecture Behavioral of Div is
Signal Atemp : Std_Logic_Vector (3 downto 0);
begin
Proc1: Process (Ain,Bin, Atemp)
variable cnt : STD_LOGIC_Vector(3 downto 0);
begin
if (Ain < Bin) then
cnt := "0000";
Atemp <= Ain;
elsif (Ain = Bin) then
cnt := "0001";
elsif (Ain > Bin) then
cnt := "0001";
Atemp <= (Ain - Bin);
while (Atemp >= Bin) loop
if(Atemp >=Bin) then
Atemp <= (Atemp - Bin);
cnt := cnt + "0001";
end if;
end loop;
end if;
Q <= cnt;
R <= Atemp;
end process Proc1;
end Behavioral;
- De quoi êtes-vous coincé sur? Avez-vous des erreurs de compilation? Êtes-vous à la simulation de votre conception? Nous avons besoin de plus de détails sur ce que votre problème spécifique.
- je reçois des avertissements AVERTISSEMENT:Xst:1710 - FF/Loquet <0> (sans initialisation de la valeur) a une valeur constante de 0 dans le bloc <2>(<3><div>). Ce FF/Loquet sera revue à la baisse au cours du processus d'optimisation. et ATTENTION:Xst:737 - 4-bits loquet pour signal <cnt> (et Atemp). Loquets peuvent être générés à partir incomplète cas ou si des instructions. Nous ne recommandons pas l'utilisation de verrous dans le FPGA/CPLD dessins, car ils peuvent conduire à des problèmes de calendrier.
Vous devez vous connecter pour publier un commentaire.
Dans l'itération partie de la ligne de partage processus, lorsque
Ain > Bin
, l'affecterAtemp <= (Ain - Bin)
est toujours effectuée, même si l'itération doit êtreterminé. Processus d'attribuer à un signal aussi de la sensibilité de la liste, est
dur pour obtenir le droit.
Le code peut être mis à jour avec Atemp comme une variable à la place, quelques autres
simplifications à l'enlèvement de la unrequired code, et en ajoutant de la valeur pour le reste
lorsque
Ain = Bin
, résultant dans l'architecture comme:Le processus intérieur déclarations peuvent effectivement être réduite à:
Si cela se synthétiser de la fréquence avec le déroulé
while
est une autre question, qui dépend de la cible de la fréquence et dede la technologie.
Une solution alternative, étant donné le peu de
Ain
etBin
, est de mettre en œuvre ladiviseur à l'aide d'une constante recherche de la table, avec adresse
Ain & Bin
et de sortiede
Q & R
. Cela permettra d'évaluer en temps fixe, et la synthèse est très probableréduire considérablement si le fait que la logique combinatoire.
Dernier commentaire, c'est que vous pouvez également gérer la division par zéro, lorsque
Bin
est égal à zéro.
Afin d'éviter des erreurs, il est conseillé d'utiliser explicitement le type non signé ou signé lors de la mise en œuvre des circuits arithmétiques. Le numeric_std paquet contient les opérateurs arithmétiques suivants pour les types suivants: +, -, *, /, abs, rem, mod.
Proposée ci-code (non signé) de la division. Notez que certaines lignes de l'arc peuvent être éliminés, mais ont été utilisés pour rendre le code plus "didactique".