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

移位运算与乘法

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 四川

相关推荐

10-11 17:45
门头沟学院 Java
走吗:别怕 我以前也是这么认为 虽然一面就挂 但是颇有收获!
点赞 评论 收藏
分享
11-04 14:10
东南大学 Java
_可乐多加冰_:去市公司包卖卡的
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务