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

移位运算与乘法

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] flow;
reg [7:0] data_d;
always@(posedge clk or negedge rst)
begin
    if(!rst)
        flow<=2'd0;
    else if (flow == 2'd3)
        flow <= 2'd0;
    else 
        flow <= flow +1'd1;
end

always@(posedge clk or negedge rst)
begin
    if(!rst)
        input_grant <= 1'd0;
    else if(flow==0)
        input_grant <= 1'b1;
    else 
        input_grant <= 1'b0;
end

always @ (posedge clk or negedge rst)
begin
        if(!rst)
            data_d<=0;
        else if(flow==0)
            data_d <= d;
end
always @(posedge clk or negedge rst)
begin
        if(!rst)
            out <= 11'd0;
        else 
        begin
                case(flow)
                    2'd0:out <= d;
                    2'd1:out <= (data_d<<1)+data_d;
                    2'd2:out <= (data_d<<1)+(data_d<<2)+data_d;
                    2'd3:out <= data_d<<3;
                endcase
        end
end

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

全部评论
有点难的地方是如何选取计数器的加一时刻,那个状态做什么事,本质上是个状态机,还有就是怎么解决在计算期间不接收新来的值,可以用寄存器加计数器状态逻辑控制的方法来避免
点赞
送花
回复 分享
发布于 03-24 16:17 四川

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务