题解 | #移位运算与乘法#

移位运算与乘法

https://www.nowcoder.com/practice/1dd22852bcac42ce8f781737f84a3272

`timescale 1ns/1ns
module multi_sel(
input [7:0]d,
input clk,
input rst,
output reg input_grant,
output reg [10:0]out
);
//*************code***********//
reg [1:0] cnt;
reg [7:0] d_tmp;

initial begin
    input_grant = 1'b0;
    out = 10'b0;
end
always@(posedge clk)
begin
    if(!rst) begin
        cnt <= 1'b0;
    end
    else begin 
        cnt <= cnt + 1'b1;
    end
end

always@(posedge clk)
begin
    if(!rst) d_tmp <= 8'b0;
    else begin
        if(cnt == 2'b0)d_tmp <= d;
    end
end

always@(posedge clk)
begin
    if(!rst) input_grant <= 1'b0;
    else begin
        if((d != 0)&&(cnt == 2'd0))input_grant <= 1'b1;
        else input_grant <= 1'b0;
    end    
end

always@(posedge clk)
begin
    if(!rst) out <= 10'b0;
    else begin
        //if(cnt == 2'd3)
        //    out <= d<<cnt;
        ////elseif(cnt == 2'b0) 
        ////  out <= {3'd0,d};
        //else out <= (((d << cnt) + (d << cnt_last))&&cnt) + d;
        case(cnt)
            2'd0: out <= d;
            2'd1: out <= (d_tmp<<cnt) + d_tmp;
            2'd2: out <= (d_tmp<<cnt) + (d_tmp<<(cnt-1)) + d_tmp;
            2'd3: out <= d_tmp<<cnt;
        endcase
    end
end


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

全部评论

相关推荐

点赞 评论 收藏
分享
双非坐过牢:非佬,可以啊10.28笔试,11.06评估11.11,11.12两面,11.19oc➕offer
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务