Tải bản đầy đủ (.pdf) (25 trang)

Nghiên cứu xây dựng các bộ cộng, bộ nhân và bộ so sánh bằng ngôn ngữ phần cứng verilog

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (367.01 KB, 25 trang )

MỤC LỤC
CHƯƠNG 1 : GIỚI THIỆU ................................................................................. 6
1.1 TỔNG QUAN. ........................................................................................... 6
1.2 GIỚI THIỆU VỀ SỐ DẤU CHẤM ĐỘNG IEEE 754. ........................... 6
CHƯƠNG 2 : XÂY DỰNG BỘ NHÂN VÀ BỘ CỘNG........................................ 7
2.1 Xây dựng bộ nhân. .................................................................................... 7
2.1.1 Giải thuật Modified Booth Multiplier. ................................................. 7
2.1.2 Kiểm tra giải thuật. .............................................................................. 8
2.1.3 Kiến trúc bộ Modified Booth Multiplier. ............................................. 9
2.2 Xây dựng bộ cộng. ....................................................................................10
2.2.1 Bộ cộng bán phần Half Adder (HA)....................................................10
2.2.2 Bộ cộng toàn phần Full Adder ( FA). ..................................................10
2.2.3 Bộ cộng Ripple Carry Adder (RCA) ...................................................11
2.2.4 Bộ cộng Carry Save Adder (CSA) ......................................................12
CHƯƠNG 3 KẾT LUẬN. ....................................................................................13
3.1 Bộ nhân. ....................................................................................................13
3.2 Bộ cộng .....................................................................................................14
PHỤ LỤC .............................................................................................................17
TÀI LIỆU THAM KHẢO ....................................................................................21

1


DANH SÁCH HÌNH VẼ

2


DANH SÁCH BẢNG

3




DANH SÁCH TỪ VIẾT TẮT

4


MỤC TIÊU
- Nghiên cứu và xây dựng các bộ cộng, bộ nhân và bộ so sánh bằng ngôn ngữ phần cứng
Verilog
- Nghiên cứu và xây dựng khối truy cập bộ nhớ nội bằng ngôn ngữ phần cứng Verilog

5


CHƯƠNG 1 : GIỚI THIỆU
1.1 TỔNG QUAN.
Mạng nơron nhân tạo xây dựng dựa trên 2 module cơ bản chính là bộ nhân và bộ
cộng. Hầu hết các tính toán đều dựa trên phép nhân và phép cộng để thực hiện. Do đó
việc thực thi phần cứng mà đảm bảo tính chính xác trong việc thực thi hai phép toán này
là điều vô cùng quan trọng. Do đó tính chính xác trong việc tiếp cận các phép tính này
được đặt lên hàng đầu.
1.2 GIỚI THIỆU VỀ SỐ DẤU CHẤM ĐỘNG IEEE 754.

- Số dấu chấm động 32 bit được biểu diễn dưới dạng:
Trong đó:
 Sign :1 bit dấu. bit 0 cho số dương và 1 cho số âm
 Exponent : 8bit phần mũ
 Significand :23 bit phần định trị


- Giá trị thực của số dấu chấm động được tính bằng:

Với :

!

"

6


CHƯƠNG 2 : XÂY DỰNG BỘ NHÂN VÀ BỘ CỘNG
2.1 Xây dựng bộ nhân.
2.1.1

Giải thuật Modified Booth Multiplier.

Giải thuật Modified Booth Multiplier cơ số 4 (cho số có dấu)
 Chèn thêm 1 bit 0 vào sau LSB của số nhân.
 Nếu số bit của số nhân là số lẻ thì mở rộng thêm 1 bit dấu (MSB) cho số nhân.
Nếu số bit của số nhân là số chẵn thì không mở rộng thêm bit MSB cho số nhân.
 Chia số nhân ra thành các nhóm, mỗi nhóm gồm 3 bits, có chồng lấp 1 bit.
 Từ các khoảng chia số nhân (mỗi nhóm có 3 bits), xác định các tích thành phần từ
