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

Умножение и деление полиномов над полем Галуа

Здравствуйте всем. Реализовала шифр на vhdl, но проект не синтезируется из-за циклов while. Помогите, пожалуйста, переписать операции умножения полиномов и деления полиномов по модулю неприводимого многочлена над полем Галуа (GF(2)[x]∕p(x), где p(x) = x^8 + x^7 + x^6 + x + 1 ∈ GF(2)[x] - неприводимый многочлен). Вот что написала я:

f15 := ress(127 downto 120);        

        b15 := "00000000" & f15;
        e15 := std_logic_vector (to_unsigned(148,8));
        if (b15 /= "0000000000000000") then
        i := 0;
        while (i /= 8) loop
            if ((e15 AND one) = one) then
                mu15 := b15 xor mu15;
            end if; 
                b15 := b15(14 downto 0) & '0';
                e15 := '0' & e15(7 downto 1);
                i := i+1;
        end loop;
        
        di15 := mu15;
        
        j := 15;
        
        one3 := one2;
        while ((di15 AND one3) = "0000000000000000") loop
            j := j-1;
            one3 := '0' & one3(15 downto 1);
        end loop;
        
        while (j >= 8) loop
        
            k:=0;
            poly2 := "0000000" & poly;
            while (k /= (j-8)) loop
                poly2:= poly2(14 downto 0) & '0';
                k := k+1;
            end loop;
            
            di15 := di15 xor poly2;    
            while ((di15 AND one3) = "0000000000000000") loop
                j := j-1;
                one3 := '0' & one3(15 downto 1);
            end loop;
            
        end loop;
        else 
        mu15 := "0000000000000000";
        di15 := "0000000000000000";
        end if;

Заранее спасибо)

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


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

Добрый день!

К сожалению (или к счастью) VHDL, это язык описания цифровых схем, а не язык программирования. И соответсвенно, циклы в том виде, в котором они используются в классических языках программирования, здесь не синтезируются. Прежде чем что то описывать на VHDL, нужно представлять схему, которую вы хотите реализовать.

 

И если вам нужен какой то конкретный алгоритм, то попробуйте поискать здесь - http://opencores.org/projects

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


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

попробуйте использовать FSM, в простейшем случае помогает заменить циклы

 

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


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

2 lena709

для начала:

http://opencores.org/project,galois_lfsr

+

Galois Field GF(2m) Multiplier

/ xapp371.pdf => Figure 2: Algorithm for GF (2m) Multiplication /

/ xapp371.zip лежит на pudn /

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


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

2 lena709

для начала:

http://opencores.org/project,galois_lfsr

+

Galois Field GF(2m) Multiplier

/ xapp371.pdf => Figure 2: Algorithm for GF (2m) Multiplication /

/ xapp371.zip лежит на pudn /

архив

xapp371.zip

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


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

Аппаратно умножение над полем Галуа намного красивее реализуется. См. приложенный файл.

post-43085-1482855710_thumb.jpg

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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