题解 | #整数倍数据位宽转换8to16#

整数倍数据位宽转换8to16

http://www.nowcoder.com/practice/f1fb03cb0baf46ada2969806114bce5e

由于本题整数倍刚好是两倍,所以用一个存储器buff来保存上一个数据,在下个数据到来时,把两个数据拼起来一起给data_out。cnt计数周期为0-1。

完整代码

`timescale 1ns/1ns

module width_8to16(
	input 				   clk 		,   
	input 				   rst_n		,
	input				      valid_in	,
	input	   [7:0]		   data_in	,
 
 	output	reg			valid_out,
	output   reg [15:0]	data_out
);
    reg[7:0] buff;
    reg[1:0] cnt;
    always@(negedge rst_n or posedge clk)begin
        if(~rst_n)
            cnt <= 0;
        else if(valid_in)
            if(cnt == 1)
                cnt <= 0;
            else
                cnt <= cnt + 1;
    end
    always@(negedge rst_n or posedge clk)begin
        if(~rst_n)begin
            buff <= 0;
            data_out <= 0;
        end
        else if(valid_in)
            if(cnt == 1)begin
                data_out <= {buff, data_in};
            end
            else
                buff <= data_in;
    end
    always@(negedge rst_n or posedge clk)begin
        if(~rst_n)begin
            valid_out <= 0;
        end
        else if(valid_in && cnt == 1)
            valid_out <= 1;
        else
            valid_out <= 0;
    end
endmodule

如果整数倍>2,则定义更大的存储器,在计数周期内保存之前的输入数据

if(cnt != t)
	buff <= {buff[xx:xx], data_in};
全部评论
哈喽,博主。我仿真了一下,发现valid_out与题目要求的波形差一拍,应该加个valid_out_r寄存器打一拍。如果不改也没问题,可以通过测试,不知道题目怎么判定的。
点赞 回复 分享
发布于 2023-01-09 22:49 河北

相关推荐

昨天 13:48
门头沟学院 C++
点赞 评论 收藏
分享
07-07 14:30
复旦大学 Java
遇到这种人我也不知道说啥了
正义执行官:人家能回你就不错了,自己不主动去问,等着天上掉馅饼,想啥呢哥们
点赞 评论 收藏
分享
05-19 19:57
蚌埠学院 Python
2237:Gpa70不算高,建议只写排名,个人技能不在多而在精,缩到8条以内。项目留一个含金量高的,减少间距弄到一页,硕士简历也就一页,本科不要写很多
实习,投递多份简历没人回...
点赞 评论 收藏
分享
07-02 13:52
门头沟学院 Java
点赞 评论 收藏
分享
评论
2
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务