Перейти к содержанию
    

Сравнить (через сжатие) два 512разядных(и более)сущности

Страшно извиняюсь, но я имел в виду CRC-32, который за такт обрабатывает сразу 32 бита.

У меня вопрос стоял так - 125 MHz и 64 бита или 250 MHz 32 бита. Второй вариант победил.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Страшно извиняюсь, но я имел в виду CRC-32, который за такт обрабатывает сразу 32 бита.

У меня вопрос стоял так - 125 MHz и 64 бита или 250 MHz 32 бита. Второй вариант победил.

Мне нет нужды так спешить. :biggrin:

Мне важно новой примочкой не создавать проблемы в готовом проекте. Сдвиговый регистр-идеальный побитный вариант. Ожидается больше 2000 точек просмотра.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Страшно извиняюсь, но я имел в виду CRC-32, который за такт обрабатывает сразу 32 бита.

У меня вопрос стоял так - 125 MHz и 64 бита или 250 MHz 32 бита. Второй вариант победил.

 

Воспользовался ради интереса свободным временем, гуглом и практически сразу найденным CRC генератором

http://outputlogic.com/?page_id=321

 

Исходные данные:

- 32-бита CRC32 802.3

- В сгенерированном VHDL ничего не модифицировалось.

- ISE 12.3

- Все установки ISE дефолтные

- Device - XC6SLX100T-3FGG484

- Использовал констрейнт на сигнал clk

 

Получил:

- All constrain meet

- Максимальная частота, при которой констрейнт вписывается в чип - 321,44 MHz

 

Может можно еще что-то выжать с помощью конвейера, но предоставлю эту возможность Вам;-)

Возможно эта информация кому-то пригодится.

 

За сим откланиваюсь. Желаю успехов!

 

crc.vhd

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А если на входе data_in сначала засунуть в регистр, а crc_out на выходе тоже?

 

Спрашиваю потому, что если вы написали констрейны для входов и выходов, то это один результат и добавление регистров на один или два такта только улучшит ситуацию, так как облегчит разводку, позволит сделать дублирование и т.п.

Если не написали, то совсем другие пути участвуют в обработке данных и добавление регистров вернет все реальности.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А если на входе data_in сначала засунуть в регистр, а crc_out на выходе тоже?

 

Спрашиваю потому, что если вы написали констрейны для входов и выходов, то это один результат и добавление регистров на один или два такта только улучшит ситуацию, так как облегчит разводку, позволит сделать дублирование и т.п.

Если не написали, то совсем другие пути участвуют в обработке данных и добавление регистров вернет все реальности.

 

Вот единственный констрейнт

NET "clk" TNM_NET = clk;
TIMESPEC TS_clk = PERIOD "clk" 321.44 MHz HIGH 50%;

 

У меня нет задачи делать CRC (по крайней мере сейчас)...

поэтому ничего больше не констрейнтилось... IOSTANDART, сэтапы, холды и пр.

Ну и наверняка в реальной жизни входы и выходы CRC врядли будут идти на пины ;-)

 

P.S.

crc_out имеет регистр на выходе

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А оно надо, умение? CSC Tool.

Беру свои слова назад. Нормальный тулз! И одноразрядный вход можно поставить. Я не врубился до конца. Можно и 1 разряд получить.

Извините, если кого ввёл в заблуждение! :maniac: :wacko:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И что приятно, прогон тестбенча показал полное сходство в поведении моего модулька и того, что генерируется предложенным тулзом.

Начинающим предлагаю для накопления опыта оба текста для сравнения

функция nextCRC32_D1

-- Purpose : synthesizable CRC function
--   * polynomial: (0 1 2 4 6 7 10 11 15 16 17 19 20 26 28 29 30 32)
--   * data width: 1
--
-- Info : [email protected]
--        http://www.easics.com
--------------------------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;

package PCK_CRC32_D1 is
 -- polynomial: (0 1 2 4 6 7 10 11 15 16 17 19 20 26 28 29 30 32)
 -- data width: 1
 -- convention: the first serial bit is D[0]
 function nextCRC32_D1
   (Data: std_logic;
    crc:  std_logic_vector(31 downto 0))
   return std_logic_vector;
end PCK_CRC32_D1;


