Fehlermeldung: Type error resolving infix expression "<=" as type ieee.std_logic_1164.STD_LOGIC.

Gast #4894093
Lesenswert?
• ▲
▼
Hallo Leute :)

Wie schon im Betreff angegeben, bekomme ich diese Fehlermeldung:
"Type error resolving infix expression "<=" as type 
ieee.std_logic_1164.STD_LOGIC."

Irgendwie habe ich auch im Internet nichts gefunden. Das Beispiel, was 
ich versucht habe zu programmieren, ist eigentlich sehr einfach.

Meine Idee war es einen 1 zu 4 Demultiplexer zu programmieren: Das 
Eingangsbit E soll, abhängig von der Selektionsvariable SEL, auf einen 
von vier Ausgängen geschalten werden. Die anderen Ausgänge sollen 
hochohmig sein. Ein Low-aktiver Freigabeeingang EN sorgt dafür, dass 
alle Ausgänge hochohmig werden, falls EN nicht aktiviert ist.

Das ist meine Entity + Architecture:
1
 library IEEE;
2
use IEEE.std_logic_1164.all;
3

4
entity demu is 
5
  port (e_i  : in  std_logic;
6
      en_i  : in  std_logic;
7
      sel_i  : in  std_logic_vector (1 downto 0);
8
      q_o  : out  std_logic_vector (3 downto 0));
9
end entity demu;
10

11
architecture rtl of demu is
12
begin 
13
  p_demu : process (e_i, sel_i, en_i)
14
    begin
15
      if en_i = '1' then 
16
        q_o <= (others => 'Z');
17
      else 
18
        case sel_i is 
19
          when "00" => q_o(0) <= e_i,
20
                 q_o(3 downto 1) <= (others => 'Z');
21
          
22
          when "01" => q_o(1) <= e_i,
23
                 q_o(3 downto 2) <= (others => 'Z'),
24
                 q_o(0) <= 'Z';
25
          
26
          when "10" => q_o(2) <= e_i,
27
                 q_o(3) <= 'Z',
28
                 q_o(1 downto 0) <= (others => 'Z');
29
          
30
          when others => q_o(3) <= 'Z',
31
                   q_o(2 downto 0) <= (others => 'Z');
32
        end case;
33
      end if;
34
  end process p_demu;
35
end architecture rtl;



Irgendwie habe ich das Gefühl, dass ich den Ausgang q_o so nicht 
beschalten kann aber ich hoffe ihr könnt mir da weiterhelfen.

MfG
#4894102
Lesenswert?
• ▲
▼
1
          when "01" => q_o(1) <= e_i,
2
                 q_o(3 downto 2) <= (others => 'Z'),
3
                 q_o(0) <= 'Z';

Vielleicht so:
1
          when "01" => 
2
                 q_o(1) <= e_i;
3
                 q_o(3 downto 2) <= (others => 'Z');
4
                 q_o(0) <= 'Z';

Allerdings bin ich mir nicht sicher, ob 'Z' ausserhalb des Toplevels (wo 
man die enable-Buffer des FPGA benutzt) überhaupt geht. Probiers aus...
Gast #4894109
Lesenswert?
• ▲
▼
Super, danke jetzt habe ich auch keine Fehlermeldungen mehr :)

Ist es eigentlich ratsam, nur einen Ausgang mit einer Datenbreite von 4 
Bit (in meinem Fall q_o) zu verwenden oder ist es ist eigentlich besser 
wenn ich vier Ausgänge mit jeweils einem Bit verwende?

MfG
#4894135
Lesenswert?
• ▲
▼
Johannes H. schrieb:
> Super, danke jetzt habe ich auch keine Fehlermeldungen mehr :)
>
> Ist es eigentlich ratsam, nur einen Ausgang mit einer Datenbreite von 4
> Bit (in meinem Fall q_o) zu verwenden oder ist es ist eigentlich besser
> wenn ich vier Ausgänge mit jeweils einem Bit verwende?
>
> MfG

Besser wofür? Für die Lesbarkeit eher nicht.

Der Synthese ist das relativ schnurz. Die macht so oder so dasselbe 
draus.
Moderator (Firma: Titel) Persönliche Seite #4894680
Lesenswert?
• ▲
▼
Du könntest es auch mit dem & Operator probieren:
1
          :
2
          when "00" =>   q_o <= "ZZZ" & e_i;
3
          when "01" =>   q_o <= "ZZ"  & e_i  & 'Z';
4
          when "10" =>   q_o <= 'Z'   & e_i  & "ZZ";
5
          when others => q_o <=         e_i  & "ZZZ";
6
          :
Oder es so machen:
1
      :
2
      q_o <= "ZZZZ"
3
      if en_i = '0' then 
4
        case sel_i is 
5
          when "00" =>   q_o(0) <= e_i;
6
          when "01" =>   q_o(1) <= e_i;
7
          when "10" =>   q_o(2) <= e_i;
8
          when others => q_o(3) <= e_i;
9
      :
Oder es so zu probieren:
1
      :
2
      q_o <= "ZZZZ"
3
      if en_i = '0' then 
4
          q_o(to_integer(unsigned(sel_i))) <= e_i; 
5
      end if;
6
      :
Da kann es aber seltsame Effekte bei der Simulation geben, und man 
müsste evtl. eine Zwischenvariable zur Hilfe nehmen...  :-/
Gast #4894724
Lesenswert?
• ▲
▼
Lothar M. schrieb:
>
1
>       :
2
>       q_o <= "ZZZZ"
3
>       if en_i = '0' then
4
>           q_o(to_integer(unsigned(sel_i))) <= e_i;
5
>       end if;
6
>       :
7
>
> Da kann es aber seltsame Effekte bei der Simulation geben, und man
> müsste evtl. eine Zwischenvariable zur Hilfe nehmen...  :-/

<citation needed> :o)

Wieso, das funktioniert zumindest mit GHDL und Modelsim prima, letzte 
Zuweisung gewinnt hat, ist ja ganz normal 'sequential'...
Moderator (Firma: Titel) Persönliche Seite #4894925
Lesenswert?
• ▲
▼
berndl schrieb:
> Wieso, das funktioniert zumindest mit GHDL und Modelsim prima
Sollte es auch... ;-)

> <citation needed>
Ich muss mal suchen, es könnte aber auch ein Problem mit einer Zuweisung 
von ausserhalb und innerhalb des Prozesses gewesen sein...

Wenn du's schon aufgesetzt hast, probier mal das. Es müsste auch gehen:
1
:
2
begin 
3
  q_o <= "ZZZZ";
4

5
  p_demu : process (e_i, sel_i, en_i)
6
    begin
7
      if en_i = '0' then 
8
          q_o(to_integer(unsigned(sel_i))) <= e_i; 
9
      end if;
10
  end process;
11
:

Und komplett nebenläufig und kompakt das hier:
1
:
2
begin 
3
  q_o <= "ZZZZ";
4
  q_o(to_integer(unsigned(sel_i))) <= e_i when en_i = '0'; -- else 'Z'; 
5
:
Dank der Auflösungstabelle könnte das auch gehen. Obwohl es nach Latch 
aussieht...

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.