mikrocontroller.net

Forum: FPGA, VHDL & Co. Fehler beim Kodieren mit vhdl


Autor: Eddy Hoffmann (Firma: student) (eddy_2007)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich versuche ein Multiplexer mittels VHDL zu schreiben, der mir auch 
Parallel mehrere Signale gleichzeizig multipleziert...
(da ich neu mit VHDL bin) ich habe aber paar Verständnis Probleme...

ich habe 6 Multiplexer erstellt IC1,IC2...IC6, ich habe aber nur eine 
definiert (denn sie sollen ähnliche Eigenschaften haben) und davon den 6 
gewünschten Multiplexern instanziert..

architecture Behavioral of behav is


           component IC
      Port ( Clk : in STD_LOGIC;
               RST : in STD_LOGIC;
               A  : in  STD_LOGIC_VECTOR(2 downto 0);
               EN  : in  STD_LOGIC;
               N01 : in  STD_LOGIC;
               N02 : in  STD_LOGIC;
               N03 : in  STD_LOGIC;
               N04 : in  STD_LOGIC;
               N05 : in  STD_LOGIC;
               N06 : in  STD_LOGIC;
               COM : out  STD_LOGIC);
           end component IC;

begin

     --Instantiate Components

  --IC1: Process
      IC1 : IC
        port map (
          Clk => CLK,
          RST => RST,
          A   => D_IC1,
          EN   => D8,
          N01 => N1,
          N02 => N2,
          N03 => N3,
          N04 => N4,
          N05 => N5,
          N06 => N6,
          COM => COM6
        );
  --end process IC1;

  --IC2: Process
     IC2 : IC
        port map (
          Clk => CLK,
          RST => RST,
          A   => D_IC2,
          EN   => D7,
          N01 => N1,
          N02 => N2,
          N03 => N3,
          N04 => N4,
          N05 => N5,
          N06 => N6,
          COM => COM5
        );
  --end process IC2;

  --IC3: Process
     IC3 : IC
        port map (
          Clk => CLK,
          RST => RST,
          A   => D_IC3,
          EN   => D6,
          N01 => N1,
          N02 => N2,
          N03 => N3,
          N04 => N4,
          N05 => N5,
          N06 => N6,
          COM => COM4
        );
  --end process IC3;

  --IC4: Process
     IC4 : IC
        port map (
          Clk => CLK,
          RST => RST,
          A   => D_IC4,
          EN   => D5,
          N01 => N1,
          N02 => N2,
          N03 => N3,
          N04 => N4,
          N05 => N5,
          N06 => N6,
          COM => COM3
        );
  --end process IC4;

  --IC5: Process
      IC5 : IC
        port map (
          Clk => CLK,
          RST => RST,
          A   => D_IC5,
          EN   => D4,
          N01 => N1,
          N02 => N2,
          N03 => N3,
          N04 => N4,
          N05 => N5,
          N06 => N6,
          COM => COM2
        );
  --end process IC5;

  --IC6: Process
       IC6 : IC
        port map (
          Clk => CLK,
          RST => RST,
          A   => D_IC6,
          EN   => D3,
          N01 => N1,
          N02 => N2,
          N03 => N3,
          N04 => N4,
          N05 => N5,
          N06 => N6,
          COM => COM1
        );
  --end process IC6;


end Behav;

die 6 multiplexer IC1...6 sollen auch paralle Signale Steurn:
deswegen habe ich mir gedacht ich kann sie Als Process deklarieren da 
wie es komentiert ist.

oder soll ich Process deklarieren beim definition der IC:

begin

    Mux:process
    begin
      if ( RST = '1' ) then COM <= '0';
      else
        if rising_edge (Clk) then
          if(EN = '1') then
            if( A = "001") then COM <= N01;
            elsif( A = "010") then COM <= N02;
            elsif( A = "011") then COM <= N03;
            elsif( A = "100") then COM <= N04;
            elsif( A = "101") then COM <= N05;
            elsif( A = "110") then COM <= N06;
            end if;
          end if;
        end if;
      end if;
    end process;


end Behavioral;

LG Eddy

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Eddy Hoffmann (Firma student) (eddy_2007)

>ich habe 6 Multiplexer erstellt IC1,IC2...IC6, ich habe aber nur eine
>definiert (denn sie sollen ähnliche Eigenschaften haben) und davon den 6
>gewünschten Multiplexern instanziert..

OK, aber mal ein paar Hinweise. Für breite Dateneingänge nutzt man 
Vekoren, nicht N1, N2, N3 ...
Mir ist nicht wirklich klar, was du da machen willst. Dein MUX Prozess 
unten ist auch ungünstig. Die vielen IFs erzeugen ungewollte 
Prioritäten, die das Design ggf. verlangsamen bzw. aufblähen. Ein CASE 
Statement ist dort das Mittel der Wahl.

MFG
Falk

Autor: Eddy Hoffmann (Firma: student) (eddy_2007)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Falk
danke für die Hinweise.

> OK, aber mal ein paar Hinweise. Für breite Dateneingänge nutzt man
> Vekoren, nicht N1, N2, N3 ...

