题解 | #位拆分与运算#

位拆分与运算

https://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
);
//*************code***********//
reg [15:0] d_reg;
wire [3:0] d0;
wire [3:0] d1;
wire [3:0] d2;
wire [3:0] d3;
assign d0 = d_reg[3:0];
assign d1 = d_reg[7:4];
assign d2 = d_reg[11:8];
assign d3 = d_reg[15:12];

reg [4:0] out_reg;
reg validout_reg;
always @ (posedge clk or negedge rst)
    begin
        if( ~rst ) begin
            out_reg <= 5'b0;
            validout_reg <= 1'b0;
            d_reg <= 16'b0;
        end 
        else begin
            case( sel ) 
                2'b00 : begin
                    d_reg <= d;
                    out_reg <= 5'b0;
                    validout_reg <= 1'b0;    
                end 
                2'b01 : begin
                    d_reg <= d_reg;
                    out_reg <= d_reg[3:0] + d_reg[7:4];// d0 + d1;
                    validout_reg <= 1'b1;    
                end 
                 2'b10 : begin
                     d_reg <= d_reg;
                    out_reg <= d0 + d2;
                    validout_reg <= 1'b1;    
                end 
                 2'b11 : begin
                     d_reg <= d_reg;
                    out_reg <= d0 + d3;
                    validout_reg <= 1'b1;    
                end 
                default : begin
                    out_reg <= 5'b0;
                    validout_reg <= 1'b0;  
                end 
            endcase
        end 
    end

assign out = out_reg;
assign validout = validout_reg;

//*************code***********//
endmodule

很奇怪的一道题,自己code报错,但是题目所给图像似乎也有问题,在b站上也有人提出了相同的问题。

全部评论

相关推荐

努力学习的小绵羊:我反倒觉得这种挺好的,给不到我想要的就别浪费大家时间了
点赞 评论 收藏
分享
尊嘟假嘟点击就送:加v细说,问题很大
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务