MrGalaxy 9 5 декабря, 2023 Опубликовано 5 декабря, 2023 · Жалоба Цитата ... variable clk_count : integer range 0 to 2 1 := 0; begin ... case clk_count is when 0 => buf_in <= DATA_IN(7 downto 4); clk_count := 1; when 1 => buf_in <= DATA_IN(3 downto 0); clk_count := 0; when others => end case; ... Мелочь, конечно, но отвлекает)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 6 декабря, 2023 Опубликовано 6 декабря, 2023 · Жалоба ищется 5 мин + на vhdl On 12/4/2023 at 10:39 AM, jenya7 said: честно говоря взыл бы готовый QUAD SPI и не парился ни минуты. забавно что нигде не нашел готовый модуль. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Джеймс 4 6 декабря, 2023 Опубликовано 6 декабря, 2023 · Жалоба On 12/4/2023 at 9:37 AM, jenya7 said: Есть такой процесс Какие библиотеки у Вас подключены во всем проекте помимо IEEE.STD_LOGIC_1164.ALL ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 7 декабря, 2023 Опубликовано 7 декабря, 2023 · Жалоба On 12/7/2023 at 1:15 AM, Джеймс said: Какие библиотеки у Вас подключены во всем проекте помимо IEEE.STD_LOGIC_1164.ALL ? LIBRARY ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.std_logic_unsigned.all; On 12/6/2023 at 10:33 PM, Maverick_ said: ищется 5 мин + на vhdl видел эти варианты. в первом input logic MOSI_0, input logic MOSI_1, input logic MOSI_2, input logic MOSI_3, output logic MISO_0, output logic MISO_1, output logic MISO_2, output logic MISO_3 у меня нет отдельных линий. у меня SPI_DATA : inout std_logic_vector(3 downto 0); второй вариант похож на вуду маджик. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 7 декабря, 2023 Опубликовано 7 декабря, 2023 · Жалоба 45 minutes ago, jenya7 said: LIBRARY ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.std_logic_unsigned.all; видел эти варианты. в первом input logic MOSI_0, input logic MOSI_1, input logic MOSI_2, input logic MOSI_3, output logic MISO_0, output logic MISO_1, output logic MISO_2, output logic MISO_3 у меня нет отдельных линий. у меня SPI_DATA : inout std_logic_vector(3 downto 0); второй вариант похож на вуду маджик. сделайте промежуточную логику или измените свою... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 7 декабря, 2023 Опубликовано 7 декабря, 2023 · Жалоба On 12/7/2023 at 9:31 AM, Maverick_ said: сделайте промежуточную логику или измените свою... в смысле? у меня физически 4 линии. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 7 декабря, 2023 Опубликовано 7 декабря, 2023 · Жалоба 9 minutes ago, jenya7 said: в смысле? у меня физически 4 линии. поставьте двунаправленные буфера и логику которая б переключала прием/передача как вариант... PS для Quad Serial Peripheral Interface (Quad-SPI) должно быть 6 линий Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Джеймс 4 7 декабря, 2023 Опубликовано 7 декабря, 2023 · Жалоба 14 hours ago, jenya7 said: LIBRARY ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.std_logic_unsigned.all; @jenya7 Если хотите двигаться дальше, заниматься FPGA разработкой не только "для себя", то: 1) Оставьте только эти объявления: LIBRARY ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; Сначала будет сложно, но вы переделаете свой код и настроитесь на верный курс. 2) Конкретно по этому проекту - использовать SCK именно как clock - это неверный подход. Тактовая частота в вашем SPI модуле должна быть одна. Хотя, оговорюсь я не знаю какая эта частота, сколько там MHz.. 3) Вообще пока не используйте больше одной частоты в проекте. CLK и всё! Попробуйте обходиться одной частотой. И всегда проверяйте, что она трассируется на глобальной цепи. Те случаи у вас, когда "то работает, то не работает" (тема "Не всегда срабатывает условие") - это вообще похоже на не-глобальный Clock. Таких штук вообще быть не должно: if (clk3 = '1') then Удачи! (хотя и не уверен, что примите советы) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Raven 11 8 декабря, 2023 Опубликовано 8 декабря, 2023 · Жалоба При чтении сообщений из этого треда меня не покидало ощущение дежавю. Сегодня я понял, почему - когда наткнулся на эту тему - Первый проект на Verilog. Прошу помощи 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 8 декабря, 2023 Опубликовано 8 декабря, 2023 · Жалоба 10 hours ago, Джеймс said: @jenya7 Если хотите двигаться дальше, заниматься FPGA разработкой не только "для себя", то: 1) Оставьте только эти объявления: LIBRARY ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; Сначала будет сложно, но вы переделаете свой код и настроитесь на верный курс. 2) Конкретно по этому проекту - использовать SCK именно как clock - это неверный подход. Тактовая частота в вашем SPI модуле должна быть одна. Хотя, оговорюсь я не знаю какая эта частота, сколько там MHz.. 3) Вообще пока не используйте больше одной частоты в проекте. CLK и всё! Попробуйте обходиться одной частотой. И всегда проверяйте, что она трассируется на глобальной цепи. Те случаи у вас, когда "то работает, то не работает" (тема "Не всегда срабатывает условие") - это вообще похоже на не-глобальный Clock. Таких штук вообще быть не должно: if (clk3 = '1') then Удачи! (хотя и не уверен, что примите советы) добавлю + использовать стандарт VHDL 2008 как минимум чтоби не писать process(SPI_CLK) а писать process(all) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 17 8 декабря, 2023 Опубликовано 8 декабря, 2023 · Жалоба 1 hour ago, Maverick_ said: добавлю + использовать стандарт VHDL 2008 как минимум чтоби не писать process(SPI_CLK) а писать process(all) Это крайне плохой совет. Категорически не советую ему следовать. Вот зачем? Зачем писать all, если это чисто сихронный процесс? Уже глядя на список чувствительности, начинаешь понимать, что в процессе происходит. Нет, если вы любитель писать запутанный и код и вдобавок обфусцировать его в процессе писания, то удачи. А коллеги, кому этот код потом достанется, помянут вас тихим (а может, и не тихим) матерным словом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 8 декабря, 2023 Опубликовано 8 декабря, 2023 · Жалоба 56 minutes ago, andrew_b said: Это крайне плохой совет. Категорически не советую ему следовать. Вот зачем? Зачем писать all, если это чисто сихронный процесс? Уже глядя на список чувствительности, начинаешь понимать, что в процессе происходит. Нет, если вы любитель писать запутанный и код и вдобавок обфусцировать его в процессе писания, то удачи. А коллеги, кому этот код потом достанется, помянут вас тихим (а может, и не тихим) матерным словом. не знал... думал что PS меня не путает, упрощает жизнь Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 17 8 декабря, 2023 Опубликовано 8 декабря, 2023 · Жалоба 3 minutes ago, Maverick_ said: не знал... Не знали что? Что из того, что я написал, явилось для вас новостью? 4 minutes ago, Maverick_ said: думал что Там всё правильно написано. Но есть нюанс. Когда я читаю код и вижу список чувствительности process (clk) я понимаю, что это в этом процессе будет описан синхронный триггер. Когда я вижу process (reset, clk) я понимаю, что это описан синхронный триггер с асинхронным сбросом. Когда я вижу process (all) я ожидаю увидеть комбинаторику, типа process (all) begin y <= x1 or x2 or x3 or x4; end process; А если в таком процессе внезапно оказывается триггер, то у меня возникают сомнения в квалификации автора кода и в качестве самого кода. Это то же самое, как и process (clk, reset, ce, x) begin if (rising_edge (clk)) then if (reset = '1') then y <= '0'; elsif (ce = '1') then y <= x; end if; end process; Можно в вписок чувсвительности вписать все сигналы, но зачем? Чтобы что? Профита это никакого не даёт, а даже наоборот. 15 minutes ago, Maverick_ said: меня не путает, упрощает жизнь На что вы тратите те секуды, которые сэкономили на написании all вместо правильного списка чувствительности? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 8 декабря, 2023 Опубликовано 8 декабря, 2023 · Жалоба 5 минут назад, andrew_b сказал: Не знали что? Что из того, что я написал, явилось для вас новостью? Там всё правильно написано. Но есть нюанс. Когда я читаю код и вижу список чувствительности process (clk) я понимаю, что это в этом процессе будет описан синхронный триггер. Когда я вижу process (reset, clk) я понимаю, что это описан синхронный триггер с асинхронным сбросом. Когда я вижу process (all) я ожидаю увидеть комбинаторику, типа process (all) begin y <= x1 or x2 or x3 or x4; end process; А если в таком процессе внезапно оказывается триггер, то у меня возникают сомнения в квалификации автора кода и в качестве самого кода. Это то же самое, как и process (clk, reset, ce, x) begin if (rising_edge (clk)) then if (reset = '1') then y <= '0'; elsif (ce = '1') then y <= x; end if; end process; Можно в вписок чувсвительности вписать все сигналы, но зачем? Чтобы что? Профита это никакого не даёт, а даже наоборот. На что вы тратите те секуды, которые сэкономили на написании all вместо правильного списка чувствительности? Полностью поддерживаю. Еще у VHDL 2008 есть нюанс при работе с Vivado. Заключается в том, что там нет возможности каждый VHDL файл рассматривать как версию 2008. Это надо дополнительно руками указывать. Неудобно. А вообще все проблемы со списком чувствительности из-за непонимания, как он работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 8 декабря, 2023 Опубликовано 8 декабря, 2023 · Жалоба 3 minutes ago, Flip-fl0p said: Полностью поддерживаю. Еще у VHDL 2008 есть нюанс при работе с Vivado. Заключается в том, что там нет возможности каждый VHDL файл рассматривать как версию 2008. Это надо дополнительно руками указывать. Неудобно. А вообще все проблемы со списком чувствительности из-за непонимания, как он работает. Vivado: Set VHDL-2019 or VHDL-2008 for all .vhd files To tell Xilinx Vivado to compile a VHDL file using the newer VHDL-2019 or VHDL-2008 revisions in the GUI, you can go to Project Manager->Sources->Compile Order, right-click the .vhd file, and select Source File Properties. Then, you can click the Type property and change the VHDL revision using the dialog box. You have to right-click every single file to make the change. But you can easily change the VHDL revision of every single file in your project to 2019 by entering this command in the Vivado GUI’s Tcl Console: set_property FILE_TYPE {VHDL 2019} [get_files *.vhd] Or set all .vhd files to 2008 with this Tcl command: set_property FILE_TYPE {VHDL 2008} [get_files *.vhd] Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться