题解 | #位拆分与运算#

位拆分与运算

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

刚开始没看见在sel==0 的时候,输入是有效的,所以这是时候需要缓存一下。题干描述不清楚 `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// parameter IDLE = 0; parameter add1 = 1; parameter add2 = 2; parameter add3 = 3; reg [4:0] out; reg validout; reg [15:0] data_lock;

//输入是时序逻辑

always@(posedge clk or negedge rst) begin
    if (!rst) begin
    data_lock <= 0;
     out <= 5'b0;
    validout <= 1'b0;
    end
    
 else if(!sel)
    data_lock <= d;
 end
// 输出是组合逻辑
always @(*) begin
   
        case (sel)
            IDLE : begin
                out <= 5'b0;
                validout <= 1'b0;
            end
             add1 : begin
                 out <= {1'b0,data_lock[3:0]}+{1'b0,data_lock[7:4]};
                validout <= 1'b1;
            end
            add2 : begin
                out <= {1'b0,data_lock[3:0]}+{1'b0,data_lock[11:8]};
                validout <= 1'b1;
            end
            add3 : begin
                out <= {1'b0,data_lock[3:0]}+{1'b0,data_lock[15:12]};
                validout <= 1'b1;
            end
            default : begin 
                 out <=5'bx;
                validout <= 1'bx;
            end

            
        endcase
        
        
    end
    
        
    

//**code// endmodule

全部评论

相关推荐

02-15 17:05
已编辑
东华理工大学 前端工程师
Beeee0927:我建议是精简一点吧,比如主修的课程,技能特长,自我评价我是觉得可以删掉了。然后项目经历可能要考虑怎么改得更真实一点,因为就我看起来感觉里面太多的东西像是在实际项目中才能接触到的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务