티스토리 뷰
Verilog HDL를 주제로 한 첫번째 포스팅에서 다룰내용은 2진수된 입력을 BCD코드로 변환해주는 모듈의 구현입니다.
먼저 2진수와 BCD코드에 대하여 테이블과 함께 설명드리겠습니다.
2진수란 0과 1로 이루어진 수의 체제를 말합니다. 우리가 보통 사용하고 있는 10진수의 경우 자릿수의 올림인
carry가 진수를 표현하는 숫자가 될때 발생합니다. 즉 9에서 10으로 올라갈떄 다음자리수로 carry가 1생기고
해당 자리수는 0으로 초기화 되는것입니다. 이러한 원리로 9에서 10이 되고 19에서 20으로 카운팅 됩니다.
2진수의 경우도 마찬가지입니다. 진수를 표현하는 숫자가 될때 carry가 발생합니다. 즉, 0,1까지 카운팅후
2가될때 0으로 초기화 되고 carry를 1발생합니다. 카운팅의 순서가 00, 01, 10, 11이런느낌입니다.
이를 활용하여 0~9까지 표현한 4비트짜리 코드가 BCD코드입니다. 테이블에 나와있듯 0 = 0000, 9 = 1001을
의미합니다. 자릿수를 하나씩올리며 carry를 발생시키고 4비트로 코드를 표현합니다.
그렇다면 10진수 표현으로 14는 BCD코드로 무엇일까요?
1을 표현하는 0001 과 4를 표현하는 0100을 합쳐서
0001 0100이라는 8비트로 표현합니다.
어쨋든 이번 포스팅은 이러한 과정들을 모듈로 만들어보겠습니다.
2진수(Binary Number)를 BCD코드로 말이죠
인풋으로 8비트 2진수 입력이 들어옵니다 범위가 0~255까지 겠네요. 이러한 숫자를
BCD 4비트로 만들겁니다 백의자리 십의자리 일의자리로 나누어서 말이죠.
먼저 인풋으로 아웃풋을 8비트 2수와 4비트 BCD로 잡습니다.
module Binary_to_BCD (input [7:0] binary_in, output reg [3:0] H, T, O)
그리고 인덱스를 설정하여 조건검사를 수행하고 그에 알맞게 자리수를 shift시키며
BCD코드로 변환 합니다. 자세한 내용은 코드를 보시면 이해하실수 있을것입니다.
Verilog HDL code)
module Binary_to_BCD (input [7:0] binary_in, output reg [3:0] H, T, O);
integer index;
always @ (binary_in)
begin
H = 4'd0;
T = 4'd0;
O = 4'd0;
for (index =7; index >=0; index = index-1)
begin
if(H>=5) H = H+3;
if(T>=5) T = T+3;
if(O>=5) O = O+3;
H = H <<1;
H[0] = T[3];
T = T<<1;
T[0] = O[3];
O = O<<1;
O[0]=binary_in[index];
end
end
endmodule
다음 포스팅은 BCD로된 코드를 7segment에서 확인가능한 코드로 만들어 2진수 스위치 입력을
디바이스의 7segment를 통하여 확인할수 있도록 해보겠습니다.
'Language > Verilog HDL' 카테고리의 다른 글
Verilog HDL - Clock Generator (1) | 2021.01.29 |
---|---|
Verilog HDL - Counter (0) | 2021.01.29 |
Verilog HDL - BCD to SevenSegment (1) | 2021.01.29 |
Verilog HDL - Basic (2) | 2021.01.29 |
Verilog HDL - intro (0) | 2021.01.29 |