V
vaibhav_sinha
Guest
Labas.
Aš parašė šią kodas RS232 imtuvo naudojant 8-N-1 protokolą.Bet kodas nėra elgiasi taip, kaip tikėtasi.Can someone please go per kodas ir derinimo ji?
biblioteka IEEE;
naudoti ieee.std_logic_1164.all;
subjekto gaunamo
port (iš naujo: į KALTAI;
rx: į KALTAI;
outp: iš bit_vector (7 downto 0);
CLK: į bitus);
pabaigos gauti;
Architektūra Arkos gauti yra
signalų skaičius: sveikasis skaičius nuo 0 iki 8000;
tipo būklės (nenaudojamas, paleisti, sustabdyti, vienas, du, trys, keturi, penki, šeši, septyni, aštuoni);
signalo pr_state: provincija;
signalo nx_state: provincija;
signalo vėliava: bitų;
pradėti
procesas (CLK, rx)
pradėti
jei naujo = "1", tada
vėliava <='0 ';
end if;
jei pr_state = nenaudojamas ir rx ='0 ', tada
vėliava <='1 ';
end if;
galutinio proceso;
procesas (vėliava, pr_state, reset)
pradėti
jei naujo = "1", tada
nx_state <= nenaudojamas;
end if;
atveju pr_state yra
kai nenaudojamas => jei vėliava ='0 ', tada
nx_state <= nenaudojamas;
kitas
nx_state <= paleisti;
end if;
kai start => nx_state <= vienas;
kai vienas => nx_state <= du;
outp (7) <= rx;
kai du => nx_state <= trys;
outp (6) <= rx;
kai trys => nx_state <= keturi;
outp (5) <= rx;
kai keturi =>
nx_state <= penki;
outp (4) <= rx;
kai penkios =>
nx_state <= šeši;
outp (3) <= rx;
kai šešios =>
nx_state <= septyni;
outp (2) <= rx;
kai septyni =>
nx_state <= aštuoni;
outp (1) <= rx;
kai aštuoni =>
nx_state <= sustabdyti;
outp (0) <= rx;
kai sustabdyti =>
nx_state <= nenaudojamas;
pabaigos atveju;
galutinio proceso;procesas (atstatyti, CLK)
pradėti
jei (naujo ='1 '), tada
count <= 0;
pr_state <= nenaudojamas;
kitas
jei (clk'EVENT ir CLK ='1 '), tada
jei count = 0, tada
pr_state <= nx_state;
jei pr_state = pradžios tada
count <= 7812;
elsif pr_state = stabdymo tada
count <= 0;
elsif pr_state / = nenaudojamas tada
count <= 5208;
end if;
kitas
count <= count-1;
end if;
end if;
end if;
galutinio proceso;
pabaigos Arkos;Šiuo kodu, kai nauja baitas turi būti gauta, mes turime atkurti pirmiausia.Ir vėliava tvirtino kai pradžioje šiek tiek aptinkama.
Laikrodis naudojamas 50MHz ir Baud norma yra 9600.
Todėl aš naudoju pavėlavus 50000000/9600 = 5208 laikrodžio ciklai.
Pirmiausia bitų, vėlavimas 7812 taip, kad būtų pasiekti centrą bit.
Aš parašė šią kodas RS232 imtuvo naudojant 8-N-1 protokolą.Bet kodas nėra elgiasi taip, kaip tikėtasi.Can someone please go per kodas ir derinimo ji?
biblioteka IEEE;
naudoti ieee.std_logic_1164.all;
subjekto gaunamo
port (iš naujo: į KALTAI;
rx: į KALTAI;
outp: iš bit_vector (7 downto 0);
CLK: į bitus);
pabaigos gauti;
Architektūra Arkos gauti yra
signalų skaičius: sveikasis skaičius nuo 0 iki 8000;
tipo būklės (nenaudojamas, paleisti, sustabdyti, vienas, du, trys, keturi, penki, šeši, septyni, aštuoni);
signalo pr_state: provincija;
signalo nx_state: provincija;
signalo vėliava: bitų;
pradėti
procesas (CLK, rx)
pradėti
jei naujo = "1", tada
vėliava <='0 ';
end if;
jei pr_state = nenaudojamas ir rx ='0 ', tada
vėliava <='1 ';
end if;
galutinio proceso;
procesas (vėliava, pr_state, reset)
pradėti
jei naujo = "1", tada
nx_state <= nenaudojamas;
end if;
atveju pr_state yra
kai nenaudojamas => jei vėliava ='0 ', tada
nx_state <= nenaudojamas;
kitas
nx_state <= paleisti;
end if;
kai start => nx_state <= vienas;
kai vienas => nx_state <= du;
outp (7) <= rx;
kai du => nx_state <= trys;
outp (6) <= rx;
kai trys => nx_state <= keturi;
outp (5) <= rx;
kai keturi =>
nx_state <= penki;
outp (4) <= rx;
kai penkios =>
nx_state <= šeši;
outp (3) <= rx;
kai šešios =>
nx_state <= septyni;
outp (2) <= rx;
kai septyni =>
nx_state <= aštuoni;
outp (1) <= rx;
kai aštuoni =>
nx_state <= sustabdyti;
outp (0) <= rx;
kai sustabdyti =>
nx_state <= nenaudojamas;
pabaigos atveju;
galutinio proceso;procesas (atstatyti, CLK)
pradėti
jei (naujo ='1 '), tada
count <= 0;
pr_state <= nenaudojamas;
kitas
jei (clk'EVENT ir CLK ='1 '), tada
jei count = 0, tada
pr_state <= nx_state;
jei pr_state = pradžios tada
count <= 7812;
elsif pr_state = stabdymo tada
count <= 0;
elsif pr_state / = nenaudojamas tada
count <= 5208;
end if;
kitas
count <= count-1;
end if;
end if;
end if;
galutinio proceso;
pabaigos Arkos;Šiuo kodu, kai nauja baitas turi būti gauta, mes turime atkurti pirmiausia.Ir vėliava tvirtino kai pradžioje šiek tiek aptinkama.
Laikrodis naudojamas 50MHz ir Baud norma yra 9600.
Todėl aš naudoju pavėlavus 50000000/9600 = 5208 laikrodžio ciklai.
Pirmiausia bitų, vėlavimas 7812 taip, kad būtų pasiekti centrą bit.