목차
1. DCT 개요
2. 설계 사양
3. 알고리즘 분석
3.1 DCT 부호화에 의한 데이터 압축 알고리즘
3.2 영상 압축 표현 방법
4. 설계 및 구현
4.1 DCT Top-Level
4.2 구현
5. 실험과 데모
6. 결론
2. 설계 사양
3. 알고리즘 분석
3.1 DCT 부호화에 의한 데이터 압축 알고리즘
3.2 영상 압축 표현 방법
4. 설계 및 구현
4.1 DCT Top-Level
4.2 구현
5. 실험과 데모
6. 결론
본문내용
0 && wr_clken == 1'b1) ? 1'b1 : 1'b0;
always @ (posedge clk or posedge reset)
begin
if (reset)
begin
write_en_cnt <= 0;
end
else if (wr_clken && clken)
begin
write_en_cnt <= write_en_cnt + 1;
end
else
begin
write_en_cnt <= 0;
end
end
//------ read address -----//
always @ (posedge clk or posedge reset)
begin
if (reset)
begin
read_add <= 0;
end
else if (rd_clken)
begin
read_add <= read_add + 1;
end
else
begin
read_add <= 0;
end
end
//------ write address -----//
always @ (posedge clk or posedge reset)
begin
if (reset)
begin
write_add <= 0;
end
else if (write_en_w)
begin
write_add <= write_add + 1;
end
end
ram_tpmtx ram0(.data ( ram0_d ), .write_en ( write_en_w ), .wraddress ( wradd_w ), .rdaddress ( rdadd_w ),.clock ( clk ),.enable ( clken ), .reset ( reset ), .q ( ram0_q ));
ram_tpmtx ram1( .data ( ram1_d ), .write_en ( write_en_w ), .wraddress ( wradd_w ), .rdaddress ( rdadd_w ), .clock ( clk ), .enable ( clken ), .reset ( reset ), .q ( ram1_q ));
ram_tpmtx ram2(.data ( ram2_d ), .write_en ( write_en_w ), .wraddress ( wradd_w ), .rdaddress ( rdadd_w ), .clock ( clk ), .enable ( clken ), .reset ( reset ), .q ( ram2_q ));
ram_tpmtx ram3(.data ( ram3_d ), .write_en ( write_en_w ), .wraddress ( wradd_w ), .rdaddress ( rdadd_w ),.clock ( clk ),.enable ( clken ), .reset ( reset ), .q ( ram3_q ));
ram_tpmtx ram4(.data ( ram4_d ), .write_en ( write_en_w ), .wraddress ( wradd_w ), .rdaddress ( rdadd_w ),.clock ( clk ),.enable ( clken ), .reset ( reset ), .q ( ram4_q ));
ram_tpmtx ram5(.data ( ram5_d ), .write_en ( write_en_w ), .wraddress ( wradd_w ), .rdaddress ( rdadd_w ),.clock ( clk ),.enable ( clken ), .reset ( reset ), .q ( ram5_q ));
ram_tpmtx ram6(.data ( ram6_d ), .write_en ( write_en_w ), .wraddress ( wradd_w ), .rdaddress ( rdadd_w ),.clock ( clk ), .enable ( clken ), .reset ( reset ), .q ( ram6_q ));
ram_tpmtx ram7(.data ( ram7_d ), .write_en ( write_en_w ), .wraddress ( wradd_w ), .rdaddress ( rdadd_w ),.clock ( clk ), .enable ( clken ), .reset ( reset ), .q ( ram7_q ));
endmodule
5. 실험과 데모
- 다음은 waveform 결과 파형을 나타낸다. 세로 방향의 블록 영역은 dct 처리가 이루어진 결과 값 즉, 저 주파수 영역을 나타내고, 가로 방향의 블록 영역은 고 주파수 영역을 나타낸다. 자세한 결과 모습은 그림 7번에 나타내었다.
자세한 결과 데이터 파형을 보게 되면, 아까 저주파수 영역의 데이터 값은 특정 값이 산출 되고 있다. 고 주파수 영역은 dct처리가 이루어진 값이 출력 되고 있다. 즉 dct 를 거친 결과는 고 주파에서 zero 값을 나타낸다. 주어진 양자화 테이블 값은 기존에 참조한 소스의 스펙을 그대로 따랐다.
6. 결론
- DCT 압축 알고리즘은 신호 처리( 음성 신호, 영상 신호 etc ) 를 위한 알고리즘이다. 이는 현대에 와서 신호 처리에 있어서 가장 기본적인 알고리즘이다. 영상을 변환하는데 기본 응용으로 사용된다. 요즘 사회에서는 디지털 신호 처리가 많기 때문에 더 유용하게 사용되고 있다. 자세한 이론은 위에서 모두 언급하였다. 이 dct를 응용하여 보다 빠르고 좀더 효율적인 압축 알고리즘을 생각할 수 있을 것이다.
마지막으로 본 프로젝트를 진행해 오면서 많은 잘못된 부분을 발견하였다. 기본적인 프로젝트 타겟 설정부터 너무 오랜 시간을 소비하였고 이로 인하여 과제를 진행함에 있어서 너무 더디었다. 마지막 과제 제출 시간에 와서야 급급하게 수행하느라 너무 조급한 결과를 얻었으며 미완성되게 프로젝트를 마감하였다. 기본 소스는 알테라 홈페이지에서 참조를 하였다. 기본 참조 소스에서 자세한 주석이 없어서 소스 분석에서도 너무 힘겨웠다. 먼저 타겟을 늦게 설정한 것과 설정된 타겟이 너무 난이도가 높았던 것이 이번 프로젝트를 수행함에 있어서 가장 큰 문제 점이였다. 하지만 결과 발표를 마치며 느낀 것은 생소했지만 그래도 내가 알지 못했던 많은 영역을 접한 것에 대한 뿌듯함 이였다. 결과물은 완성하지 못했지만 후에 미비된 부분을 보완하고 완성한다면 아마 큰 도움이 될 것이다.
always @ (posedge clk or posedge reset)
begin
if (reset)
begin
write_en_cnt <= 0;
end
else if (wr_clken && clken)
begin
write_en_cnt <= write_en_cnt + 1;
end
else
begin
write_en_cnt <= 0;
end
end
//------ read address -----//
always @ (posedge clk or posedge reset)
begin
if (reset)
begin
read_add <= 0;
end
else if (rd_clken)
begin
read_add <= read_add + 1;
end
else
begin
read_add <= 0;
end
end
//------ write address -----//
always @ (posedge clk or posedge reset)
begin
if (reset)
begin
write_add <= 0;
end
else if (write_en_w)
begin
write_add <= write_add + 1;
end
end
ram_tpmtx ram0(.data ( ram0_d ), .write_en ( write_en_w ), .wraddress ( wradd_w ), .rdaddress ( rdadd_w ),.clock ( clk ),.enable ( clken ), .reset ( reset ), .q ( ram0_q ));
ram_tpmtx ram1( .data ( ram1_d ), .write_en ( write_en_w ), .wraddress ( wradd_w ), .rdaddress ( rdadd_w ), .clock ( clk ), .enable ( clken ), .reset ( reset ), .q ( ram1_q ));
ram_tpmtx ram2(.data ( ram2_d ), .write_en ( write_en_w ), .wraddress ( wradd_w ), .rdaddress ( rdadd_w ), .clock ( clk ), .enable ( clken ), .reset ( reset ), .q ( ram2_q ));
ram_tpmtx ram3(.data ( ram3_d ), .write_en ( write_en_w ), .wraddress ( wradd_w ), .rdaddress ( rdadd_w ),.clock ( clk ),.enable ( clken ), .reset ( reset ), .q ( ram3_q ));
ram_tpmtx ram4(.data ( ram4_d ), .write_en ( write_en_w ), .wraddress ( wradd_w ), .rdaddress ( rdadd_w ),.clock ( clk ),.enable ( clken ), .reset ( reset ), .q ( ram4_q ));
ram_tpmtx ram5(.data ( ram5_d ), .write_en ( write_en_w ), .wraddress ( wradd_w ), .rdaddress ( rdadd_w ),.clock ( clk ),.enable ( clken ), .reset ( reset ), .q ( ram5_q ));
ram_tpmtx ram6(.data ( ram6_d ), .write_en ( write_en_w ), .wraddress ( wradd_w ), .rdaddress ( rdadd_w ),.clock ( clk ), .enable ( clken ), .reset ( reset ), .q ( ram6_q ));
ram_tpmtx ram7(.data ( ram7_d ), .write_en ( write_en_w ), .wraddress ( wradd_w ), .rdaddress ( rdadd_w ),.clock ( clk ), .enable ( clken ), .reset ( reset ), .q ( ram7_q ));
endmodule
5. 실험과 데모
- 다음은 waveform 결과 파형을 나타낸다. 세로 방향의 블록 영역은 dct 처리가 이루어진 결과 값 즉, 저 주파수 영역을 나타내고, 가로 방향의 블록 영역은 고 주파수 영역을 나타낸다. 자세한 결과 모습은 그림 7번에 나타내었다.
자세한 결과 데이터 파형을 보게 되면, 아까 저주파수 영역의 데이터 값은 특정 값이 산출 되고 있다. 고 주파수 영역은 dct처리가 이루어진 값이 출력 되고 있다. 즉 dct 를 거친 결과는 고 주파에서 zero 값을 나타낸다. 주어진 양자화 테이블 값은 기존에 참조한 소스의 스펙을 그대로 따랐다.
6. 결론
- DCT 압축 알고리즘은 신호 처리( 음성 신호, 영상 신호 etc ) 를 위한 알고리즘이다. 이는 현대에 와서 신호 처리에 있어서 가장 기본적인 알고리즘이다. 영상을 변환하는데 기본 응용으로 사용된다. 요즘 사회에서는 디지털 신호 처리가 많기 때문에 더 유용하게 사용되고 있다. 자세한 이론은 위에서 모두 언급하였다. 이 dct를 응용하여 보다 빠르고 좀더 효율적인 압축 알고리즘을 생각할 수 있을 것이다.
마지막으로 본 프로젝트를 진행해 오면서 많은 잘못된 부분을 발견하였다. 기본적인 프로젝트 타겟 설정부터 너무 오랜 시간을 소비하였고 이로 인하여 과제를 진행함에 있어서 너무 더디었다. 마지막 과제 제출 시간에 와서야 급급하게 수행하느라 너무 조급한 결과를 얻었으며 미완성되게 프로젝트를 마감하였다. 기본 소스는 알테라 홈페이지에서 참조를 하였다. 기본 참조 소스에서 자세한 주석이 없어서 소스 분석에서도 너무 힘겨웠다. 먼저 타겟을 늦게 설정한 것과 설정된 타겟이 너무 난이도가 높았던 것이 이번 프로젝트를 수행함에 있어서 가장 큰 문제 점이였다. 하지만 결과 발표를 마치며 느낀 것은 생소했지만 그래도 내가 알지 못했던 많은 영역을 접한 것에 대한 뿌듯함 이였다. 결과물은 완성하지 못했지만 후에 미비된 부분을 보완하고 완성한다면 아마 큰 도움이 될 것이다.
소개글