题解 | #位拆分与运算#

位拆分与运算

http://www.nowcoder.com/practice/1649582a755a4fabb9763d07e62a9752

`timescale 1ns/1ns

module data_cal(
input clk,
input rst,
input [15:0]d,
input [1:0]sel,

output [4:0]out,
output validout
);

    reg [15:0] d_buf;
    assign out = sel == 'd0 ? 'd0 :
                 sel == 'd1 ? d_buf[3:0] + d_buf[7:4]: 
                 sel == 'd2 ? d_buf[3:0] + d_buf[11:8]:
                 sel == 'd3 ? d_buf[3:0] + d_buf[15:12]:
                 'd0;
    
    assign validout = sel == 'd0 ? 1'b0 : 1'b1;
    
    always @(posedge clk or negedge rst) begin
        if (!rst) begin
            d_buf <= 0; 
        end if (sel == 'd0) begin
           d_buf <= d; 
        end
    end
    
endmodule
全部评论

相关推荐

10-28 17:30
已编辑
华东交通大学 Java
想进开水团喝开水:字节的hr的本职工作就是黄金矿工
秋招笔试记录
点赞 评论 收藏
分享
评论
4
收藏
分享

创作者周榜

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