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

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

时间:2023-01-07 22:13:49浏览次数:44  
标签:进阶 lock 牛客 数据位 8to12 rst input data reg

输入位宽8bit,输出位宽12bit ,也就是说每三个输入数据可以生成两个完整输出。

注意给出的波形是data_lock而不是data_in,这是陷阱。data_lock是data_in打了一拍的结果。

用一个三进制计数器,按拍拼凑数据输出即可。

`timescale 1ns/1ns

module width_8to12(
	input 				   clk 		,   
	input 			      rst_n		,
	input				      valid_in	,
	input	[7:0]			   data_in	,
 
 	output  reg			   valid_out,
	output  reg [11:0]   data_out
);
reg[1:0]	cyc_cnt	;
reg[7:0]	data_lock	;

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

always @(posedge clk or negedge rst_n) begin
	if(!rst_n)
		data_lock <= 'd0 ;
	else if(valid_in)
		data_lock <= data_in ;
	else
		data_lock <= data_lock ;
end
always @(posedge clk or negedge rst_n) begin
	if(!rst_n)
		data_out <= 'd0 ;
	else if(cyc_cnt == 1 && valid_in)
		data_out <= {data_lock,data_in[7:4]} ;
	else if(cyc_cnt == 2 && valid_in)
		data_out <= {data_lock[3:0],data_in} ;
	else
		data_out <= data_out ;
end

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

endmodule

标签:进阶,lock,牛客,数据位,8to12,rst,input,data,reg
From: https://www.cnblogs.com/icwangpu/p/17033653.html

相关文章

  • 牛客进阶刷题8:非整数倍数据位宽转换24to128
    第一阶段:120bit+8bit第二阶段:16bit+96bit+16bit第三阶段:8bit+120bit所以相当于发送了16个24bit数据,作为一个循环。第6、第11两个数据被拆开使用。根据上述分析可知,缓存......
  • 二分查找进阶版
    一、题目时间限制:500ms空间限制:64MB很久以前,有位同学,在学完算法课的二分后,激动的振臂高呼:“我学会二分了!”。此时,一位学长从旁边经过听到此话,决定出一道题考考他,挫挫同学的......
  • 牛客小白月赛65ABCD(E)
               比赛链接:牛客小白月赛65_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ(nowcoder.com)A:牛牛去购物题意:给n元钱,有两种......
  • 自定义数据类型:结构体(C语言进阶)
    结构体类型的声明结构体的自引用结构体内存对齐结构体传参自学b站“鹏哥C语言”笔记。一、结构体类型的声明详见文章【初识结构体】第一部分。补充说明:匿名结构体类型:省略结......
  • 数据的存储(C语言进阶)
    数据类型介绍内置数据类型的归类整型在内存中的存储:①原码、反码、补码②大小端字节序③char的存储内容浮点型在内存中的存储自学b站“鹏哥C语言”笔记。一、数据类型介绍......
  • 指针详解(C语言进阶)
    字符指针指针数组自学b站“鹏哥C语言”笔记。本章笔记不全。回顾:在文章【初识指针】中,我们已经了解到的指针概念有指针是一种变量,用来存放地址,地址唯一标识一块内存空间。指......
  • 牛客小白月赛65(C,D,E,F)
    牛客小白月赛65(C,D,E,F)果然人是不能太得意,上一次打的还没有那么惨,沾沾自喜,结果这一次就翻车了,o(╥﹏╥)oCC这个题我先前好像看过类似的,不过具体的忘记了这个题我有两种写法......
  • 牛客小白月赛65 D题 题解
    原题链接题意描述一共有两堆石子,第一堆有\(a\)个,第二堆有\(b\)个,牛牛和牛妹轮流取石子,牛牛先手,每次取石子的时候只能从以下\(2\)种方案种挑一种来取(对于选择的方案......
  • Python----函数进阶
    函数的返回值作为参数传递给其他函数deffunc():return50deffunc1(num):print(num+100)func1(func())函数返回多个值deffunc():#返回值可以是......
  • 牛客小白月赛补题65
    A.牛牛去购物这道题目纯纯数学题,一遍一遍更新最小值,我们每一次都用a*i+b*j,计算出最小的答案ACcode#include<bits/stdc++.h>#defineintlonglongconstint......