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ố

27 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 27
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

Mục lục Lời nói đầu Xu hướng ngành công nghiệp phần cứng thiết kế mạch có tốc độ xử lý nhanh, tính toán xác với diện tích mạch công suất ngày nhỏ Và môn học Thiết kế tổng hợp IC Hệ thống số, chúng em giao nhiệm vụ triển khai thuật toán CORDIC phần cứng Đây thực thử thách thú vị bọn em học kỳ Mặc dù kinh nghiệm thiết kế hệ thống số chưa nhiều, nhiên bọn em cố gắng để thực thành công Những sai sót trong thực khó tránh khỏi Do đó, chúng em mong nhận góp ý từ thầy bạn để Bài tập lớn hoàn hảo 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à, đơn vị số học lượng giác hàm mũ, hàm logarit, yếu tố quan trọng Trong năm gần đây, thư viện có cho đơn vị số học tồn quan tâm, với việc thu nhỏ tích hợp cao công nghệ vi mạch tiến triển, sử dụng mà không quan tâm đến chi phí vận hành thuật toán hoạt động Mặt khác, để thực xử lý tốc độ cao giảm quy mô mạch giảm tiêu thụ điện thiết kế mạch, cần có đơn vị số học riêng biệt mà đưa vào chi phí tính toán tính toán thuật toán theo ngữ cảnh sử dụng Vì vậy, tập nhằm mục đích thực thiết kế phần cứng đơn vị hoạt động "hàm lượng giác", hoạt động có ý thức thuật toán tính toán chi phí Lý đối tượng chức lượng giác để làm sâu sắc thêm hiểu biết kiến thức phần cứng nhiều thiết kế hàm lượng giác bản, mong muốn tiếp tục phát triển Ở mức 1, ta tập trung vào phương pháp CORDIC, thuật toán điểm cố định, để thiết kế đơn vị số học "hàm lượng giác" Ở mức 2, không giới hạn phương pháp CORDIC, cách sử dụng loạt bảng thuật toán phương pháp tra cứu (Maclaurin mở rộng), nội suy mở rộng Taylor, thiết kế đơn vị số học chi phí thấp nhất, giảm quy mô mạch tăng tốc độ xử lý nhằm giảm điện tiêu thụ 1.2 Kĩ cần có Để thực tập lớn này,sinh viên cần có kiến thức môn học: kiến thức điện tử số, cổng bản, mạch đồng bộ,không đồng bộ, FSM,ASMD… Ngoài sinh viên cần phải biết cài đặt sử dụng số phần mềm như: - Matlab: để mô thuật toán hỗ trợ tính toán phép toán lớn - Simulink: mô thuật toán mức khối - Quartus: Viết tổng hợp code Verilog HDL - Modelsim: Viết 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 STT Công việc Tìm hiểu yêu cầu viết Specification Lập kế hoạch Thiết kế module Thiết kế testbench Viết code Matlab thiết kế hệ thống Simulink Tổng hợp Synopsys Design Compiler Thực Cả nhóm Trương Lê Văn Trương Lê Văn, Nguyễn Văn Trọng Trương Lê Văn, Phùng Văn Thông Trương Lê Văn, Phùng Văn Thông Nguyễn Văn Trọng III Thuật toán Cordic 3.1 Khái niệm CORDIC CORDIC (COordinate Rotation DIgital Computer) phương pháp đơn giản hiệu để tính toán hàm lượng giác hypepol Nó thường dùng nhân phần cứng không khả dụng (Ví dụ: vi xử lý đơn giản, FPGAs), xây dựng từ cộng trừ, dịch bit, bảng tham chiếu Thuật toán CORDIC xuất phát từ Givens Rotation Error: Reference source not found:  cθ s θ − sθ   x   x '  = cθ   y   y '  x ' = xcθ − ysθ   y ' = ycθ + xsθ hay (3.1) Phương trình (3.1) cho thấy phép quay vector mặt phẳng Đề-các (Cartesian plane) góc θ Phép toán viết lại sau:   x ' = cos θ ( x − y tan θ )    y ' = cos θ ( y + x tan θ ) (3.2) Nếu góc quay xác định cho tanθ = ±2-i, phép nhân với tanθ đơn giản hóa phép dịch bit Error: Reference source not found Một góc quay tùy ý thay việc quay liên tiếp nhiều góc nhỏ Khi cosθ số Quá trình quay liên tiếp thể Phương trình (3.3):  xi +1 = Ki ( xi − si yi 2− i )   −i  yi +1 = K i ( yi + si xi ) (3.3) Trong ( ) Ki = cos tan −1 ( 2− i ) = 1 + −2 i si = ±1 (3.4) (3.5) Loại bỏ số Ki khỏi phương trình vòng lặp Tích số K i bổ sung vào kết cuối Tích tiến tới giá trị 0.60725 lặp vô hạn lần: ∞ K =∏ i =0 1 + −2 i = 0.60725 (3.6) Góc quay tổng hợp xác định từ góc quay nhỏ lần lặp Việc tính toán góc quay bổ sung thêm phương trình thứ vào thuật toán CORDIC zi +1 = zi − si tan −1 ( 2− i ) (3.7) Tan-1(2-i) số, giá trị lưu lại bảng số (Bảng 3.1) Trên phần cứng, bảng lưu lại ROM Bảng 3.1 Hằng số Arctan i tan-1(2-i) 0.785398 0.463648 0.244979 0.124354 0.062419 0.031239 … … Hệ phương trình cho thuật toán CORDIC:  xi +1 = xi − si yi 2− i  −i  yi +1 = yi + si xi  z = z − s tan −1 (2− i )  i +1 i i (3.8) CORDIC làm việc chế độ Chế độ thứ gọi chế độ quay (Rotation) Trong chế độ này, vector quay góc xác định tham số đầu vào Chế độ thứ hai chế độ vector (Vectoring) Vector quay trục x (hay nói cách khác, y bị triệt tiêu) đồng thời ghi lại góc quay 3.2 Chi tiết thuật toán 3.2.1 Chế độ quay Chọn tọa độ điểm khởi tạo x(0), y(0) = 0; z(0) = = K n x0 cos θ xn = Rn cos zn = + δ 02 + δ12 + δ n2−1 x0 cos θ yn = Rn sin zn = + δ 02 + δ12 + δ n2−1 x0 sin θ = K n x0 sin θ Trong : Kết cuối : Để đơn giản hóa chọn cho 3.3 Sơ đồ thuật toán Cordic IV Quy trình thiết kế Quy trình thiết kế ASIC chia làm hai phần Front-end Back-end Front-end bao gồm bước không phụ thuộc công nghệ chế tạo, trình thiết kế kiểm thử chức thiết kế Chúng ta sử dụng liệu phần cho nhiều công nghệ chế tạo khác mà không ảnh hưởng đến sản phẩm cuối Còn Back-end gồm bước thực dựa công nghệ chế tạo Chương 2: Thực đề tài I Đặc tả kỹ thuật (Specification) Sơ đồ hệ thống: Chức năng: Khi nhập vào góc, khối CORDIC thực tính toán cho đầu SINE COSINE góc Các cổng vào ra: Cổng Độ rộng bit Angle X_start Y_start Clock Reset Ready COSout SINout 16 16 16 1 16 16 Cổng Vào/ Cổng Ra input input input input input input output output Miêu tả Góc cần tính Giá trị X0 ban đầu Giá trị Y0 ban đầu Chu kì xung nhịp Reset Thực tính toán xong Cosin cần tính Sine cần tính Mã hóa tín hiệu: mã hóa dạng fix-point Bitlengh Bít phần nguyên [I] Bít dấu [S] • 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 • Ví dụ: Bít phần thập phân [F] 14 SI F 0001101000010101 Chỉ tiêu phi chức năng: Tỷ lệ lỗi: 2.4% Tốc độ: 100 Mhz Diện tích cell: 6000 II Thực kết quả Mô 4.1 Mô Matlab 10 Sau khoảng 40 lần lặp ta thu sin cos góc nhập vào gần xác 100% Figure Cos(55) 4.2 Mô simulink Sơ đồ khối thuật toán simulink: 13 Khối Pre rotation: Khối Input Mux 14 Khối cộng trừ X,Y,Z: 15 Kết mô cho Sin 60: 16 4.3 Code verilog, mô modelsim chạy kết quả thu Matlab Sau mô đạt kết tốt matlab simulink, ta chuyển qua tiến hành bước viết code Verilog Quartus,sau mô file testbench Modelsim Có nhiều cách để kiểm tra kết quả, nhóm em chọn cách xuất kết file so sánh với kết việc vẽ biểu đồ matlab Đây kết tổng hợp modelsim cho đầu vào từ góc từ đến 360 độ : 17 Các đầu sin cos lưu lại file “output.txt” sau so sánh với kết Matlab Đây kết mô so sánh : 4.4 Tổng hợp mạch 4.4.1 Tổng hợp mạch quartus: 18 RTL Viewer: 4.4.2 Tổng hợp mạch Synopsys : Figure Mạch sau chọn Check Design 19 Figure Mạch sau chọn Compile Design Figure Mạch sau chọn Compile Ultra 20 Figure Report Timing Figure 10 Report Area Area report: 5934 total cell define Kết luận Mặc dù gặp nhiều khó khăn trình thiết kế, nhiên bọn em tiếp thu thêm nhiều kiến thức bổ ích, đặc biệt tự thiết kế hệ thống theo 21 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ế khối, mô tổng hợp mạch Cuối cùng, bọn em xin gửi lời cám ơn chân thành đến Tiến Sĩ Nguyễn Đức Minh nhiệt tình giúp đỡ bọn em hoàn thành Bài tập lớn Tài liệu tham khảo http://www.lsi-contest.com/2015/index_e.html https://en.wikipedia.org/wiki/CORDIC http://www.uio.no/studier/emner/matnat/ifi/INF5430/v12/undervisningsmaterial e/dirk/Lecture_cordic.pdf http://www.andraka.com/files/crdcsrvy.pdf Phụ lục Địa thư mục chứa file code bọn em: https://drive.google.com/folderview? id=0B3aQsZMR4kuSbHBaNEJMOGRYU0E&usp=sharing Code Verilog: //CORDIC METHOD module CORDIC(clock, cosine, sine, x_start, y_start, angle); parameter width = 16; // Inputs input clock; input signed [width-1:0] x_start,y_start; input signed [15:0] angle; 22 // Outputs output signed [width-1:0] sine, cosine;// size of sine and cosine is bit larger due to a system 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) assign atan_table[04] = 16'b0000001010001011; assign atan_table[05] = 16'b0000000101000101; assign atan_table[06] = 16'b0000000010100010; assign atan_table[07] = 16'b0000000001010001; assign atan_table[08] = 16'b0000000000101000; assign atan_table[09] = 16'b0000000000010100; assign atan_table[10] = 16'b0000000000001010; assign atan_table[11] = 16'b0000000000000101; assign atan_table[12] = 16'b0000000000000010; assign atan_table[13] = 16'b0000000000000001; assign atan_table[14] = 16'b0000000000000000; assign atan_table[15] = 16'b0000000000000000; assign atan_table[16] = 16'b0000000000000000; assign atan_table[17] = 16'b0000000000000000; assign atan_table[18] = 16'b0000000000000000; 23 assign atan_table[19] = 16'b0000000000000000; assign atan_table[20] = 16'b0000000000000000; assign atan_table[21] = 16'b0000000000000000; assign atan_table[22] = 16'b0000000000000000; assign atan_table[23] = 16'b0000000000000000; assign atan_table[24] = 16'b0000000000000000; assign atan_table[25] = 16'b0000000000000000; assign atan_table[26] = 16'b0000000000000000; assign atan_table[27] = 16'b0000000000000000; assign atan_table[28] = 16'b0000000000000000; assign atan_table[29] = 16'b0000000000000000; // atan(2^-29) assign atan_table[30] = 16'b0000000000000000; 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 24 begin x[0] 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 da cong hoac tru) assign z_sign = z[i][15]; // Z_sign = if Z[i] < always @(posedge clock) begin // add/subtract shifted data x[i+1] [...]... X,Y,Z: 15 Kết quả mô phỏng cho Sin 60: 16 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ến hành bước viết code trên Verilog trên Quartus,sau đó mô phỏng bằng file testbench trê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... 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ếp thu 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 21 đú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, mô phỏng và tổng hợp ra mạch Cuối cùng, bọn em xin gửi lời cám ơn chân...Figure 1 Code trên Matlab Đầ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) 11 Figure 3 Cos(60) Figure 4 Sin(55) 12 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ác 100% Figure 5 Cos(55) 4.2 Mô phỏng bằng simulink Sơ đồ khối thuật toán trên simulink: 13 Khối... http://www.lsi-contest.com/2015/index_e.html 2 https://en.wikipedia.org/wiki /CORDIC 3 http://www.uio.no/studier/emner/matnat/ifi/INF5430/v12/undervisningsmaterial e/dirk/Lecture _cordic. pdf 4 http://www.andraka.com/files/crdcsrvy.pdf Phụ lục Địa chỉ thư mục chứa các file code của bọn em: https://drive.google.com/folderview? id=0B3aQsZMR4kuSbHBaNEJMOGRYU0E&usp=sharing Code Verilog: / /CORDIC METHOD module CORDIC( clock, cosine, sine, x_start, y_start,... 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 độ : 17 Các đầu ra của sin và cos được lưu lại trong file “output.txt” sau đó được so sánh với kế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: 18 RTL Viewer:

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