首页 > 其他分享 >牛客网整数位宽转换

牛客网整数位宽转换

时间:2023-08-08 17:45:17浏览次数:31  
标签:输出 cnt 转换 data 整数 牛客 valid 数据 out

1、veilog进阶篇 VL32 非整数倍数据位宽转换24to48

描述:

实现数据位宽转换电路,实现24bit数据输入转换为128bit数据输出。其中,先到的数据应置于输出的高bit位。

valid_in用来指示数据输入data_in的有效性,valid_out用来指示数据输出data_out的有效性;clk是时钟信号;rst_n是异步复位信号。   观察时序图:

1、valid_out和data_out是在已存入5个数据且第6个数据到来后产生输出,且每个输入的数据中,低位数据会优先输出,图中第6个输入数据中的高8bit数据f2优先输出;

2、当数据缓存不满足128bit时,不会产生输出valid_out和data_out。

 

分析:

1、要实现24bit数据至128bit数据的位宽转换,必须要用寄存器将先到达的数据进行缓存。

2、24bit数据至128bit数据,相当于5个输入数据+第6个输入数据的拼接成一个输出数据,出于对资源的节省以及时序要求,采用120bit的寄存器进行数据缓存。

3、根据时序推演,数据是在第6个、第11个、第16个数据到来之后输出,所以内部设计一个计数器,用来指示数据接收状态。(24*16=128*3)

  a、当检测到valid_in拉高时,valid_cnt加1,valid_cnt在0-15之间循环,valid_cnt复位值是0。

  b、当valid_cnt是5或10或15,且valid_in为高时,输出数据,valid_out拉高。

 

 

