数字IC手撕代码(九)

问题:枕头检测,frame_head来脉冲的同时din会来数据,连续三次数据都是8‘h23的话就输出一个脉冲。
比较懵的点是(frame_head)是一个单bit的标志脉冲(标志数据开始有效)?还是类似于数据的有效信号?

假定为类似数据的有效信号。
这个题目让我来做的话,我先会这样写(不考虑资源消耗)

module frame(input clk,input rst_n,input frame_head,input [7:0] din,output detect
);reg [23:0] temp_data;always @ (posedge clk or negedge rst_n) beginif(!rst_n) begintemp_data <= 24'd0;endelse if(frame_head) begintemp_data <= {temp_data[15:0],din};end
endassign detect = (temp_data[23:0]==25'h232323) ? 1'b1 : 1'b0;endmodule

在这里插入图片描述
这个的话,就是有个问题,会导致如果连续是4个有效的8’h23的话,就会产生2个脉冲的detect信号。所以我觉得应该是这样的,检测到3个有效8’h23之后,不会在之前的基础上检测3个有效的8’h23.这样的话,代码应该是下面这样。

module frame(input clk,input rst_n,input frame_head,input [7:0] din,output reg detect
);reg [1:0] cnt;
//reg [7:0] data_temp;
always @ (posedge clk or negedge rst_n) beginif(!rst_n) begincnt <= 2'd0;endelse if(frame_head && (din==8'h23)) begincnt <= cnt + 1'b1;endelse if(frame_head && (din!=8'h23)) begincnt <= 2'd0;endelse if(cnt==2'd3) begincnt <= 2'd0;end
endalways @ (posedge clk or negedge rst_n) beginif(!rst_n) begindetect <= 1'b0;endelse if(cnt==2'd3) begindetect <= 1'b1;endelse begindetect <= 1'b0;end
endendmodule

在这里插入图片描述
在这里插入图片描述
接下来用状态机实现下这个功能

module frame(input clk,input rst_n,input frame_head,input [7:0] din,output reg detect
);reg [1:0] c_state;
reg [1:0] n_state;always @ (posedge clk or negedge rst_n) beginif(!rst_n) beginc_state <= 2'd0;endelse beginc_state <= n_state;end
endalways @ (*) beginif(!rst_n) beginn_state = 2'd0;endelse if(frame_head) begincase(c_state)2'd0 : beginif(din==8'h23) beginn_state = 2'd1;endelse beginn_state = 2'd0;endend2'd1 : beginif(din==8'h23) beginn_state = 2'd2;endelse beginn_state = 2'd0;endend2'd2 : beginif(din==8'h23) beginn_state = 2'd0;endelse beginn_state = 2'd0;endenddefault : n_state = 2'd0;endcaseend
endalways @ (posedge clk or negedge rst_n) beginif(!rst_n) begindetect <= 1'b0;endelse if(c_state==2'd2 && din ==8'h23 && frame_head) begindetect <= 1'b1;endelse begindetect <= 1'b0;end
end
endmodule

在这里插入图片描述


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部