Tải bản đầy đủ (.docx) (38 trang)

thiết kế ADC 8 bits sử dụng ngôn ngữ lập trình VHDL và phần mềm

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 (1.35 MB, 38 trang )

Nguyễn Ngọc
Sơn
KTĐ&THCN 2 – K50
LỜI MỞ ĐẦU
FPGA (Field-programmable gate array), là một chip bán dẫn chứa các thành
phần logic khả trình gọi là các khối logic và mạng kết nối khả trình. Các khối logic

thể lập trình để thực hiện các hàm logic cơ bản như AND, XOR, hoặc phức tạp hơn
như
các bộ giải mã hay các hàm toán học đơn giản. Trong hầu hết các FPGA, các khối
logic
thường bao gồm các phần tử nhớ, có thể là các Flip-Flop hoặc các khối memory.
FPGA đã xuất hiện từ rất lâu cùng cới các dòng vi xử lý khác, song một vài
năm
gần đây nó được phát triển và sáng tạo như một cơn bão vào làng vi xử lý. Với các
bài
toán mang tính phức tạp cao, cần độ chính xác cả về phần mềm và phần cứng thì
FPGA
là một giải pháp thông minh. Chỉ cần một chip FPGA, ta có thể thiết kế vô số các
chức
năng khác nhau, mỗi chức năng mang trong mình một nhiệm vụ khác nhau.
Để minh chứng cho điều này, em sẽ thiết kế một bộ chuyển đổi Analog –
Digital
(ADC) 8-bits sử dụng chip FPGA. Vì phạm vi đề tài có hạn em chỉ ở mức mô
phỏng.
Tương lai, đề tài này có thể phát triển lên như thêm module hiển thị kết quả bằng
LED
7 thanh, … Đề tài được thực hiện bởi ngôn ngữ lập trình VHDL và phần mềm mô
phỏng Xilinx – ISE.
1
Trường đại học Bách khoa


Hà Nội
13/11/2009
Nguyễn Ngọc Sơn
KTĐ&THCN 2 – K50
A – NGÔN
NGỮ LẬP
TRÌNH VHDL.
VHDL là
một ngôn
ngữ lập
trình mô
tả phần
cứng,
được
dung phổ
biến trong
thiết kế vi mạch
tích hợp. Ngoài
VHDL, trong
thiết kế mạch tích
hợp người ta còn
dung
các ngôn ngữ
khác như Verilog,
E, C/C++,
SystemC, CHP,
Balsa, Tangram,
… Song
trong việc thiết
kế cho các chip

FPGA, người ta
thường sử dụng
ngôn ngữ VHDL.
Chương
trình
VHDL
bao gồm
các design
units. Một
số design
units độc
lập với
các design units
khác.
Thư viện
Library là
một tập
hợp các
design
units đã
được
kiểm
chứng.
Trong đó
Work và STD là hai thư
viện dung được cho mọi
design units.
library
IEEE ;
packa

ge
logic
1164
is
packa
ge
logic
unsig
ned
is
packa
ge
logic
arith
is
B – PHẦN MỀM LẬP
TRÌNH VÀ MÔ
PHỎNG Xilinx – ISE.
Version ta dùng ở
đây là Xilinx –
ISE 10.1. Các bản
version của Xilinx
– ISE
đều có thể sử dụng hai
loại ngôn ngữ lập trình là
Vhdl và Verilog. Giao
diện rất dễ sử
dụng:
2
T

r
ư

n
g

đ

i

h

c

B
á
c
h

k
h
o
a

H
à

N

i

13/11/2009
Nguyễn Ngọc Sơn
KTĐ&THCN 2 – K50
C – THUẬT
TOÁN
CHƯƠNG
TRÌNH.
Sơ đồ
khối của
bài toán
như sau:
3
Trư ờng
đ

i

h

c

B
á
c
h

k
h
o
a


H
à

N

i
13/11/2009
Nguyễn Ngọc Sơn
KTĐ&THCN 2 – K50
Trong đó:
Vin là tín
hiệu điện
áp cần
chuyển
đổi
(Input)
V
ref


n
hi

u
đi

n
á
p

s
o

n
h
(I
n
p
ut
)
D
i

8
bi
ts
s

ra
c

a
b

A
D
C
i
=
0,…,7