`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] data_reg;
reg [4:0] cnt;

always @(posedge clk or negedge rst_n) begin
    if(~rst_n)
        cnt <= 5'd0;
    else if(valid_in)
        cnt <= (cnt==5'd15)? 5'd0 : cnt+1'b1;
end

always @(posedge clk or negedge rst_n) begin
    if(~rst_n) begin
        data_reg <= 120'd0;
        data_out <= 128'd0;
    end
    else if(valid_in) begin
        if(cnt==5'd5) begin
            data_reg <= {data_reg[119:16],data_in[15:0]};
            data_out <= {data_reg,data_in[23:16]};
        end
        else if(cnt==5'd10) begin
            data_reg <= {data_reg[119:8],data_in[7:0]};
            data_out <= {data_reg[111:0],data_in[23:8]};
        end
        else if(cnt==5'd15) begin
            data_reg <= {data_reg[119:24],data_in};
            data_out <= {data_reg[103:0],data_in};
        end
        else
            data_reg <= {data_reg[95:0],data_in};
    end
end

always @(posedge clk or negedge rst_n) begin
    if(~rst_n)
        valid_out <= 1'b0;
    else if((cnt==5'd5 || cnt==5'd10 || cnt==5'd15) && valid_in)
        valid_out <= 1'b1;
    else
        valid_out <= 1'b0;
end


endmodule

 

2、veilog进阶篇 VL33 非整数倍数据位宽转换8to12

描述:

实现数据位宽转换电路,实现8bit数据输入转换为12bit数据输出。其中,先到的数据应置于输出的高bit位。

alid_in用来指示数据输入data_in的有效性,valid_out用来指示数据输出data_out的有效性;clk是时钟信号;rst_n是异步复位信号。   观察时序图:

1、valid_out和data_out是在两个数据输入之后的下一个时钟周期产生输出;

2、当仅有一个数据输入后,不会产生输出valid_out和data_out,而是会等待下一个数据到来之后完成两个数据的拼接,才产生输出valid_out和data_out。

   分析: 1、要实现8bit数据至12bit数据的位宽转换,必须要用寄存器将先到达的数据进行缓存。8bit数据至12bit数据,相当于1.5个输入数据拼接成一个输出数据,出于对资源的节省以及时序要求,采用1个8bit的寄存器(data_lock)进行数据缓存。 2、根据时序图,数据是在第二个数据到来之后输出,当仅有一个数据到来时,不产生输出,所以内部设计一个计数器(valid_cnt),用来指示数据接收状态。   当检测到valid_in拉高时,valid_cnt加1,valid_cnt在0-2之间循环,valid_cnt复位值是0。   当valid_cnt是1或2,且valid_in为高时,输出数据,valid_out拉高。     当valid_cnt==1且valid_in为高时,data_out <= {data_lock, data_in[7:4]};     当valid_cnt==2且valid_in为高时,data_out <= {data_lock[3:0], 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] cnt;
reg [7:0] data_lock;

always @(posedge clk or negedge rst_n) begin
    if(~rst_n)
        cnt <= 'b0;
    else if(valid_in)
        cnt <= (cnt==2'b10) ? 'b0 : cnt+1'b1;
end

always @(posedge clk or negedge rst_n) begin
    if(~rst_n)
        data_lock <= 'b0;
    else if(valid_in)
        data_lock <= data_in;
end

always @(posedge clk or negedge rst_n) begin
    if(~rst_n) begin
        data_out <= 'b0;
        valid_out <= 'b0;
    end
    else if(valid_in && cnt==2'b01) begin
        data_out <= {data_lock,data_in[7:4]};
        valid_out <= 1'b1;
    end
    else if(valid_in && cnt==2'b010) begin
        data_out <= {data_lock[3:0],data_in};
        valid_out <= 1'b1;
    end
    else
        valid_out <= 1'b0;
end

endmodule

 

     

标签:输出,cnt,转换,data,整数,牛客,valid,数据,out
From: https://www.cnblogs.com/blog-address/p/17594057.html

相关文章

  • 2023第七场牛客多校-We Love Strings
    I-WeLoveStrings_2023牛客暑期多校训练营7题意 做法:根号分治+容斥原理将字符串分为两类:len<=20直接位运算枚举出可能的所有答案,看是否存在符合的len>20采用容斥原理,计算出所有长度为i的字符串中(假设为n个),1个字符串可以表示的(1个元素的交集) ,2个字符串可以表示的......
  • JavaScript中16进制颜色与rgb颜色互相转换
    16进制转rgbfunctionhexToRgba(hex,opacity){if(!hex)hex='#ededed';letrgba='rgba('+parseInt('0x'+hex.slice(1,3))+','+parseInt('0x'+hex.slice(3,5))+','+......
  • CSV文件分隔符转换
    CSV文件系统默认分隔符是逗号(,),但是如果自定义过分隔符,再次保存就会变成分号(;),此时再用逗号去读数据时程序会报错。例如设置csv格式如下: Python方法pd.read_csv(file_path,delimiter=",")使用逗号去读取时会报错Traceback(mostrecentcalllast):File"xxx\Python39\lib......
  • Python实现输入三个整数x,y,z,请把这三个数由小到大输出;
    num1=input('请输入第一个数,x:')num2=input('请输入第二个数,y:')num3=input('请输入第三个数,z:')ifnum1>num2:#if语句判断num1,num2=num2,num1ifnum1>num3:num1,num3=num3,num1ifnum2>num3:num2,num3=num3,num2p......
  • unicode编码转换压缩为utf-8编码
    Unicode编码也可称为万能码,它将世界上所有的符号都使用2或4个字节(即2的16/32次方)来表示,每个字符的二进制表示长度固定为16/32位,如此确实可以兼容所有的字符编码,但是4个字节的长度造成了存储容量的极大浪费,许多常用的字符往往只需要一个字节(如ASCII美国信息交换标准代码),于是utf-8编......
  • 2023牛客+杭电补题和总结记录(后半)
    前半继续写要被编辑器卡飞了,换个档杭电第六场\(1002.Pair\Sum\and\Perfect\Square\)对于每个位置可以求出该位置的数和哪些位置的数能够组成完全平方数,因为原序列是排列,并且完全平方数个数不多,所以预处理的复杂度不高。(也可以在后续统计过程中处理)处理出点对以后就变成了......
  • 牛客周赛 Round 6
    牛客周赛Round6A-游游的数字圈_牛客周赛Round6(nowcoder.com)枚举即可#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;signedmain(){ios::sync_with_stdio(false);cin.tie(nullptr);strings;cin>>s;intans=0;......
  • 记一场很厉害的牛客多校
    破防场。全是诈骗提。但是很有可以学的东西!\(I.\)给定\(n\)个01?串,?可以替换为0或1。称替换完的串集合为该串的生成串。问所有\(n\)个串的生成串集合的并的大小。长度不同的串分开处理。对于长度\(\le20\)的串,暴力枚举生成串,map去重。对于长度\(>20\)的......
  • 七月学习之Iptables地址转换
    8、Iptables地址转换8.1、什么是NAT网络地址转换(NAT),意思也比较清楚:对(数据包)的网络地址(IP+PORT)进行转换例如,机器自己的IP10.1.1.2是能与外部正常通信的,但是192.168网段是私有IP段。无法与外界通信因此当源地址为192.168网段的包要出去时,机器会先将源IP换成机器自己的10.......
  • Word控件Spire.Doc 转换教程(一):在 C#、VB.NET 中将 Word Doc 转换为 XML
    谈到OfficeOpenXML,我们可能会想到HTML。实际上,OfficeOpenXML与HTML类似,都是基于标签的语言。OfficeOpenXML和HTML之间的区别在于OfficeOpenXML使用的标记不是预定义的。如果我们在OfficeOpenXML中创建自己的标签,我们需要遵循一些规则。首先,OfficeOpenXML文档中......