题解 | #数据累加输出#

数据累加输出

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]		data_cnt;

assign ready_a = !valid_b | ready_b;

always @(posedge clk or negedge rst_n ) begin
	if(!rst_n) 
		data_cnt <= 'd0;
	else if(valid_a && ready_a)
		data_cnt <= (data_cnt == 2'd3) ? 'd0 : (data_cnt + 1'd1);
end
always @(posedge clk or negedge rst_n ) begin
	if(!rst_n) 
		valid_b <= 'd0;
	else if(data_cnt == 2'd3 && valid_a && ready_a)
		valid_b <= 1'd1;
	else if(valid_b && ready_b)
		valid_b <= 1'd0;
end

always @(posedge clk or negedge rst_n ) begin
	if(!rst_n) 
		data_out <= 'd0;
	else if(ready_b && valid_a && ready_a && (data_cnt == 2'd0))
		data_out <= data_in;
	else if(valid_a && ready_a)
		data_out <= data_out + data_in;
	
end


endmodule
// `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
// );

// assign ready_a=!valid_b|ready_b;

// reg[2:0]cnt;
// reg [9:0] 	data;
// reg [9:0] 	data1;

// always@(posedge clk or negedge rst_n)begin
//   if(!rst_n)
//   begin
	
// 	data1<=0;
//   end
//   else
//   begin
	
// 	data1<=data;
// 	end
// 	end

//   always@(posedge clk or negedge rst_n)
//   if(!rst_n)
//   begin
//   cnt<=0;
//   data<=0;
//   valid_b<=0;
//   end

// else if(valid_a)
// begin

// 	 if(cnt==0)
// begin
// valid_b<=0;
// cnt<=cnt+1;
// data<=data_in;
// end
// else if(cnt==4)
// begin
// 	if(data1!=data)begin
// 	valid_b<=1;
// 	data<=data+data_in;
// 	cnt<=0;end
// 	else begin
// 	valid_b<=1;
// 	data<=data;
// 	cnt<=cnt;end
// end 
// else
// valid_b<=0;
// cnt<=cnt+1;
// data<=data&data_in;
// end
// else begin
// 	valid_b<=0;
// 	data<=data;
// 	cnt<=cnt;
// 	end

// 	always@(posedge clk or negedge rst_n)begin
// 	if(!rst_n)
// 	begin
// 		data_out<=0;
// 	end
// 	if(valid_a)begin
// 		 if(cnt==4&&(data1!=data))
// 	    data_out<=data+data_in;
// 		else if(cnt==4&&(data1==data))
// 	    data_out<=data;
// 		else if(cnt==0)
// 		data_out<=data_in;
// 		else
// 		data_out<=data+data_in;
// 		end
// 		else
// 		data_out<=0;
// 	end
// endmodule

全部评论

相关推荐

点赞 评论 收藏
分享
头像
11-07 01:12
重庆大学 Java
精致的小松鼠人狠话不多:签哪了哥
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务