Thiết kế khối tổng hợp dao động số
NCO
Gồm 3 nội dung chính:
Định nghĩa và cơ sở toán học của NCO
Kết quả mô phỏng trên modelsim và hiện thực hóa
khối tổng hợp dao động số NCO trên FPGA
Ứng dụng của khối tổng hợp dao động số NCO
Thiết kế khối tổng hợp dao động số NCO
1. Định nghĩa
NCO viết tắt của Numerically Controler Osillator. Là
khối tổng hợp dao động bằng vi mạch số. Khối này có
khả năng tổng tạo ra dao động với tần số mong muốn
một các trực tiếp bằng một vi mạch số tích hợp.
Cơ sở toán học của NCO
Sóng sin mà ta muốn tổng hợp có hàm số phụ thuộc
thời gian và tần số như sau:
Y(t) = U0 sin(∆φt) = U0 sin(2пft)
Nếu đặt φ(t) = ∆φt = 2пft thì φ(t) là một hàm phụ
thuộc tuyến tính theo thời gian, nếu biểu diễn giá trị pha
theo thang 0-3600 .
Thiết kế khối tổng hợp dao động số NCO
Thiết kế khối tổng hợp dao động số NCO
Chia trục thời gian thành các khoảng cách đều nhau ∆t, khi
đó giá trị biên độ tương ứng là:
yk = U0 sin(φk(t)) = U0 sin(∆φ.k.∆t)
Áp dụng định lý kachenhikov về rời rạc hóa và khôi phục tín
hiệu, để thu được tổ hợp các giá trị Uk đủ để khôi phục hoàn
toàn sóng ban đầu giá trị đó phải thỏa mãn: ∆t < 1/2f
Giá trị tích lũy pha không nhất thiết thay đổi từ 0-3600 mà
trên thực tế chọn miền giá trị 0-2N (2N > 3600),để thu được
độ chính xác và độ phân giải cao hơn.
Giá trị tích lũy pha Pk được tính bởi 1 khối cộng có đầu vào
là giá trị tích lũy N bit m.
Pk = k.m
Giá trị biên độ Uk được số hóa tương ứng trong bảng Sin là:
Uk =
Thiết kế khối tổng hợp dao động số NCO
Sơ đồ khối của NCO
Thời gian để thực hiện hết một chu kỳ sóng Sin là:
Tần số của sóng thu được tính theo công thức:
Thiết kế khối tổng hợp dao động số NCO
Nếu x3x2= 00 thì giá trị tương ứng giữ nguyên
Nếu x3x2 = 01 thì giá trị tương của biên độ
Nếu x3x2 = 10 thì giá trị tương của biên độ
Nếu x3x2 = 11 thì giá trị tương của biên độ
Thiết kế khối tổng hợp dao động số NCO
2.
Kết quả mô phỏng trên modelsim và hiện thực hóa khối
tổng hợp dao động số NCO trên FPGA
Tài nguyên sử dụng:
Chu kỳ nhỏ nhất: 5.656ns (Tần số lớn nhất: 176.803MHz)
Thời gian trễ nhỏ nhất ở đầu vào trước xung nhịp clock: 2.360ns
Thời gian đòi hỏi lớn nhất ở đầu ra sau xung nhịp clock: 5.434ns
Kết quả về thời gian tĩnh sau khi thực hiện kết nối và phân bố thu được
chu kỳ nhỏ nhất là 4,947 ns tương ứng với xung nhip cực đại chính xác là
202,143 Mhz.
Thiết kế khối tổng hợp dao động số NCO
3. Ứng dụng của khối tổng hợp dao động số NCO
Điều chế biên độ:
Thiết kế khối tổng hợp dao động số NCO
3. Ứng dụng của khối tổng hợp dao động số NCO
Điều chế tần số:
THUẬT TOÁN CORDIC
Gồm có 4 nội dung chính sau
A. Giới thiệu thuật toán cordic
B. Nội dung thuật toán
C. Mô tả bằng VHDL và kiểm tra trên Modelsim
D. Kết luận
A. Giới thiệu
CORDIC = COordinate Rotation DIgital Computer
Được tính toán và mô tả lần đầu tiên vào năm 1959 bởi
•CORDIC
thực hiện
mộttính
lớptoán
lớn các
của hàm
các ứng
dụng
Jack E. Volder
cho việc
lượng
giác,gồm
cácnhân
hàm:
vàlượng
chia. giác, logarit và siêu việt; phép nhân số
phức,
trị John
riêngWalther
của vector,
ma trận
đảo, giải
Nămtính
1971,
phát triển
giảinghịch
thuật CORDIC
tính
các hàm
Cùng
gianthường
này
cáccho
hệ việc
thống
tuyến
tínhhypebolic.
và phân tích
giáthời
trị bất
Cochran
đánhxử
dấulýviệc
thay
đổivàgiải
thuật
chỉ rahọc
trong
xử lýcũng
tín hiệu,
hình
ảnh,
tính
toánvàkhoa
CORDIC là lựa chọn tốt nhất cho các ứng dụng tính
nóirằng
chung.
toán khoa học.
Do tiềm năng, hiệu quả và chi phí thấp của CORDIC nên
được phổ biến và phát triển mạnh.
B. NỘI DUNG THUẬT TOÁN
Y
Ý tưởng xuất phát
sin f
Quay (1,0) đi 1 góc f để đạt được
•
(x,y) : x = cos (f), y = sin (f)
Khi quay bất cứ vector (x,y) góc f
x x. cos(f ) y. sin(f )
y y. cos(f ) x. sin(f )
f
X
cos f
Y
(x’,y’)
(x,y)
f
X
Đưa cos ra ngoài, viết lại biểu thức
x cos(f ).[ x y. tan(f )]
y cos(f ).[ y x. tan(f )]
sin(f )
tan(f )
cos(f )
B. NỘI DUNG THUẬT TOÁN
x cos(f ).[ x y. tan(f )]
y cos(f ).[ y x. tan(f )]
Ta chọn các góc đặc biệt: f1, f2, …, fm
Sao cho: fi = arctan 2-i hay tanfi = 2-i
Tại lần quay thứ i, tính được (xi+1, yi+1) từ (xi, yi)
như sau:
xi 1 K i .[ xi yi .d i .2 i ]
yi 1 K i .[ yi xi .d i .2 i ]
xi 1 cos(fi ).[ xi yi .d i . tan(fi )]
yi 1 cos(fi ).[ yi xi .d i . tan(fi )]
Trong đó:
Sau n lần quay
K i cos( i ) cos(tan 1 (2 i ))
d i 1
n
K K i n , K 0.607 252 935...
i 0
B. NỘI DUNG THUẬT TOÁN
i
Ví dụ: f=30.0°
0
0 = 45.045.0
Start with
(>
30.0)
0
45.0 – 26.61 = 18.4 26.6
(<0 30.0)
18.4 + 14.02 = 32.4 14.0
(>0 30.0)
32.4 – 7.1 = 25.3 (< 30.0)
3
7.10
25.3 + 3.6 = 28.9 (< 30.0)
0
28.9 + 1.8 4 = 30.7 3.6(>
30.0)
...
5
1.80
tan(i)
i
f
45°
1
= 2-0
0.5
= 2-1
0.25
= 2-2
0.125
= 2-3
0.0625
= 2-4
0.03125
= 2-5
6
0.90
0.015625
= 2-6
7
0.40
0.0078125
= 2-7
= 30.0
8
0.20
0.00390625
45.0 – 26.60 + 14.0 – 7.1 + 3.6
9
0.1
0.001953125
+ 1.8 – 0.9 + 0.4 – 0.2 + 0.1
…
…
…
= 30.1
= 2-8
= 2-9
…
30°
C. MÔ TẢ BẰNG VHDL VÀ KIỂM TRA TRÊN
MDELSIM
I.
•
•
•
•
CORDIC ROTATION MODE
Tại mỗi bước quay, cố gắng làm cho z = 0
( với z là góc hiện tại)
Khởi đầu: x = 1; y = 0, z = f
For i = 0 →n
x0,y0
y
di = 1 when z>0, else -1
-45
xi+1= xi – di . 2-i . yi
30
-14
-i
yi+1 = yi + di . 2 . xi
+26.6
zi+1 = zi – di . i
Kết quả: xn=cos(f), yn=sin(f)
x2,y2
x
x3,y3
x1,y1
SƠ ĐỒ KHỐI
Ví dụ với góc cần tính là 300
Kết quả trên mô phỏng hiển thị sau 14 lần quay
0 01 0110110100001
= 1.425
0 00 1101001011101
= 0.824
Cos 300 = 1.425*0.6073 = 0.866
Sin 300 = 0.824*0.6073 = 0.5003
C. MÔ TẢ BẰNG VHDL VÀ KIỂM TRA TRÊN
MODELSIM
II. CORDIC VECTOR MODE
• Sự khác nhau với rotation mode
• Khi chọn di, thay vì cố gắng làm cho z tiến tới 0, thì sẽ cố
gắng làm cho yi.
• di = –sign (xi . yi)
• Các giá trị sẽ tiến tới là:
• xn = 1/K (x2 + y2)½
• yn = 0
• Zn = z + tan-1(y/x)
• Ứng dụng
• Nếu bắt đầu với x= 1, z= 0, giá trị z cuối cùng sẽ là
arctan(y)
SƠ ĐỒ KHỐI
Ví dụ:
arctan 0.577 = 300 = 0.5236 rad
1 Số Slice Flip Flops
56
Kết quả hiện trên mô phỏng
Số LUTs 4 đầu vào
2 Input
270
: 0 00 1001001111001 = 0.577
Số Slice
3 output
147
: 0 00 1000011000000 = 0.523
Logic sử dụng
STT
Sử dụng
Có sẵn
Tỷ lệ
9312
0%
9312
2%
4656
3%
4
Số IOs
51
5
Số IOBs ngoại quan
51
158
32 %
6
Số BUFGMUXs
1
24
4%
•Chu kỳ nhỏ nhất: 10.061ns (Tần số lớn nhất: 99.390MHz)
• Thời gian trễ nhỏ nhất ở đầu vào trước xung nhịp clock: 3.672ns
• Thời gian đòi hỏi lớn nhất ở đầu ra sau xung nhịp clock: 8.570ns