题解 | #位拆分与运算#

位拆分与运算

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***********//
//首先一定要声明out与validout是reg型,否则会一直报错无法编译
reg out;
reg validout;

reg [15:0] d_temp;
//这里采用两段式或者一段式均可以,最重要的是这不是边沿触发型而是电平触发型;
//其次是输入信号d只有在sel时才会有效,因此需要设置一个锁存器来存储d_temp;
always @ (clk) begin
    if(~rst) begin
        out=0;
        validout=0;
        d_temp=0;
    end
    else begin
        case(sel)
        2'b0: begin
            d_temp=d;
            out=0;
            validout=0;
        end
        2'd1: begin
            d_temp=d_temp;
            out=d_temp[3:0]+d_temp[7:4];
            validout=1;
        end
        2'd2: begin
            d_temp=d_temp;
            out=d_temp[3:0]+d_temp[11:8];
            validout=1;
        end
        2'd3: begin
            d_temp=d_temp;
            out=d_temp[3:0]+d_temp[15:12];
            validout=1;
        end
        endcase
    end
end



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

#verilog刷题记录##悬赏#
全部评论

相关推荐

听说改名字就能收到offer哈:Radis写错了兄弟
点赞 评论 收藏
分享
11-09 17:30
门头沟学院 Java
TYUT太摆金星:我也是,好几个华为的社招找我了
点赞 评论 收藏
分享
11-27 12:43
已编辑
门头沟学院 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务