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

数据串转并电路

http://www.nowcoder.com/practice/6134dc3c8d0741d08eb522542913583d

注意点: 1.ready_a信号是寄存器类型,有复位,不是恒高电平。(和计数条件有关) 2.data_b无效时保持结果不变。

`timescale 1ns/1ns

module s_to_p(
	input 				clk 		,   
	input 				rst_n		,
	input				valid_a		,
	input	 			data_a		,
 
 	output	reg 		ready_a		,
 	output	reg			valid_b		,
	output  reg [5:0] 	data_b
);
    //defination
    reg [2 : 0] cnt;
    wire add_cnt;
    wire end_cnt;
    reg [5 : 0] temp_b;
    
    
    //output 
    always@(posedge clk or negedge rst_n)begin
        if(!rst_n) ready_a <= 'd0;
        else ready_a <= 1'b1;
    end
    
    always@(posedge clk or negedge rst_n)begin
        if(!rst_n) temp_b <= 'd0;
        else if(ready_a && valid_a) temp_b <= {data_a, temp_b[5 : 1]};
    end
    
    assign add_cnt = ready_a && valid_a;
    assign end_cnt = add_cnt && (cnt == 5);
    always@(posedge clk or negedge rst_n)begin
        if(!rst_n) cnt <= 'd0;
        else if(end_cnt) cnt <= 'd0;
        else if(add_cnt) cnt <= cnt + 1'b1;
    end
    
    always@(posedge clk or negedge rst_n)begin
        if(!rst_n) valid_b <= 'd0;
        else if(end_cnt) valid_b <= 1'b1;
        else valid_b <= 1'b0;
    end
    
    always@(posedge clk or negedge rst_n)begin
        if(!rst_n) data_b <= 'd0;
        else if(end_cnt) data_b <= {data_a, temp_b[5 : 1]}; 
    end
endmodule
全部评论
你好,我想请问下,data_b信号的输入条件为什么不能是vaild_b,必须得是end——cnt
点赞 回复 分享
发布于 2023-04-05 15:19 四川
你说的ready帮到了我,否则我怎么都通不过
点赞 回复 分享
发布于 2023-04-18 15:08 广东
你这个是写的最好的。
点赞 回复 分享
发布于 05-02 10:49 湖北

相关推荐

点赞 评论 收藏
分享
11-07 13:31
怀化学院 Java
勇敢牛牛不怕难:又疯一个
点赞 评论 收藏
分享
评论
9
1
分享
牛客网
牛客企业服务