Ich bin Neuling bei den FPGAs und habe nur die grundlegenden
Digitaltechnikkenntnisse aus dem Studium und dem ASIC-Sektor. Es geht
mir um die grundsätzliche Beschaltung der FFs, wie sie von der Synthese
anhand des Codes bewerkstelligt wird.
Wie wirkt z.B. ein logischer Reset? wie wikren Initalwerte etc.
Im VHDL schreibe ich z.B. folgendes (Ich habe das jetzt mal Allgemein
gemacht) :
1 | process xyz (reset, powersave, clock)
|
2 |
|
3 | if (reset = '1') then
|
4 | register <= reset_value;
|
5 | elsif (powersave ='1') then
|
6 | -- nothing
|
7 | elsif rising_edge (clock) then
|
8 | if (init = '1') then
|
9 | regsiter <= init_value;
|
10 | else
|
11 | register <= input;
|
12 | end if;
|
13 | end if;
|
Das heisst, ich möchte das Register (und auch alle anderen vectoren
z.B.) bei einem Reset in einem Urzustand bringen, bei einem logischen
Reset (init) in einen Startzustand (das brauchen einige Schaltungen) und
im normalen Modus soll das register vom input gespeist werden, während
bei power save das Schaltwerk steht!
power save, reset und clock müssen dazu in die liste, nicht aber init,
da synchron,
Stimmt das soweit?
Nun die Frage: Was geschieht mit den FPGA-Registern bei einem
physikalischen device_reset ? Das ist ja nicht automatisch der Reset
von oben, oder ?
Was haben dann die Register für Werte ? Stehen dann da die Werte drin,
die ich bei der Signalgeneration signal : std_logic_vector (7 downto 0)
:= "01101110" z.B?
Wann werden diese Initialwerte überhaupt geladen? Schon beim
Hardwarereset, oder erstnachdem das FPGA aus dem Flash gealden wurde?
Ich dachte bisher, daß diese Initwerte genauso wie die RAMs im Initfile
des FPGAs stecken, das FPGA also keine definierten Werte hat, solange es
nicht geladen ist.
Jetzt zurück zur Schaltung: Abgesehen von dieser Initproblematik ist es
ja wohl so, daß ich in jedem Fall irgend einen Pin brauche, den ich als
Reset benutze. Wo und wann wirkt der ? Wirkt der auf den asynch clr der
Register? Wie wird das dann gemacht, wenn ich ein FF per reset auf Null
resetten will? Wird dann die Schaltung vom Tool negiert, so wie man das
beim ASIC machen würde (also überall ein "Not" hin?) - clr geht ja nur
auf Null,oder ?
Oder wirkt der über einen synchronen Eingang? Da der Reset von Aussen
kommt, muss man ihn ja oftmals (mehrfach) einsynchronisieren, da die
Schaltungen sonst nicht 100% gesynched sein können. Macht es dann
überhaupt Sinn, den als asynch-eingang zu deklarieren, zu betrachten?
Wie macht das das Tool? Geht es z.B. über der Register-Load Pin? MAchen
das alle Tools gleich?
Meinen logischen Init von oben müsste das tool jedenfalls über einen
load oder preset-Eingang verarbeiten können. Wie erfährt man in Xlinx
ISE, wie das real angeschlossen wurde? Ist das voll deterministisch,
oder passiert es, daß das toll bei FPGA Überfüllung Sachen anders baut,
um Register zu sparen, oder was auch immer ?
Kann ich am VHDL etwas verbessern, um das noch zielorientierter zu
machen, oder anders, kann ich etwas weglassen, um dem tool mehr
Freitheitsgrade zu geben und trotzdem dasselbe erhalten ?
Fragen über Fragen ...