题解 | #整数倍数据位宽转换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 河北

相关推荐

合适才能收到offe...:项目岗是什么岗?我看你有段好像跟策划运营相关,如果找运营的话第三段经历写详细点儿。 个人建议是把自我评价删了换成专业技能放在工作经验上或者下面。学生会那个也可以删,把第一个包装成店铺运营,写4-6给点。第三个也是写4-6个点。注意工作内容➕部分数据。 投递的时候BOS招呼用语改一下,换成我有xx工作经验,熟练掌握xx技能样式,也可以简历截图然后直接发送。
点赞 评论 收藏
分享
2025-12-19 15:04
门头沟学院 Java
小肥罗:hr爱上你了,你负责吗哈哈
点赞 评论 收藏
分享
评论
2
1
分享

创作者周榜

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