bảng encoder.
 Tính tổng các tích thành phần với nhau.
 Cộng thêm chuỗi bit hiệu chỉnh kết quả. Chuỗi bit có dạng
{1010….101011,00…00}. Số bit 0 thêm vào (00..00) bằng chiều dài của (số bị
nhân+1). Chiều dài chuỗi bit hiệu chỉnh=chiều dài kết quả phép nhân.
X2i+1 X2i X2i-1 Action
0


0

0

0xY

0

0

1

1xY

0

1

0

1xY

0

1

1

2xY


1

0

0

-2xY

1

0

1

-1xY

1

1

0

-1xY

1

1

1


0xY

7


2.1.2

Kiểm tra giải thuật.

Thiết kế bộ nhân 2 số có dấu (bù 2): X.Y, với X: 5 bits, Y: 17 bits.
Ví dụ: Cho X=-6 , Y=+3665. Tính X.Y?
X=-610=110102 (số có dấu 5bits bù 2)
1) Y=+366510=000001110010100012 (số có dấu 17bits bù 2)
Chèn thêm 1 bit 0 vào sau LSB của X: 110100
2) Số bit của X là số lẻ (5bits)mở rộng thêm 1 bit dấu cho X: 1110100
3) Chia X thành từng nhóm, mỗi nhóm 3bits, có chồng lấp 1 bit: 1110100
4) Tính tổng các tích thành phần cùng với chuỗi bit hiệu chỉnh lại với nhau.
5) Dựa vào bảng Encoder, tìm các tích thành phần.
X2i+1 X2i X2i-1 Action Partial product (18bits)
1

0

0

-2xY

111110001101011110


1

0

1

-1xY

111111000110101111

1

1

1

0xY

000000000000000000

Chuỗi bit hiệu chỉnh có số bit 0 thêm vào bằng chiều dài của (số bị nhân+1)có dạng
011000000000000000000
000111110001101011110
011111100011010111100
000000000000000000000
011000000000000000000

: Chuỗi bit hiệu chỉnh

111111010101000011010

-21990 : (-6)x(+3665)=-21990

8


2.1.3

Kiến trúc bộ Modified Booth Multiplier.

CSA: Carry Save Adder
CLA: Carry Look Ahead Adder
<<1: dịch trái 1 bit (chèn bit 0
vào)

9


2.2 Xây dựng bộ cộng.
2.2.1 Bộ cộng bán phần Half Adder (HA).
Bộ cộng bán phần có nhiệm vụ thực hiện phép cộng số học x+y với x, y là 2 bit nhị phân
ngõ vào
Hệ có 2 ngõ ra là tổng (S: sum) và bit nhớ (C: carry)

2.2.2 Bộ cộng toàn phần Full Adder ( FA).
Bộ cộng toàn phần có nhiệm vụ thực hiện phép cộng nhị phân số học 3 bit x + y + z .
Trong đó z là bit nhớ được gửi từ bộ cộng có trọng số nhỏ hơn
xây dựng bộ cộng toàn phần dựa trên ghép 2 bộ cộng bán phần

10



2.2.3 Bộ cộng Ripple Carry Adder (RCA)
Bộ cộng RCA 4 bit được thực hiện bằng cách ghép nối 4 bộ cộng Full Adder

Bộ cộng Carry Look Ahead Adder (CLA)
Ngõ ra bộ cộng toàn phần: S=xyz; C=x.y+(xy).z
Đặt: Gi=ai.bi
Pi=aibi
Si=PiCi
Ci+1=Gi+Pi.Ci

Bộ cộng CLA 4bits

11


Giá trị của biến nhớ trong mỗi bộ Full Adder:
C1=G0+P0.C0
C2=G1+P1.C1=G1+P1(G0+P0.C0)=G1+P1.G0+P1.P0.C0
C3=G2+P2.C2=G2+P2(G1+P1.G0+P1.P0.C0)=G2+P2.G1+P2.P1.G0+P2.P1.P0.C0
C4=G3+P3.C3=G3+P3.G2+P3.P2.G1+P3.P2.P1.G0+P3.P2.P1.P0.C0

2.2.4 Bộ cộng Carry Save Adder (CSA)
Carry save adder là một bộ cộng số học, được sử dụng trong kiến trúc máy tính để tính
tổng của số từ 3 bit trở lên, nó khác với các bộ cộng số học khác ở chỗ ngõ ra tổng S có
cùng kích thước ( số bit) với ngõ vào và ngõ ra còn lại là bit nhớ (carry).

