Forum: FPGA, VHDL & Co. Eigenen Code sauber in PLB Slave Template einbinden


von A. M. (am85)


Lesenswert?

Ich habe mir mal vor einiger Zeit einen Zähler mit variablem Vorteiler 
geschrieben, habe den in mein EDK Design eingebunden und er lief auch. 
Ich würde jetzt nur gerne wissen, ob die Art der Einbindung die 
sauberste ist. Konkret geht es um folgenden Code
1
  -- implement slave model software accessible register(s)
2
  SLAVE_REG_WRITE_PROC : process( Bus2IP_Clk ) is
3
  begin
4
5
    if Bus2IP_Clk'event and Bus2IP_Clk = '1' then
6
      if Bus2IP_Reset = '1' then
7
        slv_reg0 <= (others => '0');
8
        slv_reg1 <= (others => '0');
9
        --slv_reg2 <= (others => '0');
10
      else
11
        case slv_reg_write_sel is
12
          when "100" =>
13
            for byte_index in 0 to (C_SLV_DWIDTH/8)-1 loop
14
              if ( Bus2IP_BE(byte_index) = '1' ) then
15
                slv_reg0(byte_index*8 to byte_index*8+7) <= Bus2IP_Data(byte_index*8 to byte_index*8+7);
16
              end if;
17
            end loop;
18
          when "010" =>
19
            for byte_index in 0 to (C_SLV_DWIDTH/8)-1 loop
20
              if ( Bus2IP_BE(byte_index) = '1' ) then
21
                slv_reg1(byte_index*8 to byte_index*8+7) <= Bus2IP_Data(byte_index*8 to byte_index*8+7);
22
              end if;
23
            end loop;
24
--          when "001" =>
25
--            for byte_index in 0 to (C_SLV_DWIDTH/8)-1 loop
26
--              if ( Bus2IP_BE(byte_index) = '1' ) then
27
--                slv_reg2(byte_index*8 to byte_index*8+7) <= Bus2IP_Data(byte_index*8 to byte_index*8+7);
28
--              end if;
29
--            end loop;
30
          when others => null;
31
        end case;
32
      end if;
33
    end if;
34
35
  end process SLAVE_REG_WRITE_PROC;

In diesem Prozess werden die definierten Register ja vom Bus 
beschrieben. Um zu verhindern, dass er mir den Wert in einem Register 
überschreibt, habe ich den letzte Teil, der für dieses eine Register 
zuständig ist, auskommentiert. Kann man das so machen bzw. gibt es 
schönere und sauberere Lösung? Ich habe sonst keine Möglichkeit gesehen, 
aus meinem VHDL Code das Register zu beschreiben, ohne dass es dann zu 
Problemen kam.

von A. M. (am85)


Lesenswert?

Falls noch nicht ganz klar sein sollte, was ich genau meine, dann bitte 
einfach fragen. Ich versuche es dann etwas besser zu erklären, worauf 
ich hinaus will.

von Duke Scarring (Gast)


Lesenswert?

Hmm. Also mir ist nicht ganz klar, was Du meinst. Du hast ein Register, 
welches Du von Deinem Prozessor aus beschreiben kannst? Und jetzt willst 
Du eine Art Schreibschutz? Warum?

Duke

von A. M. (am85)


Lesenswert?

Jein, einen Schreibschutz will ich eigentlich nicht. Ich möchte nun die 
definierten Register sowohl vom Zähler (VHDL) als auch von meinem auf 
dem PowerPc Kern laufendenm Programm (C) die Register lesen und 
beschreiben können. Der Code oben wird von dem Peripheralwizard vom 
Xilinx EDK automatisch erstellt, nur meckert das Synthesewerkzeug rum, 
dass es für die Registersignale mehr als einen Treiber gibt, wenn ich 
aus einem anderen Prozess heraus auf das Register schreiben möchte, was 
ja auch richtig ist. Nun weiß ich aber nicht, wie ich aus meinem VHDL 
Code das Registersignal verändern kann, ohne dabei die PLB Struktur zu 
zerstören. Damit mein Zähler funktioniert, habe ich eben wie oben zu 
sehen ist, einige Zeilen auskommentiert. Ich weiß nun bloß nicht, ob das 
legitim ist oder nicht, denn sauber sieht es nicht aus. Funktionieren 
tut es aber scheinbar.

von Duke Scarring (Gast)


Lesenswert?

Gut. Durch das Auskommentieren, kannst Du aber nicht mehr vom Prozessor 
aus schreiben (lesen sollte noch gehen).

Ich würde in einem solchen Fall das write enable mit dem load 
Eingang des Zählers verbinden (natürlich nur, wenn die Adresse die 
richtige ist).

Duke

von A. M. (am85)


Angehängte Dateien:

Lesenswert?

Duke Scarring schrieb:
> Ich würde in einem solchen Fall das write enable mit dem load
> Eingang des Zählers verbinden (natürlich nur, wenn die Adresse die
> richtige ist).

Wie meinst du das genau? Ich hänge mal die beiden wichtigsten Dateien 
an, vielleicht könntest du mir daran ganz konkret zeigen, wie du es 
umsetzen würdest.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.