题解 | #位拆分与运算#

位拆分与运算

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    [3:0]   aloc, bloc, cloc, dloc;

reg             validout_reg;
reg     [4:0]   out_reg     ;


always @(posedge clk or negedge rst) begin
if(~rst) begin
    validout_reg    <= 1'b0;
    out_reg         <= 5'b0;
end else begin 
    case(sel)
    2'b01:  begin
        validout_reg    <= 1'b1;
        out_reg         <= aloc + bloc;
    end
    2'b10:  begin
        validout_reg    <= 1'b1;
        out_reg         <= aloc + cloc;
    end
    2'b11:  begin
        validout_reg    <= 1'b1;
        out_reg         <= aloc + dloc;
    end    
    default:begin
        validout_reg    <= 1'b0;
        out_reg         <= 5'b0;
        aloc            <= d[3:0];
        bloc            <= d[7:4];
        cloc            <= d[11:8];
        dloc            <= d[15:12];
        
    end
    endcase
end
end

assign out = out_reg;
assign validout = validout_reg;

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

全部评论
这里哪个地方写锁存了,醉了。 一开始我用assign给aloc,bloc,cloc,dloc赋值,结果不对。一看答案是在0的时候有锁存的功能,好多题目都是这样。
点赞 回复 分享
发布于 2023-03-14 14:27 浙江

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务