题解 | #数据串转并电路#

数据串转并电路

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

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

reg[2:0]cnt; //计数器

//当计数器计数到5时归零
always@(posedge clk or negedge rst_n)
	if(!rst_n) cnt <= 3'd0;
	else if((valid_a)&&(cnt < 3'd5)) cnt <= cnt + 3'd1;
	else if (cnt == 3'd5) cnt <= 3'd0;
	else cnt <= cnt;

//当计数器计数到5时,valid_b信号拉高。
always@(posedge clk or negedge rst_n)
	if(!rst_n) valid_b <= 1'd0;
	else if(cnt == 3'd5) valid_b <= 1'd1;
	else valid_b <= 1'd0;

//当valid_a信号为高电平时,把data_a的值赋给data_b_0
reg[5:0] data_b_0;
always@(posedge clk or negedge rst_n)
	if(!rst_n) data_b_0 <= 6'd0;
	else if(valid_a == 1'd1) data_b_0[cnt] <= data_a;
	else data_b_0 <= data_b_0;

//ready_a信号全程拉高
always@(posedge clk or negedge rst_n)
	if(!rst_n) ready_a <= 1'd0;
	else ready_a <= 1'd1;

//当计数器计数到5时,将data_b_0赋值给data_b
always@(posedge clk or negedge rst_n)
	if(!rst_n) data_b <= 6'd0;
	else if(cnt == 3'd5) data_b <= data_b_0;
	else data_b <= data_b;

endmodule

全部评论
不知道这代码为啥能过,照这种写法data_b应该比data_b_0输出延迟一个周期,data_b_0又比data_a的数据延迟一个周期,这样应该不符合时序,data_a和data_b之间会延时两个周期
点赞 回复 分享
发布于 2023-06-16 16:40 北京

相关推荐

野猪不是猪🐗:我assume that你must技术aspect是solid的,temperament也挺good的,however面试不太serious,generally会feel style上不够sharp
点赞 评论 收藏
分享
昨天 16:50
腾讯_TEG_技术
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务