Forum: FPGA, VHDL & Co. Signale transportieren


von Crouch (Gast)


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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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

von Crouch (Gast)


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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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.

von Crouch (Gast)


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;

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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...

von Crouch (Gast)


Lesenswert?

könntest du mir das für ein Signal mal Beispielhaft notieren.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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
:

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.