baudhastighet divisor

M

modeonz

Guest
Jeg bruker spartansk 3e ...jeg prøve å kommunisere med PC via seriell kommunikasjon .....Jeg bruker 50 mhz CLK .....Jeg ønsker å få 9600 baud rate å sende en 8-bits register ....hva er verdien av divisor burde jeg ta .....Jeg brukte 5208 til divisor også jeg forsøkt 1302 men jeg vet ikke tilsendt noe på hyberterminal ?!!!!!!whatshould jeg gjøreJeg laget denne koden

itried denne koden i simulatoren, og jeg bli en ekte produksjonen med usind divisor = 5 til legge merke til den utgang så jeg tror feilen vil være i baudhastighetc er klokken
y er TX

BIBLIOTEK IEEE;
BRUK ieee.std_logic_1164.all;
BRUK ieee.std_logic_arith.all;
Bruk ieee.std_logic_unsigned.all;ENTITY domstol IS
PORT (
c: IN std_logic;
rst: IN std_logic;
y: UT std_logic
);

- Erklæringer

END domstol;

- HDS interface_end
ARKITEKTUR muha AV domstol IS
signal tm: std_logic_vector (15 downto 0): = (andre => '0 ');
konstant div: heltall: = 5208;
signal CLK: std_logic;
signal opptatt: std_logic: = '0 ';
signal rotet: std_logic_vector (9 downto 0): = (andre => '0 ');
signal domstol: std_logic_vector (15 downto 0): = (andre => '0 ');
BEGIN
clkgen: prosess (rst, c)
begynner
hvis rst = '1 'deretter
tm <= (andre => '0 ');
CLK <= '0 ';
elsif c = '1 'deretter
CLK <= '0 ';
hvis tm = div deretter
tm <= (andre => '0 ');
CLK <= '1 ';
annet
tm <= tm 1;
end if;
end if;
end prosessen;
shif: prosess (c)
begynner
Hvis opptatt = '0 'og deretter
rotet <= "0111010111";
opptatt <= '1 ';
elsif (travle = '1 '), så
if (CLK '1 = 'og c = '1'), så
y <= rot (9);
søl (9 downto 1) <= rot (8 downto 0);
domstol <= domstolen 1;
end if;
end if;
dersom domstolen = 20 da
opptatt <= '0 ';
domstol <= (andre => '0 ');
end if;
end prosessen;
END muha;

 
Jeg kan ikke identifisere en klokke skillelinjen i design, har vi ingen kant følsomt uttrykk i prosessen.Enten rising_edge (c) eller (c'event og c = '1 ') vil være nødvendig for å gjøre opp en teller henholdsvis klokke skillelinjen.

Sammenlign med UART design som http://www.opencores.org/projects.cgi/web/uart/overview

 
jeg bruk i stedet for å stige kanten tilstanden til c = 1 og CLK = 1

 
Det er ikke en "edge" tilstand, som er et "nivå" tilstand.

På grunn av hva som ikke er oppført i følsomhet lister, så har du en rekke advarsler i synteserapport, som forteller deg at simulatoren ikke vil simulere hva verktøyene vil generere.

 
ja det er et nivå tilstand, men det har en nother tilstand som gjør det like kanten tilstand, er det fordi "prosess (c)" som gjør prosessen kjøres bare når endringen av klokken c gjort.så det genererer like ...og jeg er lei meg for alt det jeg oppdager fordi at feilen ikke var i koden
det var i kabelen

Jeg gjorde en feil ved å bruke "UNCROSSED" kabel i stedet for å krysse kabel.Jeg trodde det var over, men når jeg teste det jeg finner det ikke

takker alle for tiden din

 
Hvis utformingen fungerer på den måten, ville det være veldig rart: Klokken telleren er bygd av låsene i stedet for flip-flopper.Det kan være at Xilinx verktøyet har en mulighet til å slå låsene i flip-flops, ellers kan jeg nesten ikke forestille meg hvordan det skal dele klokken riktig.Men det burde være mitt problem.

 
Ok,

Jeg anbefaler deg å kartlegge din buadrate klokke (Y) på en ubrukt pinne av FPGA, og deretter sjekke den ved oscope.Hvis den ikke som du trenger forsøker å endre utformingen til du får det du trenger.Før du får en god klokke ikke begynne å jobbe på andre del av design.

Men det er åpenbart at koden ikke fungerer før du legger til en klokke kant tilstand i koden din.Jeg antar at du forvirret og du tenker liker Verilog ikke VHDL.I VHDL klokken kanten tilstanden er nødvendig.ellers fungerer det ikke.

 
Utformingen heller ikke ville fungere i Verilog, forårsake en alltid @ (c, rst) sammen med en (c == 1) tilstand trekker slutninger en klinke.Men syntaksen er faktisk veldig annerledes i denne forbindelse.Jeg lurer på, om Xilinx har også maler som tyder på en grunnleggende struktur for synkrone design som Altera har.I utgangspunktet bør du ha noe sånt som dette:
Kode:

prosess (c, rst)

begynner

hvis rst = '1 'deretter

- Tilbakestill action

elsif c'event og c = '1 'deretter

- Klokke handling for hver syklus

dersom CLK = '1 'deretter

- Betinget klokke action med CLK som aktiverer

end if;

end if;

end prosessen;
 
Jeg forsøkte ikke koden du ga meg, men dette er simulering av koden min bruker modelsim i Mentor grafikk programvare og det er den samme på ise8.2 simulator

jeg lage 2 enkle forskjell, men det er ikke reell forskjell ....jeg putte initial verdi for y = '1 '
og gjøre divisor = 2 for å merke endringen

du vil merke at den delt 3 fordi tilstanden jeg putte inn koden

Jeg vil prøve koden din for å forbedre mitt design

jeg er ikke profesjonelle i VHDL, først jeg forsøkt å gjøre koden ved hjelp kanten tilstand, men det fungerte ikke i simulatoren ...så jeg spør meg selv hva som er meningen med prosessen (a, b) det bety at prosessen vil kjøre whaen en endring i en eller b forekomme
så det kan være i stedet for å stige kanten, men ved første gang jeg gjorde det gjør skifte av 2 tall når jeg så på simuleringen jeg ser at det i gjør det på vekst og ikke kant på klokken genererte så jeg sette en annen forutsetning av at c = '1 'for å gjøre det et hakk gang hver klokke

Jeg tror jeg flytter fra et problem til et annet siden jeg begynner dette, men jeg vil prøve å løse dem alle, takk for din interesse [/ img]
Beklager, men du må logge inn for å vise dette vedlegget

 
Jeg forsøkte ikke koden du ga meg, men dette er simulering av koden min bruker modelsim i Mentor grafikk programvare og det er den samme på ise8.2 simulator

jeg lage 2 enkle forskjell, men det er ikke reell forskjell ....jeg putte initial verdi for y = '1 '
og gjøre divisor = 2 for å merke endringen

du vil merke at den delt 3 fordi tilstanden jeg putte inn koden

Jeg vil prøve koden din for å forbedre mitt design

jeg er ikke profesjonelle i VHDL, først jeg forsøkt å gjøre koden ved hjelp kanten tilstand, men det fungerte ikke i simulatoren ...så jeg spør meg selv hva som er meningen med prosessen (a, b) det bety at prosessen vil kjøre whaen en endring i en eller b forekomme
så det kan være i stedet for å stige kanten, men ved første gang jeg gjorde det gjør skifte av 2 tall når jeg så på simuleringen jeg ser at det i gjør det på vekst og ikke kant på klokken genererte så jeg sette en annen forutsetning av at c = '1 'for å gjøre det et hakk gang hver klokke

Jeg tror jeg flytter fra et problem til et annet siden jeg begynner dette, men jeg vil prøve å løse dem alle, takk for interessen
Beklager, men du må logge inn for å vise dette vedlegget

 
Jeg kan ikke se fra ModelSim bølgen hvis designen fungerer riktig, synes tm å telle med en divisor 4, frykter jeg, at i en reell FPGA eller en timing simulering, ville det ikke telle regelmessig i det hele tatt, for sa grunner.

I utgangspunktet en prosess sensitivitet listen ikke forsikre ikke, at koden blir evaluert på en kant, det har VHDL 'hendelse attributt henholdsvis rising_edge () / falling_edge ()-funksjonen for å oppnå dette.Et flip-flop, eller en teller, vil ikke bli generert uten å bruke denne konstruere, kan du konsultere alle VHDL lærebok.

 
ok, jeg vil bygge mitt design basert på at
men hva med denne koden
tror du jeg kan bruke den, arbeider det i simulatoren, men jeg gjorde ikke bruke den ennå i sanntid

BIBLIOTEK IEEE;
BRUK ieee.std_logic_1164.all;
BRUK ieee.std_logic_arith.all;
Bruk ieee.std_logic_unsigned.all;ENTITY teller IS
- Erklæringer
generiske (forsinkelse: tid: = 104166.6666ns);
port (CLK: i std_logic;
y: ut std_logic);
END teller;

- HDS interface_end
ARKITEKTUR oppførsel teller IS
BEGIN
prosess
begynner
vent for forsinkelse;
y <= '1 ';
vent for forsinkelse;
y <= '0 ';
end prosessen;
END atferd;også at vi kan bruke frekvensen i generisk

 

Welcome to EDABoard.com

Sponsor

Back
Top