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 1Mụ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 2Lờ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 3mạ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 5số 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 61 1
22tan (2 )
3.2 Chi tiết thuật toán
3.2.1 Chế độ quay
Trang 7Chọ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 n và x0sao cho K n x0=1.
3.3 Sơ đồ thuật toán Cordic
Trang 9IV 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 10Chương 2: Thực hiện đề tài
I Đặc tả kỹ thuật (Specification)
Trang 11Mã 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 13Figure 3 Cos(60)
Figure 4 Sin(55)
Trang 14Sau 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 15Khối Pre rotation:
Khối Input Mux
Trang 16Khối cộng trừ X,Y,Z:
Trang 17Kết quả mô phỏng cho Sin 60:
Trang 184.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 19Cá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 20RTL Viewer:
4.4.2 Tổng hợp mạch bằng Synopsys :
Figure 6 Mạch sau khi chọn Check Design
Trang 21Figure 7 Mạch sau khi chọn Compile Design
Figure 8 Mạch sau khi chọn Compile Ultra
Trang 22Figure 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 25reg 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 27for (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