打三拍上下边沿检测代码段

module verilog_lesson;

/*	reg trigger_r1, trigger_r2, trigger_r3;
	//wire pos_tri;
	//wire neg_tri;

	always @(posedge clk or posedge rst_n) begin
		if (rst_n) begin
			// reset
			trigger_r1 <= 1`b0;
			trigger_r2 <= 1`b0;
			trigger_r3 <= 1`b0;
		end
		else begin
			trigger_r1 <= trigger;
			trigger_r2 <= trigger_r1;
			trigger_r3 <= trigger_r2;
			
		end
	end

	assign pos_tri = trigger_r2 & ~trigger_r3;
	assign neg_tri = ~trigger_r2 & trigger_r3;
*/
	reg trigger;
	// wire pos_tri;
	// wire neg_tri;
	reg clk;
	reg rst_n;
	wire pos_tri;
	wire neg_tri;

	trigg 	trigg_m0(
		.clk(clk),
		.rst_n(rst_n),
		.trigger(trigger),
		.pos_tri(pos_tri),
		.neg_tri(neg_tri)
		);

	localparam	STEP = 40;

	always #(STEP/2) clk = ~clk;

	initial	begin
		rst_n = 0;
		trigger = 0;
		clk = 0;
		#(STEP * 2) rst_n = 1;	
		#(STEP * 4) trigger = 1;	
		#(STEP * 8) trigger = 0;	
		#(STEP * 12) trigger = 1;	
		#(STEP * 16) trigger = 0;	
		$finish;
	end


endmodule


/*对于TRIGG来说,INPUT和OUTPUT仅仅是他的输入和输出,并不需要再定义是REG或WIRE*/
module trigg
(
	input clk,
	input rst_n,
	input trigger,
	output pos_tri,
	output neg_tri
);
	reg trigger_r1, trigger_r2, trigger_r3;
	//wire pos_tri;
	//wire neg_tri;

	always @(posedge clk or negedge rst_n) begin
		if (! rst_n) begin
			// reset
			trigger_r1 <= 0;
			trigger_r2 <= 0;
			trigger_r3 <= 0;
		end
		else begin
			trigger_r1 <= trigger;
			trigger_r2 <= trigger_r1;
			trigger_r3 <= trigger_r2;
			
		end
	end

assign pos_tri = trigger_r2 & ~trigger_r3;
assign neg_tri = ~trigger_r2 & trigger_r3;

endmodule





  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个比较复杂的图像处理问题,需要使用一些图像处理库来实现。下面是一个基本思路: 1. 使用OpenCV库读取图片并转换为灰度图像。 2. 使用Canny边缘检测算法检测黑线的边缘,并将其转换为二值图像。 3. 使用霍夫变换检测直线,得到黑线的中心线。 4. 计算中心线在视野中央的偏移量,决定偏向哪一侧。 下面是一个基于OpenCV库的Python代码实现: ```python import cv2 import numpy as np # 读取图片并转换为灰度图像 img = cv2.imread("example.jpg") gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 使用Canny算法检测边缘 edges = cv2.Canny(gray, 50, 150, apertureSize=3) # 使用霍夫变换检测直线 lines = cv2.HoughLines(edges, 1, np.pi/180, 150) # 计算中心线的位置和偏移量 if lines is not None: for line in lines: rho, theta = line[0] a = np.cos(theta) b = np.sin(theta) x0 = a * rho y0 = b * rho x1 = int(x0 + 1000 * (-b)) y1 = int(y0 + 1000 * (a)) x2 = int(x0 - 1000 * (-b)) y2 = int(y0 - 1000 * (a)) cv2.line(img, (x1, y1), (x2, y2), (0, 0, 255), 2) center_x = lines[0][0][0] # 假设只有一条中心线 center_y = img.shape[0] / 2 offset_x = center_x - img.shape[1] / 2 offset_y = center_y - img.shape[0] / 2 # 判断偏移方向和大小 if offset_x > 0: print("偏向右边,偏移量为:", offset_x) elif offset_x < 0: print("偏向左边,偏移量为:", -offset_x) else: print("不偏左右") if offset_y > 0: print("偏向下方,偏移量为:", offset_y) elif offset_y < 0: print("偏向上方,偏移量为:", -offset_y) else: print("不偏上下") cv2.imshow("image", img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 需要注意的是,这个代码只适用于图片中只有一条黑线的情况。如果存在多条黑线,则需要对结果进行进一步处理,比如计算多条线的中心线或者选择最长的一条线作为中心线。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值