牛客网Verilog刷题——VL4

牛客网Verilog刷题——VL4

题目

  已知d为一个8位宽的数,请在每个时钟周期分别输出该数乘1、3、7、8,并输出一个脉冲信号通知此时刻输入的d有效(d给出的信号的上升沿表示写入有效)。
在这里插入图片描述
在这里插入图片描述
  根据乘法的倍数,可以对乘法运算采用移位运算进行实现,如下表。

乘法倍数近似位运算操作
1d
2(d<<1)
3d + (d<<1)
4(d<<2)
5d + (d<<2)
6(d<<1) + (d<<2)
7d + (d<<1) + (d<<2)
8(d<<3)

答案

`timescale 1ns/1ns
module multi_sel
(
	input [7:0]d ,
	input clk,
	input rst,
	output reg input_grant,
	output reg [10:0]out
);
reg		[1:0]	cnt;
always @(posedge clk or negedge rst)
	if(~rst)
		cnt <= 2'b0;
	else
		cnt <= cnt + 1'b1;

reg		[7:0]	sr_d;

always @(posedge clk or negedge rst)
	if(!rst) begin
		out <= 11'd0;
		input_grant <= 1'b0;
	end
	else
		case(cnt)
			2'b00:
				begin
					input_grant <= 1'b1; //乘1
					out <= d;
					sr_d <= d;
				end
			
			2'b01:
				begin
					input_grant <= 1'b0;
					out <= sr_d + (sr_d<<1); //乘3
				end
			
			2'b10:
				begin
					input_grant <= 1'b0;
					out <= sr_d + (sr_d<<1) + (sr_d<<2); //乘7
				end

			2'b11:
				begin
					input_grant <= 1'b0;
					out <= (sr_d<<3); //乘8
				end		
			default:
				begin
					input_grant <= 1'b0;
					out <= d;
				end
		endcase

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值