题解 | #输入序列不连续的序列检测#

输入序列不连续的序列检测

http://www.nowcoder.com/practice/f96d0e94ec604592b502b0f1800ed8aa

解法1,更统一的代码风格:

       match <= data_valid && ({seq[2:0], data} == t_seq);  

这样判断和时钟分频等代码风格统一:

`timescale 1ns/1ns
module sequence_detect(
	input clk,
	input rst_n,
	input data,
	input data_valid,
	output reg match
	);
    parameter t_seq = 4'b0110;
    reg [3:0] seq;
    
    //移位模块
    always @ (posedge clk, negedge rst_n) begin
        if(!rst_n) begin
            seq <= 4'h0;
            //cnt <= 4'h0;
        end
        else if(data_valid) begin
            seq <= {seq[2:0], data};
            //cnt <= cnt + 'd1;
        end
        else
            seq <= seq;   
    end
//     always @ (*) begin
//         match = (seq == 4'b0110) &&;
//     end
    
    always @ (posedge clk, negedge rst_n) begin
        if(!rst_n) begin
            match <= 1'b0;
        end
        else 
            match <= data_valid && ({seq[2:0], data} == t_seq);  
    end    
//     always @ (posedge clk, negedge rst_n) begin
//         if(!rst_n) begin
//             match <= 1'b0;
//         end
//         else if(data_valid && (seq[2:0]==3'b011) && (!data)) begin
//             match <= 1'b1;
//         end
//         else
//              match <= 1'b0;  
//     end
  
endmodule

解法2:

`timescale 1ns/1ns
module sequence_detect(
	input clk,
	input rst_n,
	input data,
	input data_valid,
	output reg match
	);
    parameter t_seq = 4'b0110;
    reg [3:0] seq;
    
    //移位模块
    always @ (posedge clk, negedge rst_n) begin
        if(!rst_n) begin
            seq <= 4'h0;
            //cnt <= 4'h0;
        end
        else if(data_valid) begin
            seq <= {seq[2:0], data};
            //cnt <= cnt + 'd1;
        end
        else
            seq <= seq;   
    end
//     always @ (*) begin
//         match = (seq == 4'b0110) &&;
//     end
    
    always @ (posedge clk, negedge rst_n) begin
        if(!rst_n) begin
            match <= 1'b0;
        end
        else if(data_valid && (seq[2:0]==3'b011) && (!data)) begin
            match <= 1'b1;
        end
        else
             match <= 1'b0;  
    end
  
endmodule
全部评论

相关推荐

04-08 21:39
已编辑
Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务