1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Triển khai thuật toán Cordic trên FPGA BTL môn thiết kế IC và Hệ thống số

28 1,8K 10

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 28
Dung lượng 2,38 MB

Nội dung

Thiết kế liên quan đến xử lý tín hiệu kỹ thuật số, đặc biệt là, các đơn vị số học lượng giác và hàm mũ, hàm logarit, là một trong những yếu tố quan trọng. Trong những năm gần đây, thư viện hiện có cho đơn vị số học như vậy tồn tại rất được quan tâm, với việc thu nhỏ và tích hợp cao của công nghệ vi mạch đã tiến triển, nó được sử dụng mà không quan tâm đến chi phí vận hành và các thuật toán hoạt động. Mặt khác, để thực hiện xử lý tốc độ cao và giảm quy mô mạch và giảm tiêu thụ điện năng trong thiết kế mạch, cần có một đơn vị số học riêng biệt mà sẽ đưa vào chi phí tính toán và tính toán thuật toán theo ngữ cảnh sử dụng. Vì vậy, bài tập này là nhằm mục đích thực hiện một thiết kế phần cứng của các đơn vị hoạt động như là một hàm lượng giác, các hoạt động có ý thức và thuật toán tính toán chi phí. Lý do về đối tượng của chức năng lượng giác là để làm sâu sắc thêm sự hiểu biết kiến thức về phần cứng nhiều hơn bởi thiết kế của hàm lượng giác là rất cơ bản, và mong muốn tiếp tục phát triển. Ở mức 1, ta sẽ tập trung vào phương pháp CORDIC, đó là một trong những thuật toán điểm cố định, để thiết kế các đơn vị số học của hàm lượng giác. Ở mức 2, không giới hạn ở phương pháp CORDIC, bằng cách sử dụng một loạt các bảng thuật toán phương pháp tra cứu hoặc (Maclaurin mở rộng), và nội suy mở rộng Taylor, chúng tôi thiết kế các đơn vị số học và chi phí thấp nhất, và giảm quy mô mạch và tăng tốc độ xử lý các nhằm giảm điện năng tiêu thụ. 1. Thuật toán Cordic, mô phỏng trên Simulink 2. Thực hiện đề tài 3. Triển khai trên Synopsys

Trang 1

Mục lục

Lời nói đầu 2

Chương 1: Tổng quan đề tài 2

I Yêu cầu đề tài 2

1.1 Mục tiêu 2

1.2 Kĩ năng cần có 3

II Phân công công việc 4

III Thuật toán Cordic 4

3.1 Khái niệm CORDIC 4

3.2 Chi tiết thuật toán 6

3.3 Sơ đồ thuật toán Cordic 8

IV Quy trình thiết kế 9

Chương 2: Thực hiện đề tài 10

I Đặc tả kỹ thuật (Specification) 10

II Thực hiện và kết quả Mô phỏng 11

4.1 Mô phỏng bằng Matlab 11

4.2 Mô phỏng bằng simulink 14

4.3 Code verilog, mô phỏng trên modelsim và chạy kết quả thu được trên Matlab 17

4.4 Tổng hợp mạch 19

Kết luận 22

Tài liệu tham khảo 22

Phụ lục 23

Trang 2

Lời nói đầu

Xu hướng của ngành công nghiệp phần cứng hiện nay là thiết kế được nhữngmạch có tốc độ xử lý nhanh, tính toán chính xác với diện tích mạch và công suấtngày càng nhỏ

Và trong môn học Thiết kế và tổng hợp IC và Hệ thống số, chúng em được giaonhiệm vụ triển khai thuật toán CORDIC trên phần cứng Đây thực sự là một thửthách khá thú vị đối với bọn em trong học kỳ này Mặc dù kinh nghiệm thiết kế hệthống số vẫn chưa được nhiều, tuy nhiên bọn em vẫn rất cố gắng để thực hiện thànhcông

Những sai sót trong quá trong thực hiện là khó tránh khỏi Do đó, chúng em rấtmong nhận được những sự góp ý từ thầy và các bạn để Bài tập lớn này được hoànhảo hơn

Chương 1: Tổng quan đề tài

I Yêu cầu đề tài

1.1 Mục tiêu

Thiết kế liên quan đến xử lý tín hiệu kỹ thuật số, đặc biệt là, các đơn vị số học lượng giác và hàm mũ, hàm logarit, là một trong những yếu tố quan trọng Trong những năm gần đây, thư viện hiện có cho đơn vị số học như vậy tồn tại rất được quan tâm, với việc thu nhỏ và tích hợp cao của công nghệ vi

Trang 3

mạch đã tiến triển, nó được sử dụng mà không quan tâm đến chi phí vận hành

