yes 7 1 июля, 2021 Опубликовано 1 июля, 2021 · Жалоба не ради холивара посоветую автору темы, если он еще не определился, взять язык Verilog (SV) а не VHDL описание второго (простого) счетчика из ответа Maverick_ будет как-то так module cntr(input logic clk, en, rst, output logic [63:0] count); always @(posedge clk or negedge rst) if(!rst) count<='0; else if (en) count<=count+64'd1; endmodule что, по моему, большой плюс - краткость, то есть меньше шансов ошибиться Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 1 июля, 2021 Опубликовано 1 июля, 2021 · Жалоба 1 минуту назад, yes сказал: краткость В VHDL тоже можно писать в одну строку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 7 1 июля, 2021 Опубликовано 1 июля, 2021 · Жалоба Just now, andrew_b said: В VHDL тоже можно писать в одну строку. сомневаюсь, что символов выйдет мало - станет только хуже с ясностью. и даже если навставлять переводов строк после ; в верилоге - то все равно - сильно лучше с лаконичностью будет Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 27 1 июля, 2021 Опубликовано 1 июля, 2021 · Жалоба 11 minutes ago, andrew_b said: В VHDL тоже можно писать в одну строку. Все новые IP Cores от Xilinx'а сделаны Verilog'е. И это жжж, неспроста.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 1 июля, 2021 Опубликовано 1 июля, 2021 · Жалоба 7 минут назад, yes сказал: сильно лучше с лаконичностью будет Зато с другим сильно хуже. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 1 июля, 2021 Опубликовано 1 июля, 2021 · Жалоба 2 часа назад, blackfin сказал: Все новые IP Cores от Xilinx'а сделаны Verilog'е. Так индусы херак-херак и в продакшн. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 27 1 июля, 2021 Опубликовано 1 июля, 2021 · Жалоба 21 minutes ago, andrew_b said: Так индусы херак-херак и в продакшн. Да, это сильный аргумент, чтобы переписать индусские написать свои IP Cores для 25/50/100G Ethernet'а на VHDL. А свои IP Cores для PCIe Gen3/Gen4 вы уже на VHDL написали? А как насчет IP Cores для DDR3/DDR4 ? У вас тоже всё своё и на VHDL ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 2 июля, 2021 Опубликовано 2 июля, 2021 · Жалоба 11 часов назад, blackfin сказал: А свои IP Cores Не постигаю вашей логики. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 27 2 июля, 2021 Опубликовано 2 июля, 2021 · Жалоба 6 minutes ago, andrew_b said: Не постигаю вашей логики. Логика простая: Вы заявили, что индусы пишут кривые IP Cores, но быстро. Очевидно, эти кривые IP Cores вас не устраивают. Тогда вам нужно написать свои IP Cores на замену этим "херак-херак" IP Cores. Так, понятнее? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 2 июля, 2021 Опубликовано 2 июля, 2021 · Жалоба 12 минут назад, blackfin сказал: Вы заявили Вы поднимите глаза на первое сообщение на этой странице. Там нам заявляют, что верилог хорош уж тем, что надо букавок меньше писать. И из-за этого якобы меньше ошибок будет. Я говорю, что это иллюзия. 14 минут назад, blackfin сказал: индусы пишут кривые IP Cores То, что энтерпрайздный код местами, мягко говоря, далёк от совершенства, никто, надеюсь, спорить не будет. Что софт (привет Некрософту), что хард (привет Интелу). Безотносительно индусов и кривизны корок, Верилог просто провоцирует на написание такого говнокода, который на VHDL в принципе невозможен. Аргументы против Верилога я уже тут приводил, повторяться неохота. Нравится стрелять себе по ногам из гранотомёта -- ну удачи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 27 2 июля, 2021 Опубликовано 2 июля, 2021 · Жалоба 14 minutes ago, andrew_b said: Вы поднимите глаза на первое сообщение на этой странице. Там нам заявляют, что верилог хорош уж тем, что надо букавок меньше писать. И из-за этого якобы меньше ошибок будет. Я говорю, что это иллюзия. Я с этим и не спорил. Я лишь подчеркнул, что длина кода это не единственный аргумент в споре. Суровая реальность состоит в том, что если хочется использовать готовые IP Cores от вендора, то вам никуда не уйти от изучения Verilog'а. Ибо готовые тестбенчи, примеры готовых проектов с этими IP Cores и все мануалы на эти IP Cores, всё это Xilinx дает на языке Verilog. А написать криво и быстро можно на любом языке. Даже здесь, на форуме, многие не могут написать без ошибок и двух слов на языке, на котором пишут и говорят уже практически всю жизнь. )) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 2 июля, 2021 Опубликовано 2 июля, 2021 · Жалоба Все мы читаем как verilog так и vhdl Кому то удобнее писать на verilog или на vhdl и как говориться на вкус и цвет товарищей нет. Все работают как им удобно и пишут на языках которые выбрали для себя. Мне удобнее писать на vhdl потому что мне нравиться строгая типизация и на уровне проверки ошибок убираются многие опечатки (например я не смогу соеденить шины разной разрядности). Не для спора... 13 hours ago, blackfin said: Да, это сильный аргумент, чтобы переписать индусские написать свои IP Cores для 25/50/100G Ethernet'а на VHDL. А свои IP Cores для PCIe Gen3/Gen4 вы уже на VHDL написали? А как насчет IP Cores для DDR3/DDR4 ? У вас тоже всё своё и на VHDL ? Вы работали с 10g от интел/альтера? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 27 2 июля, 2021 Опубликовано 2 июля, 2021 · Жалоба 1 hour ago, Maverick_ said: Вы работали с 10g от интел/альтера? Нет, с 10G от Интела не работал. Но читал мануалы Альтеры на их IP Core для 10G. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 2 июля, 2021 Опубликовано 2 июля, 2021 · Жалоба 1 minute ago, blackfin said: Нет, с 10G от Интела не работал. Но читал манулы Альтеры на их IP Core для 10G. Жаль ... У меня просто одна корка работает супер. Добавляю вторую корку (копия первой) которая работает паралельно с первой то вторая переодически теряет линк. Почему не могу понять.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vt313 0 2 июля, 2021 Опубликовано 2 июля, 2021 · Жалоба 01.07.2021 в 00:37, Maverick_ сказал: спорно (выделил жирным) это особенно если брать обработку данных в 32 бита и выше... :) и делать описание схемы с помощью языка HDL. Стараться не использовать готовые IP core производителя для обеспечения переносимости код Приведу пример на основе 64 битного счетчика Так сказать "Новороченный" счетчик: library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity PipelinedCounter is generic ( width_g: natural := 64; -- Must be divisible by parts_g. parts_g: natural := 4 ); port ( clk: in std_logic; rst: in std_logic; clear: in std_logic; enable: in std_logic; count: out std_logic_vector(width_g - 1 downto 0); tick: out std_logic ); end entity; architecture rtl of PipelinedCounter is constant part_width_c: natural := width_g / parts_g; signal almost_tick_r: std_logic_vector(parts_g - 1 downto 0); signal count_r: std_logic_vector(width_g - 1 downto 0); begin count <= count_r; process (all) variable part_v: unsigned(part_width_c - 1 downto 0); variable tick_v: std_logic; begin if rst = '1' then count_r <= (others => '0'); almost_tick_r <= (others => '0'); tick <= '0'; elsif rising_edge(clk) then tick_v := enable; for i in 0 to parts_g - 1 loop part_v := unsigned(count_r((i + 1) * part_width_c - 1 downto i * part_width_c)); if tick_v = '1' then -- Value is max - 1? if part_v = to_unsigned(2**part_width_c - 2, part_width_c) then almost_tick_r(i) <= '1'; else almost_tick_r(i) <= '0'; end if; part_v := part_v + 1; end if; count_r((i + 1) * part_width_c - 1 downto i * part_width_c) <= std_logic_vector(part_v); tick_v := tick_v and almost_tick_r(i); end loop; tick <= tick_v; if clear = '1' then count_r <= (others => '0'); almost_tick_r <= (others => '0'); tick <= '0'; end if; end if; end process; end architecture; и тот же счечик описанный стандартно: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity PipelinedCounter is Port ( clk : in std_logic; en : in std_logic; rst : in std_logic; count : out std_logic_vector(63 downto 0)); end PipelinedCounter; architecture behavioral of PipelinedCounter is signal cnt: std_logic_vector (63 downto 0):= (others => '0'); begin pr_d_e: process (clk, en, cnt, rst) begin if (rst = '0') then cnt <= (others => '0'); elsif (clk'event and clk = '1') then if (en = '1') then cnt <= cnt + "0000000000000000000000000000000000000000000000000000000000000001"; end if; end if; count <= cnt; end process pr_d_e; end behavioral; обычный счетчик дает так сказать "Новороченный" счетчик PS Не для халивара. Это мое личное мнение/опыт. Все выше мною сказанное касается только если не использовать готовые IP core производителя, а стараться самому описать все вычислительные блоки на HDL, чтобы была переносимость. 1. Это не серьезно. 2. Вот в таких случаях и нужно знать особенности ПЛИС. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться