首页 > 其他分享 >牛客进阶题目6:数据串并转换电路

牛客进阶题目6:数据串并转换电路

时间:2023-01-05 21:57:03浏览次数:46  
标签:题目 进阶 seq 牛客 output rst input data reg

接收6个bit之后下一拍输出一个6bit宽的data,注意此时如果valid_a拉高,也要接收新进来的数据

这里用移位寄存器计数不太行,不太好让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
);
reg 	[5:0]		seq_shift;
reg 	[2:0]		seq_cnt;

always @(posedge clk or negedge rst_n ) begin
	if(!rst_n) 
		seq_cnt <= 'd0;
	else if(valid_a && ready_a)
		seq_cnt <= (seq_cnt == 3'd5) ? 'd0 : (seq_cnt + 1'd1);
end
always @(posedge clk or negedge rst_n ) begin
	if(!rst_n) 
		seq_shift <= 'd0;
	else if(valid_a && ready_a)
		seq_shift <= {data_a, seq_shift[5:1]};
end

always @(posedge clk or negedge rst_n ) begin
	if(!rst_n)begin
		valid_b <= 'd0;
		data_b <= 'd0;
	end 
	else if(seq_cnt[2]&seq_cnt[0]&(~seq_cnt[1]))begin
		valid_b <= 1'd1;
		data_b <= {data_a, seq_shift[5:1]};
	end
	else
		valid_b <= 'd0;
end

always @(posedge clk or negedge rst_n ) begin
	if(!rst_n) 
		ready_a <= 'd0;
	else 
		ready_a <= 1'd1;
end
endmodule

移位寄存器思路贴在下边,此时data_b在新数据出来前输出为0,提交不通过

`timescale 1ns/1ns

module s_to_p(
	input 				clk 		,   
	input 				rst_n		,
	input				valid_a		,
	input	 			data_a		,
 
 	output	 		ready_a		,
 	output			valid_b		,
	output   [5:0] 	data_b
);

reg[6:0]	seq_temp	;

always @(posedge clk or negedge rst_n) begin
	if(!rst_n)
		seq_temp <= 7'b1_000_000 ;
	else if(seq_temp[0]&valid_a&ready_a)
		seq_temp <= {data_a,6'b1_000_00} ;
	else if(valid_a && ready_a)
		seq_temp <= {data_a,seq_temp[6:1]} ;
	else
		seq_temp <= seq_temp ;
end

assign data_b  = seq_temp[0] ? seq_temp[6:1] : 6'd0 ;
assign valid_b = seq_temp[0] ? 1'b1 : 1'b0 	;
assign ready_a = 1'b1 ;

endmodule

标签:题目,进阶,seq,牛客,output,rst,input,data,reg
From: https://www.cnblogs.com/icwangpu/p/17028936.html

相关文章

  • c++算法练习day01【2022年蓝桥杯省赛B组题目】每天做一点、、、
    这个练习目前来说就比较宽松,打算在寒假(基本也就是这一个月每天刷几道题吧)题目一:小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做a道题目,周六和周......
  • 手工测试如何进阶中高级软件测试工程师?
    在软件测试行业,也有简单的测试,譬如手工测试,这种测试基本上没有什么技术水平,学1—2个月基本上就能做简单的测试工作,但是这类测试薪资待遇比较低,也没什么发展前景,随着互......
  • 《Kubernetes Operator 开发进阶》- 作者絮絮叨
    今天聊啥昨晚在京东上试着搜索关键字“KubernetesOperator开发进阶”,看到我的书终于上架了,百感交集。(没有老泪纵横。你以为是我没有眼眶湿润?不,我说的是我没有老!)这本书......
  • Netty进阶
    1.Netty问题TCP协议都存在着黏包和半包问题,但是UDP没有1.粘包现象发送方分10次发送,接收方一次接受了10次发送的消息2.半包现象调整服务器的接受缓冲区大小(调小)半包......
  • 记录一道贪心+差分的题目
    由于差分这个知识点经常会被本人忘记,可能是做的题目太少了没怎么碰到。。。因此记录一道贪心加上差分的题目。本题为第十三届蓝桥杯省赛C++C组题目:4655.重新排序具体思......
  • 牛客进阶题目5:信号发生器
    这个题目有点离谱,题里什么也没给,需要去题解中才知道方波、锯齿波和三角波最大值都为20,方波周期20,锯齿波周期21,三角波周期40对三种波形具体分析方波:周期为20且最大值也为2......
  • 牛客小白月赛 64 D题
    https://ac.nowcoder.com/acm/problem/247496 1#include<bits/stdc++.h>2usingnamespacestd;34constintN=3e5+10;56typedeflonglongLL;......
  • 牛客进阶题目4:输入序列不连续的序列检测
    跟上一题基本类似,多了个valid判定当前输入数据是否有效`timescale1ns/1nsmodulesequence_detect( inputclk, inputrst_n, inputdata, inputdata_valid, outpu......
  • git和git bundle: 一个有趣的实习笔试题目提交
    以下代码均为terminal中的shell指令先gitinitmkdirreshapecdreshapegitinit再gitadd所需要加入的文件gitaddReadme.mdgitaddreshape.py然后gitcommit......
  • 牛客小白月赛 64 C题
    https://ac.nowcoder.com/acm/contest/50044/C 1#include<bits/stdc++.h>2usingnamespacestd;3//贪心构造我认为思路是其一,然后模拟这个过程还是比较重......