Files
Imants Pulkstenis d18a10f6ea Initial commit
Uploading to GitHub
2019-07-11 18:01:21 +03:00

254 lines
6.9 KiB
Verilog

module two_cam_one_screen#(
parameter CAM_DATA_WIDTH = 12,
CAM_LINE = 9,
CAM_PIXEL = 10
) (
input clk1,
input clk2,
input clk,
input [1:0] im_p, // image processor controls
// input form camera
//cam1
input i_we_cam0,
input [CAM_DATA_WIDTH-1:0] i_data_cam0,
input [CAM_LINE-1:0] i_line_cam0,
input [CAM_PIXEL-1:0] i_pixel_cam0,
input [CAM_LINE-1:0] i_imag_depth_cam0,
input [CAM_PIXEL-1:0] i_imag_width_cam0,
//input i_imag_resized_cam0,
//cam2
input i_we_cam1,
input [CAM_DATA_WIDTH-1:0] i_data_cam1,
input [CAM_LINE-1:0] i_line_cam1,
input [CAM_PIXEL-1:0] i_pixel_cam1,
input [CAM_LINE-1:0] i_imag_depth_cam1,
input [CAM_PIXEL-1:0] i_imag_width_cam1,
//input i_imag_resized_cam1,
// output
output [CAM_LINE-1:0] o_line,
output [CAM_PIXEL-1:0] o_pixel,
output o_we,
output [CAM_DATA_WIDTH-1:0] o_data_wr,
output [CAM_LINE-1:0] o_imag_depth,
output [CAM_PIXEL-1:0] o_imag_width
);
//------------Internal variables and constants-----------
// reg [CAM_LINE-1:0] r_offset_y;
// reg [CAM_PIXEL-1:0] r_offset_x;
// reg [CAM_LINE:0] r_imag_depth_summ;
// reg [CAM_PIXEL:0] r_imag_width_summ;
// reg [CAM_PIXEL-1:0]
// r_imag_width1 = 0,
// r_imag_width2 = 0,
// r_imag_width3 = 0;
// reg [CAM_LINE-1:0]
// r_imag_depth1 = 0,
// r_imag_depth2 = 0,
// r_imag_depth3 = 0;
// reg [CAM_LINE-1:0]
// r_imag_depth1_cam0,
// r_imag_depth2_cam0,
// r_imag_depth1_cam1,
// r_imag_depth2_cam1 ;
// reg [CAM_PIXEL-1:0]
// r_imag_width1_cam0,
// r_imag_width2_cam0,
// r_imag_width1_cam1,
// r_imag_width2_cam1 ;
reg [CAM_PIXEL-1:0]
r_pixel1_cam1 = 0,
r_pixel2_cam1 = 0,
r_pixel3_cam1 = 0,
r_pixel4_cam1 = 0;
reg [CAM_PIXEL-1:0]
r_pixel1_cam0 = 0,
r_pixel2_cam0 = 0,
r_pixel3_cam0 = 0,
r_pixel4_cam0 = 0;
reg [CAM_LINE-1:0]
r_line1_cam1 = 0,
r_line2_cam1 = 0,
r_line3_cam1 = 0,
r_line4_cam1 = 0;
reg [CAM_LINE-1:0]
r_line1_cam0 = 0,
r_line2_cam0 = 0,
r_line3_cam0 = 0,
r_line4_cam0 = 0;
reg [CAM_DATA_WIDTH-1:0]
r_data1_cam0 = 0,
r_data2_cam0 = 0,
r_data3_cam0 = 0,
r_data4_cam0 = 0;
reg [CAM_DATA_WIDTH-1:0]
r_data1_cam1 = 0,
r_data2_cam1 = 0,
r_data3_cam1 = 0,
r_data4_cam1 = 0;
reg
r_we1_cam0 = 0,
r_we2_cam0 = 0,
r_we3_cam0 = 0,
r_we4_cam0 = 0;
reg
r_we1_cam1 = 0,
r_we2_cam1 = 0,
r_we3_cam1 = 0,
r_we4_cam1 = 0;
reg [0:0]
cam_select = 0;
reg
r_we_out = 0;
reg [CAM_DATA_WIDTH-1:0]
r_data_out = 0;
reg [CAM_LINE-1:0]
r_line_out = 0;
reg [CAM_PIXEL-1:0]
r_pixel_out = 0;
//------------Syncronus logic---------------------------
always@(negedge clk1)begin
// -------------------1st cycle
//if(clk50==1)begin
if (i_pixel_cam0 < 'd159 ) begin
r_pixel1_cam0 <= i_pixel_cam0;
end else begin
r_pixel1_cam0 <= 'd159;
end
if (i_pixel_cam1 < 'd159 ) begin
r_pixel1_cam1 <= i_pixel_cam1;
end else begin
r_pixel1_cam1 <= 'd159;
end
r_data1_cam0 <= i_data_cam0;
r_we1_cam0 <= i_we_cam0;
r_line1_cam0 <= i_line_cam0;
r_data1_cam1 <= i_data_cam1;
r_we1_cam1 <= i_we_cam1;
r_line1_cam1 <= i_line_cam1;
//end
end
always@(negedge clk2)begin
//if(clk50==0)begin
// -------------------2nd cycle
r_data2_cam0 <= r_data1_cam0;
r_data2_cam1 <= r_data1_cam1;
r_we2_cam0 <= r_we1_cam0;
r_we2_cam1 <= r_we1_cam1;
r_pixel2_cam1 <= r_pixel1_cam1;
r_pixel2_cam0 <= r_pixel1_cam0 + 'd160;
r_line2_cam0 <= r_line1_cam0;
r_line2_cam1 <= r_line1_cam1;
//end
end
always@(negedge clk1)begin
//if(clk50==1)begin
//------------------3rd cycle
/*
r_data_out <= r_data2_cam0;
r_we_out <= r_we2_cam0;
r_pixel_out <= r_pixel2_cam0;
r_line_out <= r_line2_cam0;
*/
r_data3_cam0 <= r_data2_cam0;
r_we3_cam0 <= r_we2_cam0;
r_pixel3_cam0 <= r_pixel2_cam0;
r_line3_cam0 <= r_line2_cam0;
r_data3_cam1 <= r_data2_cam1;
r_we3_cam1 <= r_we2_cam1;
r_pixel3_cam1 <= r_pixel2_cam1;
r_line3_cam1 <= r_line2_cam1;
//end
end
always@(negedge clk2)begin
//if(clk50==0)begin
//------------------4th cycle
/*
r_data_out <= r_data3_cam1;
r_we_out <= r_we3_cam1;
r_pixel_out <= r_pixel3_cam1;
r_line_out <= r_line3_cam1;
r_data4_cam0 <= r_data3_cam0;
r_line4_cam0 <= r_line3_cam0;
r_we4_cam0 <= r_we3_cam0;
r_pixel4_cam0 <= r_pixel3_cam0;
*/
r_we4_cam1 <= r_we3_cam1;
r_pixel4_cam1 <= r_pixel3_cam1;
r_data4_cam1 <= r_data3_cam1;
r_line4_cam1 <= r_line3_cam1;
//end
end
always@(negedge clk )begin
cam_select <= ~cam_select;
end
// assign o_line = r_line_out[CAM_LINE-1:0]; //~counter[0] ? r_line4_cam1 : r_line3_cam0;
// assign o_pixel = r_pixel_out[CAM_PIXEL-1:0]; //~counter[0] ? r_pixel4_cam1 : r_pixel3_cam0;
// assign o_we = r_we_out; // 1'b1; //~counter[0] ? r_we4_cam1 : r_we3_cam0;
// assign o_data_wr = r_data_out;// ~counter[0] ? r_data4_cam1 : r_data3_cam0;
// assign o_imag_depth = 240;//~counter[0] ? r_imag_depth3 : r_imag_depth2;
// assign o_imag_width = 320;//~counter[0] ? r_imag_width3 : r_imag_width2;
assign o_line = im_p[1]? cam_select ? r_line4_cam1 : r_line3_cam0
: im_p[0] ? i_line_cam0 : i_line_cam1 ;
assign o_pixel = im_p[1]? cam_select ? r_pixel4_cam1 : r_pixel3_cam0
: im_p[0] ? i_pixel_cam0 : i_pixel_cam1 ;
assign o_we = im_p[1]? cam_select ? r_we4_cam1 : r_we3_cam0
: im_p[0] ? i_we_cam0 : i_we_cam1 ;
assign o_data_wr = im_p[1]? cam_select ? r_data4_cam1 : r_data3_cam0
: im_p[0] ? i_data_cam0 : i_data_cam1 ;
// assign o_line = r_line3_cam0;
// assign o_pixel = r_pixel3_cam0;
// assign o_we = r_we3_cam0;
// assign o_data_wr = r_data3_cam0;
assign o_imag_depth = im_p[1]? 240
: im_p[0] ? i_imag_depth_cam0 : i_imag_depth_cam1 ;
assign o_imag_width = im_p[1]? 320
: im_p[0] ? i_imag_width_cam0 : i_imag_width_cam1 ;
endmodule