Instanzen überbrücken - Bypass Frage

Gast #2934852
Lesenswert?

Hallo zusammen,

ich habe gerade einen Knoten im Kopf und hoffe, dass ich ihn mit Eurer 
Hilfe lösen kann.

Im Bild kann man sehen, was ich in etwa vorhabe:
Ich habe 12 Eingangspins, die jeweils eine doppelte Funktion haben. Die 
Funktion kann mit einem mode-Bit (der 13. Pin) umgeschaltet werden. Ziel 
ist es, mit diesem Mode-Pin Teile zu überbrücken.
Ich gebe also entweder alle 12 bit an Instanz 0, oder eben zwei 6bit 
Werte an Instanz 1.
Nun stehe ich irgendwie auf dem Schlauch, wie ich das lösen kann O_o
1
entity XYZ is
2
port (
3
  CLK    : in  std_logic;
4
  NRES   : in  std_logic;
5
  INPUT  : in  std_logic_vector (11 downto 0;
6
  MODE   : in  std_logic;
7
  OUTPUT : out std_logic
8
  );
9
end entity XYZ;
10

11
...
12

13
i0 : instanz0
14
port map (
15
  INPUT  => input_i0,
16
  OUTPUT1 => output1_i0,
17
  OUTPUT2 => output2_i0
18
  );
19

20
i0 : instanz1
21
port map (
22
  INPUT1 => input1_i1,
23
  INPUT2 => input2_i1,
24
  OUTPUT => output_i1
25
  );
26

27
-- Signale umswitchen
28
bypass : process
29
begin
30

31
  if MODE = '1' then
32
    input_i0 <= INPUT;
33
    input1_i1 <= output1_i0;
34
    input2_i1 <= output2_i0;
35
  else
36
    input1_i1 <= INPUT(11 downto 6);
37
    input2_i1 <= INPUT( 5 downto 0);
38
  end if;
39

40
  OUTPUT <= output_i1;
41
end process;
42

43
...

Irgendwie habe ich das Gefühl, dass es bei dieser Methode noch ein 
Hacken gibt bzw. man die ganze Sache noch etwas einfacher/eleganter 
lösen kann.
Leider habe ich gerade kein ISE da zum Ausprobieren und Testen.

Ich wäre für Hinweise sehr dankbar!
Phil
Angehängte Dateien:
Gast #2934944
Lesenswert?

Hallo,

R. K. schrieb:
> was ist mit input0 im unteren mode zweig?
input_i0 wird ja dann, wenn die Instanz überbrückt wird, nicht benötigt. 
Ich nehme an, so wie ich es geschrieben habe, ist der Eingang floating? 
Sollte aber auch keine Auswirkung haben, denn auch der Ausgang der 
Instanz 0 wird ja nicht mehr abgefragt.
Vielleicht lege ich ihn noch mit
1
input_i0 <= (others => '0');
auf Null und dann sollte das Thema gegessen sein?

Vielen Dank!
Phil
Gast #2935614
Lesenswert?

Hallo,

Klaus schrieb:
> Dann lad dir halt eins runter?!?
Das liegt wemiger am ISE, als eher an den Rechner Kapazitäten. Bin 
gerade nur mit dem Netbook in der FH unterwegs. Da lohnt kein ISE drauf.
Ich teste es dann, wenn ich daheim bin!

Aber da keine harten Widerworte kommen, nehme ich mal an, dass diese 
Lösung durchaus praktikabel sein kann...

Vielen Dank!
Gast #2935864
Lesenswert?

Hallo,

DuArte schrieb:
> Wo ist die Sensitivitätsliste für den Prozess?
Die fehlt - ist ja nur ein schnell beispielhaft zusammengeschriebener 
Code.

An sich wollte es so aussehen:
1
-- Signale umswitchen
2
bypass : process (MODE, INPUT, output1_i0, output2_i0, output_i1)
3
begin
4

5
  if MODE = '1' then
6
    input_i0 <= INPUT;
7
    input1_i1 <= output1_i0;
8
    input2_i1 <= output2_i0;
9
  else
10
    input1_i1 <= INPUT(11 downto 6);
11
    input2_i1 <= INPUT( 5 downto 0);
12
  end if;
13

14
  OUTPUT <= output_i1;
15
end process;
Moderator (Firma: Titel) Persönliche Seite #2936022
Lesenswert?

Philipp schrieb:
> An sich wollte es so aussehen: ...
Ich würde das eher so machen:
1
input_i0  <= INPUT;
2

3
-- Signale am i1 umswitchen
4
bypass : process (MODE, INPUT, output1_i0, output2_i0)
5
begin
6
  if MODE = '1' then
7
    input1_i1 <= output1_i0;
8
    input2_i1 <= output2_i0;
9
  else
10
    input1_i1 <= INPUT(11 downto 6);
11
    input2_i1 <= INPUT( 5 downto 0);
12
  end if;
13
end process;
14

15
OUTPUT    <= output_i1;
Denn der Output hat offenbar nichts mit dem Input und dem Mode zu tun.

Und am input_i0 darf der Eingang immer angeschlossen bleiben. Das ist 
sogar besser so, denn welchen Pegel sollte input_i0 annehmen, wenn 
Mode='0' ist? Schwuppdibohne hast du ein Latch an der Backe...   :-o
Gast #2937318
Lesenswert?

Hallo,

Dann lege ich den Input bei MODE='0' auf Masse. Dann sollte es wieder 
passen und ich finde es doch etwas übersichtlicher, wenn alle Signale in 
beiden Modi direkt untereinander geschrieben sind.
1
-- Signale umswitchen
2
bypass : process (MODE, INPUT, output1_i0, output2_i0, output_i1)
3
begin
4

5
  if MODE = '1' then
6
    input_i0  <= INPUT;
7
    input1_i1 <= output1_i0;
8
    input2_i1 <= output2_i0;
9
  else
10
    input_i0  <= (others => '0');    
11
    input1_i1 <= INPUT(11 downto 6);
12
    input2_i1 <= INPUT( 5 downto 0);
13
  end if;
14
end process;
15
  OUTPUT <= output_i1;

Oder hat das noch erhebliche Einflüsse auf das Syntheseergebnis?

Vielen Dank!
Phil
#2937871
Lesenswert?

Philipp schrieb:
> Oder hat das noch erhebliche Einflüsse auf das Syntheseergebnis?

Es kommt noch ein MUX am Eingang dazu.

Wenn Deine erste Instanz (die welche nur in Mode = '1' benötigt wird) 
sehr umfangreich ist, kann es aus Powersave-Gründen sogar sinnvoll sein, 
die Inputs und damit den ganzen Block nicht mittoggeln zu lassen.

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