và các thuật toán hoạt động Mặt khác, để thực hiện xử lý tốc độ cao và giảm quy mô mạch và giảm tiêu thụ điện năng trong thiết kế mạch, cần có một đơn

vị số học riêng biệt mà sẽ đưa vào chi phí tính toán và tính toán thuật toán theo ngữ cảnh sử dụng.

Vì vậy, bài tập này là nhằm mục đích thực hiện một thiết kế phần cứng của các đơn vị hoạt động như là một "hàm lượng giác", các hoạt động có ý thức và thuật toán tính toán chi phí Lý do về đối tượng của chức năng lượng giác là để làm sâu sắc thêm sự hiểu biết kiến thức về phần cứng nhiều hơn bởi thiết kế của hàm lượng giác là rất cơ bản, và mong muốn tiếp tục phát triển.

Ở mức 1, ta sẽ tập trung vào phương pháp CORDIC, đó là một trong những thuật toán điểm cố định, để thiết kế các đơn vị số học của "hàm lượng giác".

Ở mức 2, không giới hạn ở phương pháp CORDIC, bằng cách sử dụng một loạt các bảng thuật toán phương pháp tra cứu hoặc (Maclaurin mở rộng), và nội suy mở rộng Taylor, chúng tôi thiết kế các đơn vị số học và chi phí thấp nhất, và giảm quy mô mạch và tăng tốc độ xử lý các nhằm giảm điện năng tiêu thụ.

1.2 Kĩ năng cần có

Để thực hiện bài tập lớn này,sinh viên cần có những kiến thức cơ bản về môn học: các kiến thức về điện tử số, các cổng cơ bản, các mạch đồng bộ,không đồng bộ, FSM,ASMD…

Ngoài ra sinh viên cần phải biết cài đặt và sử dụng một số phần mềm như:

- Matlab: để mô phỏng thuật toán và hỗ trợ tính toán các phép toán lớn.

- Simulink: mô phỏng thuật toán ở mức khối.

Trang 4

- Quartus: Viết và tổng hợp code Verilog HDL.

- Modelsim: Viết và chạy file testbench để test hệ thống.

- Design compiler: Tổng hợp mạch ở mức RTL.

II Phân công công việc

III Thuật toán Cordic

3.1 Khái niệm CORDIC

CORDIC (COordinate Rotation DIgital Computer) là phương pháp đơn giản và hiệuquả để tính toán các hàm lượng giác và hypepol Nó thường được dùng khi bộ nhânphần cứng không khả dụng (Ví dụ: các vi xử lý đơn giản, FPGAs), và được xây dựng

từ các bộ cộng trừ, dịch bit, bảng tham chiếu

Thuật toán CORDIC được xuất phát từ Givens Rotation Error: Reference source notfound:

Trang 5

số Quá trình quay liên tiếp này được thể hiện trong Phương trình ( 3 3):

Loại bỏ các hằng số Ki khỏi phương trình trong mỗi vòng lặp Tích của các hằng số Ki

sẽ được bổ sung vào kết quả cuối cùng Tích này tiến tới giá trị 0.60725 khi lặp vô hạnlần:

2 0

1

0.60725

1 2 i i

Trang 6

1 1

22tan (2 )

3.2 Chi tiết thuật toán

3.2.1 Chế độ quay

Trang 7

Chọn tọa độ điểm khởi tạo x(0), y(0) = 0; z(0) = 0

Trang 8

Để đơn giản hóa chúng ta sẽ chọn K nx0sao cho K n x0=1.

3.3 Sơ đồ thuật toán Cordic

Trang 9

IV Quy trình thiết kế

Quy trình thiết kế ASIC được chia làm hai phần là Front-end và Back-end Front-end bao gồm các bước không phụ thuộc công nghệ chế tạo, là quá trình thiết kế và kiểm thử chức năng thiết kế Chúng ta có thể sử dụng những dữ liệu của phần này cho nhiều công nghệ chế tạo khác nhau mà không ảnh hưởng đến sản phẩm cuối cùng Còn Back-end gồm các bước thực hiện dựa trên công nghệ chế tạo.

Trang 10

Chương 2: Thực hiện đề tài

I Đặc tả kỹ thuật (Specification)

Trang 11

Mã hóa tín hiệu: mã hóa dạng fix-point

Bitlengh

 Sign bit: Số bít dấu

 Integer bit: Số bit mã hóa phần nguyên

 Fraction part: Số bit mã hóa phần thập phân

Trang 12

Đầu tiên chúng ta sẽ thư mô phỏng thuật toán bằng phần mềm matlab.

Chạy thử với một số trường hợp ta thấy kết quả có độ chính xác rất cao :

