8255 w VHDL...

Podobno w Cuplu to rzeznia zaimplementowac 8255 (tryb 0), za to w VHDL jest to wykonalne...Czy ktos slyszal o takim rozwiazaniu lub takowym dysponuje? Ewentualnie potrzebuje expresowego kursu VHDLa lub AHDLa (zeby napisac to cosik w Max+Plus). Prosze o pomoc.. Dziekuje i pozdrawiam Grzegorz.

Reply to
Grzegorz
Loading thread data ...

Na ile znam cupla to umiarkowana ..

J.

Reply to
J.F.

Użytkownik Grzegorz napisał:

Bezproblemowa sprawa napisać coś takiego, tylko za ile ?

Adam

Reply to
Górski Adam

A tu leży dużo gotowców w VHDL - od procesorów do kontrolerów LAN czy USB. Łatwo z tego zmontować cały system, który wejdzie do jednej kostki FPGA i jeszcze soft da się pisać w C:

formatting link

Reply to
Adam Dybkowski

"Grzegorz"

czyta Pan jeszcze ten watek ?

for i in data_bus_length to 0 generate data_bus[i] = tri(tristate_gate_input_logic,tristate_control_line); end generate;

tu jest przyklad, jak zrobic tristate bus: [wiem, ze niedokladnie o to chodzi w przykladzie powyzej]

SUBDESIGN test ( in[3..1][3..0] :input; oe[3..1] :input; out[3..0] :output; )

VARIABLE

trs_bus[3..0] :tri_state_node;

BEGIN

for j in 3 to 1 generate for i in 3 to 0 generate trs_bus[i] = TRI(in[j][i], oe[1]); trs_bus[i] = TRI(in[j][i], oe[2]); trs_bus[i] = TRI(in[j][i], oe[3]); out[i] = trs_bus[i]; end generate; end generate;

END;

taki tri-state bus nie bardzo ma sens, bo compiler i tak to przeksztalci do jakiegos multipleksera, w Alterze nie ma linii trzystanowych, wiec ja osobiscie wole sam to zrobic;

w Panskim przykladzie trzystanowy bus w ogole nie powinien sie pojawic, bo 'data_bus' ma tylko jeden driver, ale pewnie w calosci tych driverow jest wiecej ?

przyklad na taki wewnetrzny mux w AHDL napisalbym tak:

SUBDESIGN test ( data_inA[7..0] :input; data_inB[7..0] :input; data_inC[7..0] :input; ctrl[2..0] :input; data_out[7..0] :bidir; )

variable out_disable :node;

BEGIN

out_disable = ctrl[] == 0; -- tri-state output when ctrl is 0

for i in 7 to 0 generate data_out[i] = tri( (data_inA[i] & ctrl[] == 1) # (data_inB[i] & ctrl[] == 2) # (data_inC[i] & ctrl[] == 3), !out_disable); end generate;

END;

AHDL przy VHDL przypomina troche assembler, dlatego nie da sie 'mechanicznie' przepisac VHDL na AHDL, ale mi to nie przeszkadza; tym bardziej, ze uzywam Verilog :)

nie uzywalem nigdy graficznego edytora ... tri to tri-state, opndrn to open drain; jesli deklaruje Pan pin jako BIDIR, to z definicji musi byc jakis sygnal, ktory definiuje kiedy pin steruje linie, a kiedy jest nieaktywny; ten sygnal to Panskie OE;

trudno cos powiedziec, bez zobaczenia calosci, kompilator musial dojsc do wniosku, ze stan tych linii nie ma wplywu na wyjscia; w kazdym razie, w miare mozliwosci, sluze pomoca przy max-plus i AHDL :)

JA

Reply to
JA

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.