Wallace tree

12



CHƯƠNG 3 : KẾT LUẬN.
3.1 Bộ nhân.
Sau khi xây dựng được mô hình phần mềm cũng như phần cứng, bộ nhân được tiến hành
kiểm tra với các trường hợp tiêu biểu nhất như sau
•‚ƒ„…†
3-1 Kết quả mô phỏng bộ nhân dấu chấm động 32 bit
case factor 1

factor 2

software

hardware

error

1

2.67895

0.125

0.33486875

0.3348687589169

3.9*10-17


2

1.245

1.25

1.55625

1.5562499761581

2.8*10-16

3

-0.00873

64.0019531 -0.55873705078125 -0.558737039566

6.2*10-17

4

108.936

-0.375

5

0.983764


-0.0078125 -0.00768565625

-0.0076856561936

1.5*10-21

6

-1

-1

1

1

0

7

-1.0039063 0

0

0

0

8


0.003

-5.9

-0.0177

-0.0176999960095

7.9*10-18

9

2.1875

-0.625

-1.3671875

-1.3671875

0

10

0

0

0


0

0

-40.8509979248046 2.1*10-12

-40.851

13


DANH SÁCH BẢNG

3


•‚ƒ„…†
3-2 Bả ng Kết quả mô phỏ ng bộ cộ ng dấu chấm độ ng 32 bit
case factor 1

factor 2

software

hardware

error

1


2.67895

0.125

2.80395

2.8039500713348

2.5*10-15

2

0.5117188 -0.4843750 0.027343750

0.02734375

0

3

-0.00873

4

0.9837640 -0.0078125 0.9759515

0.9759514927864

2.6*10-17


5

-0.75000

-1.75

-2.5

-2.5

0

6

1.245000

1.25

2.495

2.4949998855591

6.5*10-15

7

-13.125

17.625


4.5

4.5

0

8

0

12345.625

12345.625

12345.625000

0

9

108.936

-0.375

108.561

108.560997009277 4.4*10-12

10


-0.75000

1.75

1

1

64.0019531 63.993223125 63.9932250976562 1.9*10-12

0

Dựa trê n kết quả mô phỏ ng bằ ng phầ n mềm (M atl ab) và phầ n cứ ng (VCS), các thố ng kê về
s ai số được tí nh toá n nhằm đá nh giá chí nh xác hiệu nă ng củ a bộ cộ ng dấu chấm độ ng 32 bit

15


SAI SỐ BỘ CỘNG

10-12
5
4.5
4
3.5
3
2.5
2
1.5
1

0.5
0

Trường hợp
kiểm tra
1

2

3

4

5

6

7

8

9

10

‰Š‹„Œ†
3-1 Đá nh giá sa i số của bộ cộ ng dấu c hấm độ ng 32 b it
 Đánh giá kết quả
Kết quả được đá nh giá dựa trê n số l iệu t hu được sau quá trì nh kiểm tra trê n tool VCS và tí nh
toá n các số l iệu c hí nh xác.


16


PHỤ LỤC

1) Code Verilog cho bộ nhân 2 số 5bits x 17bits theo thuật toán Modified Booth Multiplier
//out=in1*in2-->21bit (1 sign bit plus 20 data bits)
//2 clock cycles
module window(in2,in1,out,en,clk,reset);//17*5 multiplier,output 21bit
input [4:0]in1;
//5 bit 2's complement (hamming window) (1 sign bit plus 4 data bits)
input [16:0]in2;
//17 bit 2's complement (preemphasized samples) (1 sign bit plus 15 data //bits)
input en;
input clk,reset;
output [20:0]out;//21bit 2's complement (windowed samples)(1 sign bit plus //20 data bits)
reg [20:0]out;
wire [17:0]boothout1,boothout2,boothout3;//length(booth)=length(in2)+1
wire [20:0]cout1,cout2;
wire [20:0]mulout1,mulout2;
reg [19:0]a20,b20;
wire [19:0]sum20;
reg state;
reg t;
//See Modified Booth Multiplier

