首页 > 其他分享 >牛客进阶刷题8:非整数倍数据位宽转换24to128

牛客进阶刷题8:非整数倍数据位宽转换24to128

时间:2023-01-07 21:23:23浏览次数:48  
标签:进阶 24to128 valid 数据位 rst input 120bit reg

第一阶段:120bit+8bit

第二阶段:16bit+96bit+16bit

第三阶段:8bit+120bit

所以相当于发送了16个24bit数据,作为一个循环。第6、第11两个数据被拆开使用。

根据上述分析可知,缓存采用120bit即可够用。然后建立一个0-15计数器进行计数,对输出条件进行精确判断。

`timescale 1ns/1ns

module width_24to128(
	input 				clk 		,   
	input 				rst_n		,
	input				valid_in	,
	input	[23:0]		data_in		,
 
 	output	reg			valid_out	,
	output  reg [127:0]	data_out
);
reg[119:0]	seq_temp	;
reg[3:0]	cyc_cnt		;

always @(posedge clk or negedge rst_n) begin
	if(!rst_n)
		cyc_cnt <= 'd0 ; 
	else if(valid_in)
		cyc_cnt <= cyc_cnt + 1 ;
	else
		cyc_cnt <= cyc_cnt ;
end

always @(posedge clk or negedge rst_n) begin
	if(!rst_n)
		seq_temp <='d0 ;
	else if(((cyc_cnt <= 4) | (5 <cyc_cnt<= 9) | (cyc_cnt >= 11)) & valid_in )
		seq_temp <= {seq_temp[95:0],data_in} ;
	else if(cyc_cnt == 5 & valid_in)
		seq_temp <= {104'b0,data_in[15:0]} ;
	else if(cyc_cnt == 10 % valid_in)
		seq_temp <= {112'b0,data_in[7:0]} ;
	else if (cyc_cnt == 15 & valid_in)
		seq_temp <= {96'b0,data_in} ;
	else
		seq_temp <= seq_temp ;
end

always @(posedge clk or negedge rst_n) begin
	if(!rst_n)
		valid_out <= 1'b0 ;
	else if((cyc_cnt==5||cyc_cnt==10||cyc_cnt==15)&valid_in)
		valid_out <= 1'b1 ;
	else
		valid_out <= 1'b0 ;
end

always @(posedge clk or negedge rst_n) begin
	if(!rst_n)
		data_out <= 'd0 ;
	else if(cyc_cnt == 5 )
		data_out <= {seq_temp,data_in[23:16]};
	else if(cyc_cnt == 10 )
		data_out <= {seq_temp[111:0],data_in[23:8]};
	else if (cyc_cnt == 15)
		data_out <= {seq_temp[103:0],data_in};
	else
		data_out <= data_out ;
end


endmodule

标签:进阶,24to128,valid,数据位,rst,input,120bit,reg
From: https://www.cnblogs.com/icwangpu/p/17033563.html

相关文章

  • 二分查找进阶版
    一、题目时间限制:500ms空间限制:64MB很久以前,有位同学,在学完算法课的二分后,激动的振臂高呼:“我学会二分了!”。此时,一位学长从旁边经过听到此话,决定出一道题考考他,挫挫同学的......
  • 自定义数据类型:结构体(C语言进阶)
    结构体类型的声明结构体的自引用结构体内存对齐结构体传参自学b站“鹏哥C语言”笔记。一、结构体类型的声明详见文章【初识结构体】第一部分。补充说明:匿名结构体类型:省略结......
  • 数据的存储(C语言进阶)
    数据类型介绍内置数据类型的归类整型在内存中的存储:①原码、反码、补码②大小端字节序③char的存储内容浮点型在内存中的存储自学b站“鹏哥C语言”笔记。一、数据类型介绍......
  • 指针详解(C语言进阶)
    字符指针指针数组自学b站“鹏哥C语言”笔记。本章笔记不全。回顾:在文章【初识指针】中,我们已经了解到的指针概念有指针是一种变量,用来存放地址,地址唯一标识一块内存空间。指......
  • Python----函数进阶
    函数的返回值作为参数传递给其他函数deffunc():return50deffunc1(num):print(num+100)func1(func())函数返回多个值deffunc():#返回值可以是......
  • LaTeX 进阶语法
    目录LaTeX进阶语法一、样式排版1、字体和字号1.1字体样式1.2字号1.3ctex宏包更改中文字体1.4文字装饰2、段落格式和间距2.1长度和长度变量2.2行距2.3段落格式2.4......
  • IT编程相关内容汇总 - 进阶者系列 - 学习者系列文章
    笔者工作了十多年了,对于技术也有一定的经验,但是IT编程技术的更新是挺快的,特别是各种框架,各种中间件啥的都涌现出来了。这篇博文笔者打算将IT编程的前端、后端、数据库......
  • 牛客题目进阶7:数据累加输出
    代码头ready_a声明为了wire型,所以是暗示用组合逻辑。对于三个输出信号,分别来看ready_a:用来和valid_a握手,表示当前模块可以从上游模块接收数据进行累加。所以就要判断在什......
  • 牛客进阶题目6:数据串并转换电路
    接收6个bit之后下一拍输出一个6bit宽的data,注意此时如果valid_a拉高,也要接收新进来的数据这里用移位寄存器计数不太行,不太好让data_b在新数据出来前保持不变,虽然功能一样,......
  • 手工测试如何进阶中高级软件测试工程师?
    在软件测试行业,也有简单的测试,譬如手工测试,这种测试基本上没有什么技术水平,学1—2个月基本上就能做简单的测试工作,但是这类测试薪资待遇比较低,也没什么发展前景,随着互......