Maverick_ 15 10 мая, 2008 Опубликовано 10 мая, 2008 · Жалоба Ну вы уже совсем. Без комментариев. Спасибо, что показали ошибку/опечатку :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 23 апреля, 2021 Опубликовано 23 апреля, 2021 · Жалоба On 5/6/2008 at 11:05 AM, xvr said: Сильно :) Функция nextCRC16_D8(Data,CRC) signal CRC : STD_LOGIC_VECTOR (15 downto 0) := x"FFFF"; CRC_counter : process (clk,reset_CRC) begin if reset_CRC = '1' then CRC <= x"FFFF"; elsif clk'event and clk='1' and SLD = '1' then CRC <= nextCRC16_D8(data,CRC); end if; end process CRC_counter; Народ! А для варианта nextCRC16_D16(Data,CRC) ? Работа всего блока должна быть с теми же CRC(для одного и того же набора данных на входе как для nextCRC16_D8 ) ?... У меня получается совсем другой... Причем, если вставляю его родной код CRC на вход, то новый раунд честно даёт 0000! Растерян!... Проверка велась на https://www.lammertbies.nl/comm/info/crc-calculation Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 26 апреля, 2021 Опубликовано 26 апреля, 2021 · Жалоба On 4/23/2021 at 3:36 PM, Мур said: Народ! Лучшее - враг хорошего! Психанул и форсировал на 2 фазы имеющееся... library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; --==================================================================== entity crc16_modbus is port( en : in std_logic; -- разрешение работы clk : in std_logic; -- строб вычисления reset : in std_logic; -- Сброс data_in : in std_logic_vector(15 downto 0); -- Входные данные crc_out : out std_logic_vector(15 downto 0) -- Выход контрольной суммы ); end entity; architecture arh of crc16_modbus is signal en2 : std_logic; begin process(clk, reset) variable crc : std_logic_vector (15 downto 0); variable f : std_logic; begin if (reset = '1') then crc := x"FFFF"; elsif (rising_edge(clk)) then en2 <= en; if (en = '1') then crc := crc(15 downto 8) & (crc(7 downto 0) xor data_in(7 downto 0)); elsif (en2 = '1') then crc := crc(15 downto 8) & (crc(7 downto 0) xor data_in(15 downto 8)); end if; if (en = '1') or (en2 = '1') then for i in 0 to 7 loop f := crc(0); crc := '0' & crc(15 downto 1); if (f = '1') then crc := crc xor x"A001"; end if; end loop; end if; end if; crc_out <= crc; end process; end arh; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
etherbladenet 0 19 февраля, 2022 Опубликовано 19 февраля, 2022 · Жалоба Коллеги, данное видео показывающее визуализацию CRC и параллельного CRC на FPGA должно быть полезным: https://www.youtube.com/watch?v=_tB576MhmrI Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться