|
|
Elektronika.lt portalo forumas
Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo.
Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.
Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius,
kurie nesilaiko forumo taisyklių.
Pastebėjus nusižengimus, prašome pranešti.
Dabar yra 2024 12 24, 21:24. Visos datos yra GMT + 2 valandos.
|
|
|
|
Forumas » Skaitmeninė elektronika » Pagalbos su CPLD programavimu
|
Jūs negalite rašyti naujų pranešimų į šį forumą Jūs negalite atsakinėti į pranešimus šiame forume Jūs negalite redaguoti savo pranešimų šiame forume Jūs negalite ištrinti savo pranešimų šiame forume Jūs negalite dalyvauti apklausose šiame forume
|
|
|
Puslapis 1 iš 2 Pereiti prie 1, 2 Toliau |
|
|
|
|
Pagalbos su CPLD programavimu |
Parašytas: 2009 12 20, 15:16 |
|
|
|
Sveiki,
bandau perkast cpld programavima, bet nekaip sekasi...
Bandau parasyt programa (VHDL) counter'iui, kuris duomenis (start bitas ir 6 duomenu bitai) ishsiustu dviem laidais - clock ir data. clock palaikomas '0' kai niekas nesiunciama, kai clock=1, nuskaitomas data
Cia programos dalis atsakinga uz duomenu ishsiuntima:
Citata: |
port (
.
.
count_clk : out std_logic; -- clock out
count_data : out std_logic -- data out
);
architecture .....
.
.
signal count_drive : std_logic_vector(5 downto 0);
.
.
.............
send_data: process(count_clk, count_data)
begin
count_data <= count_drive (0);
wait for 10 ns;
count_clk <= '1';
wait for 10 ns;
count_clk <= '0';
count_data <= count_drive (1);
wait for 10 ns;
count_clk <= '1';
wait for 10 ns;
count_clk <= '0';
count_data <= count_drive (2);
wait for 10 ns;
count_clk <= '1';
wait for 10 ns;
count_clk <= '0';
count_data <= count_drive (3);
wait for 10 ns;
count_clk <= '1';
wait for 10 ns;
count_clk <= '0';
count_data <= count_drive (4);
wait for 10 ns;
count_clk <= '1';
wait for 10 ns;
count_clk <= '0';
count_data <= count_drive (5);
wait for 10 ns;
count_clk <= '1';
wait for 10 ns;
count_clk <= '0';
count_data <= '0';
end process send_data;
|
count_drive yra tai kas "suskaiciuota"
sitam "send_data:process" meta klaidas:
"Wait for statement unsupported"
"statement WAIT not allowed in a process with a sensitivity list"
Ka ne taip darau?
Kaip reiktu teisingai tokiu budu ishsiusti duomenis? |
|
_________________ I GAVE UP DRINKING, SMOKING AND SEX!
it was the worse 15 minutes of my life! |
|
|
|
|
|
Pagalbos su CPLD programavimu |
Parašytas: 2009 12 20, 16:33 |
|
|
|
wait for galioja tik simuliacijoje, kada simuliuoji pacio cpld veikima ir kompas nustato laika. Pats CPLD nezino, kiek laiko trunka tas tavo 10ns, todel tu turi pasidaryt clock divider'i iki 10ns ir skaiciuoti su tuo naujuoju clocku tiek periodu, kol bus 10ns.
Neaisku koks clockas uzkabintas pas tave.
P.S. Kokiu greiciu cia duomenys turi vaiksciot, kad toki perioda pasirinkai? |
|
|
|
|
|
|
Pagalbos su CPLD programavimu |
Parašytas: 2009 12 20, 17:18 |
|
|
|
Socrates rašo: |
wait for galioja tik simuliacijoje, kada simuliuoji pacio cpld veikima ir kompas nustato laika. Pats CPLD nezino, kiek laiko trunka tas tavo 10ns, todel tu turi pasidaryt clock divider'i iki 10ns ir skaiciuoti su tuo naujuoju clocku tiek periodu, kol bus 10ns.
Neaisku koks clockas uzkabintas pas tave.
................................ |
Aisku.
Kitos programos dalies veikimas planuojamas ant 50MHz isorinio clock'o.
Socrates rašo: |
..........................................
P.S. Kokiu greiciu cia duomenys turi vaiksciot, kad toki perioda pasirinkai? |
greicio uztenka ir labai mazo. Perioda pasirinkau bele koki, pabandymui ar pavyksta programa gerai surasyt.
Programa, kurios dalis parodyta, skirta ishsiusti 6 bitus deshifratoriui.
Pvz.
data - "010111"
kai ivykdoma salyga "count up"
data<= data+1
kai ivykdoma salyga "count down"
data<= data-1
Duomenu greitis - kad akis neuzfiksuotu LED uzsidegimo uzdelsimo nuo pvz knopkes paspaudimo, vien zo mazas.
-------------------
reikia ishsiusti 6 bitus 2 laidais.
As bandziau parasyti programa tokiem 2 variantams:
1. Isorinio clk nenaudojant, su tokiu "ale" clock'u, kol vidiniai skaitliuko duomenys nesikeicia, clock'a palaikyt '0'.
Kai tik vidiniai skaitliuko duomenys pasikeicia,
* i "data" laida paduodama nulinio bito (count_drive(0)) reiksme,
*po to clock<=1,
*po to kazkoks uzdelsimas (kad deshifratorius be klaidu nuskaitytu duomenis),
*po to clock<=0
toliau eilutes pazymetos * kartojasi, kol perduodami visi 6 bitai
Desifratorius nuskaitineja, kai clock=1
2. Su isoriniu clk.
ishsiunciami duomenys keiciami kai clk 1->0
pradzioj "start" bitas, po to 6 counterio bitai. Duomenys ishsiunciami viena karta, po to data<=0, start<=0.
start<=1, kai ivykdoma count_up arba count_down
deshifratorius nuskaitineja kai clk 0->1, pradeda nuskaitineti nuo sekancio bito, kai gauna '1' i data
-------------------------
Vien zo, fantazavau graziai, bet nieko nesigavo....
Reikalas toks, kad reikia kuo paprastesniu budu ishsiusti 6 bitus 2 laidais. |
|
_________________ I GAVE UP DRINKING, SMOKING AND SEX!
it was the worse 15 minutes of my life! |
|
|
|
|
|
Pagalbos su CPLD programavimu |
Parašytas: 2009 12 20, 19:00 |
|
|
|
Pagal antra varianta (su isoriniu clk) buvau parases su "wait until", kazka tokio:
....
wait until clk='1' and clk'event ;
data <= count_drive(0);
wait until clk = '1';
sitos 3 eilutes kartojasi kiekvienam data bitui. Klaidas rode, kazka su wait funkcija.
kas cia negerai? |
|
_________________ I GAVE UP DRINKING, SMOKING AND SEX!
it was the worse 15 minutes of my life! |
|
|
|
|
Pagalbos su CPLD programavimu |
Parašytas: 2009 12 20, 19:11 |
|
|
|
Chulio rašo: |
wait until clk='1' and clk'event ;
data <= count_drive(0);
wait until clk = '1';
|
Kodas: |
process(clk)
begin
if(clk'event and clk='1') then
data <= count_drive(0);
end if;
end process;
|
Tikiuosi supranti, kad situ atveju tau priskyrimas eis kiekviena clk eventa. Cia vidury dar reiktu iterpt if clk_div_counter=kazkokia_jau_pasiekta_reiksme ... ir tik tada daryt ta priskyrima. |
|
|
|
|
|
|
Pagalbos su CPLD programavimu |
Parašytas: 2009 12 20, 20:30 |
|
|
|
Socrates rašo: |
.................
Tikiuosi supranti, kad situ atveju tau priskyrimas eis kiekviena clk eventa. ....................................... |
Nesijuok, jei nusisnekesiu.... as dar tik mokausi...
Pagal sito 033 eilutes paaiskinima, supratau kad:
clk'event and clk='1' - reiskia, kad clk is 0 keiciasi i 1
clk='1' and clk'event - reiskia, kad clk is 1 keiciasi i 0
gerai? blogai?
Socrates rašo: |
.................
Cia vidury dar reiktu iterpt if clk_div_counter=kazkokia_jau_pasiekta_reiksme ... ir tik tada daryt ta priskyrima. |
??? |
|
_________________ I GAVE UP DRINKING, SMOKING AND SEX!
it was the worse 15 minutes of my life! |
|
|
|
|
|
Pagalbos su CPLD programavimu |
Parašytas: 2009 12 20, 21:18 |
|
|
|
Chulio rašo: |
Nesijuok, jei nusisnekesiu.... as dar tik mokausi...
Pagal sito 033 eilutes paaiskinima, supratau kad:
clk'event and clk='1' - reiskia, kad clk is 0 keiciasi i 1
clk='1' and clk'event - reiskia, kad clk is 1 keiciasi i 0
gerai? blogai?
|
Blogai
Zodis event reiskia, kad ivyksta veiksmas. Is cia:
clk'event and clk='1' - reiskia, kad clk is 0 keiciasi i 1 (cia teisingai mastei)
clk'event and clk='0' - reiskia, kad clk is 1 keiciasi i 0
Nesu tikras ar VHDL kalboje yra atitikmuo, bet berods Verilog turi kitokia sintakse, kazkas panasaus i: always @posedge(clk)... (posedge - positive edge afaik)
Nera skirtumo, jei as pasakysiu AS IR TU arba TU IR AS?
Socrates rašo: |
.................
Cia vidury dar reiktu iterpt if clk_div_counter=kazkokia_jau_pasiekta_reiksme ... ir tik tada daryt ta priskyrima. |
Jei darysi kaip aprasyta, tai ant kiekvieno clocko teigiamo fronto tau priskirs duomenis, kadangi tau reikia tai daryt tik kas pvz 10 clocko cikla, tai reikia daryt clock divideri. Jau kalbejom apie tai. |
|
|
|
|
|
|
Pagalbos su CPLD programavimu |
Parašytas: 2009 12 20, 21:31 |
|
|
|
Dekui uz kantrybe ir atsakymus, giliai miske keliais medziais sumazejo...
Rytoj bandysiu kazka daryt. |
|
_________________ I GAVE UP DRINKING, SMOKING AND SEX!
it was the worse 15 minutes of my life! |
|
|
|
|
|
Pagalbos su CPLD programavimu |
Parašytas: 2009 12 20, 22:10 |
|
|
|
Visgi rytdienos nesulaukiau...
Surasiau taip:
Kodas: |
if(count_clk'event and count_clk ='1') then
count_data <= start_bit;
end if;
if(count_clk'event and count_clk ='1') then
count_data <= count_drive (0);
end if;
if(count_clk'event and count_clk ='1') then
count_data <= count_drive (1);
end if;
if(count_clk'event and count_clk ='1') then
count_data <= count_drive (2);
end if;
if(count_clk'event and count_clk ='1') then
count_data <= count_drive (3);
end if;
if(count_clk'event and count_clk ='1') then
count_data <= count_drive (4);
end if;
if(count_clk'event and count_clk ='1') then
count_data <= count_drive (5);
end if;
|
Ar tai reiskia, kad sulig kiekvienu count_clk perejimu 0->1 bus pakeiciamas (priskiriami count_drive nuo 0 iki 5) dydis "count_data" ?
error'u neberodo, bet vat warning'u.... net skaiciuot tingisi...
[/quote] |
|
_________________ I GAVE UP DRINKING, SMOKING AND SEX!
it was the worse 15 minutes of my life! |
|
|
|
|
|
Pagalbos su CPLD programavimu |
Parašytas: 2009 12 20, 22:22 |
|
|
|
Jep, reiskia visi siti procesai vyksta 50MHz greiciu.
Toliau... FPGA (ar tavo atveju CPLD), veikia ne kaip procas, visas komandas darydamas nuosekliai, o LYGIAGRECIAI, todel visos count_data reiksmes prisiskirs vienu metu ant to pacio clock fronto. Cia reikia uzkurt vadinama state machine. Ir isvis, tavasis CPLD veza 50MHz? Koks cia CPLD? |
|
|
|
|
|
|
Pagalbos su CPLD programavimu |
Parašytas: 2009 12 20, 22:50 |
|
|
|
Socrates rašo: |
...........
Toliau... FPGA (ar tavo atveju CPLD), veikia ne kaip procas, visas komandas darydamas nuosekliai, o LYGIAGRECIAI, todel visos count_data reiksmes prisiskirs vienu metu ant to pacio clock fronto. ................
......................... |
f**k, vel medziu padaugejo.....
Socrates rašo: |
............................... Ir isvis, tavasis CPLD veza 50MHz? Koks cia CPLD? |
XC9572xl
Ciuju spjausiu ant to serijinio duomenu perdavimo, kurio reikejo vien del koju trukumo deshifratoriaus cpld.... paprasciau bus papildomas cpld...
Paraleliniam duomenu perdavimui jau buvau surases counterio ir deshifratoriaus programas be jokiu error'u ar warning'u |
|
_________________ I GAVE UP DRINKING, SMOKING AND SEX!
it was the worse 15 minutes of my life! |
|
|
|
|
Pagalbos su CPLD programavimu |
Parašytas: 2009 12 20, 23:25 |
|
|
|
Taigi daviau UART ir I2C pavyzdzius, uzkurk ir viskas Ar su uC darysi, ar su PC rysi, viskam tiks! |
|
|
|
|
|
Pagalbos su CPLD programavimu |
Parašytas: 2009 12 30, 09:42 |
|
|
|
Na va, iskilo dar keletas klausimeliu....
1. Kaip priskirti pin'us nubraizius logine schema? As tikejausi, kad bus "assign pin" ar kazkas panasaus, bet gal cia kaip mandriau pavadinta?
Kaip tai padaryti VHDL kode viskas aisku.
2. Kodel neina paziuret "symbol info" savam projekte? Raso "symbol not found".... Atsidarius "example" viska rodo...
3. Kaip ten pavadintas shmito trigeris, ar tokio nera?
Kalba eina apie xilInx softa.
P.S. nezinau kaip kitiems, bet man ta programa kazkokia nesamoninga, ypac help'as. Nezinau, cia gal as per durnas, bet man ten atrodo viskas pernelyg sudetinga, t.y. yra daug visko, bet labai jau sunku surast ko reikia.... |
|
_________________ I GAVE UP DRINKING, SMOKING AND SEX!
it was the worse 15 minutes of my life! |
|
|
|
|
|
Pagalbos su CPLD programavimu |
Parašytas: 2010 01 01, 17:32 |
|
|
|
Chulio rašo: |
Na va, iskilo dar keletas klausimeliu....
1. Kaip priskirti pin'us nubraizius logine schema? As tikejausi, kad bus "assign pin" ar kazkas panasaus, bet gal cia kaip mandriau pavadinta?
Kaip tai padaryti VHDL kode viskas aisku.
2. Kodel neina paziuret "symbol info" savam projekte? Raso "symbol not found".... Atsidarius "example" viska rodo...
3. Kaip ten pavadintas shmito trigeris, ar tokio nera?
Kalba eina apie xilInx softa.
P.S. nezinau kaip kitiems, bet man ta programa kazkokia nesamoninga, ypac help'as. Nezinau, cia gal as per durnas, bet man ten atrodo viskas pernelyg sudetinga, t.y. yra daug visko, bet labai jau sunku surast ko reikia.... |
1. Apie ISE WebPack sneki? As schemu nepaisau, viska rasau VHDL. Vienokiu ar kitokiu atveju visas priskyrimas yra *.ucf faile. Ji gali redaguot kad ir notepadu
2. Nezinau apie kokius simbolius eina kalba. Jei ten jie paisant schema, tai as tada negaliu atsakyt
3. Nezinau. Reik rasyt savo trigeri matyt
Visais atvejais siulau pasirinkt kalba ir daryt cpld dizaina su ja. VHDL ar Verilog tai cia jau pasirinkimo reikalas... Nors su VHDL eina 32bit float'us daryt... O jie dar ja vadina hardware description language |
|
|
|
|
|
|
|
Google paieška forume |
|
|
Naujos temos forume |
|
|
FS25 Tractors
Farming Simulator 25 Mods,
FS25 Maps,
FS25 Trucks |
|
ETS2 Mods
ETS2 Trucks,
ETS2 Bus,
Euro Truck Simulator 2 Mods
|
|
FS22 Tractors
Farming Simulator 22 Mods,
FS22 Maps,
FS25 Mods |
|
VAT calculator
VAT number check,
What is VAT,
How much is VAT |
|
LEGO
Mänguköök,
mudelautod,
nukuvanker |
|
Thermal monocular
Thermal vision camera,
Night vision ar scope,
Night vision spotting scope |
|
FS25 Mods
FS25 Harvesters,
FS25 Tractors Mods,
FS25 Maps Mods |
|
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija |
|
FS25 Mods
FS25 Maps,
FS25 Cheats,
FS25 Install Mods |
|
GTA 6 Weapons
GTA 6 Characters,
GTA 6 Map,
GTA 6 Vehicles |
|
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps |
|
ATS Trailers
American Truck Simulator Mods,
ATS Trucks,
ATS Maps |
|
|
|