Signale transportieren

Gast #1544173
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
Moderator (Firma: Titel) Persönliche Seite #1544196
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
Gast #1544239
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
Moderator (Firma: Titel) Persönliche Seite #1544248
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.
Gast #1544252
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;
Moderator (Firma: Titel) Persönliche Seite #1544263
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...
Moderator (Firma: Titel) Persönliche Seite #1544332
Lesenswert?

Na gut:
1
library IEEE;
2
use IEEE.std_logic_1164.all;
3
use IEEE.numeric_std.all;
4
use work.test_pack.all;
5

6
entity sram_controller_e is
7
  port(
8
    clk_i                  : in    std_ulogic;
9
    reset_n_i              : in    std_ulogic;
10
    fsm_start_addr_i       : in    std_ulogic_vector(18 downto 0);
11
    fsm_we_i               : in    std_ulogic;
12
    fsm_re_i               : in    std_ulogic;
13
    state_out              : out   fsm_t; --- Ausgang
14
    srctr_idle_o           : out   std_ulogic;
15
    srctr_we_reg_n_o       : out   std_ulogic;
16
    srctr_ce_reg_n_o       : out   std_ulogic;
17
    srctr_oe_reg_n_o       : out   std_ulogic;
18
    srctr_lb_reg_n_o       : out   std_ulogic;
19
    srctr_ub_reg_n_o       : out   std_ulogic;
20
    mem_data_b             : inout std_logic_vector(15 downto 0));
21
end sram_controller_e;
22

23
architecture sram_controller_a of sram_controller_e is
24

25
  signal state : fsm_t;
26
  signal addr_next : std_ulogic_vector(18 downto 0);
27
  signal addr_inc : std_ulogic_vector(18 downto 0);
28
  signal addr_reg : std_ulogic_vector(18 downto 0);
29

30
begin
31
  state_out <= state; -- state ausgeben
32
.
33
.
34
.
35
end sram_controller_a;
36

37
:
38
:
39
:
40

41
library IEEE;
42
use IEEE.std_logic_1164.all;
43
use IEEE.numeric_std.all;
44
use work.test_pack.all;
45

46
entity sram_controller_data_e is
47
  port(
48
    clk_i                  : in    std_ulogic;
49
    reset_n_i              : in    std_ulogic;
50
    audio_data_i           : in    std_ulogic_vector(23 downto 0);
51
    srctr_data_o           : out   std_ulogic_vector(23 downto 0);
52
    fsm_we_i               : in    std_ulogic;
53
    state_in               : in    fsm_t; --- Eingang
54
    srctr_end_addr_plus1_o : out   std_ulogic_vector(18 downto 0);
55
    srctr_addr_reg_o       : out   std_ulogic_vector(18 downto 0);
56
    mem_data_b             : inout std_logic_vector(15 downto 0));
57
end sram_controller_data_e;
58

59
architecture sram_controller_data_a of sram_controller_data_e is
60
.
61
.
62
.
63
begin
64
.
65
.
66
.
67
end sram_controller_data_a;
68

69

70
:
71
:
72
:
73

74
library IEEE;
75
use IEEE.std_logic_1164.all;
76
use IEEE.numeric_std.all;
77
use work.test_pack.all;
78

79
entity top_e is
80
  :
81
  :
82
end top_e;
83

84
architecture ... is
85
:
86
  component sram_controller_data_e is -- Komponente deklarieren
87
     port(... 
88
  end component;
89

90
  component sram_controller_e is -- Komponente deklarieren
91
     port(...
92
  end component;
93

94
  signal state : fsm_t  -- Verbindungssignal
95
  :
96

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

102
   sram_controller_data : sram_controller_data_e
103
      PORT MAP ( ..., state_in => state , ...);
104
:
105
:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren