LFSR은 Linear Feedback Shift Register의 줄임말이다. 이는 현재 상태에서의 선형 연산(?!)을 통해 다음 상태를 생성하는 레지스터라고 한다.
LFSR은 주로 난수를 만드는데 사용된다고 한다. LFSR은 seed 라는 수가 있다. 주로 몇 bit로 표현한다. 즉 16bit seed를 사용, 32bit seed를 사용한다 라고 많이들 표현한다. 해당 seed를 특정한 규칙이 있는 XOR 계산을 통해 주기를 갖는 수를 생성한다고 한다. 그 주기는 seed의 bit수에 따라 달라진다. 16bit이면 2^16-1 개 만큼의 주기를 갖는다고 한다. 여기서 -1을 한 이유는 0을 제외했기 때문이다.
자 예를 가지고 설명해보자.
우리에게 위와 같이 8bit 짜리 seed가 정해졌다고 하자. 해당 수는 2진법으로 표현했고 10진법으로 나타내면 116이다. 위에서 설명할때 특정한 규칙의 XOR 계산이 있다고 했다. 이는 다항식으로 표현할 수 있다고 한다.
왼쪽부터 순서대로 1,2,3,4,5,6,7,8 까지의 index를 주어진다고 가정했을때 7번과 6번을 XOR 한 값을 2번과 XOR을 해서 0번째 bit에 그 결과를 넣고 기족에 있던 1~7 --> 2~8로 shift 시켜준다. 이를 다항식으로 표현하면
그런데 왜 이렇게 다항식을 꾸미는지는 잘 모르겠다. 그런데도 내가 다항식을 적어보고 규칙을 이해하려는 까닭은 다항식이 주어지고 LFSR을 설계하라고 했을 때 어떻게 할지 생각해 본 것이다. 다항식으로 spec을 주는게 편하니까 말이다.
자 다시 와서 8bit seed는 116이고 다항식은 위와 같을때 그 다음 seed값은 어떻게 될까?
7번 bit의 위치와 6번 bit를 XOR --> 1
위에 결과와 2번 위치의 bit를 XOR --> 0
따라서 연산결과 생기는 값은 0이다. 그 다음에는 Shift를 하면 아래와 같이 58이라는 다음 seed가 나오게 된다.
다음에는 이 것을 통해 C 코드로 구현해 보려 한다.
*같이 읽으면 좋은 글*
https://jun-study.tistory.com/67
https://jun-study.tistory.com/m/68
verilog 이해하기 1 (verilog module의 몸체) (0) | 2021.10.28 |
---|---|
Verilog 인터넷에서 무료 사용하는 법(EDA Playground) (0) | 2021.10.28 |
<Python> : : 웹 사이트 크롤링(crawling)하는 방법 (0) | 2020.03.30 |
<Python> : : Anaconda 이용해서 Python Library 설치 방법(Python 장점) (0) | 2020.03.26 |
<블로그> : : 구글 검색 상위 페이지 아무나 하나 , google search console 등록해야 하지 !! (티스토리 google search console 등록하는 법) (0) | 2020.03.11 |
댓글 영역