www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Signale transportieren


Autor: Crouch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,
wie kann ich Signale in VHDL von einer in die andere Entity/Archi 
bekommen.

Ich muss also ein State einer Statemachine (zb. READ_MEM_3) in zwei 
Entity/Arch verwenden. Weiß aber nicht wie ich es von der einen in die 
andere bekommen.
Danke für die Hilfe.

Mfg: Crouch

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Weiß aber nicht wie ich es von der einen in die andere bekommen.
Die Schnittstelle einer Entity ist der Port.

Du mußt also:
1. die Typdefinition der FSM in ein Package (z.B. package xxx) verpacken
2. dieses in jede der vhdl-Dateien einbinden (use work.xxx.all)
3. in jeder Entity in der Port-Liste ein Signal des Typs der FSM 
aufnehmen
4. dieses Signal in den Komponenten verdrahten

Das ist ein gnadenloser Aufwand. Und absolut unnötig, wenn du z.B. nur 
wissen willst, ob deine FSM noch beschäftigt oder bereits im Ruhezustand 
ist. Dann würde ich eher ein Signal busy oder active definieren...
Etwa so, wie in dieser Division: 
http://www.lothar-miller.de/s9y/categories/24-Division

Autor: Crouch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
use work.test_pack.all;

entity sram_controller_e is
  port(
    clk_i                  : in    std_ulogic;
    reset_n_i              : in    std_ulogic;
    fsm_start_addr_i       : in    std_ulogic_vector(18 downto 0);
    fsm_we_i               : in    std_ulogic;
    fsm_re_i               : in    std_ulogic;
    srctr_idle_o           : out   std_ulogic;
    srctr_we_reg_n_o       : out   std_ulogic;
    srctr_ce_reg_n_o       : out   std_ulogic;
    srctr_oe_reg_n_o       : out   std_ulogic;
    srctr_lb_reg_n_o       : out   std_ulogic;
    srctr_ub_reg_n_o       : out   std_ulogic;
    mem_data_b             : inout std_logic_vector(15 downto 0));
end sram_controller_e;

architecture sram_controller_a of sram_controller_e is

  signal state : fsm_t;
  signal addr_next : std_ulogic_vector(18 downto 0);
  signal addr_inc : std_ulogic_vector(18 downto 0);
  signal addr_reg : std_ulogic_vector(18 downto 0);

begin
.
.
.
end sram_controller_a;

----------------------------------------------------------------------
Die drei oberen Signale müssen aus der Architecture ein meine zweite 
Architecture. (Ich kann das leider nicht anders machen is nee 
Laborübung).
state ist bereits in einem package definiert.
----------------------------------------------------------------------

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
use work.test_pack.all;

entity sram_controller_data_e is
  port(
    clk_i                  : in    std_ulogic;
    reset_n_i              : in    std_ulogic;
    audio_data_i           : in    std_ulogic_vector(23 downto 0);
    srctr_data_o           : out   std_ulogic_vector(23 downto 0);
    fsm_we_i               : in    std_ulogic;
    srctr_end_addr_plus1_o : out   std_ulogic_vector(18 downto 0);
    srctr_addr_reg_o       : out   std_ulogic_vector(18 downto 0);
    mem_data_b             : inout std_logic_vector(15 downto 0));
end sram_controller_data_e;

architecture sram_controller_data_a of sram_controller_data_e is

.
.
.

begin

----------------------------------------------------------------------
Und in die oben drüber beschriebne Archi. müssen die Signale.
----------------------------------------------------------------------

Würd mich sehr über weitere Hilfe freuen, hab mir schn den ganzen Tag 
den Kopf zerbrochen.
Danke
Gruß Crouch

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Crouch schrieb:
> Die drei oberen Signale
Also die hier:
  signal state : fsm_t;
  signal addr_next : std_ulogic_vector(18 downto 0);
  signal addr_inc : std_ulogic_vector(18 downto 0);

addr_next und addr_inc dürften ja wohl einfach sein...
Zu fsm_t : wo ist state definiert?

EDIT:
Das hatte ich übersehen
>> state ist bereits in einem package definiert.
Dann ist das ja wohl genauso einfach wie die beiden anderen Signale.

