Hallo, ich habe unter Simulink ein SRAM Controller zusammengesetzt und habe dieses Model dann in ein VHDL ISE Project eingebunden, weil ich die DCM verwende. Da der datenbus des SRAm bidirektional ist, muss ich nun dem FPGA irgednwie mitteilen wann er IN und wann out ist. Die wollte ich mit Tristate machen. Allerdings gibt mir die ISE beim synthetisieren folgende Fehlermeldung aus: ERROR:HDLParsers:1401 - "C:/Dokumente und Einstellungen/menzlo1/Desktop/ZBT_SRAM_CY/ZBT_SRAM_TOP.vhd" Line 122. Object OE_n of mode OUT can not be read. Ich habe in meinem SRAM Controller Model Einen Datenbus für in und out festgelegt. Wann der Datenbus IN oder OUT ist wird von dem OE_n (Output enable) bestimmt. Allerdings ist bei mir das OE_n kein signal sondern ein PIN , der direkt mit dem SRAM verbunden ist. Also ein ":out std_logic". ICh denek mal, dass hier auch genau das Problem liegt. aber wie löse ich das nun? Muss ich mir Parallel zum PIN OE_N, wo das Steuersignal für den SRAM gesendet wird, nun noch ein Signal OE_n erzeugen??? Oder wie????
@GAST (Gast) >festgelegt. Wann der Datenbus IN oder OUT ist wird von dem OE_n (Output >enable) bestimmt. Allerdings ist bei mir das OE_n kein signal sondern >ein PIN , der direkt mit dem SRAM verbunden ist. Also ein ":out >std_logic". >ICh denek mal, dass hier auch genau das Problem liegt. aber wie löse ich >das nun? Du musst ein internes Signal als "Zwischenpuffer" definieren. Das kann man dann zur Datenbussteuerung nehmen und gleichzeitig auf ein Ausgnagspin legen. MFG Falk
1 | -- Entity Signale
|
2 | data : inout std_logic_vector(7 downt0 0); |
3 | oe : std_logic; |
4 | |
5 | -- interne Signale
|
6 | |
7 | signal oe_int; |
8 | signal data_int : std_logic_vector(7 downt0 0); |
9 | |
10 | -- Nutzung
|
11 | |
12 | oe <= oe_int; |
13 | data <= data_int when oe_int = '1' else "ZZZZZZZZ"; |
Ok, dass was du da geschrieben hast verstehe ich auch. Nur gibts da ein Problem, weil das... Schau dir einfach mal eben den Code dazu an:
1 | entity ZBT_SRAM_TOP is |
2 | Port ( |
3 | Addr : out STD_LOGIC_VECTOR (17 downto 0); |
4 | Dinout : inout STD_LOGIC_VECTOR (15 downto 0); |
5 | Mode : out STD_LOGIC; |
6 | Clk_SRAM : out STD_LOGIC; |
7 | CE_n : out STD_LOGIC; |
8 | OE_n : out STD_LOGIC; |
9 | AdvLd_n : out STD_LOGIC; |
10 | BwA_n : out STD_LOGIC; |
11 | BwB_n : out STD_LOGIC; |
12 | BwC_n : out STD_LOGIC; |
13 | BwD_n : out STD_LOGIC; |
14 | WE_n : out STD_LOGIC; |
15 | Zz : out STD_LOGIC; |
16 | Clk_feedback : in STD_LOGIC; |
17 | Clk_in : in STD_LOGIC; |
18 | LED : out STD_LOGIC |
19 | );
|
20 | end ZBT_SRAM_TOP; |
21 | |
22 | architecture Behavioral of ZBT_SRAM_TOP is |
23 | |
24 | component DCM_manager |
25 | PORT ( |
26 | U1_CLKFB_IN : in STD_LOGIC; |
27 | U1_CLKIN_IN : in STD_LOGIC; |
28 | U1_CLKIN_IBUFG_OUT: out STD_LOGIC; |
29 | U1_CLK0_OUT : out STD_LOGIC; |
30 | U2_CLK0_OUT : out STD_LOGIC |
31 | );
|
32 | end component DCM_manager; |
33 | |
34 | component ZBT_controller |
35 | PORT ( |
36 | Addr : out STD_LOGIC_VECTOR (17 downto 0); |
37 | Din : in STD_LOGIC_VECTOR (15 downto 0); |
38 | Dout : out STD_LOGIC_VECTOR (15 downto 0); |
39 | Mode : out STD_LOGIC; |
40 | CE_n : out STD_LOGIC; |
41 | OE_n : out STD_LOGIC; |
42 | AdvLd_n : out STD_LOGIC; |
43 | BwA_n : out STD_LOGIC; |
44 | BwB_n : out STD_LOGIC; |
45 | BwC_n : out STD_LOGIC; |
46 | BwD_n : out STD_LOGIC; |
47 | WE_n : out STD_LOGIC; |
48 | Zz : out STD_LOGIC; |
49 | Clk_global : in STD_LOGIC; |
50 | LED : out STD_LOGIC |
51 | );
|
52 | end component ZBT_controller; |
53 | |
54 | signal Clk_global_s : STD_LOGIC; |
55 | signal Din_s : STD_LOGIC_VECTOR (15 downto 0); |
56 | signal Dout_s : STD_LOGIC_VECTOR (15 downto 0); |
57 | signal OE_s : STD_LOGIC; |
58 | |
59 | |
60 | |
61 | begin
|
62 | |
63 | inst_DCM_manager : DCM_manager |
64 | port map( |
65 | U1_CLKFB_IN => Clk_feedback, |
66 | U1_CLKIN_IN => Clk_in, |
67 | U1_CLKIN_IBUFG_OUT => open, |
68 | U1_CLK0_OUT => Clk_global_s, |
69 | U2_CLK0_OUT => Clk_SRAM |
70 | );
|
71 | |
72 | inst_ZBT_controller : ZBT_controller |
73 | port map( |
74 | Addr => Addr, |
75 | Mode => Mode, |
76 | Din => Din_s, |
77 | Dout => Dout_s, |
78 | CE_n => CE_n, |
79 | OE_n => OE_s, |
80 | AdvLd_n => AdvLd_n, |
81 | BwA_n => BwA_n, |
82 | BwB_n => BwB_n, |
83 | BwC_n => BwC_n, |
84 | BwD_n => BwD_n, |
85 | WE_n => WE_n, |
86 | Zz => Zz, |
87 | Clk_global => Clk_global_s, |
88 | LED => LED |
89 | );
|
90 | (
|
91 | OE_s => OE_n; |
92 | ;)
|
93 | |
94 | Dinout <= Din_s when OE_s = '0' else "ZZZZZZZZZZZZZZZZ"; |
95 | Dout_s <= Dinout; |
96 | |
97 | end Behavioral; |
Da ist einiges verkorkst.
1 | OE_n <= OE_s; |
2 | Dinout <= Dout_s when OE_s = '0' else "ZZZZZZZZZZZZZZZZ"; |
3 | Din_s <= Dinout; |
4 | |
5 | end Behavioral; |
MFG Falk
Oh ja! Danke für die Hilfe. Werde es gleich ausprobieren! DANKE!
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.