Merge pull request #1 from Clockfix/demo_version

Demo version
This commit is contained in:
Imants Pulkstenis
2019-10-20 13:57:48 +03:00
committed by GitHub
5 changed files with 465 additions and 29 deletions
+2 -2
View File
@@ -19,8 +19,8 @@ set_property PACKAGE_PIN V16 [get_ports {sw[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {sw[1]}] set_property IOSTANDARD LVCMOS33 [get_ports {sw[1]}]
set_property PACKAGE_PIN W16 [get_ports {sw[2]}] set_property PACKAGE_PIN W16 [get_ports {sw[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {sw[2]}] set_property IOSTANDARD LVCMOS33 [get_ports {sw[2]}]
#set_property PACKAGE_PIN W17 [get_ports {sw[3]}] set_property PACKAGE_PIN W17 [get_ports {sw[3]}]
# set_property IOSTANDARD LVCMOS33 [get_ports {sw[3]}] set_property IOSTANDARD LVCMOS33 [get_ports {sw[3]}]
#set_property PACKAGE_PIN W15 [get_ports {sw[4]}] #set_property PACKAGE_PIN W15 [get_ports {sw[4]}]
# set_property IOSTANDARD LVCMOS33 [get_ports {sw[4]}] # set_property IOSTANDARD LVCMOS33 [get_ports {sw[4]}]
#set_property PACKAGE_PIN V15 [get_ports {sw[5]}] #set_property PACKAGE_PIN V15 [get_ports {sw[5]}]
+3 -2
View File
@@ -45,8 +45,6 @@ mode = str2num(answer{4});
mode = min(mode, 3); mode = min(mode, 3);
mode = max(mode, 0); mode = max(mode, 0);
% %
step = 0.001; % step for lookuptable file generator loop
%
%% reading image %% reading image
% f = imread('star640x480.jpg'); % f = imread('star640x480.jpg');
f = imread('overlay.jpg'); f = imread('overlay.jpg');
@@ -186,6 +184,8 @@ text( 0 , 0 , [ X,' ', Y] );
end end
end end
% % Displaying transform matrix in Verilog code style, for easy copying and pasting % % Displaying transform matrix in Verilog code style, for easy copying and pasting
%
% step = 0.001; % step for lookuptable file generator loop
% disp('Copy those constants in Verilog code'), % disp('Copy those constants in Verilog code'),
% X = ['TRA_IMG_WIDTH = ''d', num2str(width),',']; % X = ['TRA_IMG_WIDTH = ''d', num2str(width),','];
% disp(X), % disp(X),
@@ -270,6 +270,7 @@ text( 0 , 0 , [ X,' ', Y] );
param = ufi(a+1,4,0); param = ufi(a+1,4,0);
temp = ufi(bin2dec([param.bin , sw.bin , cam.bin]),7,0); temp = ufi(bin2dec([param.bin , sw.bin , cam.bin]),7,0);
X = ['P', temp.hex, Thex(a,1:7)]; X = ['P', temp.hex, Thex(a,1:7)];
% X = ['h',Thex(a,1:7)]; % print just values of matrix
disp(X), disp(X),
end end
end end
+405 -23
View File
@@ -9,17 +9,102 @@ module default_reg_writer #(parameter
CAM_LINE = 9, CAM_LINE = 9,
CAM_PIXEL = 10, CAM_PIXEL = 10,
TRA_IMG_WIDTH = 'd320, // default settings for mode 0 camera 0
TRA_IMG_DEPTH = 'd240, TRA_IMG_WIDTH_0_0 = 'd320,
T11 = 25'sb0_000000000000_100000000000, TRA_IMG_DEPTH_0_0 = 'd240,
T12 = 25'sb0_000000000000_000000000000, T11_0_0 = 25'sb0_000000000000_100000000000,
T13 = 25'sb0_000000000000_000000000000, T12_0_0 = 25'sb0_000000000000_000000000000,
T21 = 25'sb0_000000000000_000000000000, T13_0_0 = 25'sb0_000000000000_000000000000,
T22 = 25'sb0_000000000000_100000000000, T21_0_0 = 25'sb0_000000000000_000000000000,
T23 = 25'sb0_000000000000_000000000000, T22_0_0 = 25'sb0_000000000000_100000000000,
T31 = 25'sb0_000000000000_000000000000, T23_0_0 = 25'sb0_000000000000_000000000000,
T32 = 25'sb0_000000000000_000000000000, T31_0_0 = 25'sb0_000000000000_000000000000,
T33 = 25'sb0_000000000001_000000000000 T32_0_0 = 25'sb0_000000000000_000000000000,
T33_0_0 = 25'sb0_000000000001_000000000000,
// default settings for mode 0 camera 1
TRA_IMG_WIDTH_0_1 = 'd320,
TRA_IMG_DEPTH_0_1 = 'd240,
T11_0_1 = 25'sb0_000000000000_100000000000,
T12_0_1 = 25'sb0_000000000000_000000000000,
T13_0_1 = 25'sb0_000000000000_000000000000,
T21_0_1 = 25'sb0_000000000000_000000000000,
T22_0_1 = 25'sb0_000000000000_100000000000,
T23_0_1 = 25'sb0_000000000000_000000000000,
T31_0_1 = 25'sb0_000000000000_000000000000,
T32_0_1 = 25'sb0_000000000000_000000000000,
T33_0_1 = 25'sb0_000000000001_000000000000,
// default settings for mode 1 camera 0
TRA_IMG_WIDTH_1_0 = 'd320,
TRA_IMG_DEPTH_1_0 = 'd240,
T11_1_0 = 25'sh0000000,
T12_1_0 = 25'sh1fffa04,
T13_1_0 = 25'sh0000000,
T21_1_0 = 25'sh0000aa8,
T22_1_0 = 25'sh0000000,
T23_1_0 = 25'sh0000000,
T31_1_0 = 25'sh0000000,
T32_1_0 = 25'sh00ef000,
T33_1_0 = 25'sh0001000,
// default settings for mode 1 camera 1
TRA_IMG_WIDTH_1_1 = 'd320,
TRA_IMG_DEPTH_1_1 = 'd240,
T11_1_1 = 25'sh0000000,
T12_1_1 = 25'sh1fffa04,
T13_1_1 = 25'sh0000000,
T21_1_1 = 25'sh0000aa8,
T22_1_1 = 25'sh0000000,
T23_1_1 = 25'sh0000000,
T31_1_1 = 25'sh0000000,
T32_1_1 = 25'sh00ef000,
T33_1_1 = 25'sh0001000,
// default settings for mode 2 camera 0
TRA_IMG_WIDTH_2_0 = 'd320,
TRA_IMG_DEPTH_2_0 = 'd240,
T11_2_0 = 25'sh1fff803,
T12_2_0 = 25'sh0000000,
T13_2_0 = 25'sh0000000,
T21_2_0 = 25'sh0000000,
T22_2_0 = 25'sh1fff804,
T23_2_0 = 25'sh0000000,
T31_2_0 = 25'sh013f000,
T32_2_0 = 25'sh00ef000,
T33_2_0 = 25'sh0001000,
// default settings for mode 2 camera 1
TRA_IMG_WIDTH_2_1 = 'd320,
TRA_IMG_DEPTH_2_1 = 'd240,
T11_2_1 = 25'sh1fff803,
T12_2_1 = 25'sh0000000,
T13_2_1 = 25'sh0000000,
T21_2_1 = 25'sh0000000,
T22_2_1 = 25'sh1fff804,
T23_2_1 = 25'sh0000000,
T31_2_1 = 25'sh013f000,
T32_2_1 = 25'sh00ef000,
T33_2_1 = 25'sh0001000,
// default settings for mode 3 camera 0
TRA_IMG_WIDTH_3_0 = 'd320,
TRA_IMG_DEPTH_3_0 = 'd240,
T11_3_0 = 25'sh0000000,
T12_3_0 = 25'sh00005fc,
T13_3_0 = 25'sh0000000,
T21_3_0 = 25'sh1fff558,
T22_3_0 = 25'sh0000000,
T23_3_0 = 25'sh0000000,
T31_3_0 = 25'sh013f000,
T32_3_0 = 25'sh0000000,
T33_3_0 = 25'sh0001000,
// default settings for mode 3 camera 1
TRA_IMG_WIDTH_3_1 = 'd320,
TRA_IMG_DEPTH_3_1 = 'd240,
T11_3_1 = 25'sh0000000,
T12_3_1 = 25'sh00005fc,
T13_3_1 = 25'sh0000000,
T21_3_1 = 25'sh1fff558,
T22_3_1 = 25'sh0000000,
T23_3_1 = 25'sh0000000,
T31_3_1 = 25'sh013f000,
T32_3_1 = 25'sh0000000,
T33_3_1 = 25'sh0001000
)( )(
input clk, input clk,
input i_enable, input i_enable,
@@ -56,18 +141,315 @@ if(i_enable)begin
end end
end end
case (r_count[6:3]) case (r_count[6:3]) // select parameter
'd0 : r_data[CAM_PIXEL-1:0] <= TRA_IMG_WIDTH; 'd0 : begin
'd1 : r_data[CAM_LINE-1:0] <= TRA_IMG_DEPTH; case (r_count[2:1]) // select mode
'd2 : r_data <= T11; 'd0 : begin
'd3 : r_data <= T12; case (r_count[0]) // select camera
'd4 : r_data <= T13; 'd0 : r_data[CAM_PIXEL-1:0] <= TRA_IMG_WIDTH_0_0;
'd5 : r_data <= T21; 'd1 : r_data[CAM_PIXEL-1:0] <= TRA_IMG_WIDTH_0_1;
'd6 : r_data <= T22; endcase
'd7 : r_data <= T23; end
'd8 : r_data <= T31; 'd1 : begin
'd9 : r_data <= T32; case (r_count[0]) // select camera
'd10 : r_data <= T33; 'd0 : r_data[CAM_PIXEL-1:0] <= TRA_IMG_WIDTH_1_0;
'd1 : r_data[CAM_PIXEL-1:0] <= TRA_IMG_WIDTH_1_1;
endcase
end
'd2 : begin
case (r_count[0]) // select camera
'd0 : r_data[CAM_PIXEL-1:0] <= TRA_IMG_WIDTH_2_0;
'd1 : r_data[CAM_PIXEL-1:0] <= TRA_IMG_WIDTH_2_1;
endcase
end
'd3 : begin
case (r_count[0]) // select camera
'd0 : r_data[CAM_PIXEL-1:0] <= TRA_IMG_WIDTH_3_0;
'd1 : r_data[CAM_PIXEL-1:0] <= TRA_IMG_WIDTH_3_1;
endcase
end
endcase
end
'd1 : begin
case (r_count[2:1]) // select mode
'd0 : begin
case (r_count[0]) // select camera
'd0 : r_data[CAM_LINE-1:0] <= TRA_IMG_DEPTH_0_0;
'd1 : r_data[CAM_LINE-1:0] <= TRA_IMG_DEPTH_0_1;
endcase
end
'd1 : begin
case (r_count[0]) // select camera
'd0 : r_data[CAM_LINE-1:0] <= TRA_IMG_DEPTH_1_0;
'd1 : r_data[CAM_LINE-1:0] <= TRA_IMG_DEPTH_1_1;
endcase
end
'd2 : begin
case (r_count[0]) // select camera
'd0 : r_data[CAM_LINE-1:0] <= TRA_IMG_DEPTH_2_0;
'd1 : r_data[CAM_LINE-1:0] <= TRA_IMG_DEPTH_2_1;
endcase
end
'd3 : begin
case (r_count[0]) // select camera
'd0 : r_data[CAM_LINE-1:0] <= TRA_IMG_DEPTH_3_0;
'd1 : r_data[CAM_LINE-1:0] <= TRA_IMG_DEPTH_3_1;
endcase
end
endcase
end
'd2 : begin
case (r_count[2:1]) // select mode
'd0 : begin
case (r_count[0]) // select camera
'd0 : r_data <= T11_0_0;
'd1 : r_data <= T11_0_1;
endcase
end
'd1 : begin
case (r_count[0]) // select camera
'd0 : r_data <= T11_1_0;
'd1 : r_data <= T11_1_1;
endcase
end
'd2 : begin
case (r_count[0]) // select camera
'd0 : r_data <= T11_2_0;
'd1 : r_data <= T11_2_1;
endcase
end
'd3 : begin
case (r_count[0]) // select camera
'd0 : r_data <= T11_3_0;
'd1 : r_data <= T11_3_1;
endcase
end
endcase
end
'd3 : begin
case (r_count[2:1]) // select mode
'd0 : begin
case (r_count[0]) // select camera
'd0 : r_data <= T12_0_0;
'd1 : r_data <= T12_0_1;
endcase
end
'd1 : begin
case (r_count[0]) // select camera
'd0 : r_data <= T12_1_0;
'd1 : r_data <= T12_1_1;
endcase
end
'd2 : begin
case (r_count[0]) // select camera
'd0 : r_data <= T12_2_0;
'd1 : r_data <= T12_2_1;
endcase
end
'd3 : begin
case (r_count[0]) // select camera
'd0 : r_data <= T12_3_0;
'd1 : r_data <= T12_3_1;
endcase
end
endcase
end
'd4 : begin
case (r_count[2:1]) // select mode
'd0 : begin
case (r_count[0]) // select camera
'd0 : r_data <= T13_0_0;
'd1 : r_data <= T13_0_1;
endcase
end
'd1 : begin
case (r_count[0]) // select camera
'd0 : r_data <= T13_1_0;
'd1 : r_data <= T13_1_1;
endcase
end
'd2 : begin
case (r_count[0]) // select camera
'd0 : r_data <= T13_2_0;
'd1 : r_data <= T13_2_1;
endcase
end
'd3 : begin
case (r_count[0]) // select camera
'd0 : r_data <= T13_3_0;
'd1 : r_data <= T13_3_1;
endcase
end
endcase
end
'd5 : begin
case (r_count[2:1]) // select mode
'd0 : begin
case (r_count[0]) // select camera
'd0 : r_data <= T21_0_0;
'd1 : r_data <= T21_0_1;
endcase
end
'd1 : begin
case (r_count[0]) // select camera
'd0 : r_data <= T21_1_0;
'd1 : r_data <= T21_1_1;
endcase
end
'd2 : begin
case (r_count[0]) // select camera
'd0 : r_data <= T21_2_0;
'd1 : r_data <= T21_2_1;
endcase
end
'd3 : begin
case (r_count[0]) // select camera
'd0 : r_data <= T21_3_0;
'd1 : r_data <= T21_3_1;
endcase
end
endcase
end
'd6 : begin
case (r_count[2:1]) // select mode
'd0 : begin
case (r_count[0]) // select camera
'd0 : r_data <= T22_0_0;
'd1 : r_data <= T22_0_1;
endcase
end
'd1 : begin
case (r_count[0]) // select camera
'd0 : r_data <= T22_1_0;
'd1 : r_data <= T22_1_1;
endcase
end
'd2 : begin
case (r_count[0]) // select camera
'd0 : r_data <= T22_2_0;
'd1 : r_data <= T22_2_1;
endcase
end
'd3 : begin
case (r_count[0]) // select camera
'd0 : r_data <= T22_3_0;
'd1 : r_data <= T22_3_1;
endcase
end
endcase
end
'd7 : begin
case (r_count[2:1]) // select mode
'd0 : begin
case (r_count[0]) // select camera
'd0 : r_data <= T23_0_0;
'd1 : r_data <= T23_0_1;
endcase
end
'd1 : begin
case (r_count[0]) // select camera
'd0 : r_data <= T23_1_0;
'd1 : r_data <= T23_1_1;
endcase
end
'd2 : begin
case (r_count[0]) // select camera
'd0 : r_data <= T23_2_0;
'd1 : r_data <= T23_2_1;
endcase
end
'd3 : begin
case (r_count[0]) // select camera
'd0 : r_data <= T23_3_0;
'd1 : r_data <= T23_3_1;
endcase
end
endcase
end
'd8 : begin
case (r_count[2:1]) // select mode
'd0 : begin
case (r_count[0]) // select camera
'd0 : r_data <= T31_0_0;
'd1 : r_data <= T31_0_1;
endcase
end
'd1 : begin
case (r_count[0]) // select camera
'd0 : r_data <= T31_1_0;
'd1 : r_data <= T31_1_1;
endcase
end
'd2 : begin
case (r_count[0]) // select camera
'd0 : r_data <= T31_2_0;
'd1 : r_data <= T31_2_1;
endcase
end
'd3 : begin
case (r_count[0]) // select camera
'd0 : r_data <= T31_3_0;
'd1 : r_data <= T31_3_1;
endcase
end
endcase
end
'd9 : begin
case (r_count[2:1]) // select mode
'd0 : begin
case (r_count[0]) // select camera
'd0 : r_data <= T32_0_0;
'd1 : r_data <= T32_0_1;
endcase
end
'd1 : begin
case (r_count[0]) // select camera
'd0 : r_data <= T32_1_0;
'd1 : r_data <= T32_1_1;
endcase
end
'd2 : begin
case (r_count[0]) // select camera
'd0 : r_data <= T32_2_0;
'd1 : r_data <= T32_2_1;
endcase
end
'd3 : begin
case (r_count[0]) // select camera
'd0 : r_data <= T32_3_0;
'd1 : r_data <= T32_3_1;
endcase
end
endcase
end
'd10 : begin
case (r_count[2:1]) // select mode
'd0 : begin
case (r_count[0]) // select camera
'd0 : r_data <= T33_0_0;
'd1 : r_data <= T33_0_1;
endcase
end
'd1 : begin
case (r_count[0]) // select camera
'd0 : r_data <= T33_1_0;
'd1 : r_data <= T33_1_1;
endcase
end
'd2 : begin
case (r_count[0]) // select camera
'd0 : r_data <= T33_2_0;
'd1 : r_data <= T33_2_1;
endcase
end
'd3 : begin
case (r_count[0]) // select camera
'd0 : r_data <= T33_3_0;
'd1 : r_data <= T33_3_1;
endcase
end
endcase
end
default: begin default: begin
r_configured <= 1; // default case just in case do nothing r_configured <= 1; // default case just in case do nothing
r_we <= 0; r_we <= 0;
+43
View File
@@ -0,0 +1,43 @@
////////////////////////////////////////////////////////////////////
//
// This module alow to baypass mechanical swiches to
// imag_procesor module or automaticly selects
// and changes operation and camera select mode
//
//////////////////////////////////////////////////////////////////
module mode_selector#( parameter
LIMIT = 2_0000_0000
//counter limit when it shoud change mode
// 100MHz -> period is 10ns
// 5s cycle period result in
// limit 5/(10*10^-9)= 500*10^6
)(
input clk,
// input i_enable,
input [8:0] i_im_p,
input autoselect,
output [8:0] o_im_p
);
reg [31:0] counter = 0;
reg [5:0] mode = 0; // camera modes
reg [2:0] color = 0; // color modes
reg [1:0] display = 0; // swiching between cameras
always@(posedge clk) begin
if (counter < LIMIT) begin
counter = counter + 1;
end
else begin
counter = 0;
mode = mode + 1;
color = color + 1;
display = display + 1;
end
end
assign o_im_p = autoselect ? {color[2:1],mode[5:2],1'b0,display}
: i_im_p;
endmodule
+12 -2
View File
@@ -68,7 +68,7 @@ module top #( parameter
output [3:0] vgaGreen, output [3:0] vgaGreen,
output Hsync, output Hsync,
output Vsync, output Vsync,
input [2:0] sw, input [3:0] sw,
input [8:0] im_p, input [8:0] im_p,
//UART //UART
input RsRx, // UART RX Data input RsRx, // UART RX Data
@@ -159,6 +159,8 @@ module top #( parameter
wire [24:0] w_data_com_reg ; wire [24:0] w_data_com_reg ;
wire w_we_com_reg ; wire w_we_com_reg ;
wire [8:0] w_im_p;
//-----sub modules-------------------------- //-----sub modules--------------------------
clock_enable_param #( clock_enable_param #(
.WAIT(WAIT), .WAIT(WAIT),
@@ -321,7 +323,7 @@ imag_procesor #(
.CAM_LINE(CAM_LINE), .CAM_LINE(CAM_LINE),
.CAM_PIXEL(CAM_PIXEL) .CAM_PIXEL(CAM_PIXEL)
) imag_procesor( ) imag_procesor(
.im_p(im_p), .im_p(w_im_p),
.clk(clk), .clk(clk),
.clk25(pixel_clk), .clk25(pixel_clk),
.clk50(clk50), .clk50(clk50),
@@ -379,6 +381,14 @@ debounce_switch debounce_switch_reset(
.o_switch(w_reset_default) .o_switch(w_reset_default)
); );
mode_selector mode_selector(
.clk(clk),
// .i_enable(w_enable),
.i_im_p(im_p),
.autoselect(sw[3]),
.o_im_p(w_im_p)
);
always@(posedge clk) begin always@(posedge clk) begin
if (~w_wea_bram) begin if (~w_wea_bram) begin