Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Языки описания аппаратуры (VHDL и др.)

Ответ:

Отправлено ++ 19 декабря 2008 г. 09:56
В ответ на: CRC16 и VHDL подскажите где торможу. отправлено avtomax_tehno 18 декабря 2008 г. 17:59


--
-- This module provides the UDMA CRC check calculation.
--

library IEEE;
use IEEE.std_logic_1164.all;
ENTITY m3s009dv IS
PORT (
CLK : IN std_logic; --
NCD : IN std_logic; -- Reset
NDACK : IN std_logic; -- Initialise CRC
UDQ : IN std_logic_vector(15 DOWNTO 0); -- IDE Data
UIDEI : IN std_logic_vector(15 DOWNTO 0); -- IDE Data
UBRd : IN std_logic; -- Step CRC
UBWr : IN std_logic; -- Step CRC
CRC : OUT std_logic_vector(15 DOWNTO 0));
END m3s009dv;

ARCHITECTURE translated OF m3s009dv IS


SIGNAL CRC_xhdl1 : std_logic_vector(15 DOWNTO 0);
SIGNAL D : std_logic_vector(15 DOWNTO 0);
SIGNAL CLR : std_logic;

-- ------------------------------

function expandbus16 (inbit: std_logic) return std_logic_vector is
-- expands a std_logic to a 16 bit std_logic bus
variable i: integer;
variable ret: std_logic_vector (15 downto 0);
begin
for i in 0 to 15 loop
ret (i) := inbit;
end loop;
return (ret);
end;

-- ------------------------------
BEGIN -- of architecture
-- ------------------------------

CRC <= CRC_xhdl1;

