16位桶形(循环)移位寄存器Verlog程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

综合过程要在速度与面积之间进行折中考虑。“资源共享”是面积的优化技术。在设计中牺牲一些硅片的面积,往往会增加速度。下面是一个16位的桶形移位寄存器,(1)是优化前的代码(2)是优化后的代码

优化代码使用了两级复用器,其速度得到提高。复用器共2级个4选一复用器。对第一级,对输入数据进行0,1,2或3位循环移位;第二级,对输入进行0,4,8,12位的循环移位。

(1)优化前的桶形移位寄存器

module barrel_org(S,A_P,B_P);

input[3:0]S;

input[15:0]A_P;

input{15:0]B_P;

reg[15:0]B_P;

always@(A_P or S)

begin

case(S)

4'b0000:

begin

B_P<=A_P;

end

4'b0001:

begin

B_P[15]<=A_P[0];

B_P[14:0]<=A_P[15:1];

end

4'b0010:

begin

B_P[15:14]<=A_P[1:0]; B_P[13:0]<=A_P[15:2]; end

4'b0011:

begin

B_P[15:13]<=A_P[2:0]; B_P[12:0]<=A_P[15:3]; end

4'b0100:

begin

B_P[15:12]<=A_P[3:0]; B_P[11:0]<=A_P[15:4]; end

4'b0101:

begin

B_P[15:11]<=A_P[4:0]; B_P[10:0]<=A_P[15:5]; end

4'b0110:

begin

B_P[15:10]<=A_P[5:0]; B_P[9:0]<=A_P[15:6]; end

4'b0111:

begin

B_P[15:9]<=A_P[6:0]; B_P[8:0]<=A_P[15:7]; end

4'b1000:

begin

B_P[15:8]<=A_P[7:0]; B_P[7:0]<=A_P[15:8]; end

4'b1001:

begin

B_P[15:7]<=A_P[8:0]; B_P[6:0]<=A_P[15:9]; end

4'b1010:

begin

B_P[15:6]<=A_P[9:0]; B_P[5:0]<=A_P[15:10]; end

4'b1011:

begin

B_P[15:5]<=A_P[10:0]; B_P[4:0]<=A_P[15:11];

end

4'b1100:

begin

B_P[15:4]<=A_P[11:0]; B_P[3:0]<=A_P[15:12]; end

4'b1101:

begin

B_P[15:3]<=A_P[12:0]; B_P[2:0]<=A_P[15:13]; end

4'b1110:

begin

B_P[15:2]<=A_P[13:0]; B_P[1:0]<=A_P[15:14]; end

4'b1111:

begin

B_P[15:1]<=A_P[14:0]; B_P[0]<=A_P[15];

end

default:

B_P]<=A_P;

endcase

endmodule

(2)优化后的桶形移位寄存器

module barrel_org(S,A_P,B_P); input[3:0]S;

input[15:0]A_P;

input{15:0]B_P;

reg[15:0]B_P;

wire[1:0]SEL1,SEL2;

reg[15:0]C;

assign SEL1=S[1:0];

assign SEL2=S[3:2];

always@(A_P or SEL1)

begin

case(SEL1)

2'b00:

begin

C<=A_P;

end

2'b01:

begin

C[15]<=A_P[0];

C[14:0]<=A_P[15:1];

end

begin

C[15:14]<=A_P[1:0]; C[13:0]<=A_P[15:2]; end

2'b11:

begin

C[15:13]<=A_P[2:0]; C[12:0]<=A_P[15:3]; end

default:

C<<=A_P;

endcase

end

always@(A_P or SEL2)

begin

case(SEL2)

2'b00:

begin

B_P<=C;

end

2'b01:

begin

B_P[15:12]<=C[3:0];

B_P[11:0]<=C[15:4]; end

2'b10:

begin

B_P[15:8]<=C[7:0]; B_P[7:0]<=C[15:8]; end

2'b11:

begin

B_P[15:4]<=C[11:0]; B_P[3:0]<=C[15:12]; end

default:

B_P<=C;

endcase

end

endmoudle

相关文档
最新文档