Привет, ребята, у меня есть следующий VHDL, который не делает то, что должен делать в аппаратном обеспечении, но работает в моделировании. В основном у меня есть счетчик, и в зависимости от счетчика я хочу, чтобы определенные данные выводились, я реализовал мультиплексор следующим образом:
write_data <=
('1' & '0' & "1111" ) when (data_cnt_r < 1) else
('0' & '0' & "1111" ) when (data_cnt_r >= 1 and data_cnt_r < 2 ) else
('0' & '0' & "0000" ) when (data_cnt_r >= 2 and data_cnt_r < 3 ) else
('0' & '0' & data_reg ) when (data_cnt_r >= 3 and data_cnt_r < 1027 ) else
('0' & '1' & CRC16_o(63) & CRC16_o(47) & CRC16_o(31) & CRC16_o(15) ) when (data_cnt_r >= 1027 and data_cnt_r < 1043 ) else
('0' & '0' & "1111");
Проблема, с которой я сталкиваюсь, заключается в том, что когда счет равен 1043, я вижу вывод CRC вместо «1111» для последней строки кода. В симуляции это работает так, как я и ожидал. Есть ли лучший способ написать это? Любые идеи, почему несоответствие?
* РЕДАКТИРОВАТЬ Более подробную информацию по запросу:
я использую
use IEEE.STD_LOGIC_UNSIGNED.ALL;
data_cnt — счетчик свободного запуска, все — std_logic_vector или std_logic
signal data_cnt_r : std_logic_vector(11 downto 0); -- 12 bit counter
write_data поступает в BUFIO и также является стандартным логическим вектором.