Loading .gitignore +2 −0 Original line number Original line Diff line number Diff line Loading @@ -10,6 +10,8 @@ x393.prj *DEBUG_VDT* *DEBUG_VDT* *.kate-swp *.kate-swp *.old *.old *.new *.bad *.pyc *.pyc *.pickle *.pickle py393/dbg* py393/dbg* Loading .project +9 −9 Original line number Original line Diff line number Diff line Loading @@ -62,42 +62,42 @@ <link> <link> <name>vivado_logs/VivadoBitstream.log</name> <name>vivado_logs/VivadoBitstream.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoBitstream-20151031232832558.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoBitstream-20151103114104932.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoOpt.log</name> <name>vivado_logs/VivadoOpt.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoOpt-20151031232832558.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoOpt-20151103114104932.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoOptPhys.log</name> <name>vivado_logs/VivadoOptPhys.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoOptPhys-20151031232832558.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoOptPhys-20151103114104932.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoOptPower.log</name> <name>vivado_logs/VivadoOptPower.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoOptPower-20151031232832558.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoOptPower-20151103114104932.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoPlace.log</name> <name>vivado_logs/VivadoPlace.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoPlace-20151031232832558.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoPlace-20151103114104932.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoRoute.log</name> <name>vivado_logs/VivadoRoute.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoRoute-20151031232832558.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoRoute-20151103114104932.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoSynthesis.log</name> <name>vivado_logs/VivadoSynthesis.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoSynthesis-20151031232335810.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoSynthesis-20151103114104932.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoTimimgSummaryReportImplemented.log</name> <name>vivado_logs/VivadoTimimgSummaryReportImplemented.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoTimimgSummaryReportImplemented-20151031232832558.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoTimimgSummaryReportImplemented-20151103114104932.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoTimimgSummaryReportSynthesis.log</name> <name>vivado_logs/VivadoTimimgSummaryReportSynthesis.log</name> Loading @@ -107,7 +107,7 @@ <link> <link> <name>vivado_logs/VivadoTimingReportImplemented.log</name> <name>vivado_logs/VivadoTimingReportImplemented.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoTimingReportImplemented-20150904164653967.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoTimingReportImplemented-20151101221627109.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoTimingReportSynthesis.log</name> <name>vivado_logs/VivadoTimingReportSynthesis.log</name> Loading .settings/com.elphel.vdt.VivadoRoute.prefs +2 −1 Original line number Original line Diff line number Diff line VivadoRoute_122_SkipSnapshotRoute=true VivadoRoute_122_SkipSnapshotRoute=true VivadoRoute_123_SkipSnapshotRoute=true VivadoRoute_123_SkipSnapshotRoute=true com.elphel.store.context.VivadoRoute=VivadoRoute_122_SkipSnapshotRoute<-@\#\#@->VivadoRoute_123_SkipSnapshotRoute<-@\#\#@-> VivadoRoute_125_directive_route=MoreGlobalIterations com.elphel.store.context.VivadoRoute=VivadoRoute_122_SkipSnapshotRoute<-@\#\#@->VivadoRoute_123_SkipSnapshotRoute<-@\#\#@->VivadoRoute_125_directive_route<-@\#\#@-> eclipse.preferences.version=1 eclipse.preferences.version=1 compressor_jp/csconvert18a.v +66 −34 Original line number Original line Diff line number Diff line Loading @@ -249,7 +249,7 @@ module csconvert18a( wire ystrt,nxtline; wire ystrt,nxtline; reg [7:0] yaddr_r; // address for the external buffer memory to write 16x16x8bit Y data reg [7:0] yaddr_r; // address for the external buffer memory to write 16x16x8bit Y data reg ywe_r; // wrire enable of Y data reg ywe_r; // write enable of Y data reg [6:0] caddr_r; // address for the external buffer memory 2x8x8x8bit Cb+Cr data (MSB=0 - Cb, 1 - Cr) reg [6:0] caddr_r; // address for the external buffer memory 2x8x8x8bit Cb+Cr data (MSB=0 - Cb, 1 - Cr) reg cwe_r; // write enable for CbCr data reg cwe_r; // write enable for CbCr data reg odd_pix; // odd pixel (assumes even number of pixels in a line reg odd_pix; // odd pixel (assumes even number of pixels in a line Loading @@ -267,10 +267,10 @@ module csconvert18a( assign n000 = n000_r; assign n000 = n000_r; assign n255 = n255_r; assign n255 = n255_r; assign signed_y = signed_y_r; // - now signed char, -128(black) to +127 (white) assign signed_y = signed_y_r; // - now signed char, -128(black) to +127 (white) assign yaddr = yaddr_r; assign yaddr = yaddr_r2; assign ywe = ywe_r; assign ywe = ywe_r2; assign caddr = caddr_r; assign caddr = caddr_r2; assign cwe = cwe_r; assign cwe = cwe_r2; dly_16 #(.WIDTH(1)) i_strt_dly0 (.clk(CLK),.rst(1'b0), .dly(4'd15), .din(pre_first_in), .dout(strt_dly[0])); dly_16 #(.WIDTH(1)) i_strt_dly0 (.clk(CLK),.rst(1'b0), .dly(4'd15), .din(pre_first_in), .dout(strt_dly[0])); dly_16 #(.WIDTH(1)) i_strt_dly1 (.clk(CLK),.rst(1'b0), .dly(4'd15), .din(strt_dly[0]), .dout(strt_dly[1])); dly_16 #(.WIDTH(1)) i_strt_dly1 (.clk(CLK),.rst(1'b0), .dly(4'd15), .din(strt_dly[0]), .dout(strt_dly[1])); Loading Loading @@ -532,20 +532,28 @@ Y[1,1]=(0x96*P[1,1]+ 0x1d*((P[1,0]+P[1,2])/2 + 0x4d*((P[0,1] + reg [7:0] y; reg [7:0] y; // reg [7:0] y0; // bypass in monochrome mode // reg [7:0] y0; // bypass in monochrome mode wire [7:0] y0 = pdc; // wire [7:0] y0 = pdc; reg [7:0] y0_r; // wire [7:0] y0; // bypass in monochrome mode // wire [7:0] y0; // bypass in monochrome mode reg [15:0] y1,y2,y3; reg [15:0] y1,y2,y3; wire [15:0] y_sum =y1+y2+y3; // TODO: insert register to ease mm1..3 -> y (OK to delay all outputs). Or is it not using DSP at all? // wire [15:0] y_sum =y1+y2+y3; reg [15:0] y_sum_r; // always @ (posedge CLK) y0 <= pd1_dly; // m1; // equivalent // always @ (posedge CLK) y0 <= pd1_dly; // m1; // equivalent always @ (posedge CLK) y1 <= mm1; // wire [7:0] pre_y= mono ? y0 : (y_sum[15:8]+y_sum[7]); always @ (posedge CLK) y2 <= mm2; wire [7:0] pre_y= mono ? y0_r : (y_sum_r[15:8]+y_sum_r[7]); always @ (posedge CLK) y3 <= mm3; // making y output signed -128..+127 // making y output signed -128..+127 wire [7:0] pre_y= mono ? y0 : (y_sum[15:8]+y_sum[7]); always @ (posedge CLK) y[7:0] <= pre_y[7:0]; always @ (posedge CLK) signed_y_r[7:0] <= {~pre_y[7], pre_y[6:0]}; always @ (posedge CLK) begin y1 <= mm1; y2 <= mm2; y3 <= mm3; y0_r <= pdc; y_sum_r <= y1+y2+y3; y[7:0] <= pre_y[7:0]; signed_y_r[7:0] <= {~pre_y[7], pre_y[6:0]}; end // Try easier and hope better algorithm of color extractions that should perform better on gradients. // Try easier and hope better algorithm of color extractions that should perform better on gradients. Loading Loading @@ -575,12 +583,21 @@ reg sub_y; // output accumulator/subtractor. 0 - load new data, wire cwe0; // preliminary cwe_r (to be modulated by odd/even pixels) wire cwe0; // preliminary cwe_r (to be modulated by odd/even pixels) reg cstrt; //ystrt dealyed by 1 reg cstrt; //ystrt dealyed by 1 reg cnxt; // nxtline delayed by 1 reg cnxt; // nxtline delayed by 1 reg pre_sel_cbcrmult1; // delaying, for now uing "old" ywe,cwe, yaddr,caddr - registering them on the output always @ (posedge CLK) begin always @ (posedge CLK) begin if (~(ywe_r || ystrt || nxtline)) sel_cbcrmult1 <= ~(bayer_phase[1] ^ bayer_phase[0] ^ odd_line); // if (~(ywe_r || ystrt || nxtline)) sel_cbcrmult1 <= ~(bayer_phase[1] ^ bayer_phase[0] ^ odd_line); else sel_cbcrmult1 <= ~sel_cbcrmult1; // else sel_cbcrmult1 <= ~sel_cbcrmult1; if (~(ywe_r || ystrt || nxtline)) pre_sel_cbcrmult1 <= ~(bayer_phase[1] ^ bayer_phase[0] ^ odd_line); else pre_sel_cbcrmult1 <= ~pre_sel_cbcrmult1; sel_cbcrmult1 <=pre_sel_cbcrmult1; sub_y <= ~sel_cbcrmult1; sub_y <= ~sel_cbcrmult1; cbcrmult1 <= sel_cbcrmult1?y[7:0]:pdc[7:0]; // cbcrmult1 <= sel_cbcrmult1?y[7:0]:pdc[7:0]; cbcrmult1 <= sel_cbcrmult1?y[7:0]:pdc[7:0]; cbcrmult1 <= sel_cbcrmult1?y[7:0]:y0_r[7:0]; // delayed by 1 clock if (~ywe_r) use_cr <= ~(bayer_phase[1] ^ odd_line); if (~ywe_r) use_cr <= ~(bayer_phase[1] ^ odd_line); end end assign cbcrmult2 = use_cr?m_cr:m_cb; // maybe will need a register? (use_cr will still be good as it is valid early) assign cbcrmult2 = use_cr?m_cr:m_cb; // maybe will need a register? (use_cr will still be good as it is valid early) Loading @@ -601,23 +618,38 @@ end dly_16 #(.WIDTH(1)) i_cwe0 (.clk(CLK),.rst(1'b0), .dly(4'd1), .din(ywe_r), .dout(cwe0)); dly_16 #(.WIDTH(1)) i_cwe0 (.clk(CLK),.rst(1'b0), .dly(4'd1), .din(ywe_r), .dout(cwe0)); //SRL16 i_cwe0 (.D(ywe_r ), .Q(cwe0), .A0(1'b1), .A1(1'b0), .A2(1'b0), .A3(1'b0), .CLK(CLK)); // dly=2=1+1 //SRL16 i_cwe0 (.D(ywe_r ), .Q(cwe0), .A0(1'b1), .A1(1'b0), .A2(1'b0), .A3(1'b0), .CLK(CLK)); // dly=2=1+1 always @ (posedge CLK) begin always @ (posedge CLK) begin cstrt <= ystrt; cstrt <= ystrt; cnxt <= nxtline; cnxt <= nxtline; cwe_r <= cwe0 && sub_y; // cwe_r <= cwe0 && sub_y; cwe_r <= cwe0 && !sel_cbcrmult1; caddr_r[2:0]<= cwe0?(caddr_r[2:0]+cwe_r):3'b0; caddr_r[2:0]<= cwe0?(caddr_r[2:0]+cwe_r):3'b0; if (cstrt) caddr_r[6] <= ~bayer_phase[1]; if (cstrt) caddr_r[6] <= ~bayer_phase[1]; else if (cnxt) caddr_r[6] <= ~caddr_r[6]; else if (cnxt) caddr_r[6] <= ~caddr_r[6]; if (cstrt) caddr_r[5:3] <=3'b0; if (cstrt) caddr_r[5:3] <=3'b0; else if (cnxt) caddr_r[5:3] <=(bayer_phase[1]^caddr_r[6])? caddr_r[5:3]:(caddr_r[5:3]+1); else if (cnxt) caddr_r[5:3] <=(bayer_phase[1]^caddr_r[6])? caddr_r[5:3]:(caddr_r[5:3]+1); end end // extra signals delayed by 1 clock reg ywe_r2, cwe_r2; reg [6:0] caddr_r2; reg [7:0] yaddr_r2; always @ (posedge CLK) begin ywe_r2 <= ywe_r; cwe_r2 <= cwe_r; yaddr_r2 <= yaddr_r; caddr_r2 <= caddr_r; end always @ (posedge CLK) begin always @ (posedge CLK) begin y_eq_0 <= (y0[7:0] == 8'h0); y_eq_0 <= (y0_r[7:0] == 8'h0); y_eq_255 <= (y0[7:0] == 8'hff); y_eq_255 <= (y0_r[7:0] == 8'hff); if (strt) n000_r[7:0] <= 8'h0; if (strt) n000_r[7:0] <= 8'h0; else if ((n000_r[7:0]!=8'hff) && y_eq_0 && ywe_r) n000_r[7:0] <= n000_r[7:0]+1; else if ((n000_r[7:0]!=8'hff) && y_eq_0 && ywe_r2) n000_r[7:0] <= n000_r[7:0]+1; if (strt) n255_r[7:0] <= 8'h0; if (strt) n255_r[7:0] <= 8'h0; else if ((n255_r[7:0]!=8'hff) && y_eq_255 && ywe_r) n255_r[7:0] <= n255_r[7:0]+1; else if ((n255_r[7:0]!=8'hff) && y_eq_255 && ywe_r2) n255_r[7:0] <= n255_r[7:0]+1; end end Loading ddr3/ddr3.v +14 −1 Original line number Original line Diff line number Diff line Loading @@ -85,7 +85,7 @@ * 1.69 SPH 03/19/13 Update tZQCS, tZQinit, tZQoper timing parameters * 1.69 SPH 03/19/13 Update tZQCS, tZQinit, tZQoper timing parameters * 1.70 SPH 04/08/14 Update tRFC to PRECARGE check * 1.70 SPH 04/08/14 Update tRFC to PRECARGE check *****************************************************************************************/ *****************************************************************************************/ `define den4096Mb 1 `include "system_defines.vh" // DO NOT CHANGE THE TIMESCALE // DO NOT CHANGE THE TIMESCALE // MAKE SURE YOUR SIMULATOR USES "PS" RESOLUTION // MAKE SURE YOUR SIMULATOR USES "PS" RESOLUTION `timescale 1ps / 1ps `timescale 1ps / 1ps Loading Loading @@ -121,6 +121,19 @@ module ddr3 ( // to select the correct component density before continuing // to select the correct component density before continuing ERROR: You must specify component density with +define+den____Mb. ERROR: You must specify component density with +define+den____Mb. `endif `endif initial begin $display ("TCK_MIN = %d", TCK_MIN); `ifdef sg15E $display ("sg15E = `sg15E"); `endif `ifdef sg093 // sg093 is equivalent to the JEDEC DDR3-2133 (14-14-14) speed bin $display ("sg093"); `elsif sg15E $display ("sg15E"); `endif end parameter check_strict_mrbits = 1; parameter check_strict_mrbits = 1; parameter check_strict_timing = 1; parameter check_strict_timing = 1; parameter feature_pasr = 1; parameter feature_pasr = 1; Loading Loading
.gitignore +2 −0 Original line number Original line Diff line number Diff line Loading @@ -10,6 +10,8 @@ x393.prj *DEBUG_VDT* *DEBUG_VDT* *.kate-swp *.kate-swp *.old *.old *.new *.bad *.pyc *.pyc *.pickle *.pickle py393/dbg* py393/dbg* Loading
.project +9 −9 Original line number Original line Diff line number Diff line Loading @@ -62,42 +62,42 @@ <link> <link> <name>vivado_logs/VivadoBitstream.log</name> <name>vivado_logs/VivadoBitstream.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoBitstream-20151031232832558.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoBitstream-20151103114104932.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoOpt.log</name> <name>vivado_logs/VivadoOpt.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoOpt-20151031232832558.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoOpt-20151103114104932.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoOptPhys.log</name> <name>vivado_logs/VivadoOptPhys.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoOptPhys-20151031232832558.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoOptPhys-20151103114104932.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoOptPower.log</name> <name>vivado_logs/VivadoOptPower.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoOptPower-20151031232832558.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoOptPower-20151103114104932.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoPlace.log</name> <name>vivado_logs/VivadoPlace.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoPlace-20151031232832558.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoPlace-20151103114104932.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoRoute.log</name> <name>vivado_logs/VivadoRoute.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoRoute-20151031232832558.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoRoute-20151103114104932.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoSynthesis.log</name> <name>vivado_logs/VivadoSynthesis.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoSynthesis-20151031232335810.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoSynthesis-20151103114104932.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoTimimgSummaryReportImplemented.log</name> <name>vivado_logs/VivadoTimimgSummaryReportImplemented.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoTimimgSummaryReportImplemented-20151031232832558.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoTimimgSummaryReportImplemented-20151103114104932.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoTimimgSummaryReportSynthesis.log</name> <name>vivado_logs/VivadoTimimgSummaryReportSynthesis.log</name> Loading @@ -107,7 +107,7 @@ <link> <link> <name>vivado_logs/VivadoTimingReportImplemented.log</name> <name>vivado_logs/VivadoTimingReportImplemented.log</name> <type>1</type> <type>1</type> <location>/home/andrey/git/x393/vivado_logs/VivadoTimingReportImplemented-20150904164653967.log</location> <location>/home/andrey/git/x393/vivado_logs/VivadoTimingReportImplemented-20151101221627109.log</location> </link> </link> <link> <link> <name>vivado_logs/VivadoTimingReportSynthesis.log</name> <name>vivado_logs/VivadoTimingReportSynthesis.log</name> Loading
.settings/com.elphel.vdt.VivadoRoute.prefs +2 −1 Original line number Original line Diff line number Diff line VivadoRoute_122_SkipSnapshotRoute=true VivadoRoute_122_SkipSnapshotRoute=true VivadoRoute_123_SkipSnapshotRoute=true VivadoRoute_123_SkipSnapshotRoute=true com.elphel.store.context.VivadoRoute=VivadoRoute_122_SkipSnapshotRoute<-@\#\#@->VivadoRoute_123_SkipSnapshotRoute<-@\#\#@-> VivadoRoute_125_directive_route=MoreGlobalIterations com.elphel.store.context.VivadoRoute=VivadoRoute_122_SkipSnapshotRoute<-@\#\#@->VivadoRoute_123_SkipSnapshotRoute<-@\#\#@->VivadoRoute_125_directive_route<-@\#\#@-> eclipse.preferences.version=1 eclipse.preferences.version=1
compressor_jp/csconvert18a.v +66 −34 Original line number Original line Diff line number Diff line Loading @@ -249,7 +249,7 @@ module csconvert18a( wire ystrt,nxtline; wire ystrt,nxtline; reg [7:0] yaddr_r; // address for the external buffer memory to write 16x16x8bit Y data reg [7:0] yaddr_r; // address for the external buffer memory to write 16x16x8bit Y data reg ywe_r; // wrire enable of Y data reg ywe_r; // write enable of Y data reg [6:0] caddr_r; // address for the external buffer memory 2x8x8x8bit Cb+Cr data (MSB=0 - Cb, 1 - Cr) reg [6:0] caddr_r; // address for the external buffer memory 2x8x8x8bit Cb+Cr data (MSB=0 - Cb, 1 - Cr) reg cwe_r; // write enable for CbCr data reg cwe_r; // write enable for CbCr data reg odd_pix; // odd pixel (assumes even number of pixels in a line reg odd_pix; // odd pixel (assumes even number of pixels in a line Loading @@ -267,10 +267,10 @@ module csconvert18a( assign n000 = n000_r; assign n000 = n000_r; assign n255 = n255_r; assign n255 = n255_r; assign signed_y = signed_y_r; // - now signed char, -128(black) to +127 (white) assign signed_y = signed_y_r; // - now signed char, -128(black) to +127 (white) assign yaddr = yaddr_r; assign yaddr = yaddr_r2; assign ywe = ywe_r; assign ywe = ywe_r2; assign caddr = caddr_r; assign caddr = caddr_r2; assign cwe = cwe_r; assign cwe = cwe_r2; dly_16 #(.WIDTH(1)) i_strt_dly0 (.clk(CLK),.rst(1'b0), .dly(4'd15), .din(pre_first_in), .dout(strt_dly[0])); dly_16 #(.WIDTH(1)) i_strt_dly0 (.clk(CLK),.rst(1'b0), .dly(4'd15), .din(pre_first_in), .dout(strt_dly[0])); dly_16 #(.WIDTH(1)) i_strt_dly1 (.clk(CLK),.rst(1'b0), .dly(4'd15), .din(strt_dly[0]), .dout(strt_dly[1])); dly_16 #(.WIDTH(1)) i_strt_dly1 (.clk(CLK),.rst(1'b0), .dly(4'd15), .din(strt_dly[0]), .dout(strt_dly[1])); Loading Loading @@ -532,20 +532,28 @@ Y[1,1]=(0x96*P[1,1]+ 0x1d*((P[1,0]+P[1,2])/2 + 0x4d*((P[0,1] + reg [7:0] y; reg [7:0] y; // reg [7:0] y0; // bypass in monochrome mode // reg [7:0] y0; // bypass in monochrome mode wire [7:0] y0 = pdc; // wire [7:0] y0 = pdc; reg [7:0] y0_r; // wire [7:0] y0; // bypass in monochrome mode // wire [7:0] y0; // bypass in monochrome mode reg [15:0] y1,y2,y3; reg [15:0] y1,y2,y3; wire [15:0] y_sum =y1+y2+y3; // TODO: insert register to ease mm1..3 -> y (OK to delay all outputs). Or is it not using DSP at all? // wire [15:0] y_sum =y1+y2+y3; reg [15:0] y_sum_r; // always @ (posedge CLK) y0 <= pd1_dly; // m1; // equivalent // always @ (posedge CLK) y0 <= pd1_dly; // m1; // equivalent always @ (posedge CLK) y1 <= mm1; // wire [7:0] pre_y= mono ? y0 : (y_sum[15:8]+y_sum[7]); always @ (posedge CLK) y2 <= mm2; wire [7:0] pre_y= mono ? y0_r : (y_sum_r[15:8]+y_sum_r[7]); always @ (posedge CLK) y3 <= mm3; // making y output signed -128..+127 // making y output signed -128..+127 wire [7:0] pre_y= mono ? y0 : (y_sum[15:8]+y_sum[7]); always @ (posedge CLK) y[7:0] <= pre_y[7:0]; always @ (posedge CLK) signed_y_r[7:0] <= {~pre_y[7], pre_y[6:0]}; always @ (posedge CLK) begin y1 <= mm1; y2 <= mm2; y3 <= mm3; y0_r <= pdc; y_sum_r <= y1+y2+y3; y[7:0] <= pre_y[7:0]; signed_y_r[7:0] <= {~pre_y[7], pre_y[6:0]}; end // Try easier and hope better algorithm of color extractions that should perform better on gradients. // Try easier and hope better algorithm of color extractions that should perform better on gradients. Loading Loading @@ -575,12 +583,21 @@ reg sub_y; // output accumulator/subtractor. 0 - load new data, wire cwe0; // preliminary cwe_r (to be modulated by odd/even pixels) wire cwe0; // preliminary cwe_r (to be modulated by odd/even pixels) reg cstrt; //ystrt dealyed by 1 reg cstrt; //ystrt dealyed by 1 reg cnxt; // nxtline delayed by 1 reg cnxt; // nxtline delayed by 1 reg pre_sel_cbcrmult1; // delaying, for now uing "old" ywe,cwe, yaddr,caddr - registering them on the output always @ (posedge CLK) begin always @ (posedge CLK) begin if (~(ywe_r || ystrt || nxtline)) sel_cbcrmult1 <= ~(bayer_phase[1] ^ bayer_phase[0] ^ odd_line); // if (~(ywe_r || ystrt || nxtline)) sel_cbcrmult1 <= ~(bayer_phase[1] ^ bayer_phase[0] ^ odd_line); else sel_cbcrmult1 <= ~sel_cbcrmult1; // else sel_cbcrmult1 <= ~sel_cbcrmult1; if (~(ywe_r || ystrt || nxtline)) pre_sel_cbcrmult1 <= ~(bayer_phase[1] ^ bayer_phase[0] ^ odd_line); else pre_sel_cbcrmult1 <= ~pre_sel_cbcrmult1; sel_cbcrmult1 <=pre_sel_cbcrmult1; sub_y <= ~sel_cbcrmult1; sub_y <= ~sel_cbcrmult1; cbcrmult1 <= sel_cbcrmult1?y[7:0]:pdc[7:0]; // cbcrmult1 <= sel_cbcrmult1?y[7:0]:pdc[7:0]; cbcrmult1 <= sel_cbcrmult1?y[7:0]:pdc[7:0]; cbcrmult1 <= sel_cbcrmult1?y[7:0]:y0_r[7:0]; // delayed by 1 clock if (~ywe_r) use_cr <= ~(bayer_phase[1] ^ odd_line); if (~ywe_r) use_cr <= ~(bayer_phase[1] ^ odd_line); end end assign cbcrmult2 = use_cr?m_cr:m_cb; // maybe will need a register? (use_cr will still be good as it is valid early) assign cbcrmult2 = use_cr?m_cr:m_cb; // maybe will need a register? (use_cr will still be good as it is valid early) Loading @@ -601,23 +618,38 @@ end dly_16 #(.WIDTH(1)) i_cwe0 (.clk(CLK),.rst(1'b0), .dly(4'd1), .din(ywe_r), .dout(cwe0)); dly_16 #(.WIDTH(1)) i_cwe0 (.clk(CLK),.rst(1'b0), .dly(4'd1), .din(ywe_r), .dout(cwe0)); //SRL16 i_cwe0 (.D(ywe_r ), .Q(cwe0), .A0(1'b1), .A1(1'b0), .A2(1'b0), .A3(1'b0), .CLK(CLK)); // dly=2=1+1 //SRL16 i_cwe0 (.D(ywe_r ), .Q(cwe0), .A0(1'b1), .A1(1'b0), .A2(1'b0), .A3(1'b0), .CLK(CLK)); // dly=2=1+1 always @ (posedge CLK) begin always @ (posedge CLK) begin cstrt <= ystrt; cstrt <= ystrt; cnxt <= nxtline; cnxt <= nxtline; cwe_r <= cwe0 && sub_y; // cwe_r <= cwe0 && sub_y; cwe_r <= cwe0 && !sel_cbcrmult1; caddr_r[2:0]<= cwe0?(caddr_r[2:0]+cwe_r):3'b0; caddr_r[2:0]<= cwe0?(caddr_r[2:0]+cwe_r):3'b0; if (cstrt) caddr_r[6] <= ~bayer_phase[1]; if (cstrt) caddr_r[6] <= ~bayer_phase[1]; else if (cnxt) caddr_r[6] <= ~caddr_r[6]; else if (cnxt) caddr_r[6] <= ~caddr_r[6]; if (cstrt) caddr_r[5:3] <=3'b0; if (cstrt) caddr_r[5:3] <=3'b0; else if (cnxt) caddr_r[5:3] <=(bayer_phase[1]^caddr_r[6])? caddr_r[5:3]:(caddr_r[5:3]+1); else if (cnxt) caddr_r[5:3] <=(bayer_phase[1]^caddr_r[6])? caddr_r[5:3]:(caddr_r[5:3]+1); end end // extra signals delayed by 1 clock reg ywe_r2, cwe_r2; reg [6:0] caddr_r2; reg [7:0] yaddr_r2; always @ (posedge CLK) begin ywe_r2 <= ywe_r; cwe_r2 <= cwe_r; yaddr_r2 <= yaddr_r; caddr_r2 <= caddr_r; end always @ (posedge CLK) begin always @ (posedge CLK) begin y_eq_0 <= (y0[7:0] == 8'h0); y_eq_0 <= (y0_r[7:0] == 8'h0); y_eq_255 <= (y0[7:0] == 8'hff); y_eq_255 <= (y0_r[7:0] == 8'hff); if (strt) n000_r[7:0] <= 8'h0; if (strt) n000_r[7:0] <= 8'h0; else if ((n000_r[7:0]!=8'hff) && y_eq_0 && ywe_r) n000_r[7:0] <= n000_r[7:0]+1; else if ((n000_r[7:0]!=8'hff) && y_eq_0 && ywe_r2) n000_r[7:0] <= n000_r[7:0]+1; if (strt) n255_r[7:0] <= 8'h0; if (strt) n255_r[7:0] <= 8'h0; else if ((n255_r[7:0]!=8'hff) && y_eq_255 && ywe_r) n255_r[7:0] <= n255_r[7:0]+1; else if ((n255_r[7:0]!=8'hff) && y_eq_255 && ywe_r2) n255_r[7:0] <= n255_r[7:0]+1; end end Loading
ddr3/ddr3.v +14 −1 Original line number Original line Diff line number Diff line Loading @@ -85,7 +85,7 @@ * 1.69 SPH 03/19/13 Update tZQCS, tZQinit, tZQoper timing parameters * 1.69 SPH 03/19/13 Update tZQCS, tZQinit, tZQoper timing parameters * 1.70 SPH 04/08/14 Update tRFC to PRECARGE check * 1.70 SPH 04/08/14 Update tRFC to PRECARGE check *****************************************************************************************/ *****************************************************************************************/ `define den4096Mb 1 `include "system_defines.vh" // DO NOT CHANGE THE TIMESCALE // DO NOT CHANGE THE TIMESCALE // MAKE SURE YOUR SIMULATOR USES "PS" RESOLUTION // MAKE SURE YOUR SIMULATOR USES "PS" RESOLUTION `timescale 1ps / 1ps `timescale 1ps / 1ps Loading Loading @@ -121,6 +121,19 @@ module ddr3 ( // to select the correct component density before continuing // to select the correct component density before continuing ERROR: You must specify component density with +define+den____Mb. ERROR: You must specify component density with +define+den____Mb. `endif `endif initial begin $display ("TCK_MIN = %d", TCK_MIN); `ifdef sg15E $display ("sg15E = `sg15E"); `endif `ifdef sg093 // sg093 is equivalent to the JEDEC DDR3-2133 (14-14-14) speed bin $display ("sg093"); `elsif sg15E $display ("sg15E"); `endif end parameter check_strict_mrbits = 1; parameter check_strict_mrbits = 1; parameter check_strict_timing = 1; parameter check_strict_timing = 1; parameter feature_pasr = 1; parameter feature_pasr = 1; Loading