154 lines
5.6 KiB
Verilog
154 lines
5.6 KiB
Verilog
// Default parameters for image transform module
|
|
// Four MSB are actual registers
|
|
// next two bits are one of modes selected by swishes. 4 modes are avilable
|
|
// LSB are camera bit. avilable two cameras. Camera 0 and camera 1.
|
|
//
|
|
//
|
|
module reg_reader #(parameter
|
|
CAM_LINE = 9,
|
|
CAM_PIXEL = 10//,
|
|
)(
|
|
input clk,
|
|
input i_enable,
|
|
input [24:0] i_data,
|
|
output [6:0] o_addr_rd,
|
|
// camera modes from input swiches
|
|
input [1:0] i_cam0_mode,
|
|
input [1:0] i_cam1_mode,
|
|
|
|
// 1st camera
|
|
output [CAM_PIXEL-1:0] o_cam0_WIDTH,
|
|
output [CAM_LINE-1:0] o_cam0_DEPTH,
|
|
output [24:0] o_cam0_T11,
|
|
output [24:0] o_cam0_T12,
|
|
output [24:0] o_cam0_T13,
|
|
output [24:0] o_cam0_T21,
|
|
output [24:0] o_cam0_T22,
|
|
output [24:0] o_cam0_T23,
|
|
output [24:0] o_cam0_T31,
|
|
output [24:0] o_cam0_T32,
|
|
output [24:0] o_cam0_T33,
|
|
|
|
// 2nd camera
|
|
output [CAM_PIXEL-1:0] o_cam1_WIDTH,
|
|
output [CAM_LINE-1:0] o_cam1_DEPTH,
|
|
output [24:0] o_cam1_T11,
|
|
output [24:0] o_cam1_T12,
|
|
output [24:0] o_cam1_T13,
|
|
output [24:0] o_cam1_T21,
|
|
output [24:0] o_cam1_T22,
|
|
output [24:0] o_cam1_T23,
|
|
output [24:0] o_cam1_T31,
|
|
output [24:0] o_cam1_T32,
|
|
output [24:0] o_cam1_T33
|
|
);
|
|
|
|
// Internal variables and registers
|
|
|
|
reg [6:0] r_count = 'b0;
|
|
reg [24:0] r_data = 'b0;
|
|
|
|
reg [CAM_PIXEL-1:0] r_cam0_WIDTH = 'b0;// 'd320;
|
|
reg [CAM_LINE-1:0] r_cam0_DEPTH = 'b0;// 'd240;
|
|
reg [24:0] r_cam0_T11 = 'b0;// 25'b0_000000000000_100000000000;
|
|
reg [24:0] r_cam0_T12 = 'b0;// 25'b0_000000000000_000000000000;
|
|
reg [24:0] r_cam0_T13 = 'b0;// 25'b0_000000000000_000000000000;
|
|
reg [24:0] r_cam0_T21 = 'b0;// 25'b0_000000000000_000000000000;
|
|
reg [24:0] r_cam0_T22 = 'b0;// 25'b0_000000000000_100000000000;
|
|
reg [24:0] r_cam0_T23 = 'b0;// 25'b0_000000000000_000000000000;
|
|
reg [24:0] r_cam0_T31 = 'b0;// 25'b0_000000000000_000000000000;
|
|
reg [24:0] r_cam0_T32 = 'b0;// 25'b0_000000000000_000000000000;
|
|
reg [24:0] r_cam0_T33 = 'b0;// 25'b0_000000000001_000000000000;
|
|
|
|
reg [CAM_PIXEL-1:0] r_cam1_WIDTH = 'b0;// 'd320;
|
|
reg [CAM_LINE-1:0] r_cam1_DEPTH = 'b0;// 'd240;
|
|
reg [24:0] r_cam1_T11 = 'b0;// 25'b0_000000000000_100000000000;
|
|
reg [24:0] r_cam1_T12 = 'b0;// 25'b0_000000000000_000000000000;
|
|
reg [24:0] r_cam1_T13 = 'b0;// 25'b0_000000000000_000000000000;
|
|
reg [24:0] r_cam1_T21 = 'b0;// 25'b0_000000000000_000000000000;
|
|
reg [24:0] r_cam1_T22 = 'b0;// 25'b0_000000000000_100000000000;
|
|
reg [24:0] r_cam1_T23 = 'b0;// 25'b0_000000000000_000000000000;
|
|
reg [24:0] r_cam1_T31 = 'b0;// 25'b0_000000000000_000000000000;
|
|
reg [24:0] r_cam1_T32 = 'b0;// 25'b0_000000000000_000000000000;
|
|
reg [24:0] r_cam1_T33 = 'b0;// 25'b0_000000000001_000000000000;
|
|
|
|
|
|
|
|
//--------------------------- synchonus logic------------------
|
|
always @ (posedge clk) begin
|
|
if(i_enable)begin
|
|
r_count <= r_count + 1;
|
|
end
|
|
|
|
if(i_enable) begin
|
|
case (r_count[0])
|
|
'b0 : begin
|
|
case (r_count[6:3])
|
|
'd0 : r_cam0_WIDTH <= i_data[CAM_PIXEL-1:0];
|
|
'd1 : r_cam0_DEPTH <= i_data[CAM_LINE-1:0];
|
|
'd2 : r_cam0_T11 <= i_data;
|
|
'd3 : r_cam0_T12 <= i_data;
|
|
'd4 : r_cam0_T13 <= i_data;
|
|
'd5 : r_cam0_T21 <= i_data;
|
|
'd6 : r_cam0_T22 <= i_data;
|
|
'd7 : r_cam0_T23 <= i_data;
|
|
'd8 : r_cam0_T31 <= i_data;
|
|
'd9 : r_cam0_T32 <= i_data;
|
|
'd10 : r_cam0_T33 <= i_data;
|
|
default: ;
|
|
endcase
|
|
end
|
|
'b1 : begin
|
|
case (r_count[6:3])
|
|
'd0 : r_cam1_WIDTH <= i_data[CAM_PIXEL-1:0];
|
|
'd1 : r_cam1_DEPTH <= i_data[CAM_LINE-1:0];
|
|
'd2 : r_cam1_T11 <= i_data;
|
|
'd3 : r_cam1_T12 <= i_data;
|
|
'd4 : r_cam1_T13 <= i_data;
|
|
'd5 : r_cam1_T21 <= i_data;
|
|
'd6 : r_cam1_T22 <= i_data;
|
|
'd7 : r_cam1_T23 <= i_data;
|
|
'd8 : r_cam1_T31 <= i_data;
|
|
'd9 : r_cam1_T32 <= i_data;
|
|
'd10 : r_cam1_T33 <= i_data;
|
|
default: ;
|
|
endcase
|
|
end
|
|
endcase
|
|
|
|
|
|
end
|
|
end
|
|
|
|
//------------------ combinational logic ----------------------
|
|
|
|
assign o_addr_rd = {r_count[6:3], (r_count[0])? i_cam1_mode : i_cam0_mode , r_count[0] };
|
|
|
|
// 1st camera
|
|
assign o_cam0_WIDTH = r_cam0_WIDTH;
|
|
assign o_cam0_DEPTH = r_cam0_DEPTH;
|
|
assign o_cam0_T11 = r_cam0_T11;
|
|
assign o_cam0_T12 = r_cam0_T12;
|
|
assign o_cam0_T13 = r_cam0_T13;
|
|
assign o_cam0_T21 = r_cam0_T21;
|
|
assign o_cam0_T22 = r_cam0_T22;
|
|
assign o_cam0_T23 = r_cam0_T23;
|
|
assign o_cam0_T31 = r_cam0_T31;
|
|
assign o_cam0_T32 = r_cam0_T32;
|
|
assign o_cam0_T33 = r_cam0_T33;
|
|
|
|
// 2nd camera
|
|
assign o_cam1_WIDTH = r_cam1_WIDTH;
|
|
assign o_cam1_DEPTH = r_cam1_DEPTH;
|
|
assign o_cam1_T11 = r_cam1_T11;
|
|
assign o_cam1_T12 = r_cam1_T12;
|
|
assign o_cam1_T13 = r_cam1_T13;
|
|
assign o_cam1_T21 = r_cam1_T21;
|
|
assign o_cam1_T22 = r_cam1_T22;
|
|
assign o_cam1_T23 = r_cam1_T23;
|
|
assign o_cam1_T31 = r_cam1_T31;
|
|
assign o_cam1_T32 = r_cam1_T32;
|
|
assign o_cam1_T33 = r_cam1_T33;
|
|
|
|
|
|
endmodule |