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
> 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
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
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.
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;
> 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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.