Module DE2
Module DE2
);
// CCD
wire CCD_SDAT;
wire CCD_SCLK;
wire CCD_FLASH;
wire CCD_FVAL;
wire CCD_LVAL;
wire CCD_PIXCLK;
wire VGA_CTRL_CLK;
wire AUD_CTRL_CLK;
wire mCCD_DVAL;
wire mCCD_DVAL_d;
wire DLY_RST_0;
wire DLY_RST_1;
wire DLY_RST_2;
wire Read;
reg rCCD_LVAL;
reg rCCD_FVAL;
wire sCCD_DVAL;
// sobel
// For Sensor 1
// To Display
SW[17] ? GrayscaleR :
SW[16] ? Sobel_edge :
SW[15] ? Bin_image :
VGA_out_R
);
SW[17] ? GrayscaleG :
SW[16] ? Sobel_edge :
SW[15] ? Bin_image :
VGA_out_G
);
SW[17] ? GrayscaleB :
SW[16] ? Sobel_edge :
SW[15] ? Bin_image :
VGA_out_B
);
case (button3)
endcase
end
// RGB
// Binary
wire mvalue_Binary;
// Gray
end
VGA_Controller vga0 (
// Host Side
.oRequest(Read),
.iRed(DISP_R),
.iGreen(DISP_G),
.iBlue(DISP_B),
// VGA Side
.oVGA_R(VGA_R),
.oVGA_G(VGA_G),
.oVGA_B(VGA_B),
.oVGA_H_SYNC(VGA_HS),
.oVGA_V_SYNC(VGA_VS),
.oVGA_SYNC(VGA_SYNC),
.oVGA_BLANK(VGA_BLANK),
// Control Signal
.iCLK(VGA_CTRL_CLK),
.iRST_N(DLY_RST_2)
);
Reset_Delay reset0 (
.iCLK(CLOCK_50),
.iRST(KEY[0]),
.oRST_0(DLY_RST_0),
.oRST_1(DLY_RST_1),
.oRST_2(DLY_RST_2)
);
CCD_Capture capture0 (
.oDATA(mCCD_DATA),
.oDVAL(mCCD_DVAL),
.oX_Cont(X_Cont),
.oY_Cont(Y_Cont),
.oFrame_Cont(Frame_Cont),
.iDATA(rCCD_DATA),
.iFVAL(rCCD_FVAL),
.iLVAL(rCCD_LVAL),
.iSTART(!KEY[3]),
.iEND(!KEY[2]),
.iCLK(CCD_PIXCLK),
.iRST(DLY_RST_1)
);
RAW2RGB rgb0 (
.oRed(mCCD_R),
.oGreen(mCCD_G),
.oBlue(mCCD_B),
.oDVAL(mCCD_DVAL_d),
.iX_Cont(X_Cont),
.iY_Cont(Y_Cont),
.iDATA(mCCD_DATA),
.iDVAL(mCCD_DVAL),
.iCLK(CCD_PIXCLK),
.iRST(DLY_RST_1)
);
Sdram_Control_4Port sdram0 (
// HOST Side
.REF_CLK(CLOCK_50),
.RESET_N(1'b1),
.WR1_DATA({sCCD_G[9:5], sCCD_B[9:0]}),
.WR1(sCCD_DVAL),
.WR1_ADDR(0),
.WR1_MAX_ADDR(640*512),
.WR1_LENGTH(9'h100),
.WR1_LOAD(!DLY_RST_0),
.WR1_CLK(CCD_PIXCLK),
.WR2_DATA({sCCD_G[4:0], sCCD_R[9:0]}),
.WR2(sCCD_DVAL),
.WR2_ADDR(22'h100000),
.WR2_MAX_ADDR(22'h100000+640*512),
.WR2_LENGTH(9'h100),
.WR2_LOAD(!DLY_RST_0),
.WR2_CLK(CCD_PIXCLK),
.RD1_DATA(Read_DATA1),
.RD1(Read),
.RD1_ADDR(640*16),
.RD1_MAX_ADDR(640*496),
.RD1_LENGTH(9'h100),
.RD1_LOAD(!DLY_RST_0),
.RD1_CLK(VGA_CTRL_CLK),
// FIFO Read Side 2
.RD2_DATA(Read_DATA2),
.RD2(Read),
.RD2_ADDR(22'h100000+640*16),
.RD2_MAX_ADDR(22'h100000+640*496),
.RD2_LENGTH(9'h100),
.RD2_LOAD(!DLY_RST_0),
.RD2_CLK(VGA_CTRL_CLK),
// SDRAM Side
.SA(DRAM_ADDR),
.BA({DRAM_BA_1,DRAM_BA_0}),
.CS_N(DRAM_CS_N),
.CKE(DRAM_CKE),
.RAS_N(DRAM_RAS_N),
.CAS_N(DRAM_CAS_N),
.WE_N(DRAM_WE_N),
.DQ(DRAM_DQ),
.DQM({DRAM_UDQM,DRAM_LDQM}),
.SDR_CLK(DRAM_CLK)
);
I2C_CCD_Config ccd_config0 (
// Host Side
.iCLK(CLOCK_50),
.iRST_N(KEY[1]),
.iExposure(SW[11:8]),
// I2C Side
.I2C_SCLK(GPIO_1[14]),
.I2C_SDAT(GPIO_1[15])
);
Mirror_Col mirror0 (
// Input Side
.iCCD_R(mCCD_R),
.iCCD_G(mCCD_G),
.iCCD_B(mCCD_B),
.iCCD_DVAL(mCCD_DVAL_d),
.iCCD_PIXCLK(CCD_PIXCLK),
.iRST_N(DLY_RST_1),
// Output Side
.oCCD_R(sCCD_R),
.oCCD_G(sCCD_G),
.oCCD_B(sCCD_B),
.oCCD_DVAL(sCCD_DVAL)
);
Sobel sobel0 (
.CLOCK(VGA_CTRL_CLK),
.RESET_N(DLY_RST_2),
.input_data(VGA_out_G),
.iDVAL(Read),
.thresh({SW[3:1],2'b10}),
.output_data(Sobel_edge)
);
// binary
bbinary binary0 (
.CLOCK(VGA_CTRL_CLK),
.RESET_N(DLY_RST_2),
.input_data(VGA_out_G),
.iDval(Read),
.thresh(BIN_THRESHOLD),
.oDval(mvalue_Binary),
.output_data(Bin_image)
);
wire mvalue_dilation;
Ddilation dilation0 (
.CLOCK(VGA_CTRL_CLK),
.RESET_N(DLY_RST_2),
.input_data(Read),
.iDATA(Bin_image),
.oDVAL(mvalue_dilation),
.output_data(fDilation)
);
wire mvalue_dilation_sobel;
Ddilation dilation1 (
.CLOCK(VGA_CTRL_CLK),
.RESET_N(DLY_RST_2),
.input_data(Read),
.iDATA(Sobel_edge),
.oDVAL(mvalue_dilation_sobel),
.output_data(fDilation_sobel)
);
wire mvalue_dilation_gray;
wire [9:0] fDilation_gray;
Ddilation dilation2 (
.CLOCK(VGA_CTRL_CLK),
.RESET_N(DLY_RST_2),
.input_data(Read),
.iDATA(VGA_out_G),
.oDVAL(mvalue_dilation_gray),
.output_data(fDilation_gray)
);
wire mvalue_erosion;
Eerosion erosion0 (
.CLOCK(VGA_CTRL_CLK),
.RESET_N(DLY_RST_2),
.input_data(Read),
.iDATA(Bin_image),
.oDVAL(mvalue_erosion),
.output_data(fErosion)
);
wire mvalue_erosion_sobel;
Eerosion erosion1 (
.CLOCK(VGA_CTRL_CLK),
.RESET_N(DLY_RST_2),
.input_data(Read),
.iDATA(Sobel_edge),
.oDVAL(mvalue_erosion_sobel),
.output_data(fErosion_sobel)
);
wire mvalue_erosion_gray;
Eerosion erosion2 (
.CLOCK(VGA_CTRL_CLK),
.RESET_N(DLY_RST_2),
.input_data(Read),
.iDATA(VGA_out_G),
.oDVAL(mvalue_erosion_gray),
.output_data(fErosion_gray)
);
wire mvalue_closing_bin;
Eerosion erosion3 (
.CLOCK(VGA_CTRL_CLK),
.RESET_N(DLY_RST_2),
.input_data(Read),
.iDATA(fDilation_sobel),
.oDVAL(mvalue_closing_bin),
.output_data(fClosing_bin)
);
wire mvalue_opening_bin;
Ddilation dilation3 (
.CLOCK(VGA_CTRL_CLK),
.RESET_N(DLY_RST_2),
.input_data(Read),
.iDATA(fErosion_sobel),
.oDVAL(mvalue_opening_bin),
.output_data(fOpening_bin)
);
SEG7_LUT_8 seg0 (
.oSEG0(HEX0),
.oSEG1(HEX1),
.oSEG2(HEX2),
.oSEG3(HEX3),
.oSEG4(HEX4),
.oSEG5(HEX5),
.oSEG6(HEX6),
.oSEG7(HEX7),
.iDIG(Frame_Cont)
);
endmodule