die eingänge N01...N06 sind Signale die kommen von meiner externen HW
die will ich je nach A(steuersignal) zum Output COM multiplexen

> Mir ist nicht wirklich klar, was du da machen willst. Dein MUX Prozess
> unten ist auch ungünstig. Die vielen IFs erzeugen ungewollte
> Prioritäten, die das Design ggf. verlangsamen bzw. aufblähen. Ein CASE
> Statement ist dort das Mittel der Wahl.

habe ich jetzt geändert:

architecture Behavioral of IC is
begin
    process(N01,N02,N03,N04,N05,N06,A)
    begin

        --use Case statement
        case A is
            when "001" => COM <= N01;
            when "010" => COM <= N02;
            when "011" => COM <= N03;
            when "100" => COM <= N04;
            when "101" => COM <= N05;
            when "110" => COM <= N06;
            when others => COM <= "ZZZ";
        end case;
    end process;
end Behavioral;

bin immer nich sicher ob die ICs so parallel die signale multiplezieren 
können ?

LG Eddy

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Eddy Hoffmann (Firma student) (eddy_2007)

>> OK, aber mal ein paar Hinweise. Für breite Dateneingänge nutzt man
>> Vekoren, nicht N1, N2, N3 ...

>die eingänge N01...N06 sind Signale die kommen von meiner externen HW
>die will ich je nach A(steuersignal) zum Output COM multiplexen

Ja und? Die kann man trotzdem sinnvollerweise zu einem Vektor 
zusammenfassen.

>bin immer nich sicher ob die ICs so parallel die signale multiplezieren
>können ?

Welcher? IC? Ein FPGA/CPLD? Sicher, warum nicht?

MG
Falk

Autor: Eddy Hoffmann (Firma: student) (eddy_2007)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Falk Brunner

> Welcher? IC? Ein FPGA/CPLD? Sicher, warum nicht?

die ICs!!

ich will sicher gehen dass die ICs signale gleichzeitig multiplezieren 
können. (parallel) --> deswegen habe ich vorhin mit Presess versucht(was 
ich komentiert habe) !!

mein Ziel ist sicher zu stellen dass die IC1,IC2...und IC6 Signale 
parallel multiplezieren werden.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Eddy Hoffmann (Firma student) (eddy_2007)

>> Welcher? IC? Ein FPGA/CPLD? Sicher, warum nicht?

>die ICs!!

Ahhhh, du meinst deine Komponenten. Das sind keine ICs, naja, vielleicht 
könnte man sie als virtuelle ICs bezeichnen. Der Rest der Designer nennt 
sie Components.

>ich will sicher gehen dass die ICs signale gleichzeitig multiplezieren
>können. (parallel)

Warum sollten sie das nicht?

>mein Ziel ist sicher zu stellen dass die IC1,IC2...und IC6 Signale
>parallel multiplezieren werden.

Wenn es nicht total vergurkst werden sie dass.

MFG
Falk

Autor: Eddy Hoffmann (Firma: student) (eddy_2007)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Falk Brunner
> Ahhhh, du meinst deine Komponenten. Das sind keine ICs, naja, vielleicht
> könnte man sie als virtuelle ICs bezeichnen. Der Rest der Designer nennt
> sie Components.

genau Komponenten! (sorry ich bin neu Einsteiger mit VHDL..)
ich habe sie in meinem Design IC genannt, denn ich versuche ein 
vorhandener WH mit VHDL zu Simulieren :-)

Danke sehr Falk

LG
Eddy

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Eddy,

so wie ich dich verstanden habe,
würde ich zunächst einen Multiplexer definieren:
  entity mux
    Port (
      Clk : in std_logic;
      RST : in std_logic;
      EN  : in std_logic;
      A   : in std_logic_vector(2 downto 0);
      N   : in std_logic_vector(2 downto 0);
      com : out std_logic
    );
   end mux;

   architecture behavioral of mux is
   begin
     process(RST, Clk)
     begin
      if (RST = '1') then
        com <= '0';
      elsif rising_edge (Clk) then
        if (EN = '1') then
          com <= N(to_integer(unsigned(A)));
        end if;
      end if;
    end process;
  end behavioral;

diesen in einem eigenen package abspeichern,
und in einem anderen package dann diesen mux
6 mal instanzieren.

  entity mux6
    Port (
      Clk  : in std_logic;
      RST  : in std_logic;
      d    : in std_logic_vector(2 downto 0);
      d_ic : in std_logic_vector(2 downto 0);
      N    : in std_logic_vector(2 downto 0);
      com  : out std_logic_vector(2 downto 0)
    );
  end mux6;

  architecture behavioral of mux6is
  begin
    MUX_GEN: for i in d'range generate
      inst: mux
      port map (
        rst => rst,
        clk => clk,
        en  => d(i),
        a   => d_ic(i),
        n   => n,
        com => com
      );
  end generate;


  end behavioral;

Diese werden auf jeden Fall alle parallel schalten
(sofern das physikalisch überhaupt möglich ist).
Das ist nur ein Vorschlag und nicht getestet. Ist
übrigens ein gutes Beispiel für das "generate"
Statement.

Gruß

Ralf

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.