题解 | #位拆分与运算#

位拆分与运算

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

全部评论

相关推荐

09-22 17:59
门头沟学院 Java
点赞 评论 收藏
分享
收拾收拾准备躺平咯
在秋招的河老师很爱吃:兄弟你吃拼好饭中毒了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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