реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> Сравнить (через сжатие) два 512разядных(и более)сущности, Прошу совета по минимуму аппаратного рессурса
Shtirlits
сообщение Mar 17 2011, 18:14
Сообщение #31


Знающий
****

Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905



Страшно извиняюсь, но я имел в виду CRC-32, который за такт обрабатывает сразу 32 бита.
У меня вопрос стоял так - 125 MHz и 64 бита или 250 MHz 32 бита. Второй вариант победил.
Go to the top of the page
 
+Quote Post
Мур
сообщение Mar 18 2011, 06:48
Сообщение #32


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(Shtirlits @ Mar 17 2011, 22:14) *
Страшно извиняюсь, но я имел в виду CRC-32, который за такт обрабатывает сразу 32 бита.
У меня вопрос стоял так - 125 MHz и 64 бита или 250 MHz 32 бита. Второй вариант победил.

Мне нет нужды так спешить. biggrin.gif
Мне важно новой примочкой не создавать проблемы в готовом проекте. Сдвиговый регистр-идеальный побитный вариант. Ожидается больше 2000 точек просмотра.
Go to the top of the page
 
+Quote Post
Victor®
сообщение Mar 18 2011, 11:21
Сообщение #33


Lazy
******

Группа: Свой
Сообщений: 2 070
Регистрация: 21-06-04
Из: Ukraine
Пользователь №: 76



Цитата(Shtirlits @ Mar 17 2011, 22:14) *
Страшно извиняюсь, но я имел в виду 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 ( 15.39 килобайт ) Кол-во скачиваний: 100
 


--------------------
"Everything should be made as simple as possible, but not simpler." - Albert Einstein
Go to the top of the page
 
+Quote Post
Shtirlits
сообщение Mar 18 2011, 11:27
Сообщение #34


Знающий
****

Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905



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

Спрашиваю потому, что если вы написали констрейны для входов и выходов, то это один результат и добавление регистров на один или два такта только улучшит ситуацию, так как облегчит разводку, позволит сделать дублирование и т.п.
Если не написали, то совсем другие пути участвуют в обработке данных и добавление регистров вернет все реальности.
Go to the top of the page
 
+Quote Post
Victor®
сообщение Mar 18 2011, 11:49
Сообщение #35


Lazy
******

Группа: Свой
Сообщений: 2 070
Регистрация: 21-06-04
Из: Ukraine
Пользователь №: 76



Цитата(Shtirlits @ Mar 18 2011, 14:27) *
А если на входе 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 имеет регистр на выходе


--------------------
"Everything should be made as simple as possible, but not simpler." - Albert Einstein
Go to the top of the page
 
+Quote Post
Мур
сообщение Mar 25 2011, 14:09
Сообщение #36


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(=SSN= @ Mar 11 2011, 12:05) *
А оно надо, умение? CSC Tool.

Беру свои слова назад. Нормальный тулз! И одноразрядный вход можно поставить. Я не врубился до конца. Можно и 1 разряд получить.
Извините, если кого ввёл в заблуждение! maniac.gif wacko.gif
Go to the top of the page
 
+Quote Post
Мур
сообщение Mar 28 2011, 07:18
Сообщение #37


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



И что приятно, прогон тестбенча показал полное сходство в поведении моего модулька и того, что генерируется предложенным тулзом.
Начинающим предлагаю для накопления опыта оба текста для сравнения
функция nextCRC32_D1
CODE
-- 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 : tools@easics.be
-- 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;

И мой
CODE
-- 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;
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 02:09
Рейтинг@Mail.ru


Страница сгенерированна за 0.01372 секунд с 7
ELECTRONIX ©2004-2016