数字电路设计之移位器设计2

本文介绍了数字电路设计中两种移位器的Verilog实现方法,包括算数右移的实现。文章提到,虽然第二种方法更简洁,但可能增加硬件资源消耗。还分享了几个实用技巧,如数值补零、使用$signed进行算数右移以及模块调用注意事项等,以帮助理解和优化移位器设计。
摘要由CSDN通过智能技术生成

           之前写过一个算数右移的实现,今天又发现了两种:

           版本一:

module shift_2(d,sa,right,arith,sh);
	input  [31:0] d;
	input  [4:0]  sa;
	input         right,arith;
	output [31:0] sh;
	wire   [31:0] t0,t1,t2,t3,t4,s1,s2,s3,s4;
	wire          a = d[31] & arith;      //judge whether need arithmetic shift 
	wire   [15:0] e = {16{a}};
	wire   [15:0] z = {16{1'b0}};
	wire   [31:0] sld4,sdr4,sld3,sdr3,sld2,sdr2,sld1,sdr1,sld0,sdr0;

	assign        sld4 = {d[15:0],z};
	assign        sdr4 = {e,d[31:16]};
	mux32 m4_right(sld4,sdr4,right,t4); //mux32(a0,a1,s,y);y = s?a1:a0;
    mux32 m4_shift(d,t4,sa[4],s4);
    assign        sld3 = {s4[23:0],z[7:0]};
	assign        sdr3 = {e[7:0],s4[31:8]};
	mux32 m3_right(sld3,sdr3,right,t3); 
    mux32 m3_shift(s4,t3,sa[3],s3);
	assign        sld2 = {s3[27:0],z[3:0]};
	assign        sdr2 = {e[3:0],d[31:4]};
	mux32 m2_right(sld2,sdr2,right,t2); 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值