Báo cáo cuối kỳ môn Thiết kế hệ thống và vi mạch đề tài "Hệ thống truyền thông nối tiếp bất đồng bộ Uart"

Báo cáo cuối kỳ môn Thiết kế hệ thống và vi mạch đề tài "Hệ thống truyền thông nối tiếp bất đồng bộ Uart" của Đại học Sư phạm Kỹ thuật Thành phố Hồ Chí Minh với những kiến thức và thông tin bổ ích giúp sinh viên tham khảo, ôn luyện và phục vụ nhu cầu học tập của mình cụ thể là có định hướng ôn tập, nắm vững kiến thức môn học và làm bài tốt trong những bài kiểm tra, bài tiểu luận, bài tập kết thúc học phần, từ đó học tập tốt và có kết quả cao cũng như có thể vận dụng tốt những kiến thức mình đã học vào thực tiễn cuộc sống. Mời bạn đọc đón xem!

lOMoARcPSD|36991220
lOMoARcPSD|36991220
MC LC
CHƯƠNG 1: TỔNG QUAN ................................................................................................. 1
1.1 Đặt vn ..................................................................................................................... 1
1.2. Mc tiêu ..................................................................................................................... 1
1.3. Ni dung nghiên cu ................................................................................................. 1
1.4. B cc ........................................................................................................................ 1
1.5.Gii hn ...................................................................................................................... 2
CHƯƠNG 2: CƠ SỞ LÝ THUYT ......................................................................................... 3
2.1. Gii thiu v chun giao tiếp UART ........................................................................... 3
2.1.1. Khái nim v UART ................................................................................................. 3
2.1.2. Thông s cơ bản và khung truyn d liu .............................................................. 4
2.1.3. Chức năng và ứng dng ca UART ......................................................................... 6
2.1.3.1. Chức năng ............................................................................................................ 6
2.1.3.2. ng dng ca UART trong truyn d liu ........................................................... 6
2.2. Đặc im và nguyên lý hot ng ................................................................................. 7
2.2.1. Đặc im ................................................................................................................... 7
2.2.2. Nguyên lý hot ng ca UART ................................................................................ 8
CHƯƠNG 3: THIẾT K GIAO THC UART .......................................................................... 8
3.1. Sơ ồ khi thiết kế UART ............................................................................................. 8
3.2. Mô t thiết kế b UART ............................................................................................. 9
3.2.1. Khi tc baud ....................................................................................................... 9
3.2.2. Khi m FIFO ........................................................................................................ 10
3.2.3. Khi nhn UART .................................................................................................... 11
3.2.3.1. Sơ lược ............................................................................................................... 11
3.2.3.2. Hot ng ca b nhn UART ............................................................................. 12
lOMoARcPSD|36991220
3.3.4. Khi phát UART..................................................................................................... 13
3.3.4.1. Sơ lược ............................................................................................................... 13
3.3.4.2. Hot ng ca b truyn UART ........................................................................... 14
CHƯƠNG 4: ĐÁNH GIÁ QUA TEST BENCH ...................................................................... 15
4.1. Mô hình test bench tng quát ................................................................................. 15
4.2. Kết qu ..................................................................................................................... 16
4.3. Nhn xét và ánh giá ................................................................................................. 17
CHƯƠNG 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIN ............................................................ 18
5.1. Kết lun .................................................................................................................... 18
5.2. Hướng phát trin ..................................................................................................... 18
PH LC .................................................................................................................... 1
TÀI LIU THAM KHO ......................................................................................... 15
lOMoARcPSD|36991220
+
CHƯƠNG 1: TỔNG QUAN
1.1 Đặt vn
Ngày nay, khoa hc công ngh ang phát trin mnh m, ạt ược nhiu thành
tu trong mi lĩnh vc, c biệt lĩnh vực in t. ng dng ca FPGA (Field
Programmable Gate Arrays) thiết b lp trình thông dng, lp trình cho c vi
mch bán dn nh, công sut thp to ra các h thng iu khin t ng gii
quyết nhiu bài toán phc tp.
Các giao thc truyn thông óng mt vai trò quan trng trong vic t chc giao
gia các thiết bị. Được thiết kế khác nhau tùy thuc vào yêu cu h thng, các
giao thc này c quy tc c th ược thng nht gia các thiết b truyn d
liu thành công, in hình UART. Các h thng nhúng, vi iu khin máy tính
thường s dụng UART như mt dng giao thc giao tiếp phn cng gia thiết b
vi thiết b. Giao tiếp UART hiện ược s dng trong nhiu ng dng giao tiếp vi
các module như Wifi, Bluetooth, Arduino và các vi iu khiển khác. Nó cũng là một
tiêu chun giao tiếp ược s dng rng rãi trong ngành công nghiệp. Để tìm hiu
thêm v giao tiếp gia các thiết b s, chúng em chn nghiên cu v UART
thc hin thiết kế kim th 1 IC UART bng ngôn ng mô t phn cng Verilog.
1.2. Mc tiêu
Hiu thế nào là UART.
Nm vng vai trò, chc năng của UART.
Hiu rõ cu trúc, hot ng và chức năng từng khi ca UART.
Thc hin thiết kế các khi ca UART s dng ngôn ng Verilog.
1.3. Ni dung nghiên cu
m hiu vai trò, chức năng, và nguyên tắc hot ng ca tng khi UART.
Thiết kế kim th 1 IC UART s dng ngôn ng mô t phn cng Verilog.
1.4. B cc
Chương 1: Tổng quan
Chương 2: Cơ sở lý thuyết
Chương 3: Thiết kế giao thc UART
lOMoARcPSD|36991220
+
Chương 4: Đánh giá qua testbench
1.5.Gii hn
Do tài này chúng em ch thc hin nghiên cu lý thuyết và mô phng trên
phn mm Xilinx nên vn còn b gii hn phn thc hành trên kit test.
lOMoARcPSD|36991220
+
CHƯƠNG 2: CƠ SỞ LÝ THUYT
2.1. Gii thiu v chun giao tiếp UART
2.1.1. Khái nim v UART
Theo ịnh nghĩa, UART (Universal Asynchronous Receiver Transmitter) là mt
giao thc truyn thông phn cng s dng giao tiếp ni tiếp không ng b vi tc
có th nh cu hình. UART truyn d liu không ng bộ, có nghĩa là không có tín
hiu xung clock ng b hóa u ra ca các bit t UART truyn ến vic ly mu các
bit bi UART nhn. Thay vì tín hiu xung clock, UART truyn thêm các bit start và
stop vào gói d liệu ược chuyn. Các bit này xác nh im bt u im kết thúc
ca gói d liu UART nhn biết khi nào bt u c các bit.
Trong giao tiếp UART, hai UART giao tiếp trc tiếp vi nhau. UART truyn
chuyn i d liu song song t mt thiết b iu khiển như CPU thành dng ni
tiếp, truyn ni tiếp ến UART nhn, sau ó chuyn i d liu ni tiếp tr li
thành d liu song song cho thiết b nhn.
Khi UART nhn phát hin mt bit start, bt u c các bit ến mt tn s
c th ược gi tc truyn (baud rate). Tc truyền là thưc o tc truyn d
liệu, ược biu th bng bit trên giây (bps bit per second). C hai UART u phi
lOMoARcPSD|36991220
+
hot ng cùng mt tc truyn. Tc truyn gia UART truyn và nhn ch
th chênh lch khoảng 10% trưc khi thi gian ca các bit b lch quá xa.
C hai UART cũng phải ược cu hình truyn nhn cùng mt cu trúc gói
d liu.
S ng dây s dng
2
Tc truyn (Tc baud)
9600, 19200, 38400, 57600,
115200, 230400, 460800, 921600,
1000000, 1500000
Phương pháp truyn
Bt ng b
Truyn ni tiếp hay song
song?
Ni tiếp
S ng thiết b ch ti a
1
S ng thiết b t ti a
1
2.1.2. Thông s cơ bản và khung truyn d liu
Sơ ồ khung truyn UART
Các thông s bản cn nm trong giao tiếp UART bao gm:
lOMoARcPSD| 36991220
+
Baud rate (tc Baud): Khong thi gian 1 bit ưc truyn i. Phải ược cài t
ging nhau c phn gi nhn. Các thông s tc Baudrate thường hay s
dng d giao tiếp vi máy tính là 1200, 2400, 4800, 9600, ..., 115200.
IDLE( chế trng): lúc này tín hiu luôn mc 1 khi d liu trng, không
frame nào ược truyn i.
Bit START: Để bt u truyn d liu, UART chuyển ường truyn t mức “1”
xung mức “0” trong một chu k clock. Khi ó, nó bt u c các bit trong khung d
liu theo tn s ca tc truyền. Đây một bit bt buc cn trong giao thc
UART.
Frame (khung truyn): Khung truyn quy nh v mi ln truyn bao nhiêu
Data: D liu truyn i i t 5 bit ến 8 bit nếu dùng bit chn l. Nếu
không dùng bit chn l, data th i ến 9 bit. Thông thường, Bit có trng s nh
nhất LSB ược truyền trước sau ó ến bit MSB.
Bit parity:
Bit parity s là phương án giúp UART nhận cho biết liu có bt k d liu nào
ã thay i trong quá trình truyn hay không. Bit có th b thay i bi bc x in t,
tc truyn không khp hoc truyn d liu khong cách xa. Sau khi UART nhn
c khung d liu, nó s ếm s bit có giá tr là 1 và kim tra xem tng s là s chn
hay l.
2 loi Parity ó Parity chn (even parity) parity l (odd parity). Parity
chẵn nghĩa số bit 1 trong trong data truyn cùng vi bit Parity luôn s chn,
ngược li nếu Parity l nghĩa là số bit 1 trong data truyn cùng vi bit Parity luôn
s l. Bit Parity không phi bit bt buc thế chúng ta th loi b bit
này ra khi khung truyn.
Bit stop: Ngưc li vi bit start,bit Stop s truyn mức “1”dùng thông báo
kết thúc quá trình truyn d liu. Bit stop có th1; 1,5 hoc 2. (là bit bt buc
như Start bit).
Như vy, quá trình truyn d liu ca UART diễn ra dưới dng các gói d liu,
bt u bng mt bit bt ầu, ường mức cao ược kéo xung thp. Sau bit bt u
lOMoARcPSD|36991220
+
5 ến 9 bit d liu truyn trong khung d liu ca gói, theo sau bit chn l tùy
chn xác minh vic truyn d liu thích hp. Sau cùng, mt hoc nhiu bit dng
ược truyn nơi ưng t mc cao. Thế kết thúc mt gói d liệu ược truyn
i.
2.1.3. Chức năng và ứng dng ca UART
2.1.3.1. Chức năng
Chức năng chính ca UART truyn d liu ni tiếp. Trong UART, giao tiếp
gia hai thiết b có th ược thc hin theo hai cách là giao tiếp d liu ni tiếp và
giao tiếp d liu song song.
nghĩa rằng trong giao tiếp UART, hai UART giao tiếp trc tiếp vi nhau.
UART truyn chuyn i d liu song song t mt thiết b iu khiển như CPU thành
dng ni tiếp, truyn nó ni tiếp ến UART nhn, sau ó chuyn i d liu ni tiếp
tr li thành d liu song song cho thiết b nhn.
T chức năng trên nó ã góp phần làm nn vai trò vô ng quan trọng như các
h thng nhúng, vi iu khin máy tính hu hết s dng UART như mt dng
giao thc giao tiếp phn cng gia thiết b thiết b. Trong s các giao thc
truyn thông hin có, UART ch s dng hai dây cho bên truyn và bên nhn.
2.1.3.2. ng dng ca UART trong truyn d liu
Thông thường, UART dùng :
Giao tiếp máy tính vi các thiết b ngoi vi: UART giao din truyn thông
chun cho vic giao tiếp gia máy tính các thiết b ngoại vi như chut, bàn phím,
máy in, cng serial, v.v.
Truyn d liu gia vi x và các cm biến: UART ưc s dng truyn d
liu gia vi x các cm biến như cảm biến nhit , cm biến ánh sáng, cm
biến khong cách, v.v. Các cm biến này thường ược kết ni vi vi xthông qua
giao din UART truyn d liu v vi x x lý và hin th.
Giao tiếp gia các vi x lý: UART ưc s dng truyn d liu gia các vi x
lý trong các ng dụng như mạng iu khin, h thng nhúng và h thng iu khin
t ng.
lOMoARcPSD|36991220
+
Truyn d liu gia các thiết b in tử: UART ược s dng truyn d liu
gia các thiết b in t như vi xử lý, module RF, cng Ethernet, v.v.
Giao tiếp truyn thông trong các thiết b o ờng: UART ưc s dng trong
các thiết b o lường như ồng h o tc , ng h o nhit , v.v.
Giao tiếp truyn thông trong c ng dng in t tiêu th ít iện năng: UART
ược s dng trong các ng dng in t tiêu th ít in năng như các thiết b IoT,
cm biến không dây, thiết b iu khin t xa, v.v.
Trong thc tế thì không phương thức truyn dn nào tối ưu cả, tuy nhiên
i vi UART thì ã gần như áp ng hết nhu cu hin nay. Sau ây mt s ưu
nhưc im ca loi truyn dn không dây này:
* Ưu iểm:
Ch s dng hai dây truyn d liu.
Không cn tín hiu ng h.
Có mt bit chn l cho phép kim tra li.
Cu trúc ca gói d liu th ược thay i min c hai n ưc thiết lp
cho nó.
Phương pháp truyền ơn giản, giá thành thp.
* Nhưc im:
Kích thước ca khung d liệu ược gii hn ti a là 9 bit.
Không phù hp vi các h thng òi hi nhiu thiết b master và slave.
Tc truyn ca mi UART phi nm trong khong 10%.
2.2. Đặc im và nguyên lý hot ng
2.2.1. Đặc im
Trong sơ ồ UART có 3 dây cần lưu ý :
lOMoARcPSD|36991220
+
Transmitter (Tx): dây dùng gi d liu.
Receiver (Rx): dây dùng nhn d liu.
Dây GND: dùng to mt mc tham chiếu dùng so sánh vi các tín hiu
trong giao tiếp. Nếu không dây mass trong khi UART, c tín hiu có th không
ược c chính xác và gây ra các li trong giao tiếp.
2.2.2. Nguyên lý hot ng ca UART
Chân Tx (truyn) ca mt chip kết ni trc tiếp vi chân Rx (nhn) ca chip
kia và ngược li. Quá trình truyền thường s din ra 3.3V hoc 5V. UART là mt
giao thc gia mt master và mt slave. Trong ó mt thiết b ược thiết lp giao
tiếp vi ch mt thiết b khác.
D liu truyn ến i t UART song song vi thiết b iu khin. Khi tín hiu
gi trên chân Tx, UART u tiên s dch thông tin song song này thành ni tiếp
truyn ến thiết b nhn. Chân Rx ca UART th 2 s biến i tr li thành song
song giao tiếp vi thiết b iu khin.
D liu truyn qua UART óng thành các gói (packet). Mi gói cha 1 bit bt
u, 5 ến 9 bit d liu (tùy thuc vào UART), 1 bit chn l tùy chn 1 hoc 2 bit
dng.
Ngoài ra UART có th truyn theo mt trong ba chế :
Simplex: Ch giao tiếp mt chiu.
Half duplex: D liu i theo một hưng ti mt thi im.
Full duplex: Giao tiếp ng thi ến và i t mi master và slave
CHƯƠNG 3: THIẾT K GIAO THC UART
3.1. Sơ ồ khi thiết kế UART
lOMoARcPSD|36991220
+
Sơ ồ khi thiết kế b UART
3.2. Mô t thiết kế b UART
3.2.1. Khi tc baud
B to tc baud (Baud Rate Generator) to ra tín hiu ly mu tn s
bng úng 16 ln tc baud ược ch nh của UART. Để tránh làm giao các xung ng
h vi phm nguyên tc thiết kế ng b, tín hiu ly mu phi hot ộng như một
chân enable thay xung ng h i vi b thu UART. Các tc baud tiêu chun
ca UART bao gm 50, 75, 110, 300, 600, 1.200, 2.400, 4.800, 9.600, 14.400,
19.200, 38.400, 57.600, 115.200, 128.000 và 230.400, 460.800.
Ly d i vi tc baud 19.200, tc ly mu phi 307.200 (tc
19.200*16). Vi tc xung Clock h thng 10 MHz, b to tc baud cn mt
b ếm MOD-32 (10MHz/307.200). Thông thưng, xung Clock h thng tn s
rt cao, thay vì dùng mt lot các b chia ln có ưc tc truyn mong mun,
s r hơn nếu mt b chia ln duy nht theo sau bi mt b chia nh. Cách
này s hot ng tn s UART tiêu chun ưc s ca 2. d, cho tc xung
Clock h thng 2.457.600, 2 ngõ ra mong mun t ược 9.600 baud hoc
19.200 baud. Theo l thông thường, ta cn 1 b ếm MOD-128 cho ngõ ra 19.200
lOMoARcPSD|36991220
+
baud 1 b ếm MOD-256 cho ngõ ra 9.600 baud. Thay vào ó, ta th ng 1
b ếm MOD-128 (to ngõ ra 19.200 baud) theo sau ó là 1 ếm MOD-2 ly ngõ ra
9.600 baud.
3.2.2. Khi m FIFO
Khối lưu dữ liu FIFO
B m FIFO Trong tính toán và trong thuyết h thng, là một phương pháp
t chc thao tác cu trúc d liu. Trong ó mc nhập cũ nht ( u tiên), hoc ' u'
ca ng xếp, ược x lý u tiên. Quá trình x như vậy tương t như phục v
mọi người trong khu vc hàng ợi trên s ai ến trước ưc phc v trước, theo
cùng mt trình t mà h ã ến cho ti uôi ca hàng i. B m FIFO thường ược s
dng trong các mch in t m iu khin lung gia phn cng phn mm.
dng phn cng, FIFO ch yếu bao gm mt tp hp các con tr c và ghi, logic
lưu trữ iu khin. B nh th b nh truy cp ngẫu nhiên tĩnh (SRAM),
flip-flops, cht hoc bt k hình thức lưu trữ phù hợp nào khác. Đối vi các FIFO
có kích thước không nh, SRAM hai cổng thường ược s dng, trong ó mt cng
dành riêng ghi cng còn li c. nhiu cách to mt b m FIFO, tuy
nhiên cách ược s dng trong i tp phng này b FIFO vòng (array-base
buffer). Như tên gọi ca (array-base), b ệm y ược thc hin da trên mt
mng. m theo ó 2 con tr Write Read. Mi khi nhn lnh ghi, con tr
pWrite s ghi data vào b m, sau ó s tăng n 1 ơn vị. Mi khi nhn lnh c, con
lOMoARcPSD|36991220
+
tr pRead s tăng lên một. Sau ó c giá tr t b m ra. Khi 1 con tr tới ưc cui
mng, nó s cun li v trí u tiên.
Đó là lý do vì sao gọi ây là b m vòng.
B m này gm 2 c: empty (trng) và full ( y).
- C full: trng thái khi con tr ghi ã thc hin ghi d liệu ưc mt vòng
tròn và gp con tr c ti vòng tròn th 2. Nói cách khác, con tr c trùng vi con
tr ghi khi vòng quay con tr ghi lớn hơn con tr c 1 vòng. D liệu chưa ưc c
ra ã tín hiu ghi vào ô nh ó. Khi ó ta s không ược phép ghi d liu vào
na.
- C empty: trng thái con tr c trùng vi con tr ghi khi c 2 con tr ng
mt vòng. D liệu chưa ưc ghi vào ã tín hiu ọc ra, xem như d liệu cũng bị
mt.
- Độ sâu của FIFO: tương ứng s phn t ti a mà FIFO có th lưu trữ ược.
- Băng thông của FIFO: tương ương với kích thướng ca mt phn t d liu
ược c/viết trong mt chu k c/viết.
3.2.3. Khi nhn UART
3.2.3.1. Sơ lược
Khi nhn là mt trong hai khi quan trng nht cu thành UART (khi nhn
và khi phát).
- B nhn (UART reveiver): mch ly d liu thông qua quá trình ly mu.
- B to tc truyn (Baud rate generator): mch to ra các tín hiu enable
ly mu vi tn s da vào tn s baud truyn.
lOMoARcPSD|36991220
+
- Mch giao din (Interface circuit): mch cung cp b nh m và kim soát
trng thái cho iu khin truy xut và x lí d liu.
B nhn (UART- Receiver) b phn chính ca khi thc hin vic nhn d
liu ni tiếp t ường truyn kim tra, sau ó chuyn d liu t ni tiếp thành
song song và ưa ti vi iu khin hoc máy tính.
Mch giao din (Interface circuit): trong mt h thng UART thường ược xem
như là một mch ngoi vi truyn d liu ni tiếp và các h thng truy cp và iu
khiển cũng như như nhận d liu mt cách nh kì. thế mch 2 chức năng gồm
tín hiu thông báo d liu mi tránh vic truy xut d liu b trùng lp
cung cp b nh m.
3.2.3.2. Hot ng ca b nhn UART
Nguyên lý hot ng ca b nhận ưc th hin lưu ồ thuật toán bên dưới.
B nhn thc cht là mt máy trng thái Mealy vi u ra ca máy ph thuc
vào trng thái hin ti và u vào. Các u vào ca b nhn (UART Receiver) gm tín
hiu xung clock, reset, tín hiệu s_tick, và ưng tín hiu truyn rx. Ngõ ra b nhn
bao gm d liu ra song song và tín hiu rx_done_tick.
Tín hiu s_tick là tín hiu enable ly mu t ngõ ra b tao tc truyn (Baud
rate generator) vi tn s tín hiu phát bng 16 ln tc baud truyn dùng cung
cp cho b nhn tc ly mẫu và nó ã ược gii thích rõ mc B to tc Baud .
Mch hot ng 4 trng thái : (Idle), (Start), (Data) và (Stop):
- Trng thái Idle: khi b nhn va nhn tín hiu reset hoc không d liu
truyn ti, b nhn s hot ng trng thái nhàn ri. Sau khi nhận ược tín hiu 0
tc là bit 0 start u mi frame d liu, b nhn s chuyn ến trng thái Start. -
Trng thái bt u Start: khi hot ng trng thái start b nhn s ly mu
8 ln trong na chu kì xung ca bit start m bo không phi tín hiu nhiu.
Nếu sau na chu xung tín hiu vn 0 thì b nhn s chuyn ến trng thái kế
tiếp là d liu (data) còn nếu không thì s quay li trng thái nhàn ri (Idle).
- Trng thái d liu Data: Khi b nhận ược chuyn ến hot ng trng thái
Data, b nhn s ly mu 16 ln trong toàn thi gian nhn 1 bit d liu m bo
lOMoARcPSD|36991220
+
tính chính xác ca tín hiu nhận ược. Sau khi ly mu 16 ln và m bo tín hiu
n nh thì bit d liu s ưc dch o thanh ghi. Các bit d liu ược phát lần lượt
t bit LSB ến MSB ca data và tín hiu i ến b nhận cũng ến lần t theo th t
t LSB ến MSB. Sau khi nhn biết ã thu ưc y thanh ghi d liu tc thu d
liu, b thu s chuyn ến trng thái dng (stop). - Trng thái dng (Stop): Khi hot
ng trng thái dng, b nhn s ly mu 1 bit stop cui frame s quay li
trng thái Idle khi kết thúc ly mu vùng rộng 1 xung clock. Đồng thi c
rx_done_tick cũng lưu giá trị 1. D liu va nhận ược s ược ghi vào b m FIFO.
3.3.4. Khi phát UART
3.3.4.1. Sơ lược
Khi phát UART
Khi phát khi còn li trong 2 khi quan trng nht cu thành UART (khi
nhn khối phát). Theo khi h thng con khi phát UART (UART
Transmitting subsystem) hình bên dưi, khi bao gm 3 thành phn chính:
B phát (UART- Transmitter): mch óng gói và phát d liu.
B to tc truyn (Baud rate generator): mch to ra các tín hiu enable ly
mu vi tn s da vào tn s baud truyn.
Mch giao din (Interface circuit): mch cung cp b nh m kim soát
trng thái cho iu khin truy xut và x lí d liu.
B phát (UART- Transmitter) b phn chính ca khi thc hin vic nhn
d liu song song t h thng thông qua b m FIFO, sau ó chuyn d liu t song
lOMoARcPSD|36991220
+
song thành ni tiếp thêm các bit parity kim tra lỗi cũng như óng gói truyền
thành mt frame hoàn chnh và truyn ni tiếp trên ường dây.
3.3.4.2. Hot ng ca b truyn UART
Nguyên lý hot ng ca b phát ược th hin lưu ồ thuật toán bên dưới.
B phát có th ược miêu t i dng máy trng thái hoc theo dng hành vi
vi các chức năng tương tự. Các u vào ca b phát (UART Transmisstor) gm tín
hiu xung clock, tín hiu s_tick, các tín hiu enable thông báo trng thái trng
b ệm FIFO và ường tín hiu truyn i. Ngõ ra b nhn bao gm d liu ra ni tiếp
tx và tín hiu tx_done_tick thông báo kết thúc truyn 1 frame.
Tín hiệu s_tick ược ly t Baud rate generator vi tc bng tc baud iu
khin tc truyn d liu và nguyên lí hot ộng ã ược gii thích rõ
mc B to tc Baud .
Ban u khi FIFO trng c Enable s tt và ch ến khi b m FIFO nhận ược d
liệu ược gi t máy tính. Sau khi b m không còn trng, c Enable bt lên 1, nếu
tín hiu Start cho phép mch hot ộng cũng 1 thì mạch s vào trng thái start
thanh ghi d liu ca b phát s np d liu t b m FIFO vào, ng thi to
tín hiệu 0 trên ưng truyn tương ương bit 0 start báo hiu u frame truyn, c
fsh tc tx_done_tick thông báo kết thúc truyền xong 1 frame ược gán 0. Sau ó
da vào iu khin ca b Controller, tín hiệu start sau ó ược ưa về 0 b phát
bt u trạng thái phát. Trong trưng hp b i bit parity không bt buc, b phát
s lần lượt gi i tng bit d liu ni tiếp trong thanh ghi d liệu. Đến khi hết d
liu thì b pháts phát i mt bit 1 cuối tương ương với tín hiu stop trong frame
truyn. Sau ó 1 chu xung clock thì c fsh s lên 1 thông báo hoàn tt vic truyn
d liu. Quá trình truyn 1 frame kết thúc và nếu còn d liu trong b FIFO thì b
iu khin Controller.
lOMoARcPSD|36991220
+
CHƯƠNG 4: ĐÁNH GIÁ QUA TEST BENCH
4.1. Mô hình test bench tng quát
lOMoARcPSD|36991220
+
4.2.Kết qu
lOMoARcPSD|36991220
+
4.3. Nhn xét và ánh giá
Nhn xét v kết qu sau khi mô phng testbench và so sánh vi lý thuyết:
- Kết qu mô phng trên testbench cho thy khi nhn UART ã nhn d liu
ni tiếp và chuyn thành d liệu ra song song úng như lý thuyết ã cp. H thng
ã truyn mt d liu 8 bit là s hex 8AH, tương ứng vi s nh phân là 10001010,
hình nh testbench cho thy khi nhn UART nhn úng d liu là 10001010.
- V tc nhn: xét gia khong thi gian khi nhn 1 bit t 383.375us ến
434.575us (như trên nh), thi gian nhn 1 bit là (434.575 - 383.375)us = 51.2us,
tc trong 1s th nhận ược 1s/(51.2us) = 19531 bit. So sánh vi tc baud ã
chn là 19200bps, tc nhn khi nhn li là 19531bps cho thy có sai s gia
lý thuyết và thc nghim. Mc sai s~1.72%. Nguyên nhân ca sai s này là do
khi thc hin chia ếm mod ly mu ã không ly nguyên vẹn thương s ch
ly phn nguyên của thương. Cụ th, xung clock h thng 10MHz, baud rate
19200, ly mu 16 lần: (10MHz/(19200*16)) = 32.5520833 nhưng ếm mod ch ly
phn nguyên 32 do ó dn ến sai s. Thêm vào ó, sai s này càng ln khi tc
baud ược chn càng ln.
lOMoARcPSD|36991220
+
CHƯƠNG 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIN
5.1. Kết lun
Chúng em ã hoàn thin quá trình thiết kế c module của UART theo các c
lên specification, phân tích yêu cầu, lên sơ khi, lập chuyn trạng thái,
thut toán, lp trình verilog và kim th. Các kết quphỏng thu ược ã áp ng
ược yêu cu ặt ra trưc khi thiết kế.
5.2. Hướng phát trin
Tuy thiết kế ã áp ứng ưc yêu cu ban u t ra nhưng tối ưu hơn ta có th
thiết kế lõi UART có thêm 1 s tính năng:
Cu hình tc Baud và Data truyn trên cùng 1 thanh ghi.
Thiết kế thanh ghi dch có th truyn thêm bit Parity kim tra chn l.
Thiết kế thêm 1 s tín hiu báo vic truyn/nhn ang din ra.
Thiết kế thêm mt s chun giao tiếp gia UART vi MCU các thiết b ngoi
vi khác.
lOMoARcPSD| 36991220
PH LC
Khi tc baud module
Baud_rate
#(parameter N = 6, M = 32 //dem mod 10MHz/(19200*16) = 32)
( input wire clk,
reset, output wire
tick
);
reg [N-1:0] q; always @(posedge clk,
posedge reset) if (reset) q <= 0; else q
<= q + 1; assign tick = (q == (M - 1)) ?
1'b1 : 1'b0; endmodule
Khi FIFO: module
FIFO #(parameter
w=8,s=4)
(empty,full,rd,wr,rs,wd,r);
input wire [w-1:0]wd;
input rd,wr,rs;
output reg
empty,full; output
reg[w-1:0]r;
reg [w-1:0] mem [4**s-1:0];
reg[s-1:0] wpt; reg[s-1:0]
rpt;
always @ (posedge rd, posedge rs,posedge wr) begin
lOMoARcPSD| 36991220
if(rs)
begin empty<=1;
full<=0;
wpt<=0;
rpt<=0;
end
else if (rd)
begin if(rpt==wpt)
empty<=1; if
(~empty) begin
r<=mem[rpt];
rpt<=rpt+1'b1;
full<=0;
end
end else if(wr) begin if
(wpt+1==rpt)
full<=1; if
(~full)
begin
mem[wpt]
<=wd;
wpt<=
wpt+1'b1;
empty<=0;
end
en
d end
endmodule
lOMoARcPSD| 36991220
Transmitter: module
Transmitter
#(parameter dbit=8, stop=1) //so bit data & bit stop
(tx,data,str,fsh,clk,enable);
input [dbit-1:0] data;
input clk,enable,str;
output reg tx,fsh; reg [8:0]
c; reg [dbit-1:0] d;
always @(posedge clk) if(enable) case (str) //enable:
tin hieu cho phep cap tu FIFO 1'b1: //khoi tao va
truyen bit start begin d<=data; c<=9'b111111110;
//bien dem databit & stop bit tx<=0; fsh<=0; //tin
hieu bao hoan thanh phat 1 frame data end
1'b0: //truyen data
begin if (c[8]) //data tu fifo duoc truyen noi tiep qua ngo ra
tx
begin
tx<= d[0];
d<=d>>1;
c<=c<<1; end
else //chen them bit stop
begin
tx<=1;
if(tx)
fsh<=1;/*tin hieu fsh len 1 thong bao hoan thanh
viec truyen toi fifo, fifo tao tin hieu enable va xuat frame du lieu tiep theo*/
end
lOMoARcPSD| 36991220
end endcase
endmodule
Interface (first cycle setup): module
Controller(fsh,empty,str,rd,enb,clk); input
wire clk,fsh,empty; output reg str,rd,enb;
reg c;
always @*
begin
case(empty)
1'b0:
begin
if(c)
enb=1;
begin
rd=1;
str=1;
c=0;
else
end
begin
rd=0;
str=0;
end
lOMoARcPSD| 36991220
if(fsh)
begin
rd=1;
str=1;
end
end
1'b1:
begin
c=1;
enb=0; end
endcase end
endmodule
Complete UART_TRANSMITTER_SUBSYSTEM:
module Transmitter_subsystem(tx,clk,wd,wr,full,rs,EMPTY,fsh,str,rd); input
wire clk,wr,rs;
input wire [7:0] wd; output wire
full,tx,EMPTY,fsh,str,rd; wire [7:0]
net; wire d;
FIFO B1(.wd(wd),.wr(wr),.full(full),.empty(EMPTY),.rd(rd),.r(net),.rs(rs));
Controller B2(.fsh(fsh),.enb(d),.str(str),.rd(rd),.empty(EMPTY),.clk(clk));
Transmitter B3(.tx(tx),.clk(clk),.str(str),.enable(d),.fsh(fsh),.data(net));
Endmodule
Receiver: module UART_receiver(clk, reset, rx_data, s_tick,
rx_ctrl, dout); input wire clk, reset, rx_data, s_tick; output wire
rx_ctrl; output wire [7:0] dout; localparam [1:0]
S_IDLE = 2'b00,
lOMoARcPSD| 36991220
S_START = 2'b01,
S_DATA = 2'b10,
S_STOP = 2'b11;
reg [1:0] current_state,
next_state; reg [7:0] r_dout; reg
[3:0] r_count; reg r_rx_ctrl; reg
r_rx_data; reg [2:0] r_check_8bit;
//GHI DATA NHAN VAO THANH GHI
always @(posedge clk)
begin r_rx_data <=
rx_data; end
//THANH GHI TRANG THAI current_state
always @(posedge clk, posedge reset)
begin if (reset) current_state
<= S_IDLE; else
current_state <= next_state; end
//TIEN TRINH TRONG MOI TRANG THAI current_state
always @(posedge clk) case(current_state [1:0])
S_IDLE: begin r_rx_ctrl
<= 0; r_count <= 0;
r_check_8bit <= 0; if (r_rx_data ==
1'b0) next_state <=
S_START;
else
next_state <= S_IDLE; end
S_START:
lOMoARcPSD| 36991220
begin if
(s_tick)
if (r_count == 7)
begin
if (r_rx_data == 1'b0)
begin
next_state <= S_DATA;
r_count <= 0;
else
end
begin
end
end
S_DATA: begin
if (s_tick)
if (r_count == 15)
begin
r_count <= 0;
r_dout[r_check_8bit]<= r_rx_data;
if (r_check_8bit == 3'b111)
begin
lOMoARcPSD| 36991220
next_state <= S_STOP;
r_check_8bit <= 0;
end
else
begin
r_check_8bit <= r_check_8bit +1;
next_state <= S_DATA;
end
end
else
begin
r_count <= r_count + 1;
next_state <= S_DATA;
end
S_STOP:
begin
if (s_tick)
end
if (r_count == 15)
begin
r_rx_ctrl <= 1;
r_count <= 0;
next_state <= S_IDLE;
end
else
begin
r_count <= r_count + 1;
lOMoARcPSD| 36991220
next_state <= S_STOP;
end
end
default: next_state <= S_IDLE;
endcase
assign rx_ctrl = r_rx_ctrl; assign
dout = r_dout; endmodule
UART_Rx_Subsystem: module
UART_comp
#(parameter w = 8, s = 4,N = 6, M = 32)
( input wire clk, reset, input
wire rx_data, output wire
s_tick, output wire [w-1:0] dout,
output wire rx_ctrl, empty, full);
Baud_rate #(.N(N),.M(M)) B(.clk(clk),.reset(reset),.tick(s_tick));
UART_receiver
R(.clk(clk),.reset(reset),.rx_data(rx_data),.s_tick(s_tick),.rx_ctrl(rx_ctrl),.do
ut(dout));
FIFO #(.w(w),.s(s))
F(.wd(dout),.rs(reset),.wr(rx_ctrl),.rd(),.empty(empty),.full(full),.r());
endmodule
Test bench: module
sub_tb;
// Inputs
reg clk;
reg [7:0]
lOMoARcPSD| 36991220
wd; reg wr;
reg rs;
// Outputs
wire tx;
wire full;
wire EMPTY;
wire fsh;
wire str;
wire rd;
// Instantiate the Unit Under Test (UUT)
Transmitter_subsystem uut (
.tx(tx),
.clk(clk),
.wd(wd),
.wr(wr),
.full(full),
.rs(rs),
.EMPTY(EMPTY),
.fsh(fsh),
.str(str),
.rd(rd)
);
initial begin // Initialize
Inputs
clk =
0; wd =
lOMoARcPSD| 36991220
0; wr = 0;
rs = 0;
//
Wait 100 ns for
global reset to finish
#100;
// Add stimulus here
end
initial
begin
forever #5 clk=~clk;
end
initial
begin #2
rs=1;
#5 rs=0;
#7 wr=1;
#5
wd=8'b01001110;
#10
wr=0;
wr=1;
#5
wd=8'b01110110;
#10
wr=0;
lOMoARcPSD| 36991220
wr=1;
wd=8'b10110110;
#5 wr=0; end
endmodule
module UART_comp_tb;
parameter clock = 50;
parameter bit_period = 52100;
// Inputs reg
clk; reg reset;
reg rx_data; //
Outputs wire
s_tick; wire
[7:0] dout;
wire rx_ctrl;
wire empty;
wire full;
// Instantiate the Unit Under Test (UUT)
UART_comp uut
(.clk(clk),.reset(reset),.rx_data(rx_data),.s_tick(s_tick),.dout(dout),.rx_ctrl(rx_ctr
l),.empty(empty),.full(full));
//Tao task de thuc hien gui du lieu cho bo receiver theo toc do baud
task UART_SEND_DATA;
input [7:0] i_Data;
integer ii; begin
// Send Start Bit
rx_data <= 1'b0;
#(bit_period);
lOMoARcPSD| 36991220
// Send Data Byte
for (ii=0; ii<8; ii=ii+1) begin
rx_data <= i_Data[ii];
#(bit_period); end //
Send Stop Bit rx_data <=
1'b1; #(bit_period); end
endtask always
#(clock/2) clk = ~clk;
// Main Testing:
initial begin
clk = 0; reset = 1; rx_data
= 1'b1;
#1000;
reset = 0;
@(posedge clk);
UART_SEND_DATA(8'h8A); //send ‘10001010’ end
endmodule
TÀI LIU THAM KHO
1. Báo cáo môn học : Thiết kế VLSI Thiết kế chun giao tiếp UART
bằng verilog” Đại hc Bách Khoa Hà Ni.
2. Đồ án chuyên ngành “ Thiết kế b truyn nhn UART 8 np trên kit
FPGA “ Đại học Bách Khoa Đà Nẵng, Đỗ Tiến Thành, Đà Nẵng, 2014.
3. Giao tiếp UART là gì? Cách thc hot ộng, ưu nhược im c ng
dng, ngày truy cp: 28/4/2023 Link: dientusangtaovn.com
4. Khái niệm bản v truyền thông UART, khi, ng dng |
News-
Cáo công ngh, ngày truy cp: 28/4/2023
lOMoARcPSD| 36991220
Link: caocongnghe.com
5. Basics of UART Communication, ngày truy cp: 28/4/2023
Link: circuitbasics.com
6. H thng truyn thông ni tiếp bt ng b UART, Trần Thành Lũy,
ĐHSPKT.TPHCM
| 1/35

Preview text:

lOMoARcPSD| 36991220 lOMoARcPSD| 36991220 MỤC LỤC
CHƯƠNG 1: TỔNG QUAN ................................................................................................. 1
1.1 Đặt vấn ề ..................................................................................................................... 1
1.2. Mục tiêu ..................................................................................................................... 1
1.3. Nội dung nghiên cứu ................................................................................................. 1
1.4. Bố cục ........................................................................................................................ 1
1.5.Giới hạn ...................................................................................................................... 2
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT ......................................................................................... 3
2.1. Giới thiệu về chuẩn giao tiếp UART ........................................................................... 3
2.1.1. Khái niệm về UART ................................................................................................. 3
2.1.2. Thông số cơ bản và khung truyền dữ liệu .............................................................. 4
2.1.3. Chức năng và ứng dụng của UART ......................................................................... 6
2.1.3.1. Chức năng ............................................................................................................ 6
2.1.3.2. Ứng dụng của UART trong truyền dữ liệu ........................................................... 6
2.2. Đặc iểm và nguyên lý hoạt ộng ................................................................................. 7
2.2.1. Đặc iểm ................................................................................................................... 7
2.2.2. Nguyên lý hoạt ộng của UART ................................................................................ 8
CHƯƠNG 3: THIẾT KẾ GIAO THỨC UART .......................................................................... 8
3.1. Sơ ồ khối thiết kế UART ............................................................................................. 8
3.2. Mô tả thiết kế bộ UART ............................................................................................. 9
3.2.1. Khối tốc ộ baud ....................................................................................................... 9
3.2.2. Khối ệm FIFO ........................................................................................................ 10
3.2.3. Khối nhận UART .................................................................................................... 11
3.2.3.1. Sơ lược ............................................................................................................... 11
3.2.3.2. Hoạt ộng của bộ nhận UART ............................................................................. 12 lOMoARcPSD| 36991220
3.3.4. Khối phát UART..................................................................................................... 13
3.3.4.1. Sơ lược ............................................................................................................... 13
3.3.4.2. Hoạt ộng của bộ truyền UART ........................................................................... 14
CHƯƠNG 4: ĐÁNH GIÁ QUA TEST BENCH ...................................................................... 15
4.1. Mô hình test bench tổng quát ................................................................................. 15
4.2. Kết quả ..................................................................................................................... 16
4.3. Nhận xét và ánh giá ................................................................................................. 17
CHƯƠNG 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ............................................................ 18
5.1. Kết luận .................................................................................................................... 18
5.2. Hướng phát triển ..................................................................................................... 18
PHỤ LỤC .................................................................................................................... 1
TÀI LIỆU THAM KHẢO ......................................................................................... 15 lOMoARcPSD| 36991220 CHƯƠNG 1: TỔNG QUAN 1.1 Đặt vấn ề
Ngày nay, khoa học và công nghệ ang phát triển mạnh mẽ, ạt ược nhiều thành
tựu trong mọi lĩnh vực, ặc biệt là lĩnh vực iện tử. Ứng dụng của FPGA (Field
Programmable Gate Arrays) là thiết bị lập trình thông dụng, lập trình cho các vi
mạch bán dẫn nhỏ, công suất thấp ể tạo ra các hệ thống iều khiển tự ộng và giải
quyết nhiều bài toán phức tạp.
Các giao thức truyền thông óng một vai trò quan trọng trong việc tổ chức giao
giữa các thiết bị. Được thiết kế khác nhau tùy thuộc vào yêu cầu hệ thống, các
giao thức này có các quy tắc cụ thể ược thống nhất giữa các thiết bị ể truyền dữ
liệu thành công, iển hình là UART. Các hệ thống nhúng, vi iều khiển và máy tính
thường sử dụng UART như một dạng giao thức giao tiếp phần cứng giữa thiết bị
với thiết bị. Giao tiếp UART hiện ược sử dụng trong nhiều ứng dụng ể giao tiếp với
các module như Wifi, Bluetooth, Arduino và các vi iều khiển khác. Nó cũng là một
tiêu chuẩn giao tiếp ược sử dụng rộng rãi trong ngành công nghiệp. Để tìm hiểu
thêm về giao tiếp giữa các thiết bị số, chúng em chọn và nghiên cứu về UART và
thực hiện thiết kế kiểm thử 1 IC UART bằng ngôn ngữ mô tả phần cứng Verilog. 1.2. Mục tiêu Hiểu thế nào là UART.
Nắm vững vai trò, chức năng của UART.
Hiểu rõ cấu trúc, hoạt ộng và chức năng từng khối của UART.
Thực hiện thiết kế các khối của UART sử dụng ngôn ngữ Verilog. 1.3. Nội dung nghiên cứu
Tìm hiểu vai trò, chức năng, và nguyên tắc hoạt ộng của từng khối UART.
Thiết kế kiểm thử 1 IC UART sử dụng ngôn ngữ mô tả phần cứng Verilog. 1.4. Bố cục Chương 1: Tổng quan
Chương 2: Cơ sở lý thuyết
Chương 3: Thiết kế giao thức UART + lOMoARcPSD| 36991220
Chương 4: Đánh giá qua testbench 1.5.Giới hạn
Do ề tài này chúng em chỉ thực hiện nghiên cứu lý thuyết và mô phỏng trên
phần mềm Xilinx nên vẫn còn bị giới hạn ở phần thực hành trên kit test. + lOMoARcPSD| 36991220
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT
2.1. Giới thiệu về chuẩn giao tiếp UART 2.1.1. Khái niệm về UART
Theo ịnh nghĩa, UART (Universal Asynchronous Receiver Transmitter) là một
giao thức truyền thông phần cứng sử dụng giao tiếp nối tiếp không ồng bộ với tốc
ộ có thể ịnh cấu hình. UART truyền dữ liệu không ồng bộ, có nghĩa là không có tín
hiệu xung clock ể ồng bộ hóa ầu ra của các bit từ UART truyền ến việc lấy mẫu các
bit bởi UART nhận. Thay vì tín hiệu xung clock, UART truyền thêm các bit start và
stop vào gói dữ liệu ược chuyển. Các bit này xác ịnh iểm bắt ầu và iểm kết thúc
của gói dữ liệu ể UART nhận biết khi nào bắt ầu ọc các bit.
Trong giao tiếp UART, hai UART giao tiếp trực tiếp với nhau. UART truyền
chuyển ổi dữ liệu song song từ một thiết bị iều khiển như CPU thành dạng nối
tiếp, truyền nó nối tiếp ến UART nhận, sau ó chuyển ổi dữ liệu nối tiếp trở lại
thành dữ liệu song song cho thiết bị nhận.
Khi UART nhận phát hiện một bit start, nó bắt ầu ọc các bit ến ở một tần số
cụ thể ược gọi là tốc ộ truyền (baud rate). Tốc ộ truyền là thước o tốc ộ truyền dữ
liệu, ược biểu thị bằng bit trên giây (bps – bit per second). Cả hai UART ều phải + lOMoARcPSD| 36991220
hoạt ộng ở cùng một tốc ộ truyền. Tốc ộ truyền giữa UART truyền và nhận chỉ có
thể chênh lệch khoảng 10% trước khi thời gian của các bit bị lệch quá xa.
Cả hai UART cũng phải ược cấu hình ể truyền và nhận cùng một cấu trúc gói dữ liệu.
Số lượng dây sử dụng 2
Tốc ộ truyền (Tốc ộ baud) 9600, 19200, 38400, 57600,
115200, 230400, 460800, 921600, 1000000, 1500000 Phương pháp truyền Bất ồng bộ
Truyền nối tiếp hay song Nối tiếp song?
Số lượng thiết bị chủ tối a 1
Số lượng thiết bị tớ tối a 1
2.1.2. Thông số cơ bản và khung truyền dữ liệu Sơ ồ khung truyền UART
Các thông số cơ bản cần nắm trong giao tiếp UART bao gồm: + lOMoAR cPSD| 36991220
Baud rate (tốc ộ Baud): Khoảng thời gian ể 1 bit ược truyền i. Phải ược cài ặt
giống nhau ở cả phần gửi và nhận. Các thông số tốc ộ Baudrate thường hay sử
dụng dể giao tiếp với máy tính là 1200, 2400, 4800, 9600, ..., 115200.
IDLE( chế ộ trống): lúc này tín hiệu luôn ở mức 1 khi dữ liệu trống, không có frame nào ược truyền i.
Bit START: Để bắt ầu truyền dữ liệu, UART chuyển ường truyền từ mức “1”
xuống mức “0” trong một chu kỳ clock. Khi ó, nó bắt ầu ọc các bit trong khung dữ
liệu theo tần số của tốc ộ truyền. Đây là một bit bắt buộc cần có trong giao thức UART.
Frame (khung truyền): Khung truyền quy ịnh về mỗi lần truyền bao nhiêu
Data: Dữ liệu ể truyền i có ộ dài từ 5 bit ến 8 bit nếu dùng bit chẵn lẻ. Nếu
không dùng bit chẵn lẻ, data có thể dài ến 9 bit. Thông thường, Bit có trọng số nhỏ
nhất LSB ược truyền trước sau ó ến bit MSB. Bit parity:
Bit parity sẽ là phương án giúp UART nhận cho biết liệu có bất kỳ dữ liệu nào
ã thay ổi trong quá trình truyền hay không. Bit có thể bị thay ổi bởi bức xạ iện từ,
tốc ộ truyền không khớp hoặc truyền dữ liệu khoảng cách xa. Sau khi UART nhận
ọc khung dữ liệu, nó sẽ ếm số bit có giá trị là 1 và kiểm tra xem tổng số là số chẵn hay lẻ.
Có 2 loại Parity ó là Parity chẵn (even parity) và parity lẻ (odd parity). Parity
chẵn nghĩa là số bit 1 trong trong data truyền cùng với bit Parity luôn là số chẵn,
ngược lại nếu Parity lẽ nghĩa là số bit 1 trong data truyền cùng với bit Parity luôn
là số lẽ. Bit Parity không phải là bit bắt buộc và vì thế chúng ta có thể loại bỏ bit
này ra khỏi khung truyền.
Bit stop: Ngược lại với bit start,bit Stop sẽ truyền mức “1”dùng ể thông báo
kết thúc quá trình truyền dữ liệu. Bit stop có thể là 1; 1,5 hoặc 2. (là bit bắt buộc như Start bit).
Như vậy, quá trình truyền dữ liệu của UART diễn ra dưới dạng các gói dữ liệu,
bắt ầu bằng một bit bắt ầu, ường mức cao ược kéo xuống thấp. Sau bit bắt ầu là + lOMoARcPSD| 36991220
5 ến 9 bit dữ liệu truyền trong khung dữ liệu của gói, theo sau là bit chẵn lẻ tùy
chọn ể xác minh việc truyền dữ liệu thích hợp. Sau cùng, một hoặc nhiều bit dừng
ược truyền ở nơi ường ặt ở mức cao. Thế là kết thúc một gói dữ liệu ược truyền i.
2.1.3. Chức năng và ứng dụng của UART 2.1.3.1. Chức năng
Chức năng chính của UART là truyền dữ liệu nối tiếp. Trong UART, giao tiếp
giữa hai thiết bị có thể ược thực hiện theo hai cách là giao tiếp dữ liệu nối tiếp và
giao tiếp dữ liệu song song.
Có nghĩa rằng trong giao tiếp UART, hai UART giao tiếp trực tiếp với nhau.
UART truyền chuyển ổi dữ liệu song song từ một thiết bị iều khiển như CPU thành
dạng nối tiếp, truyền nó nối tiếp ến UART nhận, sau ó chuyển ổi dữ liệu nối tiếp
trở lại thành dữ liệu song song cho thiết bị nhận.
Từ chức năng trên nó ã góp phần làm nền vai trò vô cùng quan trọng như các
hệ thống nhúng, vi iều khiển và máy tính hầu hết sử dụng UART như một dạng
giao thức giao tiếp phần cứng giữa thiết bị và thiết bị. Trong số các giao thức
truyền thông hiện có, UART chỉ sử dụng hai dây cho bên truyền và bên nhận.
2.1.3.2. Ứng dụng của UART trong truyền dữ liệu
Thông thường, UART dùng ể:
Giao tiếp máy tính với các thiết bị ngoại vi: UART là giao diện truyền thông
chuẩn cho việc giao tiếp giữa máy tính và các thiết bị ngoại vi như chuột, bàn phím, máy in, cổng serial, v.v.
Truyền dữ liệu giữa vi xử lý và các cảm biến: UART ược sử dụng ể truyền dữ
liệu giữa vi xử lý và các cảm biến như cảm biến nhiệt ộ, cảm biến ánh sáng, cảm
biến khoảng cách, v.v. Các cảm biến này thường ược kết nối với vi xử lý thông qua
giao diện UART ể truyền dữ liệu về vi xử lý ể xử lý và hiển thị.
Giao tiếp giữa các vi xử lý: UART ược sử dụng ể truyền dữ liệu giữa các vi xử
lý trong các ứng dụng như mạng iều khiển, hệ thống nhúng và hệ thống iều khiển tự ộng. + lOMoARcPSD| 36991220
Truyền dữ liệu giữa các thiết bị iện tử: UART ược sử dụng ể truyền dữ liệu
giữa các thiết bị iện tử như vi xử lý, module RF, cổng Ethernet, v.v.
Giao tiếp truyền thông trong các thiết bị o lường: UART ược sử dụng trong
các thiết bị o lường như ồng hồ o tốc ộ, ồng hồ o nhiệt ộ, v.v.
Giao tiếp truyền thông trong các ứng dụng iện tử tiêu thụ ít iện năng: UART
ược sử dụng trong các ứng dụng iện tử tiêu thụ ít iện năng như các thiết bị IoT,
cảm biến không dây, thiết bị iều khiển từ xa, v.v.
Trong thực tế thì không có phương thức truyền dẫn nào là tối ưu cả, tuy nhiên
ối với UART thì ã gần như áp ứng ủ hết nhu cầu hiện nay. Sau ây là một số ưu và
nhược iểm của loại truyền dẫn không dây này: * Ưu iểm:
Chỉ sử dụng hai dây ể truyền dữ liệu.
Không cần tín hiệu ồng hồ.
Có một bit chẵn lẻ ể cho phép kiểm tra lỗi.
Cấu trúc của gói dữ liệu có thể ược thay ổi miễn là cả hai bên ược thiết lập cho nó.
Phương pháp truyền ơn giản, giá thành thấp. * Nhược iểm:
Kích thước của khung dữ liệu ược giới hạn tối a là 9 bit.
Không phù hợp với các hệ thống òi hỏi nhiều thiết bị master và slave.
Tốc ộ truyền của mỗi UART phải nằm trong khoảng 10%.
2.2. Đặc iểm và nguyên lý hoạt ộng 2.2.1. Đặc iểm
Trong sơ ồ UART có 3 dây cần lưu ý : + lOMoARcPSD| 36991220
Transmitter (Tx): dây dùng ể gửi dữ liệu.
Receiver (Rx): dây dùng ể nhận dữ liệu.
Dây GND: dùng ể tạo một mức tham chiếu dùng ể so sánh với các tín hiệu
trong giao tiếp. Nếu không có dây mass trong khối UART, các tín hiệu có thể không
ược ọc chính xác và gây ra các lỗi trong giao tiếp.
2.2.2. Nguyên lý hoạt ộng của UART
Chân Tx (truyền) của một chip kết nối trực tiếp với chân Rx (nhận) của chip
kia và ngược lại. Quá trình truyền thường sẽ diễn ra ở 3.3V hoặc 5V. UART là một
giao thức giữa một master và một slave. Trong ó một thiết bị ược thiết lập ể giao
tiếp với chỉ một thiết bị khác.
Dữ liệu truyền ến và i từ UART song song với thiết bị iều khiển. Khi tín hiệu
gửi trên chân Tx, UART ầu tiên sẽ dịch thông tin song song này thành nối tiếp và
truyền ến thiết bị nhận. Chân Rx của UART thứ 2 sẽ biến ổi nó trở lại thành song
song ể giao tiếp với thiết bị iều khiển.
Dữ liệu truyền qua UART óng thành các gói (packet). Mỗi gói chứa 1 bit bắt
ầu, 5 ến 9 bit dữ liệu (tùy thuộc vào UART), 1 bit chẵn lẻ tùy chọn và 1 hoặc 2 bit dừng.
Ngoài ra UART có thể truyền theo một trong ba chế ộ:
Simplex: Chỉ giao tiếp một chiều.
Half duplex: Dữ liệu i theo một hướng tại một thời iểm.
Full duplex: Giao tiếp ồng thời ến và i từ mỗi master và slave
CHƯƠNG 3: THIẾT KẾ GIAO THỨC UART
3.1. Sơ ồ khối thiết kế UART + lOMoARcPSD| 36991220
Sơ ồ khối thiết kế bộ UART
3.2. Mô tả thiết kế bộ UART 3.2.1. Khối tốc ộ baud
Bộ tạo tốc ộ baud (Baud Rate Generator) tạo ra tín hiệu lấy mẫu có tần số
bằng úng 16 lần tốc ộ baud ược chỉ ịnh của UART. Để tránh làm giao các xung ồng
hồ và vi phạm nguyên tắc thiết kế ồng bộ, tín hiệu lấy mẫu phải hoạt ộng như một
chân enable thay vì xung ồng hồ ối với bộ thu UART. Các tốc ộ baud tiêu chuẩn
của UART bao gồm 50, 75, 110, 300, 600, 1.200, 2.400, 4.800, 9.600, 14.400,
19.200, 38.400, 57.600, 115.200, 128.000 và 230.400, 460.800.
Lấy ví dụ ối với tốc ộ baud là 19.200, tốc ộ lấy mẫu phải là 307.200 (tức là
19.200*16). Với tốc ộ xung Clock hệ thống là 10 MHz, bộ tạo tốc ộ baud cần một
bộ ếm MOD-32 (10MHz/307.200). Thông thường, xung Clock hệ thống có tần số
rất cao, thay vì dùng một loạt các bộ chia lớn ể có ược tốc ộ truyền mong muốn,
sẽ rẻ hơn nếu có một bộ chia lớn duy nhất theo sau bởi một bộ chia nhỏ. Cách
này sẽ hoạt ộng vì tần số UART tiêu chuẩn là ước số của 2. Ví dụ, cho tốc ộ xung
Clock hệ thống là 2.457.600, 2 ngõ ra mong muốn ạt ược là 9.600 baud hoặc
19.200 baud. Theo lẽ thông thường, ta cần 1 bộ ếm MOD-128 cho ngõ ra 19.200 + lOMoARcPSD| 36991220
baud và 1 bộ ếm MOD-256 cho ngõ ra 9.600 baud. Thay vào ó, ta có thể dùng 1
bộ ếm MOD-128 (tạo ngõ ra 19.200 baud) theo sau ó là 1 ếm MOD-2 ể lấy ngõ ra 9.600 baud. 3.2.2. Khối ệm FIFO Khối lưu dữ liệu FIFO
Bộ ệm FIFO Trong tính toán và trong lý thuyết hệ thống, là một phương pháp
ể tổ chức thao tác cấu trúc dữ liệu. Trong ó mục nhập cũ nhất ( ầu tiên), hoặc ' ầu'
của hàng xếp, ược xử lý ầu tiên. Quá trình xử lý như vậy tương tự như phục vụ
mọi người trong khu vực hàng ợi trên cơ sở ai ến trước ược phục vụ trước, theo
cùng một trình tự mà họ ã ến cho tới uôi của hàng ợi. Bộ ệm FIFO thường ược sử
dụng trong các mạch iện tử ể ệm và iều khiển luồng giữa phần cứng và phần mềm.
Ở dạng phần cứng, FIFO chủ yếu bao gồm một tập hợp các con trỏ ọc và ghi, logic
lưu trữ và iều khiển. Bộ nhớ có thể là bộ nhớ truy cập ngẫu nhiên tĩnh (SRAM),
flip-flops, chốt hoặc bất kỳ hình thức lưu trữ phù hợp nào khác. Đối với các FIFO
có kích thước không nhỏ, SRAM hai cổng thường ược sử dụng, trong ó một cổng
dành riêng ể ghi và cổng còn lại ể ọc. Có nhiều cách ể tạo một bộ ệm FIFO, tuy
nhiên cách ược sử dụng trong bài tập mô phỏng này là bộ FIFO vòng (array-base
buffer). Như tên gọi của nó (array-base), bộ ệm này ược thực hiện dựa trên một
mảng. Kèm theo ó là 2 con trỏ Write và Read. Mỗi khi nhận lệnh ghi, con trỏ
pWrite sẽ ghi data vào bộ ệm, sau ó sẽ tăng lên 1 ơn vị. Mỗi khi nhận lệnh ọc, con + lOMoARcPSD| 36991220
trỏ pRead sẽ tăng lên một. Sau ó ọc giá trị từ bộ ệm ra. Khi 1 con trỏ tới ược cuối
mảng, nó sẽ cuộn lại vị trí ầu tiên.
Đó là lý do vì sao gọi ây là bộ ệm vòng.
Bộ ệm này gồm 2 cờ: empty (trống) và full ( ầy).
- Cờ full: là trạng thái khi con trỏ ghi ã thực hiện ghi dữ liệu ược một vòng
tròn và gặp con trỏ ọc tại vòng tròn thứ 2. Nói cách khác, con trỏ ọc trùng với con
trỏ ghi khi vòng quay con trỏ ghi lớn hơn con trỏ ọc 1 vòng. Dữ liệu chưa ược ọc
ra mà ã có tín hiệu ghi vào ô nhớ ó. Khi ó ta sẽ không ược phép ghi dữ liệu vào nữa.
- Cờ empty: là trạng thái con trỏ ọc trùng với con trỏ ghi khi cả 2 con trỏ cùng
một vòng. Dữ liệu chưa ược ghi vào ã có tín hiệu ọc ra, xem như dữ liệu cũng bị mất.
- Độ sâu của FIFO: tương ứng số phần tử tối a mà FIFO có thể lưu trữ ược.
- Băng thông của FIFO: tương ương với kích thướng của một phần tử dữ liệu
ược ọc/viết trong một chu kỳ ọc/viết. 3.2.3. Khối nhận UART 3.2.3.1. Sơ lược
Khối nhận là một trong hai khối quan trọng nhất cấu thành UART (khối nhận và khối phát).
- Bộ nhận (UART reveiver): mạch lấy dữ liệu thông qua quá trình lấy mẫu.
- Bộ tạo tốc ộ truyền (Baud rate generator): mạch tạo ra các tín hiệu enable
lấy mẫu với tần số dựa vào tần số baud truyền. + lOMoARcPSD| 36991220
- Mạch giao diện (Interface circuit): mạch cung cấp bộ nhớ ệm và kiểm soát
trạng thái ể cho iều khiển truy xuất và xử lí dữ liệu.
Bộ nhận (UART- Receiver) là bộ phận chính của khối thực hiện việc nhận dữ
liệu nối tiếp từ ường truyền và kiểm tra, sau ó chuyển dữ liệu từ nối tiếp thành
song song và ưa tới vi iều khiển hoặc máy tính.
Mạch giao diện (Interface circuit): trong một hệ thống UART thường ược xem
như là một mạch ngoại vi ể truyền dữ liệu nối tiếp và các hệ thống truy cập và iều
khiển cũng như như nhận dữ liệu một cách ịnh kì. Vì thế mạch có 2 chức năng gồm
tín hiệu thông báo có dữ liệu mới ể tránh việc truy xuất dữ liệu bị trùng lập và cung cấp bộ nhớ ệm.
3.2.3.2. Hoạt ộng của bộ nhận UART
Nguyên lý hoạt ộng của bộ nhận ược thể hiện ở lưu ồ thuật toán bên dưới.
Bộ nhận thực chất là một máy trạng thái Mealy với ầu ra của máy phụ thuộc
vào trạng thái hiện tại và ầu vào. Các ầu vào của bộ nhận (UART Receiver) gồm tín
hiệu xung clock, reset, tín hiệu s_tick, và ường tín hiệu truyền rx. Ngõ ra bộ nhận
bao gồm dữ liệu ra song song và tín hiệu rx_done_tick.
Tín hiệu s_tick là tín hiệu enable lấy mẫu từ ngõ ra bộ tao tốc ộ truyền (Baud
rate generator) với tần số tín hiệu phát bằng 16 lần tốc ộ baud truyền dùng ể cung
cấp cho bộ nhận tốc ộ lấy mẫu và nó ã ược giải thích rõ ở mục Bộ tạo tốc ộ Baud .
Mạch hoạt ộng ở 4 trạng thái : (Idle), (Start), (Data) và (Stop):
- Trạng thái Idle: khi bộ nhận vừa nhận tín hiệu reset hoặc không có dữ liệu
truyền tới, bộ nhận sẽ hoạt ộng ở trạng thái nhàn rỗi. Sau khi nhận ược tín hiệu 0
tức là bit 0 start ở ầu mỗi frame dữ liệu, bộ nhận sẽ chuyển ến trạng thái Start. -
Trạng thái bắt ầu Start: khi hoạt ộng ở trạng thái start bộ nhận sẽ lấy mẫu
8 lần trong nửa chu kì xung của bit start ể ảm bảo không phải tín hiệu nhiễu.
Nếu sau nửa chu kì xung tín hiệu vẫn là 0 thì bộ nhận sẽ chuyển ến trạng thái kế
tiếp là dữ liệu (data) còn nếu không thì sẽ quay lại trạng thái nhàn rỗi (Idle).
- Trạng thái dữ liệu Data: Khi bộ nhận ược chuyển ến hoạt ộng ở trạng thái
Data, bộ nhận sẽ lấy mẫu 16 lần trong toàn thời gian nhận 1 bit dữ liệu ể ảm bảo + lOMoARcPSD| 36991220
tính chính xác của tín hiệu nhận ược. Sau khi lấy mẫu ủ 16 lần và ảm bảo tín hiệu
là ổn ịnh thì bit dữ liệu sẽ ược dịch vào thanh ghi. Các bit dữ liệu ược phát lần lượt
từ bit LSB ến MSB của data và tín hiệu i ến bộ nhận cũng ến lần lượt theo thứ tự
từ LSB ến MSB. Sau khi nhận biết ã thu ược ầy thanh ghi dữ liệu tức là thu ủ dữ
liệu, bộ thu sẽ chuyển ến trạng thái dừng (stop). - Trạng thái dừng (Stop): Khi hoạt
ộng ở trạng thái dừng, bộ nhận sẽ lấy mẫu 1 bit stop cuối frame và sẽ quay lại
trạng thái Idle khi kết thúc lấy mẫu vùng có ộ rộng 1 xung clock. Đồng thời cờ
rx_done_tick cũng lưu giá trị 1. Dữ liệu vừa nhận ược sẽ ược ghi vào bộ ệm FIFO. 3.3.4. Khối phát UART 3.3.4.1. Sơ lược Khối phát UART
Khối phát là khối còn lại trong 2 khối quan trọng nhất cấu thành UART (khối
nhận và khối phát). Theo sơ ồ khối hệ thống con khối phát UART (UART
Transmitting subsystem) hình bên dưới, khối bao gồm 3 thành phần chính:
Bộ phát (UART- Transmitter): mạch óng gói và phát dữ liệu.
Bộ tạo tốc ộ truyền (Baud rate generator): mạch tạo ra các tín hiệu enable lấy
mẫu với tần số dựa vào tần số baud truyền.
Mạch giao diện (Interface circuit): mạch cung cấp bộ nhớ ệm và kiểm soát
trạng thái ể cho iều khiển truy xuất và xử lí dữ liệu.
Bộ phát (UART- Transmitter) là bộ phận chính của khối thực hiện việc nhận
dữ liệu song song từ hệ thống thông qua bộ ệm FIFO, sau ó chuyển dữ liệu từ song + lOMoARcPSD| 36991220
song thành nối tiếp và thêm các bit parity kiểm tra lỗi cũng như óng gói truyền
thành một frame hoàn chỉnh và truyền nối tiếp trên ường dây.
3.3.4.2. Hoạt ộng của bộ truyền UART
Nguyên lý hoạt ộng của bộ phát ược thể hiện ở lưu ồ thuật toán bên dưới.
Bộ phát có thể ược miêu tả dưới dạng máy trạng thái hoặc theo dạng hành vi
với các chức năng tương tự. Các ầu vào của bộ phát (UART Transmisstor) gồm tín
hiệu xung clock, tín hiệu s_tick, các tín hiệu enable và thông báo trạng thái trống
bộ ệm FIFO và ường tín hiệu truyền i. Ngõ ra bộ nhận bao gồm dữ liệu ra nối tiếp
tx và tín hiệu tx_done_tick thông báo kết thúc truyền 1 frame.
Tín hiệu s_tick ược lấy từ Baud rate generator với tốc ộ bằng tốc ộ baud ể iều
khiển tốc ộ truyền dữ liệu và nguyên lí hoạt ộng ã ược giải thích rõ
ở mục Bộ tạo tốc ộ Baud .
Ban ầu khi FIFO trống cờ Enable sẽ tắt và chờ ến khi bộ ệm FIFO nhận ược dữ
liệu ược gửi từ máy tính. Sau khi bộ ệm không còn trống, cờ Enable bật lên 1, nếu
tín hiệu Start cho phép mạch hoạt ộng cũng là 1 thì mạch sẽ vào trạng thái start
và thanh ghi dữ liệu của bộ phát sẽ nạp dữ liệu từ bộ ệm FIFO vào, ồng thời tạo
tín hiệu 0 trên ường truyền tương ương bit 0 start báo hiệu ầu frame truyền, cờ
fsh tức tx_done_tick là thông báo kết thúc truyền xong 1 frame ược gán 0. Sau ó
dựa vào iều khiển của bộ Controller, tín hiệu start sau ó ược ưa về 0 và bộ phát
bắt ầu trạng thái phát. Trong trường hợp bỏ i bit parity không bắt buộc, bộ phát
sẽ lần lượt gửi i từng bit dữ liệu nối tiếp trong thanh ghi dữ liệu. Đến khi hết dữ
liệu thì bộ phátsẽ phát i một bit 1 cuối tương ương với tín hiệu stop trong frame
truyền. Sau ó 1 chu kì xung clock thì cờ fsh sẽ lên 1 thông báo hoàn tất việc truyền
dữ liệu. Quá trình truyền 1 frame kết thúc và nếu còn dữ liệu trong bộ FIFO thì bộ iều khiển Controller. + lOMoARcPSD| 36991220
CHƯƠNG 4: ĐÁNH GIÁ QUA TEST BENCH
4.1. Mô hình test bench tổng quát + lOMoARcPSD| 36991220 4.2.Kết quả + lOMoARcPSD| 36991220
4.3. Nhận xét và ánh giá
Nhận xét về kết quả sau khi mô phỏng testbench và so sánh với lý thuyết:
- Kết quả mô phỏng trên testbench cho thấy khối nhận UART ã nhận dữ liệu
nối tiếp và chuyển thành dữ liệu ra song song úng như lý thuyết ã ề cập. Hệ thống
ã truyền một dữ liệu 8 bit là số hex 8AH, tương ứng với số nhị phân là 10001010,
hình ảnh testbench cho thấy khối nhận UART nhận úng dữ liệu là 10001010.
- Về tốc ộ nhận: xét giữa khoảng thời gian khi nhận 1 bit từ 383.375us ến
434.575us (như trên ảnh), thời gian nhận 1 bit là (434.575 - 383.375)us = 51.2us,
tức trong 1s có thể nhận ược 1s/(51.2us) = 19531 bit. So sánh với tốc ộ baud ã
chọn là 19200bps, tốc ộ nhận ở khối nhận lại là 19531bps cho thấy có sai số giữa
lý thuyết và thực nghiệm. Mức sai số là ~1.72%. Nguyên nhân của sai số này là do
khi thực hiện chia ể ếm mod lấy mẫu ã không lấy nguyên vẹn thương số mà chỉ
lấy phần nguyên của thương. Cụ thể, xung clock hệ thống là 10MHz, baud rate
19200, lấy mẫu 16 lần: (10MHz/(19200*16)) = 32.5520833 nhưng ếm mod chỉ lấy
phần nguyên là 32 do ó dẫn ến sai số. Thêm vào ó, sai số này càng lớn khi tốc ộ
baud ược chọn càng lớn. + lOMoARcPSD| 36991220
CHƯƠNG 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 5.1. Kết luận
Chúng em ã hoàn thiện quá trình thiết kế các module của UART theo các bước
lên specification, phân tích yêu cầu, lên sơ ồ khối, lập sơ ồ chuyển trạng thái, sơ ồ
thuật toán, lập trình verilog và kiểm thử. Các kết quả mô phỏng thu ược ã áp ứng
ược yêu cầu ặt ra trước khi thiết kế. 5.2. Hướng phát triển
Tuy thiết kế ã áp ứng ược yêu cầu ban ầu ặt ra nhưng ể tối ưu hơn ta có thể
thiết kế lõi UART có thêm 1 số tính năng:
Cấu hình tốc ộ Baud và Data truyền trên cùng 1 thanh ghi.
Thiết kế thanh ghi dịch ể có thể truyền thêm bit Parity kiểm tra chẵn lẻ.
Thiết kế thêm 1 số tín hiệu báo việc truyền/nhận ang diễn ra.
Thiết kế thêm một số chuẩn giao tiếp giữa UART với MCU và các thiết bị ngoại vi khác. + lOMoAR cPSD| 36991220 PHỤ LỤC Khối tốc ộ baud module Baud_rate
#(parameter N = 6, M = 32 //dem mod 10MHz/(19200*16) = 32) ( input wire clk, reset, output wire tick );
reg [N-1:0] q; always @(posedge clk,
posedge reset) if (reset) q <= 0; else q
<= q + 1; assign tick = (q == (M - 1)) ? 1'b1 : 1'b0; endmodule Khối FIFO: module FIFO #(parameter w=8,s=4) (empty,full,rd,wr,rs,wd,r); input wire [w-1:0]wd; input rd,wr,rs; output reg empty,full; output reg[w-1:0]r; reg [w-1:0] mem [4**s-1:0]; reg[s-1:0] wpt; reg[s-1:0] rpt;
always @ (posedge rd, posedge rs,posedge wr) begin lOMoAR cPSD| 36991220 if(rs) begin empty<=1; full<=0; wpt<=0; rpt<=0; end else if (rd) begin if(rpt==wpt) empty<=1; if (~empty) begin r<=mem[rpt]; rpt<=rpt+1'b1; full<=0; end end else if(wr) begin if (wpt+1==rpt) full<=1; if (~full) begin mem[wpt] <=wd; wpt<= wpt+1'b1; empty<=0; end en d end endmodule lOMoAR cPSD| 36991220 Transmitter: module Transmitter
#(parameter dbit=8, stop=1) //so bit data & bit stop (tx,data,str,fsh,clk,enable); input [dbit-1:0] data; input clk,enable,str; output reg tx,fsh; reg [8:0] c; reg [dbit-1:0] d;
always @(posedge clk) if(enable) case (str) //enable:
tin hieu cho phep cap tu FIFO 1'b1: //khoi tao va
truyen bit start begin d<=data; c<=9'b111111110;
//bien dem databit & stop bit tx<=0; fsh<=0; //tin
hieu bao hoan thanh phat 1 frame data end 1'b0: //truyen data begin
if (c[8]) //data tu fifo duoc truyen noi tiep qua ngo ra tx begin tx<= d[0]; d<=d>>1; c<=c<<1; end else //chen them bit stop begin tx<=1; if(tx)
fsh<=1;/*tin hieu fsh len 1 thong bao hoan thanh
viec truyen toi fifo, fifo tao tin hieu enable va xuat frame du lieu tiep theo*/ end lOMoAR cPSD| 36991220 end endcase endmodule
Interface (first cycle setup): module
Controller(fsh,empty,str,rd,enb,clk); input
wire clk,fsh,empty; output reg str,rd,enb; reg c; always @* begin case(empty) 1'b0: begin enb=1; if(c) begin rd=1; str=1; c=0; end else begin rd=0; str=0; end lOMoAR cPSD| 36991220 if(fsh) begin rd=1; str=1; end end 1'b1: begin c=1; enb=0; end endcase end endmodule
Complete UART_TRANSMITTER_SUBSYSTEM:
module Transmitter_subsystem(tx,clk,wd,wr,full,rs,EMPTY,fsh,str,rd); input wire clk,wr,rs;
input wire [7:0] wd; output wire
full,tx,EMPTY,fsh,str,rd; wire [7:0] net; wire d;
FIFO B1(.wd(wd),.wr(wr),.full(full),.empty(EMPTY),.rd(rd),.r(net),.rs(rs));
Controller B2(.fsh(fsh),.enb(d),.str(str),.rd(rd),.empty(EMPTY),.clk(clk));
Transmitter B3(.tx(tx),.clk(clk),.str(str),.enable(d),.fsh(fsh),.data(net)); Endmodule
Receiver: module UART_receiver(clk, reset, rx_data, s_tick,
rx_ctrl, dout); input wire clk, reset, rx_data, s_tick; output wire
rx_ctrl; output wire [7:0] dout; localparam [1:0] S_IDLE = 2'b00, lOMoAR cPSD| 36991220 S_START = 2'b01, S_DATA = 2'b10, S_STOP = 2'b11; reg [1:0] current_state,
next_state; reg [7:0] r_dout; reg
[3:0] r_count; reg r_rx_ctrl; reg
r_rx_data; reg [2:0] r_check_8bit; //GHI DATA NHAN VAO THANH GHI always @(posedge clk) begin r_rx_data <= rx_data; end
//THANH GHI TRANG THAI current_state
always @(posedge clk, posedge reset) begin if (reset) current_state <= S_IDLE; else
current_state <= next_state; end
//TIEN TRINH TRONG MOI TRANG THAI current_state
always @(posedge clk) case(current_state [1:0]) S_IDLE: begin r_rx_ctrl <= 0; r_count <= 0; r_check_8bit <= 0; if (r_rx_data == 1'b0) next_state <= S_START; else next_state <= S_IDLE; end S_START: lOMoAR cPSD| 36991220 begin if (s_tick) if (r_count == 7) begin if (r_rx_data == 1'b0) begin next_state <= S_DATA; r_count <= 0; end else next_state <= S_IDLE; end else begin r_count <= r_count + 1; next_state <= S_START; end end S_DATA: begin if (s_tick) if (r_count == 15) begin r_count <= 0;
r_dout[r_check_8bit]<= r_rx_data; if (r_check_8bit == 3'b111) begin lOMoAR cPSD| 36991220 next_state <= S_STOP; r_check_8bit <= 0; end else begin
r_check_8bit <= r_check_8bit +1; next_state <= S_DATA; end end else begin r_count <= r_count + 1; next_state <= S_DATA; end end S_STOP: begin if (s_tick) if (r_count == 15) begin r_rx_ctrl <= 1; r_count <= 0; next_state <= S_IDLE; end else begin r_count <= r_count + 1; lOMoAR cPSD| 36991220 next_state <= S_STOP; end end
default: next_state <= S_IDLE; endcase
assign rx_ctrl = r_rx_ctrl; assign dout = r_dout; endmodule UART_Rx_Subsystem: module UART_comp
#(parameter w = 8, s = 4,N = 6, M = 32)
( input wire clk, reset, input wire rx_data, output wire
s_tick, output wire [w-1:0] dout,
output wire rx_ctrl, empty, full);
Baud_rate #(.N(N),.M(M)) B(.clk(clk),.reset(reset),.tick(s_tick)); UART_receiver
R(.clk(clk),.reset(reset),.rx_data(rx_data),.s_tick(s_tick),.rx_ctrl(rx_ctrl),.do ut(dout)); FIFO #(.w(w),.s(s))
F(.wd(dout),.rs(reset),.wr(rx_ctrl),.rd(),.empty(empty),.full(full),.r()); endmodule Test bench: module sub_tb; // Inputs reg clk; reg [7:0] lOMoAR cPSD| 36991220 wd; reg wr; reg rs; // Outputs wire tx; wire full; wire EMPTY; wire fsh; wire str; wire rd;
// Instantiate the Unit Under Test (UUT) Transmitter_subsystem uut ( .tx(tx), .clk(clk), .wd(wd), .wr(wr), .full(full), .rs(rs), .EMPTY(EMPTY), .fsh(fsh), .str(str), .rd(rd) ); initial begin // Initialize Inputs clk = 0; wd = lOMoAR cPSD| 36991220 0; wr = 0; rs = 0; // Wait 100 ns for global reset to finish #100; // Add stimulus here end initial begin forever #5 clk=~clk; end initial begin #2 rs=1; #5 rs=0; #7 wr=1; wd=8'b01001110; #5 wr=0; #10 wr=1; wd=8'b01110110; #5 wr=0; #10 lOMoAR cPSD| 36991220 wr=1; wd=8'b10110110; #5 wr=0; end endmodule module UART_comp_tb; parameter clock = 50; parameter bit_period = 52100; // Inputs reg clk; reg reset; reg rx_data; // Outputs wire s_tick; wire [7:0] dout; wire rx_ctrl; wire empty; wire full;
// Instantiate the Unit Under Test (UUT) UART_comp uut
(.clk(clk),.reset(reset),.rx_data(rx_data),.s_tick(s_tick),.dout(dout),.rx_ctrl(rx_ctr
l),.empty(empty),.full(full));
//Tao task de thuc hien gui du lieu cho bo receiver theo toc do baud task UART_SEND_DATA; input [7:0] i_Data; integer ii; begin // Send Start Bit rx_data <= 1'b0; #(bit_period); lOMoAR cPSD| 36991220 // Send Data Byte
for (ii=0; ii<8; ii=ii+1) begin rx_data <= i_Data[ii]; #(bit_period); end // Send Stop Bit rx_data <= 1'b1; #(bit_period); end endtask always #(clock/2) clk = ~clk; // Main Testing: initial begin clk = 0; reset = 1; rx_data = 1'b1; #1000; reset = 0; @(posedge clk); UART_SEND_DATA(8'h8A); //send ‘10001010’ end endmodule TÀI LIỆU THAM KHẢO 1.
Báo cáo môn học : “ Thiết kế VLSI Thiết kế chuẩn giao tiếp UART
bằng verilog” Đại học Bách Khoa Hà Nội. 2.
Đồ án chuyên ngành “ Thiết kế bộ truyền nhận UART 8 nạp trên kit
FPGA “ Đại học Bách Khoa Đà Nẵng, Đỗ Tiến Thành, Đà Nẵng, 2014. 3.
Giao tiếp UART là gì? Cách thức hoạt ộng, ưu nhược iểm và các ứng
dụng, ngày truy cập: 28/4/2023 Link: dientusangtaovn.com 4.
Khái niệm cơ bản về truyền thông UART, sơ ồ khối, ứng dụng | News-
Cáo công nghệ, ngày truy cập: 28/4/2023 lOMoAR cPSD| 36991220 Link: caocongnghe.com 5.
Basics of UART Communication, ngày truy cập: 28/4/2023 Link: circuitbasics.com 6.
Hệ thống truyền thông nối tiếp bất ồng bộ UART, Trần Thành Lũy, ĐHSPKT.TPHCM