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

 
 
> Scrambler, MIL-STD-188-220C
snayperAlfa
сообщение Mar 18 2011, 15:35
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 130
Регистрация: 3-12-08
Из: Солнечная Одесса
Пользователь №: 42 183



Здравствуйте. Хочу вот реализовать скремблер. Есть документ, описывающий его работу. Но мутный немного. особенно в планек счетчика. Я создал модель на VHDL, но выходная последовательность отличается от той что задана в документации. Подскажите где может быть баг пожалуйста.





Код
library IEEE;
use IEEE.std_logic_1164.all;


entity Scrambler_1 is
port (
    CLK: in std_logic;
    data_in: in std_logic;
    data_out: out std_logic;
    CLK_out:out std_logic
);
end entity;

architecture Scrambler_1 of Scrambler_1 is

signal STATE:integer:=0;

begin
    
    process(CLK)
        variable reg:std_logic_vector(19 downto 0):=(others =>'1');    
        variable a:std_logic;
        variable b:std_logic;
        variable c:std_logic;
        variable d:std_logic;
        variable e:std_logic;
        
        variable counter:integer;
    
    begin  
            
        if(CLK'event and CLK='1' ) then
            
            CASE STATE is
                
                when 0=>
                    CLK_out<='0';
                    
                    --Initial values;
                    reg(19 downto 0):=(others =>'1');
                    counter:=31;
                    
                    a:=reg(0) xor reg(8);
                    b:=reg(2) xnor reg(19);
                    
                    c:='0';
                    
                    d:=b xnor c;
                    e:=data_in xnor d;
                    data_out<=e;
                    
                    STATE<=1;
                
                when 1=>
                    e:=data_in xnor d;
                
                    CLK_out<='0';
                    --sdvig registra
                    reg(19 downto 1):=reg(18 downto 0);
                    reg(0):=e;
                    
                    a:=reg(0) xor reg(8);
                    b:=reg(2) xnor reg(19);    
                    
                    counter:=counter+1;
                    
                    if(a='1') then
                        counter:=31;
                    end if;
                    
                    if(counter=32) then
                        counter:=0;
                    end if;
                    
                    if(counter=30) then
                        c:='1';
                    else
                        c:='0';
                    end if;
                    
                    
                    
                    d:=b xnor c;
                    e:=data_in xnor d;
                    data_out<=e;
                    
                    STATE<=2;
                
                when 2=>
                    
                    CLK_out<='1';
                    STATE<=1;
                
                    
                when others => null;
                
            end case;

        end if;
    
    end process;
        
end architecture;



У меня получается последовательность: 0xFF,0xFF,0xFF,0xFD,0xB6,0xDB


--------------------
Жили бы в пещерах и не знали бы горя.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
snayperAlfa
сообщение Mar 19 2011, 10:48
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 130
Регистрация: 3-12-08
Из: Солнечная Одесса
Пользователь №: 42 183



Спасибо, буду разбираться.

Можете написать пожалуйста, какова последовательность действий.
Сдвиг регистра, увеличение счетчика, вычисление функций XOR, XNOR. Также мне кажется странным описание счетчика.


--------------------
Жили бы в пещерах и не знали бы горя.
Go to the top of the page
 
+Quote Post



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

 


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


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