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.
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:
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:
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 :)
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.