booth17 booth1(boothout1,{in1[1:0],1'b0},in2);//chen them bit 0 vao
booth17 booth2(boothout2,in1[3:1],in2);
booth17 booth3(boothout3,{in1[4],in1[4:3]},in2);//so bit vao le (5 bit) --> mo rong sign bit (in1[4])

csa21win csa21win1(cout1,mulout1,{2'b0,~boothout1[17],boothout1},
{~boothout2[17],boothout2,2'b0},{boothout3[16:0],4'b0});
csa21win csa21win2(cout2,mulout2,{cout1[19:0],1'b0},mulout1,
{3'b011,18'b0});//so bit 0 them vao cuoi=length(boothout)
cla20win cla20win(sum20,a20,b20);
always @(negedge clk or negedge reset)
begin
if(reset==0)

17


begin
state<=0;
a20<=0;
b20<=0;
out<=0;
t<=0;
end
else
begin
case(state)
0:
begin
if(en==1)
begin
a20<=cout2[19:0];
b20<=mulout2[20:1];
t<=mulout2[0];
state<=1;

end
end
1:
begin
out<={sum20,t};//sum20[19] is the signbit
state<=0;
end
endcase
end
end
endmodule
//submodule cla20win//
//add n bit
//A,B:sign
//Ket qua chi dung voi dieu kien A[MSB]=A[MSB-1],B[MSB]=B[MSB-1]
//out:sign
module cla20win(out,A,B);//out=A+B
parameter WIDTH=19;
input [WIDTH:0]A,B;

18


DANH SÁCH TỪ VIẾT TẮT

4


cla4i cla4_1(sum[8:5],ctmp[0],a[8:5],b[8:5],gp[1],gg[1]);
cla4i cla4_2(sum[12:9],ctmp[1],a[12:9],b[12:9],gp[2],gg[2]);

cla4i cla4_3(sum[16:13],ctmp[2],a[16:13],b[16:13]);
endmodule
//module cla4i
module cla4i(S,Cin,A,B,PG,GG);
input [3:0]A,B;
input Cin;
output [3:0]S;
output PG,GG;
wire [3:0]C,P,G;
MYCLALOG clalog(P,G,Cin,,C[3:1],PG,GG);
MYPFA pfa0(A[0],B[0],C[0],S[0],P[0],G[0]);
MYPFA pfa1(A[1],B[1],C[1],S[1],P[1],G[1]);
MYPFA pfa2(A[2],B[2],C[2],S[2],P[2],G[2]);
MYPFA pfa3(A[3],B[3],C[3],S[3],P[3],G[3]);
assign C[0]=Cin;
endmodule
//module MYCLALOG
module MYCLALOG(P,G,Cin,Cout,C,PG,GG);
input [3:0]P,G;
input Cin;
output [3:1]C;
output PG,GG,Cout;
wire t1,t2,t3,t4,t5,t6,t7,t8,t9,t10;
assign PG=P[0]&P[1]&P[2]&P[3];
assign t1=P[3]&G[2];
assign t2=P[3]&P[2]&G[1];
assign t3=P[3]&P[2]&P[1]&G[0];
assign GG=G[3]|t1|t2|t3;
assign t4=P[0]&Cin;
assign C[1]=G[0]|t4;

assign t5=P[1]&G[0];
assign t6=P[1]&P[0]&Cin;
assign C[2]=G[1]|t5|t6;
assign t7=P[2]&G[1];
assign t8=P[2]&P[1]&G[0];
assign t9=P[2]&P[1]&P[0]&Cin;

20


assign C[3]=G[2]|t7|t8|t9;
assign t10=P[3]&P[2]&P[1]&P[0]&Cin;
assign Cout=G[3]|t1|t2|t3|t10;
endmodule
//module MYPFA
module MYPFA(A,B,C,S,P,G);
input A,B,C;
output S,P,G;
assign G=A&B;
assign P=A^B;
assign S=P^C;
endmodule

21


TÀI LIỆU THAM KHẢO

22



23


MỤC TIÊU
- Nghiên cứu và xây dựng các bộ cộng, bộ nhân và bộ so sánh bằng ngôn ngữ phần cứng
Verilog
- Nghiên cứu và xây dựng khối truy cập bộ nhớ nội bằng ngôn ngữ phần cứng Verilog

5


25


×