jenya7 0 12 октября, 2022 Опубликовано 12 октября, 2022 (изменено) · Жалоба Я могу вместо case rx_idx is when 2 => rx_count(7 downto 0) <= RX_DATA; when 3 => rx_count(7 downto 0) <= RX_DATA; when 4 => rx_count(7 downto 0) <= RX_DATA; end case; написать case rx_idx is when 2 => when 3 => when 4 => rx_count(7 downto 0) <= RX_DATA; end case; или в VHDL fall trough не работает как в C? хорошо. не работает. а можно что то сделать? на несколько when одно действие? Изменено 12 октября, 2022 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 34 12 октября, 2022 Опубликовано 12 октября, 2022 · Жалоба На сколько я помню синтаксис VHDL case rx_idx is when 2 | 3 | 4 => rx_count(7 downto 0) <= RX_DATA; end case; - или case rx_idx is when 2 to 4 => rx_count(7 downto 0) <= RX_DATA; end case; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 12 октября, 2022 Опубликовано 12 октября, 2022 · Жалоба 9 minutes ago, RobFPGA said: На сколько я помню синтаксис VHDL Знаете, я зарёкся отвечать человеку на вопросы, ответы на которые есть либо в книжке по языку, либо гуглятся за пять минут. Зачем что-то искать самому, когда можно спросить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 12 октября, 2022 Опубликовано 12 октября, 2022 · Жалоба On 10/12/2022 at 11:35 AM, RobFPGA said: На сколько я помню синтаксис VHDL case rx_idx is when 2 | 3 | 4 => rx_count(7 downto 0) <= RX_DATA; end case; - или case rx_idx is when 2 to 4 => rx_count(7 downto 0) <= RX_DATA; end case; спасибо On 10/12/2022 at 11:49 AM, andrew_b said: Знаете, я зарёкся отвечать человеку на вопросы, ответы на которые есть либо в книжке по языку, либо гуглятся за пять минут. Зачем что-то искать самому, когда можно спросить? ну хорошо, вот нетривиальный вопрос for j in 0 to 63 loop if (OUT_MASK(j) = '1') then case j is when 1 => OUTPUTS(j) <= OUT_ON_OFF(j); when others => end case; end if; end loop; почему я тут получаю Error (10028): Can't resolve multiple constant drivers for net "OUTPUTS[1]" at out_control.vhd(68) всё происходит в одном процессе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 34 12 октября, 2022 Опубликовано 12 октября, 2022 · Жалоба 22 minutes ago, andrew_b said: Знаете, я зарёкся отвечать человеку на вопросы, ответы на которые есть либо в книжке по языку, либо гуглятся за пять минут. Зачем что-то искать самому, когда можно спросить? Это ваше право - отвечать или нет на заданные вопросы или посты. Как и право и различные мотивы чтобы отвечать тем или иным способом, полезно или нравоучительно. Мне же просто захотелось вспомнить редко пользуемый мной VHDL. 22 minutes ago, jenya7 said: почему я тут получаю Error (10028): Can't resolve multiple constant drivers for net "OUTPUTS[1]" at out_control.vhd(68) А какой алгоритм вы хотите реализовать в этой конструкции? И соответствует ли условие в CASE той которую вы хотели? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 12 октября, 2022 Опубликовано 12 октября, 2022 · Жалоба On 10/12/2022 at 12:19 PM, RobFPGA said: А какой алгоритм вы хотите реализовать в этой конструкции? И соответствует ли условие в CASE той которую вы хотели? ну есть случаи где просто передача бита на выход а есть сложные процедуры через расширители, разрешатели. process(CLK) begin if (rising_edge(CLK)) then case OutState_2 is when ST_IDLE => if (OUT_TRIG = '1') then OutState_2 <= ST_SET; end if; when ST_SET => for j in 0 to 63 loop if (OUT_MASK(j) = '1') then case j is when 1 to 30 => OUTPUTS(j) <= OUT_ON_OFF(j); when 31 to 63 => --TODO when others => end case; end if; end loop; OutState_2 <= ST_IDLE; when others => OutState_2 <= ST_IDLE; end case; end if; end process; непонятно почему он считает что тут multiple constant drivers. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 34 12 октября, 2022 Опубликовано 12 октября, 2022 · Жалоба 3 minutes ago, jenya7 said: ну есть случаи где просто передача бита на выход а есть сложные процедуры через расширители, разрешатели. Не увидел вашего ответа на вопрос - какой алгоритм вы хотите реализовать в приведенной конструкции с CASE? Опишите что вы хотите обычными словами, и сравните с тем что вы написали в коде. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 12 октября, 2022 Опубликовано 12 октября, 2022 (изменено) · Жалоба On 10/12/2022 at 12:32 PM, RobFPGA said: Не увидел вашего ответа на вопрос - какой алгоритм вы хотите реализовать в приведенной конструкции с CASE? Опишите что вы хотите обычными словами, и сравните с тем что вы написали в коде. пройтись по индексам маски и тот бит который разрешён в маске записать его значение на выход. ну можно конечно разбить на два, может и CASE не понадобиться --ПЕРВАЯ ГРУППА for j in 0 to 30 loop end loop; --ВТОРАЯ ГРУППА for j in 31 to 63 loop end loop; Изменено 12 октября, 2022 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
slkhome 0 12 октября, 2022 Опубликовано 12 октября, 2022 · Жалоба 5 hours ago, jenya7 said: when ST_IDLE => if (OUT_TRIG = '1') then OutState_2 <= ST_SET; end if; Для начала рекомендую писать полные if then else end if, описываю все исходы. И приведите тот код, который как раз вызывает ошибку. В каком компиляторе это делаете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Александр77 1 15 октября, 2022 Опубликовано 15 октября, 2022 · Жалоба On 10/12/2022 at 1:36 PM, jenya7 said: пройтись по индексам маски и тот бит который разрешён в маске записать его значение на выход. Сделайте счетчик на N шагов и запускайте его для пробежки по индексам, а for в VHDL !=for С++. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 17 октября, 2022 Опубликовано 17 октября, 2022 · Жалоба On 10/12/2022 at 9:55 AM, jenya7 said: Я могу вместо case rx_idx is when 2 => rx_count(7 downto 0) <= RX_DATA; when 3 => rx_count(7 downto 0) <= RX_DATA; when 4 => rx_count(7 downto 0) <= RX_DATA; end case; написать case rx_idx is when 2 => when 3 => when 4 => rx_count(7 downto 0) <= RX_DATA; end case; или в VHDL fall trough не работает как в C? хорошо. не работает. а можно что то сделать? на несколько when одно действие? напишите задачу в целом что необходимо реализвать? многим так будет проще помочь Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 18 октября, 2022 Опубликовано 18 октября, 2022 · Жалоба On 10/17/2022 at 3:47 PM, Maverick_ said: напишите задачу в целом что необходимо реализвать? многим так будет проще помочь поменял концепт. вышло даже лучше (как мне кажется). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться