⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cap_code1.htm

📁 基于FPGA的嵌入式机器人视觉识别系统模块源代码
💻 HTM
📖 第 1 页 / 共 2 页
字号:
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) &amp;&amp; (retrieved_data_for_processor[7])) ||</FONT></B>
			((proc_addr[17:0] == DISPLAY_STATUS) &amp;&amp; (debug_state[3]))
			);
			
assign #1 d_path6 = 
			(((proc_addr[17:0] == BLOBX1) &amp;&amp; (blob1_x_out[6])) ||
			((proc_addr[17:0] == BLOBX2) &amp;&amp; (blob1_x_out[14])) ||
			((proc_addr[17:0] == BLOBX3) &amp;&amp; (blob1_x_out[22])) ||
			((proc_addr[17:0] == BLOBY1) &amp;&amp; (blob1_y_out[6])) ||
			((proc_addr[17:0] == BLOBY2) &amp;&amp; (blob1_y_out[14])) ||
			((proc_addr[17:0] == BLOBY3) &amp;&amp; (blob1_y_out[22])) ||
			((proc_addr[17:0] == RANGE_DATA) &amp;&amp; (range_data_out[6])) ||
<B><FONT color=blue>			((proc_addr[17:0] == PROC_READ_DATA) &amp;&amp; (retrieved_data_for_processor[14])) ||
			((proc_addr[17:0] == PROC2_READ_DATA) &amp;&amp; (retrieved_data_for_processor[6])) ||</FONT></B>
			((proc_addr[17:0] == DISPLAY_STATUS) &amp;&amp; (debug_state[2]))
			);
			
assign #1 d_path5 = 
			(((proc_addr[17:0] == BLOBX1) &amp;&amp; (blob1_x_out[5])) ||
			((proc_addr[17:0] == BLOBX2) &amp;&amp; (blob1_x_out[13])) ||
			((proc_addr[17:0] == BLOBX3) &amp;&amp; (blob1_x_out[21])) ||
			((proc_addr[17:0] == BLOBY1) &amp;&amp; (blob1_y_out[5])) ||
			((proc_addr[17:0] == BLOBY2) &amp;&amp; (blob1_y_out[13])) ||
			((proc_addr[17:0] == BLOBY3) &amp;&amp; (blob1_y_out[21])) ||
			((proc_addr[17:0] == RANGE_DATA) &amp;&amp; (range_data_out[5])) ||
<B><FONT color=blue>			((proc_addr[17:0] == PROC_READ_DATA) &amp;&amp; (retrieved_data_for_processor[13])) ||
			((proc_addr[17:0] == PROC2_READ_DATA) &amp;&amp; (retrieved_data_for_processor[5])) ||</FONT></B>
			((proc_addr[17:0] == DISPLAY_STATUS) &amp;&amp; (debug_state[1]))
			);
			
assign #1 d_path4 = 
			(((proc_addr[17:0] == BLOBX1) &amp;&amp; (blob1_x_out[4])) ||
			((proc_addr[17:0] == BLOBX2) &amp;&amp; (blob1_x_out[12])) ||
			((proc_addr[17:0] == BLOBX3) &amp;&amp; (blob1_x_out[20])) ||
			((proc_addr[17:0] == BLOBY1) &amp;&amp; (blob1_y_out[4])) ||
			((proc_addr[17:0] == BLOBY2) &amp;&amp; (blob1_y_out[12])) ||
			((proc_addr[17:0] == BLOBY3) &amp;&amp; (blob1_y_out[20])) ||
			((proc_addr[17:0] == RANGE_DATA) &amp;&amp; (range_data_out[4])) ||
<B><FONT color=blue>			((proc_addr[17:0] == PROC_READ_DATA) &amp;&amp; (retrieved_data_for_processor[12])) ||
			((proc_addr[17:0] == PROC2_READ_DATA) &amp;&amp; (retrieved_data_for_processor[4])) ||</FONT></B>
			((proc_addr[17:0] == DISPLAY_STATUS) &amp;&amp; (debug_state[0]))
			);
			
assign #1 d_path3 = 
			(((proc_addr[17:0] == BLOBX1) &amp;&amp; (blob1_x_out[3])) ||
			((proc_addr[17:0] == BLOBX2) &amp;&amp; (blob1_x_out[11])) ||
			((proc_addr[17:0] == BLOBX3) &amp;&amp; (blob1_x_out[19])) ||
			((proc_addr[17:0] == BLOBY1) &amp;&amp; (blob1_y_out[3])) ||
			((proc_addr[17:0] == BLOBY2) &amp;&amp; (blob1_y_out[11])) ||
			((proc_addr[17:0] == BLOBY3) &amp;&amp; (blob1_y_out[19])) ||
			((proc_addr[17:0] == RANGE_DATA) &amp;&amp; (range_data_out[3])) ||
<B><FONT color=blue>			((proc_addr[17:0] == PROC_READ_DATA) &amp;&amp; (retrieved_data_for_processor[11])) ||
			((proc_addr[17:0] == PROC2_READ_DATA) &amp;&amp; (retrieved_data_for_processor[3])) ||</FONT></B>
			((proc_addr[17:0] == DISPLAY_STATUS) &amp;&amp; (fifo_error))
			);
			
assign #1 d_path2 = 
			(((proc_addr[17:0] == BLOBX1) &amp;&amp; (blob1_x_out[2])) ||
			((proc_addr[17:0] == BLOBX2) &amp;&amp; (blob1_x_out[10])) ||
			((proc_addr[17:0] == BLOBX3) &amp;&amp; (blob1_x_out[18])) ||
			((proc_addr[17:0] == BLOBY1) &amp;&amp; (blob1_y_out[2])) ||
			((proc_addr[17:0] == BLOBY2) &amp;&amp; (blob1_y_out[10])) ||
			((proc_addr[17:0] == BLOBY3) &amp;&amp; (blob1_y_out[18])) ||
			((proc_addr[17:0] == RANGE_DATA) &amp;&amp; (range_data_out[2])) ||
<B><FONT color=blue>			((proc_addr[17:0] == PROC_READ_DATA) &amp;&amp; (retrieved_data_for_processor[10])) ||
			((proc_addr[17:0] == PROC2_READ_DATA) &amp;&amp; (retrieved_data_for_processor[2])) ||</FONT></B>
			((proc_addr[17:0] == DISPLAY_STATUS) &amp;&amp; (disp_ping_pong))
			);
			
assign #1 d_path1 = 
			(((proc_addr[17:0] == BLOBX1) &amp;&amp; (blob1_x_out[1])) ||
			((proc_addr[17:0] == BLOBX2) &amp;&amp; (blob1_x_out[9])) ||
			((proc_addr[17:0] == BLOBX3) &amp;&amp; (blob1_x_out[17])) ||
			((proc_addr[17:0] == BLOBY1) &amp;&amp; (blob1_y_out[1])) ||
			((proc_addr[17:0] == BLOBY2) &amp;&amp; (blob1_y_out[9])) ||
			((proc_addr[17:0] == BLOBY3) &amp;&amp; (blob1_y_out[17])) ||
			((proc_addr[17:0] == RANGE_DATA) &amp;&amp; (range_data_out[1])) ||
<B><FONT color=blue>			((proc_addr[17:0] == PROC_READ_DATA) &amp;&amp; (retrieved_data_for_processor[9])) ||
			((proc_addr[17:0] == PROC2_READ_DATA) &amp;&amp; (retrieved_data_for_processor[1])) ||</FONT></B>
			((proc_addr[17:0] == DISPLAY_STATUS) &amp;&amp; (enable_disp_irq))
			);
			
assign #1 d_path0 = 
			(((proc_addr[17:0] == BLOBX1) &amp;&amp; (blob1_x_out[0])) ||
			((proc_addr[17:0] == BLOBX2) &amp;&amp; (blob1_x_out[8])) ||
			((proc_addr[17:0] == BLOBX3) &amp;&amp; (blob1_x_out[16])) ||
			((proc_addr[17:0] == BLOBY1) &amp;&amp; (blob1_y_out[0])) ||
			((proc_addr[17:0] == BLOBY2) &amp;&amp; (blob1_y_out[8])) ||
			((proc_addr[17:0] == BLOBY3) &amp;&amp; (blob1_y_out[16])) ||
			((proc_addr[17:0] == RANGE_DATA) &amp;&amp; (range_data_out[0])) ||
<B><FONT color=blue>			((proc_addr[17:0] == PROC_READ_DATA) &amp;&amp; (retrieved_data_for_processor[8])) ||
			((proc_addr[17:0] == PROC2_READ_DATA) &amp;&amp; (retrieved_data_for_processor[0])) ||</FONT></B>
			((proc_addr[17:0] == DISPLAY_STATUS) &amp;&amp; (vid_cap_done))
			);
			
assign #1	proc_data[7:0] = 
			((~proc_cs) &amp;&amp; (proc_rw) &amp;&amp;
			((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 + -