--
-- CRC Generator
--
PROCESS (CLK)
BEGIN
IF (CLK'EVENT AND CLK = '1') THEN
IF (CLR = '1') THEN
CRC_xhdl1(15 DOWNTO 0) <= "0100101010111010";
ELSE
IF ((UBRd OR UBWr) = '1') THEN
CRC_xhdl1(15) <= D(12) XOR D( 8) XOR D(5) XOR D(4) XOR
CRC_xhdl1(11) XOR CRC_xhdl1(10) XOR CRC_xhdl1( 7) XOR CRC_xhdl1(3);
CRC_xhdl1(14) <= D(13) XOR D( 9) XOR D(6) XOR D(5) XOR
CRC_xhdl1(10) XOR CRC_xhdl1( 9) XOR CRC_xhdl1( 6) XOR CRC_xhdl1(2);
CRC_xhdl1(13) <= D(14) XOR D(10) XOR D(7) XOR D(6) XOR
CRC_xhdl1( 9) XOR CRC_xhdl1( 8) XOR CRC_xhdl1( 5) XOR CRC_xhdl1(1);
CRC_xhdl1(12) <= D(15) XOR D(11) XOR D(8) XOR D(7) XOR D(0) XOR
CRC_xhdl1(15) XOR CRC_xhdl1( 8) XOR CRC_xhdl1( 7) XOR CRC_xhdl1( 4) XOR CRC_xhdl1(0);
CRC_xhdl1(11) <= D( 9) XOR D( 5) XOR D(4) XOR D(1) XOR D(0) XOR
CRC_xhdl1(15) XOR CRC_xhdl1(14) XOR CRC_xhdl1(11) XOR CRC_xhdl1(10) XOR CRC_xhdl1(6);
CRC_xhdl1(10) <= D(10) XOR D( 6) XOR D(5) XOR D(2) XOR D(1) XOR
CRC_xhdl1(14) XOR CRC_xhdl1(13) XOR CRC_xhdl1(10) XOR CRC_xhdl1( 9) XOR CRC_xhdl1(5);
CRC_xhdl1( 9) <= D(11) XOR D( 7) XOR D(6) XOR D(3) XOR D(2) XOR D(0) XOR
CRC_xhdl1(15) XOR CRC_xhdl1(13) XOR CRC_xhdl1(12) XOR CRC_xhdl1( 9) XOR
CRC_xhdl1(8) XOR CRC_xhdl1(4);
CRC_xhdl1( 8) <= D(12) XOR D( 8) XOR D(7) XOR D(4) XOR D(3) XOR D(1) XOR D(0) XOR
CRC_xhdl1(15) XOR CRC_xhdl1(14) XOR CRC_xhdl1(12) XOR CRC_xhdl1(11) XOR
CRC_xhdl1(8) XOR CRC_xhdl1(7) XOR CRC_xhdl1(3);
CRC_xhdl1( 7) <= D(13) XOR D( 9) XOR D(8) XOR D(5) XOR D(4) XOR D(2) XOR D(1) XOR D(0) XOR
CRC_xhdl1(15) XOR CRC_xhdl1(14) XOR CRC_xhdl1(13) XOR CRC_xhdl1(11) XOR
CRC_xhdl1(10) XOR CRC_xhdl1(7) XOR CRC_xhdl1(6) XOR CRC_xhdl1(2);
CRC_xhdl1( 6) <= D(14) XOR D(10) XOR D(9) XOR D(6) XOR D(5) XOR D(3) XOR D(2) XOR D(1) XOR
CRC_xhdl1(14) XOR CRC_xhdl1(13) XOR CRC_xhdl1(12) XOR CRC_xhdl1(10) XOR
CRC_xhdl1(9) XOR CRC_xhdl1(6) XOR CRC_xhdl1(5) XOR CRC_xhdl1(1);
CRC_xhdl1( 5) <= D(15) XOR D(11) XOR D(10) XOR D(7) XOR D(6) XOR D(4) XOR D(3) XOR D(2) XOR
CRC_xhdl1(13) XOR CRC_xhdl1(12) XOR CRC_xhdl1(11) XOR CRC_xhdl1( 9) XOR
CRC_xhdl1(8) XOR CRC_xhdl1(5) XOR CRC_xhdl1(4) XOR CRC_xhdl1(0);
CRC_xhdl1( 4) <= D(11) XOR D( 7) XOR D(3) XOR D(0) XOR
CRC_xhdl1(15) XOR CRC_xhdl1(12) XOR CRC_xhdl1( 8) XOR CRC_xhdl1(4);
CRC_xhdl1( 3) <= D(12) XOR D( 8) XOR D(4) XOR D(1) XOR D(0) XOR CRC_xhdl1(15) XOR
CRC_xhdl1(14) XOR CRC_xhdl1(11) XOR CRC_xhdl1( 7) XOR CRC_xhdl1(3);
CRC_xhdl1( 2) <= D(13) XOR D( 9) XOR D(5) XOR D(2) XOR D(1) XOR CRC_xhdl1(14) XOR
CRC_xhdl1(13) XOR CRC_xhdl1(10) XOR CRC_xhdl1( 6) XOR CRC_xhdl1(2);
CRC_xhdl1( 1) <= D(14) XOR D(10) XOR D(6) XOR D(3) XOR D(2) XOR CRC_xhdl1(13) XOR
CRC_xhdl1(12) XOR CRC_xhdl1( 9) XOR CRC_xhdl1( 5) XOR CRC_xhdl1(1);
CRC_xhdl1( 0) <= D(15) XOR D(11) XOR D(7) XOR D(4) XOR D(3) XOR CRC_xhdl1(12) XOR
CRC_xhdl1(11) XOR CRC_xhdl1( 8) XOR CRC_xhdl1( 4) XOR CRC_xhdl1(0);
ELSE
CRC_xhdl1(15 DOWNTO 0) <= CRC_xhdl1(15 DOWNTO 0);
END IF;
END IF;
END IF;
END PROCESS;

PROCESS (UBRd, UBWr, UDQ, UIDEI)
BEGIN
D(15 DOWNTO 0) <= (expandbus16 (UBRd) AND UDQ(15 DOWNTO 0)) OR
(expandbus16 (UBWr) AND UIDEI(15 DOWNTO 0));
END PROCESS;

PROCESS (NCD, NDACK)
BEGIN
CLR <= NOT NCD OR NDACK; -- Note CRC held for 1 CLK beyond end on NDACK
END PROCESS;

END translated;



Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 654:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru