본문내용
_read <= ~DUT_sel_read;
end
end
sram_mosaic Sram_write(
.addr(addr_write),
.clk(clk),
.din(D_out),
.dout(),
.we(we_write)
);
sram_mosaic Sram_read(
.addr(addr_read),
.clk(clk),
.din(),
.dout(D_in),
.we(we_read)
);
endmodule
Test Bench
module TB_SramReadTest();
parameter
addr_width = 18, //262144bit
word_depth = 262144, //26144bit
word_width = 8; //32bit
reg reset;
reg clk;
reg start;
reg Writing_start;
reg [32:0] cnt;
integer mon;
wire [word_width-1:0] a,
b,
c,
d,
e,
f,g,h,i,j;
wire [addr_width-1:0] addr;
wire [word_width-1:0] D_in;
assign a = View.DUTmem[10];
assign b = View.DUTmem[11];
assign c = View.DUTmem[12];
assign d = View.DUTmem[13];
assign e = View.DUTmem[14];
assign f = View.DUTmem2[10];
assign g = View.DUTmem2[11];
assign h = View.DUTmem2[12];
assign i = View.DUTmem2[13];
assign j = View.DUTmem2[14];
//last mem 135535
initial $readmemh ("lena.txt", View.Sram_read.mem);
initial begin
reset = 1'b1;
clk = 1'b0;
cnt = 0;
Writing_start = 0;
mon = $fopen("output.txt","w");
#40 reset = 1'b0;
#40 reset = 1'b1;
#40 start = 1'b1;
#40 start = 1'b0;
end
initial begin
#2700000 Writing_start = 1; start = 1; #40 start = 0;
end
always #20 clk = ~clk;
always @(posedge clk) begin
if(Writing_start) begin
$fwrite(mon,"%h\n",View.Sram_write.mem[70000 +cnt]);
#10 cnt <= cnt +1;
if(cnt == 65535) begin
Writing_start <= 0;
cnt <= 0;
#50 $fclose(mon);
end
end
end
initial #8000000 $finish;
SecretView View(
.Start(start),
.clk(clk),
.reset(reset),
.addr_read(addr),
.addr_write(),
.D_in(D_in),
.D_out(),
.we()
);
endmodule
변환된 데이터 확인 (txt파일을raw파일로 변경하는 c프로그래밍)
#include
#define XMax 256
#define YMax 256
FILE *src;
FILE *dst;
int main(void)
{
unsigned char buf[XMax][YMax];
char srcFileName[20];
char dstFileName[20];
char dummy;
int i,j;
printf("src filename? ");
scanf("%s", &srcFileName);
printf("dst filename? ");
scanf("%s", &dstFileName);
src = fopen(srcFileName, "rt");
dst = fopen(dstFileName, "wb");
if ((src == NULL) || (dst == NULL)){
puts("File Open Error! ");
return -1;}
for (i=0; i
for(j=0; j
fscanf(src, "%x", &buf[i][j]);
fscanf(src, "\n", &dummy);}}
for (i=0; i
for(j=0; j
fwrite(&buf[i][j], sizeof(unsigned char), 1, dst);}}
fclose(src);fclose(dst);
return 0;
}
변환된 데이터 확인
Secret View DUT를 이용하여 만들어준 output파일을 raw파일로 변환시켜 메틀랩 상에서 확인해본결과 뒤죽박죽 섞인 그림을 확인할수 있다. 또한 한픽셀의 오류도 없이 변환된 것을 확인해보기위해 output파일을 최초의 입력으로 하고 DUT에 구현해본결과
다음과같이 원본과 똑같은 이미지가 된다는 것을 확인하였다.
상기과정대로 프로젝트를 진행하여 처음 원했던 Secert View를 구현에 성공하였다.
결론
위의 실험을통해서 타임영역에서 영상을 처리하는 가장 기본적인 방법을 습득했다. 부수적으로 Sram에대해 이해하였고 프로젝트를 해결해나가면서 한단계한단계 순차적으로 문제를 해결하는 방법을 배웠다.
참고문헌
[1] Using the New Verilog-2001 Standard PartTwo : Verifying Designs
(by Stuart Sutherland, Suther land H이, inc. portland, Oregon)
[2] Virtualization of Heterogeneous Machines, Hardware Description in a Synthesizable Object-Oriented Language
(by joshua Auerbach, David F. Bacon, Perry Cheng, Rodric Rabbah, Sunil Shukla)
[3] Google website searching
(fopen,fwrite,reamemh 함수등)
end
end
sram_mosaic Sram_write(
.addr(addr_write),
.clk(clk),
.din(D_out),
.dout(),
.we(we_write)
);
sram_mosaic Sram_read(
.addr(addr_read),
.clk(clk),
.din(),
.dout(D_in),
.we(we_read)
);
endmodule
Test Bench
module TB_SramReadTest();
parameter
addr_width = 18, //262144bit
word_depth = 262144, //26144bit
word_width = 8; //32bit
reg reset;
reg clk;
reg start;
reg Writing_start;
reg [32:0] cnt;
integer mon;
wire [word_width-1:0] a,
b,
c,
d,
e,
f,g,h,i,j;
wire [addr_width-1:0] addr;
wire [word_width-1:0] D_in;
assign a = View.DUTmem[10];
assign b = View.DUTmem[11];
assign c = View.DUTmem[12];
assign d = View.DUTmem[13];
assign e = View.DUTmem[14];
assign f = View.DUTmem2[10];
assign g = View.DUTmem2[11];
assign h = View.DUTmem2[12];
assign i = View.DUTmem2[13];
assign j = View.DUTmem2[14];
//last mem 135535
initial $readmemh ("lena.txt", View.Sram_read.mem);
initial begin
reset = 1'b1;
clk = 1'b0;
cnt = 0;
Writing_start = 0;
mon = $fopen("output.txt","w");
#40 reset = 1'b0;
#40 reset = 1'b1;
#40 start = 1'b1;
#40 start = 1'b0;
end
initial begin
#2700000 Writing_start = 1; start = 1; #40 start = 0;
end
always #20 clk = ~clk;
always @(posedge clk) begin
if(Writing_start) begin
$fwrite(mon,"%h\n",View.Sram_write.mem[70000 +cnt]);
#10 cnt <= cnt +1;
if(cnt == 65535) begin
Writing_start <= 0;
cnt <= 0;
#50 $fclose(mon);
end
end
end
initial #8000000 $finish;
SecretView View(
.Start(start),
.clk(clk),
.reset(reset),
.addr_read(addr),
.addr_write(),
.D_in(D_in),
.D_out(),
.we()
);
endmodule
변환된 데이터 확인 (txt파일을raw파일로 변경하는 c프로그래밍)
#include
#define XMax 256
#define YMax 256
FILE *src;
FILE *dst;
int main(void)
{
unsigned char buf[XMax][YMax];
char srcFileName[20];
char dstFileName[20];
char dummy;
int i,j;
printf("src filename? ");
scanf("%s", &srcFileName);
printf("dst filename? ");
scanf("%s", &dstFileName);
src = fopen(srcFileName, "rt");
dst = fopen(dstFileName, "wb");
if ((src == NULL) || (dst == NULL)){
puts("File Open Error! ");
return -1;}
for (i=0; i
fscanf(src, "\n", &dummy);}}
for (i=0; i
fclose(src);fclose(dst);
return 0;
}
변환된 데이터 확인
Secret View DUT를 이용하여 만들어준 output파일을 raw파일로 변환시켜 메틀랩 상에서 확인해본결과 뒤죽박죽 섞인 그림을 확인할수 있다. 또한 한픽셀의 오류도 없이 변환된 것을 확인해보기위해 output파일을 최초의 입력으로 하고 DUT에 구현해본결과
다음과같이 원본과 똑같은 이미지가 된다는 것을 확인하였다.
상기과정대로 프로젝트를 진행하여 처음 원했던 Secert View를 구현에 성공하였다.
결론
위의 실험을통해서 타임영역에서 영상을 처리하는 가장 기본적인 방법을 습득했다. 부수적으로 Sram에대해 이해하였고 프로젝트를 해결해나가면서 한단계한단계 순차적으로 문제를 해결하는 방법을 배웠다.
참고문헌
[1] Using the New Verilog-2001 Standard PartTwo : Verifying Designs
(by Stuart Sutherland, Suther land H이, inc. portland, Oregon)
[2] Virtualization of Heterogeneous Machines, Hardware Description in a Synthesizable Object-Oriented Language
(by joshua Auerbach, David F. Bacon, Perry Cheng, Rodric Rabbah, Sunil Shukla)
[3] Google website searching
(fopen,fwrite,reamemh 함수등)
추천자료
- 디지털논리회로실험1-3
- 디지털논리회로실험1-4
- 디지털논리회로실험1-5
- 전자부품 회로설계 기초
- 디지털 논리회로 실험 텀프로젝트(디지털 주사위-아주 간단한 카운터회로 이용)
- 전자주사위 회로설계
- [발표자료] 디지털시계 회로설계
- 논리회로 - 기본 논리연산 / 부울대수,카르노 맵 간단화 / 드모르간 정리
- [디지털회로설계 HW4] VHDL로 inverter 구현시 transport delay와 inertial delay의 차이점
- 디지털논리회로 실습 보고서 - 기본 논리 게이트, 시뮬레이션
- [실험] (예비) 4_논리 게이트 및 부울 함수의 구현 (AND, OR, NOT, NAND, NOR, XOR, XNOR의 ...
- [실험] (결과) 4_논리 게이트 및 부울 함수의 구현 (AND, OR, NOT, NAND, NOR, XOR, XNOR의 ...
- 논리회로 - 부울대수, 논리게이트, 카르노맵에 관해 (Boolean Algebra Logic Gate Karnaugh M...
- 디지털논리회로-도어락(door lock) 프로젝트 (MULTISIM 회로도 포함)
소개글