我想在开始之前将向量转换为整数
I want to covert a vector to an integer before the begin
这是我的 up_down_counter 代码,评论是荷兰语,但并不重要。
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.
当我 运行 这段代码会产生一个错误,因为我无法在 "BEGIN" 之前转换类型,但我必须这样做才能计算最小值和最大值,是有什么解决方法吗?
您必须将 maxc_int
和 minc_int
定义为泛型或常量才能执行此操作。如果您将它们作为信号,它们可以在运行时更改,并且您不能在运行时更改信号的大小。
具有泛型的实体可能如下所示:
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;
这是我的 up_down_counter 代码,评论是荷兰语,但并不重要。
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.
当我 运行 这段代码会产生一个错误,因为我无法在 "BEGIN" 之前转换类型,但我必须这样做才能计算最小值和最大值,是有什么解决方法吗?
您必须将 maxc_int
和 minc_int
定义为泛型或常量才能执行此操作。如果您将它们作为信号,它们可以在运行时更改,并且您不能在运行时更改信号的大小。
具有泛型的实体可能如下所示:
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;