package body PCK_CRC32_D1 is

 -- polynomial: (0 1 2 4 6 7 10 11 15 16 17 19 20 26 28 29 30 32)
 -- data width: 1
 -- convention: the first serial bit is D[0]
 function nextCRC32_D1
   (Data: std_logic;
    crc:  std_logic_vector(31 downto 0))
   return std_logic_vector is

   variable d:      std_logic_vector(0 downto 0);
   variable c:      std_logic_vector(31 downto 0);
   variable newcrc: std_logic_vector(31 downto 0);

 begin
   d(0) := Data;
   c := crc;

   newcrc(0) := d(0) xor c(31);
   newcrc(1) := d(0) xor c(0) xor c(31);
   newcrc(2) := d(0) xor c(1) xor c(31);
   newcrc(3) := c(2);
   newcrc(4) := d(0) xor c(3) xor c(31);
   newcrc(5) := c(4);
   newcrc(6) := d(0) xor c(5) xor c(31);
   newcrc(7) := d(0) xor c(6) xor c(31);
   newcrc(8) := c(7);
   newcrc(9) := c(8);
   newcrc(10) := d(0) xor c(9) xor c(31);
   newcrc(11) := d(0) xor c(10) xor c(31);
   newcrc(12) := c(11);
   newcrc(13) := c(12);
   newcrc(14) := c(13);
   newcrc(15) := d(0) xor c(14) xor c(31);
   newcrc(16) := d(0) xor c(15) xor c(31);
   newcrc(17) := d(0) xor c(16) xor c(31);
   newcrc(18) := c(17);
   newcrc(19) := d(0) xor c(18) xor c(31);
   newcrc(20) := d(0) xor c(19) xor c(31);
   newcrc(21) := c(20);
   newcrc(22) := c(21);
   newcrc(23) := c(22);
   newcrc(24) := c(23);
   newcrc(25) := c(24);
   newcrc(26) := d(0) xor c(25) xor c(31);
   newcrc(27) := c(26);
   newcrc(28) := d(0) xor c(27) xor c(31);
   newcrc(29) := d(0) xor c(28) xor c(31);
   newcrc(30) := d(0) xor c(29) xor c(31);
   newcrc(31) := c(30);
   return newcrc;
 end nextCRC32_D1;

end PCK_CRC32_D1;

И мой

-- Description : 		   X32+X30+X29+X28+X26+X20+X19+X17+X16+X15+X11+X10+X7+X6+X4+X2+X1+1
--								0xBA0DC66B
-------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity signature32 is
 port(
	 CLK : in STD_LOGIC;
	 en  : in STD_LOGIC;
	 Reset : in STD_LOGIC;
	 ind : in STD_LOGIC;
	 dat : out STD_LOGIC_VECTOR(31 downto 0)
     );
end signature32;

architecture signature_body of signature32 is
signal rg_baza 	 :  STD_LOGIC_VECTOR(31 downto 0);
signal rg_bz 	 :  STD_LOGIC_VECTOR(31 downto 0);
begin
process (CLK,Reset)
begin
if Reset = '1' then
	rg_baza <= "00000000000000000000000000000000";
elsif CLK'event and CLK = '1' and en = '1' then
	rg_baza <= rg_bz;
end if;
end process;
rg_bz(0) <= rg_baza(31)xor ind;
rg_bz(1) <= rg_baza(0) xor (rg_baza(31) xor ind);
rg_bz(2) <= rg_baza(1) xor (rg_baza(31) xor ind);
rg_bz(3) <= rg_baza(2);
rg_bz(4) <= rg_baza(3) xor (rg_baza(31) xor ind);
rg_bz(5) <= rg_baza(4);
rg_bz(6) <= rg_baza(5) xor (rg_baza(31) xor ind);
rg_bz(7) <= rg_baza(6) xor (rg_baza(31) xor ind);
rg_bz(8) <= rg_baza(7);
rg_bz(9) <= rg_baza(8);
rg_bz(10) <= rg_baza(9) xor (rg_baza(31) xor ind);
rg_bz(11) <= rg_baza(10) xor (rg_baza(31) xor ind);
rg_bz(12) <= rg_baza(11);
rg_bz(13) <= rg_baza(12);
rg_bz(14) <= rg_baza(13);
rg_bz(15) <= rg_baza(14) xor (rg_baza(31) xor ind);
rg_bz(16) <= rg_baza(15) xor (rg_baza(31) xor ind);
rg_bz(17) <= rg_baza(16) xor (rg_baza(31) xor ind);
rg_bz(18) <= rg_baza(17);
rg_bz(19) <= rg_baza(18) xor (rg_baza(31) xor ind);
rg_bz(20) <= rg_baza(19) xor (rg_baza(31) xor ind);
rg_bz(25 downto 21) <= rg_baza(24 downto 20);
rg_bz(26) <= rg_baza(25) xor (rg_baza(31) xor ind);
rg_bz(27) <= rg_baza(26);
rg_bz(28) <= rg_baza(27) xor (rg_baza(31) xor ind);
rg_bz(29) <= rg_baza(28) xor (rg_baza(31) xor ind);
rg_bz(30) <= rg_baza(29) xor (rg_baza(31) xor ind);
rg_bz(31) <= rg_baza(30);
dat<= rg_baza;
end signature_body;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...