Autor: Crouch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Srry, ich meinte eigetnlich die vier Signale aus der oberen Arch.

state definiert im package test_pack:

library ieee;
use ieee.std_logic_1164.all;
use IEEE.numeric_std.all;

package test_pack is
  type FSM_t is (FSM_IDLE, FSM_READ_MEM_1, FSM_READ_MEM_2,
                  FSM_READ_MEM_3, FSM_WRITE_MEM_1, FSM_WRITE_MEM_2,
FSM_WRITE_MEM_3);

  function "+" (
    constant l, r : std_ulogic_vector)
    return std_ulogic_vector;

end test_pack;

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Die drei oberen Signale müssen aus der Architecture ein meine zweite
> Architecture.
Dann erweiterst du den Port der oberen Entity um drei Signale mit der 
Richtung out und weist denen die internen Signale zu.

Und du erweiterst den Port der unteren Entity um drei in Signale mit 
(am einfachsten) dem gleichem Namen.

Und dann instatiierst du eine Ebene höher zwei Komponenten 
(sram_controller_data_e und sram_controller_e) und verbindest in der 
Port-Liste die entsprechenden Signale. Wie du es mit den ganzen anderen 
Signalen der Ports auch machst...

Autor: Crouch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
könntest du mir das für ein Signal mal Beispielhaft notieren.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na gut:
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
use work.test_pack.all;

entity sram_controller_e is
  port(
    clk_i                  : in    std_ulogic;
    reset_n_i              : in    std_ulogic;
    fsm_start_addr_i       : in    std_ulogic_vector(18 downto 0);
    fsm_we_i               : in    std_ulogic;
    fsm_re_i               : in    std_ulogic;
    state_out              : out   fsm_t; --- Ausgang
    srctr_idle_o           : out   std_ulogic;
    srctr_we_reg_n_o       : out   std_ulogic;
    srctr_ce_reg_n_o       : out   std_ulogic;
    srctr_oe_reg_n_o       : out   std_ulogic;
    srctr_lb_reg_n_o       : out   std_ulogic;
    srctr_ub_reg_n_o       : out   std_ulogic;
    mem_data_b             : inout std_logic_vector(15 downto 0));
end sram_controller_e;

architecture sram_controller_a of sram_controller_e is

  signal state : fsm_t;
  signal addr_next : std_ulogic_vector(18 downto 0);
  signal addr_inc : std_ulogic_vector(18 downto 0);
  signal addr_reg : std_ulogic_vector(18 downto 0);

begin
  state_out <= state; -- state ausgeben
.
.
.
end sram_controller_a;

:
:
:

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
use work.test_pack.all;

entity sram_controller_data_e is
  port(
    clk_i                  : in    std_ulogic;
    reset_n_i              : in    std_ulogic;
    audio_data_i           : in    std_ulogic_vector(23 downto 0);
    srctr_data_o           : out   std_ulogic_vector(23 downto 0);
    fsm_we_i               : in    std_ulogic;
    state_in               : in    fsm_t; --- Eingang
    srctr_end_addr_plus1_o : out   std_ulogic_vector(18 downto 0);
    srctr_addr_reg_o       : out   std_ulogic_vector(18 downto 0);
    mem_data_b             : inout std_logic_vector(15 downto 0));
end sram_controller_data_e;

architecture sram_controller_data_a of sram_controller_data_e is
.
.
.
begin
.
.
.
end sram_controller_data_a;


:
:
:

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
use work.test_pack.all;

entity top_e is
  :
  :
end top_e;

architecture ... is
:
  component sram_controller_data_e is -- Komponente deklarieren
     port(... 
  end component;

  component sram_controller_e is -- Komponente deklarieren
     port(...
  end component;

  signal state : fsm_t  -- Verbindungssignal
  :

begin
  -- hier erfolgt die eigentliche Verbindung mit dem Signal state
  sram_controller : sram_controller_e 
      PORT MAP ( ..., state_out => state , ...);

   sram_controller_data : sram_controller_data_e
      PORT MAP ( ..., state_in => state , ...);
:
:

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.