Floris
Floris

Reputation: 77

I want to covert a vector to an integer before the begin

Here is my code for a up_down_counter the comments are in dutch but don't matter so much.

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity up_down_teller is
    port ( maxc_vector    :    in std_logic_vector(6 downto 0);  -- "maximum count" : maximale telwaarde (decimaal)   = aantal posities - 1
           minc_vector    :    in std_logic_vector(6 downto 0);
           enable         :    in  std_logic;
           up_down        :    in  std_logic;                    -- telrichting
           clk_500ms      :    in  std_logic;                    -- systeemklok
           bcd            :    out std_logic_vector(7 downto 0); -- tellerstand
           tc             :    out std_logic                     -- tc geeft aan wanneer de maximum telwaarde bereikt is (voor cascade)
         );                                                       
end up_down_teller;

    architecture Behavioral of up_down_teller is
    signal maxc_int : integer range 0 to 99;
    signal minc_int : integer range 0 to 99;

    maxc_int <= to_integer(signed(maxc_vector));
    minc_int <= to_integer(signed(minc_vector));

    -- berekening maximumwaarden voor eenheden (Emax) en tientallen (Tmaxà    
    constant Emax             :     integer     := maxc_int mod 10;            -- rest na deling mc door 10 levert maximumwaarde voor eenheden                 
    constant Tmax             :     integer     := (maxc_int - Emax)/10;    -- mc verminderd met Emax levert veelvoud van 10. Delen door 10 levert het     maximumcijfer voor de tientallen.    

    -- berekening minimumwaarden voor eenheden (Emin) en tientallen (Tmin)
    constant Emin             :     integer     := minc_int mod 10;            -- rest na deling mc door 10 levert minimumwaarde voor eenheden                 
    constant Tmin             :     integer     := (minc_int - Emin)/10;    -- minc_int verminderd met Emin levert veelvoud van 10. Delen door 10 levert het     minimumcijfer voor de tientallen.    

    -- declaratie interne signalen
    signal sEcnt_i         :     integer range 0 to 9;                        -- declaratie een terugleesbaar signaal voor het tellen van de eenheden
    signal sTcnt_i         :     integer range 0 to 9;                        -- declaratie een terugleesbaar signaal voor het tellen van de tientallen

BEGIN
tellerproces : process (clk_500ms)
.
.
.
What follows is less important.

When i run this code it generates an error because I can't convert the types before "BEGIN" but I have to so I can do the calculations for the min and max valuees, are there any workarounds for this?

Upvotes: 0

Views: 52

Answers (1)

anderswb
anderswb

Reputation: 492

You have to define maxc_int and minc_int as either generics or constants to do this. If you have them as signals they could change during runtime, and you can't change the size of the signals during runtime.

An entity with generics could look like this:

entity up_down_teller is
    generic(
           maxc_vector    :    integer range 0 to 99 := 10;
           minc_vector    :    integer range 0 to 99 := 10
    );
    port ( enable         :    in  std_logic;
           up_down        :    in  std_logic;                    -- telrichting
           clk_500ms      :    in  std_logic;                    -- systeemklok
           bcd            :    out std_logic_vector(7 downto 0); -- tellerstand
           tc             :    out std_logic                     -- tc geeft aan wanneer de maximum telwaarde bereikt is (voor cascade)
         );                                                       
end up_down_teller;

Upvotes: 2

Related Questions