牛客Verilog入门 VL4 移位运算与乘法

题目描述:已知d为一个8位数,请在每个时钟周期分别输出该数乘1/3/7/8,并输出一个信号通知此时刻输入的d有效(d给出的信号的上升沿表示写入有效)

信号示意图:

时序图:

 

 本题注意事项:

1)明确在用Verilog描述硬件电路的时候,对于乘法和除法的运算,是一种对资源消耗比较大的操作,因此,在实际设计电路的时候应当尽可能的减少使用乘除运算。本题中,我们可以看出来讲输入数据进行移位再做减法更加简单,如下:

out <= (din<<2)-din; //表示的将输入数据乘以3

out <= (din<<3)-din; //表示将输入数据乘以7

out <= (din<<3); //表示将输入数据乘以8

2)根据对时序图的分析可以知道,需要一个变量对时钟上升沿进行保存,在不同计数的时钟上升沿,输出的数据是不同的,我们选择case语句表示不同语句情况下的输出状态。

代码展示:

reg[1:0] count;

reg [7:0] din;

 always@ (posedge clk or negedge rst) begin

    if(!rst) begin

            out<= 0;

            input_grant <= 0;

            count <= 0;

            din <= 0;

             end

    else begin

            count <= count+1;

            case(count)

            2'b00: begin din <= d; out <= d; input_grant <= 1; end

            2'b01: begin out <= (din<<2)-din; input_grant <= 0; end

            2'b10: begin out <= (din<<3)-din; input_grant <= 0; end

            2'b11: begin out <= (din<<3); input_grant <= 0;end

            endcase

        end

    end


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值