Я пытаюсь получить данные из константы массива записей. Вот что я имею в своей текущей реализации:
CONSTANT Total_Feeds : INTEGER := 12;
TYPE Feed IS RECORD
s_Divisor : INTEGER RANGE 0 TO 255;
Display_Text : STRING(1 TO 8);
END RECORD Feed;
TYPE Feed_Array IS ARRAY (0 TO Total_Feeds -1) OF Feed;
CONSTANT FEED_INFO : Feed_Array := (
(225,"""0.02mm"""),
(112,"""0.04mm"""),
(75,"""0.06mm"""),
(56,"""0.08mm"""),
(45,"""0.10mm"""),
(38,"""0.12mm"""),
(32,"""0.14mm"""),
(28,"""0.16mm"""),
(25,"""0.18mm"""),
(23,"""0.20mm"""),
(20,"""0.22mm"""),
(19,"""0.24mm""")
);
------lower section of menu fsm----------
process(clk, reset)
begin
if (reset = '1') then
menu_pr <= start;
feed_index_pr <= 2;
ks_divisor_pr <= 0;
elsif (rising_edge(clk)) then
menu_pr <= menu_nx;
feed_index_pr <= feed_index_nx;
ks_divisor_pr <= ks_divisor_nx;
end if;
end process;
------upper section of menu fsm----------
process (menu_pr, menu_on_flag, delayed_select, delayed_up,
delayed_down, delayed_left, feed_index_pr, thread_index_pr,
delayed_right, menu_left_flag, menu_right_flag, menu_up_flag, menu_down_flag)
variable feedindex : integer range 0 to total_feeds;
begin
case menu_pr is
when start =>
feedindex := feed_index_pr;
feed_index_nx <= feedindex;
ks_divisor_nx <= FEED_INFO(feedindex).s_Divisor;
menu_nx <= feed_left;
when feed_left =>
feedindex := feed_index_pr;
feed_index_nx <= feedindex;
ks_divisor_nx <= FEED_INFO(feedindex).s_Divisor;
if (menu_on_flag = '1' and delayed_right = '1' and menu_right_flag = '1') then
menu_nx <= feed_left_right;
else
menu_nx <= feed_left;
end if;
when feed_left_right =>
feedindex := feed_index_pr + 1;
if (feedindex > (Total_Feeds - 1)) then
feedindex := 0;
feed_index_nx <= feedindex;
ks_divisor_nx <= FEED_INFO(feedindex).s_Divisor;
menu_nx <= feed_left;
else
feed_index_nx <= feedindex;
ks_divisor_nx <= FEED_INFO(feedindex).s_Divisor;
menu_nx <= feed_left;
end if;
end case;
end process;
rate_out <=ks_divisor_pr;
Состояния добавляются после успешной проверки с помощью симуляции.
Я пытаюсь получить s_divisor для каждой записи из процесса, используя следующая команда:
ks_divisor_nx <= FEED_INFO(feedindex).s_Divisor;
Где feedindex
меняется с 0 to Total_Feeds -1
, а ks_divisor равно integer range 0 to 255
.
Результаты моделирования показывают корректный вывод для всех назначений, кроме записей с индексом 0 , 1 и 2. Результаты симуляции показывают значения: 11, 48 и 33 соответственно.
результаты моделирования
Любая помощь очень ценится. Благодаря.