오늘은 패리티 비트를 이용해 오류를 검증하는 방법을 Verilog HDL로 만들어보도록 하겠습니다.
패리티 비트 (Parity Bit)
패리티 비트는 디지털 통신과 데이터 저장장치에서 널리 사용되는 오류 검출 기법입니다. 데이터 비트 중 '1'의 개수를 기반으로 추가적인 비트(패리티 비트)를 설정함으로써, 데이터가 원래의 상태로 정확하게 전송되었는지를 검증할 수 있습니다.
패리티 비트는 통신이나 데이터 저장 과정에서 데이터의 무결성을 검사하는 데 중요한 역할을 합니다. 데이터 전송 과정에서 발생할 수 있는 오류를 감지하고, 이를 통해 데이터가 손상되었는지 여부를 파악할 수 있습니다. 이 방법은 구현이 간단하면서도 효과적으로 비교적 단순한 오류를 감지할 수 있어, 데이터의 정확성을 보장하는 데 크게 기여합니다. 이러한 패리티 비트의 사용은 데이터의 신뢰성을 유지하고, 오류로 인한 문제를 최소화하는 데 도움을 줍니다.
작동 원리
- 짝수 패리티: 데이터 비트 중 '1'의 개수가 짝수가 되도록 패리티 비트를 설정합니다. 만약 '1'의 개수가 이미 짝수라면 패리티 비트는 '0'이 되고, 홀수라면 '1'이 됩니다.
- 홀수 패리티: 데이터 비트 중 '1'의 개수가 홀수가 되도록 패리티 비트를 설정합니다. 이 경우 '1'의 개수가 홀수일 때 패리티 비트는 '0'이 되고, 짝수일 때 '1'이 됩니다.
`timescale 1ns / 1ps
module my_parity #(parameter width = 32) (
input [width-1:0] d_word,
output [width:0] data_frame
);
function parity;
input [width-1:0] bv;
reg par;
integer i;
begin
par = 1'b0;
for(i = 0; i < width; i = i + 1)
par = par ^ bv[i];
parity = par;
end
endfunction
assign data_frame = {d_word, parity(d_word)};
endmodule
`timescale 1ns / 1ps
module my_parity_tb();
parameter width = 8; // Define the width parameter dynamically
reg [width-1:0] data;
wire [width:0] dout;
// Instantiate the my_parity module with the width parameter
my_parity #(.width(width)) uut (
.d_word(data),
.data_frame(dout)
);
initial begin
data = 0; // Initialize data bits to zero
repeat (2**width)
begin
#10
$display("Time: %t data: %b parity: %b", $time, data, dout[width]); // Display data and parity bit
data = data + 1; // Increment data to test all possible combinations
end
end
initial begin
#(10 * (2**width)); // Wait enough time to complete all tests
$finish; // End the simulation
end
endmodule
- data[7:0]: 현재 입력 데이터를 표시합니다. 예를 들어, 14(16진수 0E)에서 시작하여 순차적으로 증가합니다.
- dout[8:0]: 출력 데이터 프레임입니다. 이는 입력 데이터와 계산된 패리티 비트를 포함합니다. 데이터 프레임은 기본 데이터 d_word와 패리티 비트가 하나 추가된 형태입니다.
- d_word[7:0]: 테스트 벤치에서 모듈로 보내진 실제 데이터입니다.
- data_frame[8:0]: 계산된 패리티 비트를 포함한 전체 데이터 프레임입니다.
- 입력 데이터 확인: data[7:0]를 확인하여 어떤 데이터가 테스트 되었는지 확인합니다.
- 패리티 비트 확인: data_frame[8:0]의 마지막 비트(data_frame[0])를 보면 해당 데이터의 패리티 비트를 확인할 수 있습니다. 이 비트는 입력 데이터의 1의 개수가 홀수일 때 1이 되고, 짝수일 때 0이 됩니다.
- 데이터 프레임 확인: data_frame[8:0]을 통해 전체 데이터와 패리티 비트를 한 눈에 볼 수 있습니다. 예를 들어, 데이터 프레임이 01d라면, 이는 입력 데이터 1c에 대한 패리티 비트 1이 추가된 것을 의미합니다.
'하만 세미콘 아카데미 > Verilog HDL' 카테고리의 다른 글
Verilog HDL 실습 (Counter) (0) | 2024.05.31 |
---|---|
Verilog HDL 실습 (1sec_LED) (0) | 2024.05.31 |
Verilog HDL 실습 (Full Adder) (0) | 2024.05.31 |
Vivado 사용법 및 간단한 실습 Part2 (D Flip Flop) (0) | 2024.05.27 |
Vivado 사용법 및 간단한 실습 Part1 (And Gate) (0) | 2024.05.27 |