У меня есть сомнения в следующий код VHDL относительно индекса переполнения len
:переполнение индекса в VHDL std_logic_vector
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
package mypack is
subtype small_int is integer range 0 to 3;
end mypack;
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use work.mypack.all;
entity top is
port(
CLK : in std_logic;
rst : in std_logic;
myPtr : in small_int;
temp : in unsigned(1 downto 0);
myout : out std_logic_vector(3 downto 0));
end entity;
architecture rtl of top is
signal len : std_logic_vector(3 downto 0) := (others=>'0');
constant si : small_int := 1;
begin
myout <= len;
process(clk,rst) begin
if (RST='1') then
len <= "0000";
elsif rising_edge(CLK) then
len(myPtr - si) <= temp(0);
end if;
end process;
end architecture;
Что должно быть правильное поведение при myPtr = 0
:
- Would
len(3) <= temp(0);
произошло? - Или, будет ли индекс по потоку? Это означает, что
len(3)
всегда останется на уровне0
.
Заранее спасибо.
Если myPtr = 0 и у вас есть фронт, то len (myPtr-si) <= temp (0) будет len (0-1) <= temp (0), и у вас будет отрицательный индекс ... и я уверен, что это не нормально. – 23ars
Наиболее очевидная потенциальная потенциальная проблема заключается в том, когда MyPtr = 0 минус 1 (si) дает -1, который выходит за пределы допустимого диапазона MyPtr (small_int от 0 до 3) и выходит за пределы len (3 до 0). – user1155120
Точно то, что я написал! – 23ars