题解 | #输入序列连续的序列检测#
输入序列连续的序列检测
https://www.nowcoder.com/practice/d65c2204fae944d2a6d9a3b32aa37b39
- 题目名称:序列检测
- 题解:就个人理解而言,输入一连串bit数,从这些bit中检测题目指出的序列。
- 题目相对来说很好理解,解题的关键在于如何每到来一个bit,检测一次;
- 检测顺序:前八个bit检测一次,与目标序列不一致,match输出为低;然后检测第二个到第九个共8bit,是否与目标一直,若一致,则match输出为高,若不一致,则match输出为低,然后继续检测第三个到第十个共8bit;同理以此检测下去,直到检测到与目标一致的序列,match输出为高,即二进制1。
- 那么如何判断每个8bit数哪,最简单的方法则是使用移位拼接的方法。
- 方法详细描述:
- 定义一个位宽为8bit的寄存器reg_a;
- 给定rag_a初始值(若检测的8bit数列第一位是1,初始值应该定义为8'b0000_0000,同理,若检测的8bit数列第一位为0,那么初始值应该定义为8'b1111_1111),注意括号内的注释,否则会发生误判。
- 每个时钟的上升沿,截断拼接得到信号数列,即reg_a <= {reg_a[6:0],a},把前一个数列的后七位与新传入的a拼接,组成序列,检测其是否是目标序列。
- 若检测到reg_a == “目标序列”,直接输出match = 1即可;
`timescale 1ns/1ns
module sequence_detect(
input clk,
input rst_n,
input a,
output reg match
);
reg [7:0] r_a;
always@(posedge clk or negedge rst_n)begin
if(!rst_n) begin
r_a <= 8'd0;
end
else begin
r_a <= {r_a[6:0],a};
end
end
always@(posedge clk or negedge rst_n)begin
if(!rst_n) begin
match <= 1'b0;
end
else if(r_a == 8'b0111_0001)begin
match <= 1'b1;
end
else begin
match <= 1'b0;
end
end
endmodule
#刷题找工作啊#
查看14道真题和解析
360集团公司氛围 400人发布
