题解 | #数据累加输出#

数据累加输出

https://www.nowcoder.com/practice/956fa4fa03e4441d85262dc1ec46a3bd

`timescale 1ns/1ns

module valid_ready(
	input 				clk 		,   
	input 				rst_n		,
	input		[7:0]	data_in		,
	input				valid_a		,
	input	 			ready_b		,
 
 	output		 		ready_a		,
 	output	reg			valid_b		,
	output  reg [9:0] 	data_out
);

reg [1:0] cnt_rcv;
always@(posedge clk, negedge rst_n) begin
	if(!rst_n) cnt_rcv <= 2'd0;
	else if(cnt_rcv == 2'd3 & valid_a & ready_a) cnt_rcv <= 2'd0;
	else if(valid_a & ready_a) cnt_rcv <= cnt_rcv + 2'd1;
end
//拿到第四个数据后,valid_b拉高,并完成累加,等待ready_b,等到后下一时刻拉低
always@(posedge clk, negedge rst_n) begin
	if(!rst_n) valid_b <= 1'b0;
	else if(cnt_rcv == 2'd3 & valid_a & ready_a) valid_b <= 1'b1;
	else if(ready_b) valid_b <= 1'b0;
	else valid_b <= valid_b;
end

//data_out在接收过程中就进行计算,发送完毕后,等待新的接收,否则保持
always@(posedge clk, negedge rst_n) begin
	if(!rst_n) data_out <= 10'd0;
	else if(valid_a & ready_a)
	case(cnt_rcv)
		2'd0:	begin data_out <= data_in; end
		2'd1:	data_out <= data_out + data_in;
		2'd2:	data_out <= data_out + data_in;
		2'd3:	data_out <= data_out + data_in;
	endcase
end

//valid_b拉高即等待发送时,ready_a置低,ready_b到来就同时拉高
assign ready_a = valid_b?(ready_b?1'b1:1'b0):1'b1;

endmodule

全部评论

相关推荐

身边有人上海、深圳&nbsp;6、7k&nbsp;都去了,真就带薪上班了。
小浪_coder:深圳除了一些计算机,UI设计,金融类等一些可以月薪过万的工作之外, 认识很多朋友做运营,营销,文员的工作, 月薪基本都在4-6K左右,还有大把人在干
点赞 评论 收藏
分享
我是没经验的毕业生,这啥情况啊会不会是hr在刷kpi
JamesGosli...:字节boss属于是群发了,我都快入职字节了,其他部门还在和我boss打招呼
点赞 评论 收藏
分享
头顶尖尖的程序员:我也是面了三四次才放平心态的。准备好自我介绍,不一定要背熟,可以记事本写下来读。全程控制语速,所有问题都先思考几秒,不要急着答,不要打断面试官说话。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-01 17:00
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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