Help with simple function call

Discussion in 'VHDL' started by Rishi Dhupar, Oct 23, 2006.

  1. Rishi  Dhupar

    Rishi Dhupar Guest

    Hi, just started learning functions in VHDL.

    Making a simple mux4 function. I cannot seem to figure out what type
    of conditional statements are allowed in functions. Trying quite a few
    as you can see, but all of them are giving errors.

    Any suggestions?

    Thanks.

    RishiD

    Here is the complete code.

    library IEEE;
    use IEEE.STD_LOGIC_1164.ALL;
    use IEEE.STD_LOGIC_ARITH.ALL;
    use IEEE.STD_LOGIC_UNSIGNED.ALL;

    entity hw4_mux4 is
    Port ( OpSel : in std_logic_vector(1 downto 0);
    A : in std_logic_vector(7 downto 0);
    B : in std_logic_vector(7 downto 0);
    C : in std_logic_vector(7 downto 0);
    D : in std_logic_vector(7 downto 0);
    E : in std_logic_vector(7 downto 0);
    F : in std_logic_vector(7 downto 0);
    G : in std_logic_vector(7 downto 0);
    H : in std_logic_vector(7 downto 0);
    Z : out std_logic_vector(7 downto 0));
    end hw4_mux4;

    architecture behav of hw4_mux4 is
    signal X : std_logic_vector(7 downto 0);
    signal Y : std_logic_vector(7 downto 0);
    function mux4 (fA, fB, fC, fD : std_logic_vector(7 downto 0); fOpSel :
    std_logic_vector(1 downto 0))
    return std_logic_vector is
    variable result : std_logic_vector(7 downto 0);
    begin


    -- WITH fOpSel SELECT
    -- result := fA WHEN "00",
    -- fB WHEN "01",
    -- fC WHEN "10",
    -- fD WHEN "11",
    -- NULL WHEN OTHERS;


    result := fA when fOpSel = '00' ELSE
    fB when fOpSel = '01' ELSE
    fC when fOpSel = '10' ELSE
    fD;



    -- process (OpSel, A, B, C, D)
    -- begin
    -- case OpSel is
    -- when "00" => result := A;
    -- when "01" => result := B;
    -- when "10" => result := C;
    -- when "11" => result := D;
    -- end case;
    -- end process;

    return result;

    end mux4;

    begin
    X <= mux4(A, B, C, D, OpSel);
    Y <= mux4(E, F, G, H, OpSel);
    Z <= X - Y;
    end behav;
     
    Rishi Dhupar, Oct 23, 2006
    #1
    1. Advertising

  2. Rishi  Dhupar

    KJ Guest

    Rishi Dhupar wrote:
    > Hi, just started learning functions in VHDL.
    >
    > Making a simple mux4 function. I cannot seem to figure out what type
    > of conditional statements are allowed in functions. Trying quite a few
    > as you can see, but all of them are giving errors.
    >
    > Any suggestions?


    This should get you started.

    function mux4 (fA, fB, fC, fD : std_logic_vector; fOpSel :
    std_logic_vector(1 downto 0)) return std_logic_vector is
    variable result : std_logic_vector(7 downto 0);
    begin
    case fOpSel is
    when "00" => result := fA;
    when "01" => result := fB;
    when "10" => result := fC;
    when others => result := fD;
    end case;
    return(result);
    end function mux4;
    KJ
     
    KJ, Oct 23, 2006
    #2
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. grbgooglefan
    Replies:
    2
    Views:
    446
    Pascal Bourguignon
    Jan 30, 2008
  2. grbgooglefan
    Replies:
    4
    Views:
    463
    Kenny McCormack
    Jan 30, 2008
  3. grbgooglefan
    Replies:
    0
    Views:
    416
    grbgooglefan
    Jan 30, 2008
  4. Alok
    Replies:
    3
    Views:
    278
  5. THAKUR PRASHANT SINGH

    Class Function call vs Normal Function call

    THAKUR PRASHANT SINGH, Feb 26, 2010, in forum: Ruby
    Replies:
    7
    Views:
    209
    THAKUR PRASHANT SINGH
    Feb 27, 2010
Loading...

Share This Page