also ich arbeite seit einer weile (dezember oder so) an einem eigenen
z80-rechnersystem. ursprünglich war das mal ein "kleines"
schulprojekt... meine 15punkte habe ich abkassiert gebe mich mit dem
ergebnis noch lange nicht zufrieden :)
nun bin ich an einem punkt an dem ich gerne ein "eingabe-system"
hätte. ich dachte mir ich baue mir dazu ein modul (steckkarte) welches
mir die möglichkeit bietet eine ps2 tastatur+maus anzuschließen.
zunächst dachte ich da an eine schaltung komplett auf ttl bausteinen...
da ich aber schon länger mal was mit diesen tollen cpld-teilen machen
will hab ich mir gedacht entwerf ich den tastatur-controller auf einem
solchen baustein... so viel zur geschichte :)
ich habe hier jetzt diesen jtag-programmer von xilinx (der mit den zwei
HC125) zwei XC9536 und einen XC9572 (reichelt) und ...
... fragen: :)
- was ist denn eine macrozelle?
- kann ich im vhdl-code fest zuweißen welche pins meine einzelnen ports
bekommen? und wenn ja, verringert das dann die leistung/kapazität wegen
irgendwelchen komischen umwegen oder so?
ich habe nun mal versucht einen kleinen "test-controller" zu basteln
welchen ich mit meinem z80-system 'verbinden' kann... er hat
8Datenpins, 2Adresspins, IO-Read, IO-Write, M1... wenn ich einen wert
"in" ihn schreibe soll er diesen intern speichern und bei einem
lese-vorgang diesen gespeicherten wert auf den datenbus ausgeben...
ansonsten soll 'sein' datenbus im Z-State sein. Die Adressdecodierung
findet größten teils extern statt und über "abus" sollen vier interne
register beschrieben/gelesen werden können... außerdem fehlt noch ein
CS-Pin :)
1 | library IEEE;
|
2 | use IEEE.STD_LOGIC_1164.ALL;
|
3 | use IEEE.STD_LOGIC_ARITH.ALL;
|
4 | use IEEE.STD_LOGIC_UNSIGNED.ALL;
|
5 |
|
6 | entity main is
|
7 | port ( abus : in std_logic_vector(1 downto 0);
|
8 | dbus : inout std_logic_vector(7 downto 0) := "ZZZZZZZZ";
|
9 | ior : in std_logic;
|
10 | iow : in std_logic;
|
11 | m1 : in std_logic;
|
12 | count : out std_logic_vector(3 downto 0));
|
13 | end main;
|
14 |
|
15 | architecture Behavioral of main is
|
16 | signal reg : std_logic_vector(7 downto 0) := "00000000";
|
17 | begin
|
18 |
|
19 | process(iow)
|
20 | begin
|
21 | if(iow = '0' and m1 = '1') then
|
22 | reg <= dbus;
|
23 | end if;
|
24 | end process;
|
25 |
|
26 | process(ior)
|
27 | begin
|
28 | if(ior = '0' and m1 = '1') then
|
29 | dbus <= reg;
|
30 | elsif(ior = '1' and m1 = '1') then
|
31 | dbus <= "ZZZZZZZZ";
|
32 | end if;
|
33 | end process;
|
34 |
|
35 | end Behavioral;
|
wenn ich das für meinen XC9536 synthesize dann steht im fit-bericht das
ich 47% meiner macrozellen (was auch immer das bedeutet) bereits
verwendet habe... und wenn hier bereits die hälfte "verbraucht" ist
glaub ich kaum das ich das umsetzen kann was ich mir so gedacht habe...
kann man den obigen code irgendwie optimieren oder brauch ich da nen
größeren cpld/fpga? wenn ja, wo bekomme ich diese denn her? bei
reichelt gibts nur den XC9536 und den XC9572...
so... g ich hoffe dieser text ist einigermaßen verständlich und hab
hoffentlich nix vergessen
gruß
marcel