Figure 2 Sin(60) Figure 1 Code trên Matlab

Trang 13

Figure 3 Cos(60)

Figure 4 Sin(55)

Trang 14

Sau khoảng 40 lần lặp ta thu được sin và cos của góc nhập vào là gần như chính xác100%

Figure 5 Cos(55)

4.2 Mô phỏng bằng simulink

Sơ đồ khối thuật toán trên simulink:

Trang 15

Khối Pre rotation:

Khối Input Mux

Trang 16

Khối cộng trừ X,Y,Z:

Trang 17

Kết quả mô phỏng cho Sin 60:

Trang 18

4.3 Code verilog, mô phỏng trên modelsim và chạy kết quả thu được trên Matlab

Sau khi đã mô phỏng và đạt kết quả tốt trên matlab và simulink, ta chuyển qua tiếnhành bước viết code trên Verilog trên Quartus,sau đó mô phỏng bằng file testbenchtrên Modelsim Có nhiều cách để kiểm tra kết quả, nhóm em sẽ chọn cách xuất kết quả

ra file và so sánh với kết quả đúng bằng việc vẽ biểu đồ trên matlab

Đây là kết quả tổng hợp được trên modelsim khi cho đầu vào từ là các góc từ 1 đến

360 độ :

Trang 19

Các đầu ra của sin và cos được lưu lại trong file “output.txt” sau đó được so sánh vớikết quả đúng bằng Matlab Đây là kết quả mô phỏng so sánh :

4.4 Tổng hợp mạch.

4.4.1 Tổng hợp mạch bằng quartus:

Trang 20

RTL Viewer:

4.4.2 Tổng hợp mạch bằng Synopsys :

Figure 6 Mạch sau khi chọn Check Design

Trang 21

Figure 7 Mạch sau khi chọn Compile Design

Figure 8 Mạch sau khi chọn Compile Ultra

Trang 22

Figure 9 Report Timing

Figure 10 Report Area

Area report: 5934 total cell define

Kết luận

Mặc dù còn gặp nhiều khó khăn trong quá trình thiết kế, tuy nhiên bọn em cũng tiếpthu thêm được nhiều kiến thức bổ ích, đặc biệt là có thể tự thiết kế một hệ thống theo

Trang 23

đúng quy trình, từ bước phân tích yêu cầu, thiết kế đặc tả kỹ thuật, thiết kế các khối,

input signed [width-1:0] x_start,y_start;

input signed [15:0] angle;

Trang 24

// Outputs

output signed [width-1:0] sine, cosine;// size of sine and cosine is 1 bit larger due to asystem gain of 1.647

// Generate table of atan values

wire signed [31:0] atan_table [0:30];

assign atan_table[00] = 16'b0010000000000000; // 45.000 degrees -> atan(2^0) assign atan_table[01] = 16'b0001001011100100; // 26.565 degrees -> atan(2^-1) assign atan_table[02] = 16'b0000100111111011; // 14.036 degrees -> atan(2^-2) assign atan_table[03] = 16'b0000010100010001; // atan(2^-3)

Trang 25

reg signed [width-1:0] x [0:width-1];

reg signed [width-1:0] y [0:width-1];

reg signed [15:0] z [0:width-1];

// make sure rotation angle is in -pi/2 to pi/2 range

wire [1:0] quadrant;

assign quadrant = angle[15:14];

always @(posedge clock)

begin // make sure the rotation angle is in the -pi/2 to pi/2 range

case(quadrant)

2'b00,

2'b11: // no changes needed for these quadrants

Trang 27

for (i=0; i < (width-1); i=i+1)

begin: xyz

wire z_sign;

wire signed [width:0] x_shr, y_shr;

assign x_shr = x[i] >>> i; // signed shift right

assign y_shr = y[i] >>> i;// y[i]=y[i]* 2^-i

//the sign of the current rotation angle(dau cua goc sau khi da cong hoac tru)

assign z_sign = z[i][15]; // Z_sign = 1 if Z[i] < 0

always @(posedge clock)

begin

// add/subtract shifted data

x[i+1] <= z_sign ? x[i] + y_shr : x[i] - y_shr;// x[i+1]= x[i]-$[i]y[i] with $[i]=2^-i y[i+1] <= z_sign ? y[i] - x_shr : y[i] + x_shr;// y[i+1]= y[i]-$[i]x[i] with $[i]=2^-i z[i+1] <= z_sign ? z[i] + atan_table[i] : z[i] - atan_table[i];// z[i+1]= z[i]+atan($[i]) end

end

endgenerate

// assign output

assign cosine = x[width-1];// output cosin

assign sine = y[width-1];//output sine

endmodule

Ngày đăng: 29/04/2016, 17:07

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w