(Outp
ut)
Ta lấy Vref = 10
VDC làm điện áp
so sánh. Với ADC
8 bits sẽ có 28 =
256 trạng
thái chạy từ 0000 0000
tới 1111 1111. Như vậy
mỗi bước tính tương ứng
là:
N = 10/(256
– 1)
Số 8 bits ra của
bộ ADC sẽ là:
n =
Vin/N
=
Vin(25
6 –
1)/10
=
Vin*25
5/10 =
Vin
*25,5
Code của bài toán
như sau:
-------------------------------
-------------------------------

--------------------
-- Company:
-- Engineer:
--
-- Create Date: 08:39:47
11/13/2009
-- Design Name:
-- Module Name: adc1 -
Behavioral
-- Project Name:
-- Target Devices:
-- Tool versions:
-- Description:
--
-- Dependencies:
--
-- Revision:
-- Revision 0.01 - File
Created
-- Additional Comments:
--
-------------------------------
-------------------------------
--------------------
library IEEE;
use
IEEE.STD_LOGIC_1164.
ALL;
use
IEEE.NUMERIC_STD.A

LL;
---- Uncomment the
following library
declaration if instantiating
---- any Xilinx primitives
in this code.
--library UNISIM;
--use
UNISIM.VComponents.al
l;
4
T
r
ư

n
g

đ

i

h

c

B
á
c
h


k
h
o
a

H
à

N

i
13/11/2009
Nguyễn Ngọc Sơn
KTĐ&THCN 2 – K50
entity adc1 is
port (analog_in :
in integer range 0
to 15;
digital_out :
out
std_logic_v
ector(7
downto 0)
);
end adc1;
architecture
Behavioral of
adc1 is
constant

conversion_time:
time := 25 ns;
signal
instantly_digitiz
ed_signal :
std_logic_vecto
r(7 downto 0);
signal
delayed_digitize
d_signal :
std_logic_vecto
r(7 downto 0);
function
ADC_8b_10v_b
ipolar (
analog_in:
integer range 0
to +15
) return
std_logic_vecto
r is
constant
max_abs_digit
al_value :
integer := 256;
constant
max_in_signal
: integer := 10;
variable
analog_signal:

integer;
variable
analog_abs: integer;
variable
analog_limited:
integer;
variable
digitized_signal:
integer;
variable digital_out:
std_logic_vector(7
downto 0);
begin
analog_signal :=
integer(analog_in);
if (analog_signal < 0)
then -- i/p = -ve
digitized_signal :=
integer(analog_signal
* 256/10);
if (digitized_signal <
-
(max_abs_digital_val
ue)) then
digitized_signal := -
(max_abs_digital_v
alue);
end if;
else -- i/p = +ve
digitized_signal :=

integer(analog_signal
* 26);
if (digitized_signal >
(max_abs_digital_val
ue - 1)) then
digitized_signal :=
max_abs_digital_va
lue - 1;
end if;
end if;
digital_out :=
std_logic_vector(to_si
gned(digitized_signal,
digital_out'length));
return digital_out;
end
ADC_8b_10v_bipolar;
begin
s0:
instantly_digitized_signal
<=
std_logic_vector
(ADC_8b_10v_bipo
lar (analog_in));
5
T
r
ư

n

g

đ

i

h

c

B
á
c
h

k
h
o
a

H
à

N

i
13/11/2009
Nguyễn Ngọc Sơn
KTĐ&THCN 2 – K50
s1:

delayed_digitize
d_signal <=
instantly_di
gitized_sign
al after
conversion_
time;
s2: digital_out
<=
delayed_digitize
d_signal;
end Behavioral;
D – CÁC BƯỚC
THỰC HIỆN.
Vào
Xilinx –
ISE từ
màn hình
Desktop:
Tạo New
Project:
6
T
r
ư

n
g

đ


i

h

c

B
á
c
h

k
h
o
a

H
à

N

i
13/11/2009
Nguyễn Ngọc Sơn
KTĐ&THCN 2 – K50
Nhập tên
sau đó
chọn ngôn
ngữ lập

trình là
VHDL:
7
Trư
ờng
đại
học
B
á
c
h

k
h
o
a

H
à

N

i
13/11/2009
Nguyễn Ngọc Sơn
KTĐ&THCN 2 – K50
Next:
Next:
8
Trư

ờng
đại
học
Bác
h
kho
a

Nội

×