www.mikrocontroller.net

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


Autor: A. M. (am85)
Datum:

Bewertung
0 lesenswert
nicht 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
  -- implement slave model software accessible register(s)
  SLAVE_REG_WRITE_PROC : process( Bus2IP_Clk ) is
  begin

    if Bus2IP_Clk'event and Bus2IP_Clk = '1' then
      if Bus2IP_Reset = '1' then
        slv_reg0 <= (others => '0');
        slv_reg1 <= (others => '0');
        --slv_reg2 <= (others => '0');
      else
        case slv_reg_write_sel is
          when "100" =>
            for byte_index in 0 to (C_SLV_DWIDTH/8)-1 loop
              if ( Bus2IP_BE(byte_index) = '1' ) then
                slv_reg0(byte_index*8 to byte_index*8+7) <= Bus2IP_Data(byte_index*8 to byte_index*8+7);
              end if;
            end loop;
          when "010" =>
            for byte_index in 0 to (C_SLV_DWIDTH/8)-1 loop
              if ( Bus2IP_BE(byte_index) = '1' ) then
                slv_reg1(byte_index*8 to byte_index*8+7) <= Bus2IP_Data(byte_index*8 to byte_index*8+7);
              end if;
            end loop;
--          when "001" =>
--            for byte_index in 0 to (C_SLV_DWIDTH/8)-1 loop
--              if ( Bus2IP_BE(byte_index) = '1' ) then
--                slv_reg2(byte_index*8 to byte_index*8+7) <= Bus2IP_Data(byte_index*8 to byte_index*8+7);
--              end if;
--            end loop;
          when others => null;
        end case;
      end if;
    end if;

  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.

Autor: A. M. (am85)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: A. M. (am85)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: A. M. (am85)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.