xvr 12 28 июня, 2023 Опубликовано 28 июня, 2023 · Жалоба 43 minutes ago, Worldmaster said: Не совсем понял. VHDL (равно как и Verilog) поддерживает 2 набора операций и конструкций языка - первый набор синтезируемый. С его помощью описывают реальную схему. Второй - не синтезируемый. Он не может использоваться для описания схем, а используется (вместе с 1м набором) для создания верификационных тестов. Ваш 'голый' массив относится ко 2му набору. В схеме его так использовать нельзя. 43 minutes ago, Worldmaster said: Это вы к тому что надо сделать отдельный компонент чтоли? К тому, что нельзя передавать массив между модулями - можно только его порты (в виде набора сигналов чтения/записи). А уж где вы этот массив расположите - отдельным модулем или внутри какого то другого модуля, решать вам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Worldmaster 0 28 июня, 2023 Опубликовано 28 июня, 2023 · Жалоба В 28.06.2023 в 15:00, xvr сказал: К тому, что нельзя передавать массив между модулями - можно только его порты (в виде набора сигналов чтения/записи). Ваще туплю. Ну вот же у меня есть компонент: USBFIFO: USB_BRIDGE port map ( in_clk => FTDI_CLK, txe_n => txe_src, rxf_n => rxe_src, wr_n => wr_src, BE => BE_src, DATA_1 => DATA_1_src, DATA_2 => DATA_2_src, DATA_3 => DATA_3_src, DATA_4 => DATA_4_src, StartWork => StartWork_src, fifo_buffer => fifo_buffer_src, RW => RW_src, ChannelNum => ChannelNum_src, CurrentState => CurrentState_src ); И тут я произвел связывание сигналов fifo_buffer => fifo_buffer_src, Я же понимаю что тут не передается по ссылке как в стандартном программировании. В основной архитектуре я определил переменную signal fifo_buffer_src : DataBuffer; -- общий буфее приимоопередачи То есть это получается не правильно? Я же потом делаю remap и переназначаю именно сигналы. Или нет?? В 28.06.2023 в 15:00, xvr сказал: Он не может использоваться для описания схем, а используется (вместе с 1м набором) для создания верификационных тестов. То есть вы хотите сказать что я не смогу зашить мой код в чип?? или он там не будет работать?? После написания кода у меня есть кнопка Synthesize: И если ее запустить то она пройдет все проверки и скажет что ок. На фото показал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 28 июня, 2023 Опубликовано 28 июня, 2023 · Жалоба 49 minutes ago, Worldmaster said: То есть это получается не правильно? Это не хорошо. У вас физическая память и её порты оказались размазаны по 3м модулям. Что из этого сделает синтезатор предсказать трудно. Всё же рекомендуется физические и логические блоки держать на одном уровне иерархии. Это упростит жизнь и синтезатору и в первую очередь вам, как разработчику. При таком разделении, как у вас результат синтеза блоков будет зависеть от других блоков, что черевато неожиданными и трудно выявляемыми ошибками. Например вы можете изменить код в одном месте, а синтез сломается совершенно в другом. 52 minutes ago, Worldmaster said: То есть вы хотите сказать что я не смогу зашить мой код в чип?? Не сможете синтезировать. 52 minutes ago, Worldmaster said: После написания кода у меня есть кнопка Synthesize: И если ее запустить то она пройдет все проверки и скажет что ок. Вам очень повезло, что он смог. Я бы не стал расчитывать, что синтезатор всегда так сможет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Worldmaster 0 28 июня, 2023 Опубликовано 28 июня, 2023 · Жалоба В 28.06.2023 в 16:43, xvr сказал: Это не хорошо. У вас физическая память и её порты оказались размазаны по 3м модулям. Ну хорошо. А как мне тогда сделать то что я хочу?? Я же изначально хотел чтобы этот буфер был исключительно в модуле который осуществляет передачу. И какие это 3 модуля? У меня всего один модуль который имеет у себя буфер: entity USB_BRIDGE is port ( in_clk : in std_logic; txe_n : in std_logic; rxf_n: in std_logic; wr_n: out std_logic; BE : inout std_logic_vector(3 downto 0); DATA_1 : inout std_logic_vector(7 downto 0); DATA_2 : inout std_logic_vector(7 downto 0); DATA_3 : inout std_logic_vector(7 downto 0); DATA_4 : inout std_logic_vector(7 downto 0); signal StartWork:in std_logic; signal fifo_buffer :inout DataBuffer; -- общий буфее приимоопередачи signal RW:in std_logic; -- чтение или запись signal ChannelNum: in std_logic_vector(7 downto 0); -- номер канала signal CurrentState: out machine_mode ); end USB_BRIDGE; может есть пример как это реализовать то правильно? Ведь если даже я сделаю отдельный компонент с памятью я ведь также буду в основной архитектуре создавать сигналы и связывать их. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 17 28 июня, 2023 Опубликовано 28 июня, 2023 · Жалоба Давайте так, как для самого начинающего. Не используйте двунаправленные порты внутри дизайна. Только на верхнем уровне. Перепишите ваш модуль так, чтобы вместо двунапревленного было два порта: входной и выходной. У самой простой памяти всего пять портов: клок, шина адреса, шина данных на запись, разрешение записи и шина данных на чтение. Вот от этого и танцуйте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Worldmaster 0 28 июня, 2023 Опубликовано 28 июня, 2023 · Жалоба В 28.06.2023 в 17:11, andrew_b сказал: Не используйте двунаправленные порты внутри дизайна. Вы имеете ввиду чтобы вместо одного signal fifo_buffer :inout DataBuffer; -- общий буфее приимоопередачи Было два буфера TX RX ?? Типа отправлять с одного а читать потом в другой?? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 28 июня, 2023 Опубликовано 28 июня, 2023 · Жалоба Начните с бумаги и карандаша и ластика. Рисуете схему на бумаге. Потом переносите её на код. Большинство вопросов отпадает уже на этом этапе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 28 июня, 2023 Опубликовано 28 июня, 2023 · Жалоба 7 hours ago, Worldmaster said: у FT601 порт двунаправленный. Если мне нужно считать данные то вначале я отправляю команду на чтение и потом должен считать нужное количество байт. То есть при чтении буду данные с порта записывать в буфер. Если надо отправить то я предварительно в буфер запишу данные и потом при обработке транзакции выставляю команду на запись и отправляю данные из буфера в порт FT. Это то что хотелось бы. Я в основном мыслю как разработчик С++. Тут наверное есть какие то нюансы. мой Вам совет сделайте : Один буфер на прием другой на передачу. Проверьте на симуляции(через написание тестбенча), посмотрите RTL как Ваше описание понял синтезатор (наличие BRAM) Затем опишете работу двунаправленного порта через FSM например - таким образом получите управление буферами ниже описание двух портовой памяти - используйте как компонент - обратите внимание память двухклоковая, т.е. писать/читать можно на разных частотах (не забываем про CDC)... library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use IEEE.NUMERIC_STD.ALL; entity bram_tdp is generic ( DATA : integer := 32; ADDR : integer := 12 ); port ( -- Port A a_clk : in std_logic; --ena : in std_logic; a_wr : in std_logic; a_addr : in std_logic_vector(ADDR-1 downto 0); a_din : in std_logic_vector(DATA-1 downto 0); a_dout : out std_logic_vector(DATA-1 downto 0); -- Port B b_clk : in std_logic; --enb : in std_logic; b_wr : in std_logic; b_addr : in std_logic_vector(ADDR-1 downto 0); b_din : in std_logic_vector(DATA-1 downto 0); b_dout : out std_logic_vector(DATA-1 downto 0) ); end bram_tdp; architecture rtl of bram_tdp is -- Shared memory type mem_type is array ( (2**ADDR)-1 downto 0 ) of std_logic_vector(DATA-1 downto 0); -- FUNCTION initialize_ram return mem_type is variable result : mem_type; -- variable v_TEMP : std_logic_vector(((DATA/2)-1) downto 0); -- BEGIN -- v_TEMP := (others => '1'); -- FOR i IN ((2**ADDR)-1) DOWNTO 0 LOOP -- result(i) := v_TEMP & std_logic_vector( to_unsigned(natural(i), natural'((DATA/2)))); -- END LOOP; -- RETURN result; -- END initialize_ram; FUNCTION initialize_ram return mem_type is variable result : mem_type; BEGIN FOR i IN ((2**ADDR)-1) DOWNTO 0 LOOP result(i) := std_logic_vector( to_unsigned(natural(i), natural'((DATA)))); END LOOP; RETURN result; END initialize_ram; shared variable mem : mem_type := initialize_ram; -- shared variable mem : mem_type := (others => (others => '0')); -- := initialize_ram; begin -- Port A process(a_clk) begin if(a_clk'event and a_clk='1') then -- if ena = '1' then if(a_wr='1') then mem(conv_integer(a_addr)) := a_din; end if; a_dout <= mem(conv_integer(a_addr)); -- end if; end if; end process; -- Port B process(b_clk) begin if(b_clk'event and b_clk='1') then --- if enb = '1' then if(b_wr='1') then mem(conv_integer(b_addr)) := b_din; end if; b_dout <= mem(conv_integer(b_addr)); -- end if; end if; end process; end rtl; описание двунаправленного порта - используйте как компонент -- -- The following represents the connectivity of the registered -- bi-directional I/O example -- ______ -- | | -- |-------|D | -- | | Q|-----input_signal -- | clock_|\ | -- ________________ | |/ | -- / top_level_port \______| |_____| -- \________________/ | -- | -- | /| -- |____/ |____________________ -- \ | _____ | -- _____ |\| | | | -- | | | out_sig-|D Q|----| -- output_enable_sig-|D Q|____| | |output_tmp_signal -- | | clock_|\ | -- clock_|\ | |/ | -- |/ | |_____| -- |_____| -- -- -- The following represents the connectivity of the unregistered -- bi-directional I/O example -- -- |----------input_signal -- | -- | -- ________________ | -- / top_level_port \______| -- \________________/ | -- | -- | /| -- |____/ |______output_signal -- \ | -- |\| -- | -- |---output_enable_signal library ieee; use ieee.std_logic_1164.all; entity top_bi_dir is port(T : in std_logic; I : in std_logic; O_NEW : out std_logic; IO : inout std_logic); end top_bi_dir; architecture archi of top_bi_dir is begin IO <= I when T = '0' else 'Z'; O_NEW <= IO; end archi; PS смотрели реализацию Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Worldmaster 0 28 июня, 2023 Опубликовано 28 июня, 2023 · Жалоба В 28.06.2023 в 17:32, Flip-fl0p сказал: Начните с бумаги и карандаша и ластика. Рисуете схему на бумаге. Потом переносите её на код. Большинство вопросов отпадает уже на этом этапе. Что рисовать то? У меня есть диаграмма получения данных с FT. В целом я ее реализовал. Если буфер делать как in то в симуляторе все идеально похоже на то что в даташите. Может даже будет работать и в железе. До меня не доходит сама физика inout. Какой он блок формирует для него. В 28.06.2023 в 18:32, Maverick_ сказал: Проверьте на симуляции(через написание тестбенча), посмотрите RTL как Ваше описание понял синтезатор (наличие BRAM) Затем опишете работу двунаправленного порта через FSM например - таким образом получите управление буферами А можно по руски для чайников то?? Что за тестбенч?? Где его писать?? Сейчас я в редакторе GOWIN делаю схему, синтезирую ее, далее гружу в modelsim, назначаю тактирование и с шагом в 100ns смотрю что рисуют графики. Где и как смотреть что там получилось в GOWIN я не нашел. Может нужен отдельный софт?? В 28.06.2023 в 18:32, Maverick_ сказал: ниже описание двух портовой памяти Правильно ли я понгял что в результате синтеза компилятор сформирует из вентилей блок памяти?? В 28.06.2023 в 18:32, Maverick_ сказал: PS смотрели реализацию Смотрел, но тот код который я нашел для меня малопонятен. Он там на verilog и слишком его много. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 17 29 июня, 2023 Опубликовано 29 июня, 2023 · Жалоба 11 hours ago, Worldmaster said: До меня не доходит сама физика inout. Какой он блок формирует для него. inout можно сделать только на ножках микросхемы. Он формируется в блоке IOB (или как там он у GOWIN называется). Внутри микросхемы никаих inout'ов нет. 11 hours ago, Worldmaster said: Где и как смотреть что там получилось в GOWIN я не нашел. Может нужен отдельный софт?? Есть там RTL viewer, Technology viewer, Netlist viewer или что-то похожее? F1 нажимать пробовали? Если и дальше будете что-то делать методом тыка, далеко не уедете. Как говорили раньше в этих ваших Интернетах, "читайте доки, они рулез". Сейчас эта максима забыта, а жаль. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 29 июня, 2023 Опубликовано 29 июня, 2023 · Жалоба 15 hours ago, Worldmaster said: А можно по руски для чайников то?? Что за тестбенч?? Где его писать?? Смотрел, но тот код который я нашел для меня малопонятен. Он там на verilog и слишком его много. про тестбенч и почитайте про Finite state machines Без моделирования далеко не "уедите" при разработке на FPGA PS По ссылке я дал описание от производителя думаю оно рабочее и представленное описание формирует правильную циклограмму работы с микросхемой FT601. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 29 июня, 2023 Опубликовано 29 июня, 2023 · Жалоба 19 hours ago, Worldmaster said: Ну хорошо. А как мне тогда сделать то что я хочу?? Вы не того хотите 🙂 Посмотрите в Gowin готовые макроблоки (там должно быть что то на эту тему), и найдите там готовое FIFO (2х клоковое). Не надо изобретать велосипед. 19 hours ago, Worldmaster said: И какие это 3 модуля? Верхний уровень - сама память, ещё модуль где вы из неё читаете и 3й - где в неё пишете. Должно быть так - память и процессы чтения и записи в одном модуле, управляющие сигналы и сигналы данных от этих процессов выдаются наружу через порты. Сама память никуда не выдаётся. Но в вашем случае лучше взять готовое FIFO Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Worldmaster 0 29 июня, 2023 Опубликовано 29 июня, 2023 · Жалоба В 29.06.2023 в 11:51, Maverick_ сказал: Без моделирования далеко не "уедите" при разработке на FPGA Ну я же для этого modelsim и взял. В 29.06.2023 в 12:01, xvr сказал: Посмотрите в Gowin готовые макроблоки (там должно быть что то на эту тему), и найдите там готовое FIFO (2х клоковое). Не надо изобретать велосипед. Там все шифрованое. По крайней мере если самому пилить то лучше понимаешь что к чему. Само по себе вроде бы компилится но совместно с моей архитектурой тут же начинает сыпать ошибками. В 29.06.2023 в 11:51, Maverick_ сказал: По ссылке я дал описание от производителя думаю оно рабочее и представленное описание формирует правильную циклограмму работы с микросхемой FT601. Так циклограмма у меня соответствует заявленой производителем. Вопрос то в другом был. Но я вроде бы уже понял. В 29.06.2023 в 08:48, andrew_b сказал: Есть там RTL viewer, Technology viewer, Netlist viewer или что-то похожее? F1 нажимать пробовали? F1 в плане помощи чтоли?? Не работает. Нашел вот Schematic Viewer это он? В 29.06.2023 в 08:48, andrew_b сказал: Как говорили раньше в этих ваших Интернетах, "читайте доки, они рулез". Чего вы все такие токсичные? Читаем мы интернеты, даже ChatGPT привлекли. Причем от GPT помощь даже продуктивнее получается. В 29.06.2023 в 08:48, andrew_b сказал: Сейчас эта максима забыта, а жаль. Мне кажется что пора все форумы прикрывать на корню раз у всех такое отношение. Регистрацию на форумах отменить а для остальных при попытке создать тему сразу футболить на "Давай я поищу в гугл за тебя". Читаем мы все мануалы, и примеры смотрим но блин если возникает какой то вроде бы достаточно простой вопрос у кого можно уточнить?? Это было бы супер если бы все писали даташиты по примеру Microchip но не все так. Да и для них есть ERRATA то есть даже крутые мужЫки из мега конторы ошибаются и готовые модули могут работать не так как ожидается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 29 июня, 2023 Опубликовано 29 июня, 2023 · Жалоба 43 minutes ago, Worldmaster said: Там все шифрованое. Ну и что? Это же не мешает использовать готовые IP блоки в своём дизайне. 44 minutes ago, Worldmaster said: По крайней мере если самому пилить то лучше понимаешь что к чему. Можно с учебными целями запились своё FIFO, но в проекте лучше использовать готовое - оно по крайней мере работает 🙂 Кроме того, даже с учебными целями лучше использовать готовое - как минимум поймёте как выглядит более менее стандартный интерфейс FIFO, прежде чем пилить свой велосипед с квадратными колёсами 🙂 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zversky 19 1 июля, 2023 Опубликовано 1 июля, 2023 · Жалоба В 29.06.2023 в 13:56, Worldmaster сказал: Ну я же для этого modelsim и взял. Вы его как и с чем едите? Гляньте: я в моих последних постах выкладывал полностью проект включая и моделирование: может, что пригодится? В 29.06.2023 в 13:56, Worldmaster сказал: Там все шифрованое. В закромах и расшифрованное лежит. Вам с таким количеством сообщений не пора ли обратиться в соответствующее место за доступом туда? В 29.06.2023 в 13:56, Worldmaster сказал: По крайней мере если самому пилить то лучше понимаешь что к чему. Ну вот и я попробовал DPRAM на основе BSRAM попилить - результат пилки найдёте там же В 29.06.2023 в 13:56, Worldmaster сказал: Само по себе вроде бы компилится но совместно с моей архитектурой тут же начинает сыпать ошибками. Выкладывайте проект, как я: вдруг, кто и сподобиться, как для меня, скачать, скомпилировать и своими глазами увидеть, о чём речь? В 29.06.2023 в 13:56, Worldmaster сказал: Так циклограмма у меня соответствует заявленой производителем. А это вы как проверяли? Просто глазами или табличку построили? В 29.06.2023 в 13:56, Worldmaster сказал: F1 в плане помощи чтоли?? Не работает. Там много чего не работает. Или работает не так, как должно. В 29.06.2023 в 13:56, Worldmaster сказал: Чего вы все такие токсичные? Не все. Вот я - добрый, несмотря на ник. Да тех пор, правда, пока не появляется такой же с виду абсолютно нетоксичным ником, а по сути, вот как вы сказали. Тогда я вспоминаю про суть своего ника. В 29.06.2023 в 13:56, Worldmaster сказал: Читаем мы интернеты, даже ChatGPT привлекли Вот это интересно. Просьба рассказать, как этим пользоваться, ибо давно засматриваюсь. Можно в ЛС. В ЛС можно и даже нужно вообще по любым вопросам - постараюсь помочь, ибо мне тут помогли столько, что считаю себя обязанным благодарить всех помогшим и вернуть сторицей эту помощь другим. Вам, например. Если 1 вам эта помощь нужна и 2 я смогу её оказать По п.2. буду стараться В 29.06.2023 в 13:56, Worldmaster сказал: Мне кажется что пора все форумы прикрывать на корню раз у всех такое отношение. Регистрацию на форумах отменить а для остальных при попытке создать тему сразу футболить на "Давай я поищу в гугл за тебя". Мне кажется порою, что солдаты С кровавых не пришедшие полей .... В 29.06.2023 в 13:56, Worldmaster сказал: но блин если возникает какой то вроде бы достаточно простой вопрос у кого можно уточнить?? Выше я ответил, а здесь же выскажусь совокупно: наберитесь терпения, как и IRL, и работайте. Здесь - часть жизни и работы. И это хорошо, что она есть. А расстрелять - это в 37 к товарищу Сталину ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться