📄 cap_code1.htm
字号:
end
disp_driver my_disp_driver(
.proc_clock(sys_clock),
.force_reset(force_reset),
.disp_irq(enable_disp_irq),
.addr_index_count(disp_data_get_addr[17:0]),
.disp_hsync(disp_hsync),
.disp_vsync(disp_vsync),
.disp_enable(disp_enable),
.disp_clk(disp_clk),
.disp_data_get_strb(disp_data_get_strb)
);
//moved to bus output section below...
//
//assign #1 proc_data[7:0] = ((~proc_cs) && (proc_addr[17:0] == DISPLAY_STATUS)
// && (proc_rw)) ?
// {debug_state[3:0],fifo_error, disp_ping_pong, enable_disp_irq, blob_capture_done} :
// 8'bZZZZZZZZ;
//==============================================================
//
// Video Cap Interface
//
//==============================================================
always @(posedge sys_clock)
begin
if ((qual_data) && (proc_addr[17:0] == VIDEO1_RED_UPPER))
video1_red_upper[4:0] <= #1 proc_data[4:0];
if ((qual_data) && (proc_addr[17:0] == VIDEO1_RED_LOWER))
video1_red_lower[4:0] <= #1 proc_data[4:0];
if ((qual_data) && (proc_addr[17:0] == VIDEO1_GREEN_UPPER))
video1_green_upper[4:0] <= #1 proc_data[4:0];
if ((qual_data) && (proc_addr[17:0] == VIDEO1_GREEN_LOWER))
video1_green_lower[4:0] <= #1 proc_data[4:0];
if ((qual_data) && (proc_addr[17:0] == VIDEO1_BLUE_UPPER))
video1_blue_upper[4:0] <= #1 proc_data[4:0];
if ((qual_data) && (proc_addr[17:0] == VIDEO1_BLUE_LOWER))
video1_blue_lower[4:0] <= #1 proc_data[4:0];
if ((qual_data) && (proc_addr[17:0] == VIDEO_CAPTURE_MODE))
video_cap_mode <= #1 proc_data[0];
if ((qual_data) && (proc_addr[17:0] == RANGE_ADDR1))
range_read_address[7:0] <= #1 proc_data[7:0];
if ((qual_data) && (proc_addr[17:0] == RANGE_ADDR2))
range_read_address[8] <= #1 proc_data[0];
end
assign #1 data_valid = (
(video1_raw[14:10] <= video1_red_upper[4:0]) &&
(video1_raw[14:10] >= video1_red_lower[4:0]) &&
(video1_raw[9:5] <= video1_green_upper[4:0]) &&
(video1_raw[9:5] >= video1_green_lower[4:0]) &&
(video1_raw[4:0] <= video1_blue_upper[4:0]) &&
(video1_raw[4:0] >= video1_blue_lower[4:0]));
parameter LASER_RED_UPPER = 5'd31;
parameter LASER_RED_LOWER = 5'd26;
parameter LASER_GREEN_UPPER = 5'd27;
parameter LASER_GREEN_LOWER = 5'd25;
parameter LASER_BLUE_UPPER = 5'd24;
parameter LASER_BLUE_LOWER = 5'd24;
assign #1 laser_valid = (
(video1_raw[14:10] <= LASER_RED_UPPER) &&
(video1_raw[14:10] >= LASER_RED_LOWER) &&
(video1_raw[9:5] <= LASER_GREEN_UPPER) &&
(video1_raw[9:5] >= LASER_GREEN_LOWER) &&
(video1_raw[4:0] <= LASER_BLUE_UPPER) &&
(video1_raw[4:0] >= LASER_BLUE_LOWER));
video_capture my_vid_cap1(
.sys_clock(sys_clock),
.force_reset(force_reset || ((qual_data) && (proc_addr[17:0] == CLEAR_FIFO_ERROR))),
.begin_capture((qual_data) && (proc_addr[17:0] == BEGIN_CAP)),
.video1_addr(video1_addr[17:0]),
.video1_data_filtered(video1_data[14:0]),
.video1_store_strb(video1_store_strb),
.video1_llc(video1_llc),
.video1_hsync(video1_hsync),
.video1_vsync(video1_vsync),
.video1_raw(video1_raw[14:0]),
.blob1_x_out(blob1_x_out[23:0]),
.blob1_y_out(blob1_y_out[23:0]),
.blob_capture_done(blob_capture_done),
.data_valid(data_valid),
.debug_state(debug_state[3:0]),
.video_cap_mode(video_cap_mode),
.laser_valid(laser_valid),
.range_read_address(range_read_address[8:0]),
.range_data_out(range_data_out[7:0])
);
always @(posedge sys_clock)
if((qual_data) && (proc_addr[17:0] == BEGIN_CAP))
vid_cap_done <= #1 1'b0;
else if(blob_capture_done)
vid_cap_done <= #1 1'b1;
//==============================================================
//
// Processor Data Buss Output Section
//
//==============================================================
assign #1 d_path7 =
(((proc_addr[17:0] == BLOBX1) && (blob1_x_out[7])) ||
((proc_addr[17:0] == BLOBX2) && (blob1_x_out[15])) ||
((proc_addr[17:0] == BLOBX3) && (blob1_x_out[23])) ||
((proc_addr[17:0] == BLOBY1) && (blob1_y_out[7])) ||
((proc_addr[17:0] == BLOBY2) && (blob1_y_out[15])) ||
((proc_addr[17:0] == BLOBY3) && (blob1_y_out[23])) ||
((proc_addr[17:0] == RANGE_DATA) && (range_data_out[7])) ||
<B><FONT color=blue> ((proc_addr[17:0] == PROC2_READ_DATA) && (retrieved_data_for_processor[7])) ||</FONT></B>
((proc_addr[17:0] == DISPLAY_STATUS) && (debug_state[3]))
);
assign #1 d_path6 =
(((proc_addr[17:0] == BLOBX1) && (blob1_x_out[6])) ||
((proc_addr[17:0] == BLOBX2) && (blob1_x_out[14])) ||
((proc_addr[17:0] == BLOBX3) && (blob1_x_out[22])) ||
((proc_addr[17:0] == BLOBY1) && (blob1_y_out[6])) ||
((proc_addr[17:0] == BLOBY2) && (blob1_y_out[14])) ||
((proc_addr[17:0] == BLOBY3) && (blob1_y_out[22])) ||
((proc_addr[17:0] == RANGE_DATA) && (range_data_out[6])) ||
<B><FONT color=blue> ((proc_addr[17:0] == PROC_READ_DATA) && (retrieved_data_for_processor[14])) ||
((proc_addr[17:0] == PROC2_READ_DATA) && (retrieved_data_for_processor[6])) ||</FONT></B>
((proc_addr[17:0] == DISPLAY_STATUS) && (debug_state[2]))
);
assign #1 d_path5 =
(((proc_addr[17:0] == BLOBX1) && (blob1_x_out[5])) ||
((proc_addr[17:0] == BLOBX2) && (blob1_x_out[13])) ||
((proc_addr[17:0] == BLOBX3) && (blob1_x_out[21])) ||
((proc_addr[17:0] == BLOBY1) && (blob1_y_out[5])) ||
((proc_addr[17:0] == BLOBY2) && (blob1_y_out[13])) ||
((proc_addr[17:0] == BLOBY3) && (blob1_y_out[21])) ||
((proc_addr[17:0] == RANGE_DATA) && (range_data_out[5])) ||
<B><FONT color=blue> ((proc_addr[17:0] == PROC_READ_DATA) && (retrieved_data_for_processor[13])) ||
((proc_addr[17:0] == PROC2_READ_DATA) && (retrieved_data_for_processor[5])) ||</FONT></B>
((proc_addr[17:0] == DISPLAY_STATUS) && (debug_state[1]))
);
assign #1 d_path4 =
(((proc_addr[17:0] == BLOBX1) && (blob1_x_out[4])) ||
((proc_addr[17:0] == BLOBX2) && (blob1_x_out[12])) ||
((proc_addr[17:0] == BLOBX3) && (blob1_x_out[20])) ||
((proc_addr[17:0] == BLOBY1) && (blob1_y_out[4])) ||
((proc_addr[17:0] == BLOBY2) && (blob1_y_out[12])) ||
((proc_addr[17:0] == BLOBY3) && (blob1_y_out[20])) ||
((proc_addr[17:0] == RANGE_DATA) && (range_data_out[4])) ||
<B><FONT color=blue> ((proc_addr[17:0] == PROC_READ_DATA) && (retrieved_data_for_processor[12])) ||
((proc_addr[17:0] == PROC2_READ_DATA) && (retrieved_data_for_processor[4])) ||</FONT></B>
((proc_addr[17:0] == DISPLAY_STATUS) && (debug_state[0]))
);
assign #1 d_path3 =
(((proc_addr[17:0] == BLOBX1) && (blob1_x_out[3])) ||
((proc_addr[17:0] == BLOBX2) && (blob1_x_out[11])) ||
((proc_addr[17:0] == BLOBX3) && (blob1_x_out[19])) ||
((proc_addr[17:0] == BLOBY1) && (blob1_y_out[3])) ||
((proc_addr[17:0] == BLOBY2) && (blob1_y_out[11])) ||
((proc_addr[17:0] == BLOBY3) && (blob1_y_out[19])) ||
((proc_addr[17:0] == RANGE_DATA) && (range_data_out[3])) ||
<B><FONT color=blue> ((proc_addr[17:0] == PROC_READ_DATA) && (retrieved_data_for_processor[11])) ||
((proc_addr[17:0] == PROC2_READ_DATA) && (retrieved_data_for_processor[3])) ||</FONT></B>
((proc_addr[17:0] == DISPLAY_STATUS) && (fifo_error))
);
assign #1 d_path2 =
(((proc_addr[17:0] == BLOBX1) && (blob1_x_out[2])) ||
((proc_addr[17:0] == BLOBX2) && (blob1_x_out[10])) ||
((proc_addr[17:0] == BLOBX3) && (blob1_x_out[18])) ||
((proc_addr[17:0] == BLOBY1) && (blob1_y_out[2])) ||
((proc_addr[17:0] == BLOBY2) && (blob1_y_out[10])) ||
((proc_addr[17:0] == BLOBY3) && (blob1_y_out[18])) ||
((proc_addr[17:0] == RANGE_DATA) && (range_data_out[2])) ||
<B><FONT color=blue> ((proc_addr[17:0] == PROC_READ_DATA) && (retrieved_data_for_processor[10])) ||
((proc_addr[17:0] == PROC2_READ_DATA) && (retrieved_data_for_processor[2])) ||</FONT></B>
((proc_addr[17:0] == DISPLAY_STATUS) && (disp_ping_pong))
);
assign #1 d_path1 =
(((proc_addr[17:0] == BLOBX1) && (blob1_x_out[1])) ||
((proc_addr[17:0] == BLOBX2) && (blob1_x_out[9])) ||
((proc_addr[17:0] == BLOBX3) && (blob1_x_out[17])) ||
((proc_addr[17:0] == BLOBY1) && (blob1_y_out[1])) ||
((proc_addr[17:0] == BLOBY2) && (blob1_y_out[9])) ||
((proc_addr[17:0] == BLOBY3) && (blob1_y_out[17])) ||
((proc_addr[17:0] == RANGE_DATA) && (range_data_out[1])) ||
<B><FONT color=blue> ((proc_addr[17:0] == PROC_READ_DATA) && (retrieved_data_for_processor[9])) ||
((proc_addr[17:0] == PROC2_READ_DATA) && (retrieved_data_for_processor[1])) ||</FONT></B>
((proc_addr[17:0] == DISPLAY_STATUS) && (enable_disp_irq))
);
assign #1 d_path0 =
(((proc_addr[17:0] == BLOBX1) && (blob1_x_out[0])) ||
((proc_addr[17:0] == BLOBX2) && (blob1_x_out[8])) ||
((proc_addr[17:0] == BLOBX3) && (blob1_x_out[16])) ||
((proc_addr[17:0] == BLOBY1) && (blob1_y_out[0])) ||
((proc_addr[17:0] == BLOBY2) && (blob1_y_out[8])) ||
((proc_addr[17:0] == BLOBY3) && (blob1_y_out[16])) ||
((proc_addr[17:0] == RANGE_DATA) && (range_data_out[0])) ||
<B><FONT color=blue> ((proc_addr[17:0] == PROC_READ_DATA) && (retrieved_data_for_processor[8])) ||
((proc_addr[17:0] == PROC2_READ_DATA) && (retrieved_data_for_processor[0])) ||</FONT></B>
((proc_addr[17:0] == DISPLAY_STATUS) && (vid_cap_done))
);
assign #1 proc_data[7:0] =
((~proc_cs) && (proc_rw) &&
((proc_addr[17:0] == DISPLAY_STATUS) ||
(proc_addr[17:0] == BLOBX1) ||
(proc_addr[17:0] == BLOBX2) ||
(proc_addr[17:0] == BLOBX3) ||
(proc_addr[17:0] == BLOBY1) ||
(proc_addr[17:0] == BLOBY2) ||
(proc_addr[17:0] == BLOBY3) ||
<B><FONT color=blue> (proc_addr[17:0] == PROC_READ_DATA) ||
(proc_addr[17:0] == PROC2_READ_DATA) ||</FONT></B>
(proc_addr[17:0] == RANGE_DATA))) ?
{d_path7,d_path6,d_path5,d_path4,d_path3,d_path2,d_path1,d_path0} :
8'bZZZZZZZZ;
endmodule
</PRE></FONT></TR></TBODY></TABLE>
<P>
<CENTER>
<H2><A
href="http://www.seattlerobotics.org/encoder/200601/article3/color_vis.htm#cap_code"
target=main>Click here to return to article</CENTER></A>
<P></H2></P></H2></BASEFONT></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -