TRÖÔØNG ÑAÏI HOÏC BAÙCH KHOA THAØNH PHOÁ HOÀ CHÍ MINH KHOA ÑIEÄN – ÑIEÄN TÖÛ BOÄ MOÂN ÑIEÄN TÖÛ – VIEÃN THOÂNG
ÑOÀ AÙN ÑIEÄN TÖÛ VIEÃN THOÂNG 2
Ñeà taøi:
TÌM HIEÅU QUY TRÌNH THIEÁT KEÁ CHIP VAØ NGOÂN NGÖÕ VERILOG
Ñaïi Hoïc
Baùch Khoa
GVHD : TH Y BÙI MINH THÀNH
Ầ
SVTH : TR N T N LINH Ầ
Ấ
: PHAN ĐĂNG C
NGƯỜ
: BT03ĐTVT
L PỚ
Thaùng 01/2009
ử ễ
ệ
Đ Án Đi n T Vi n Thông 2 GVHD: Bùi Minh ồ Thành
LÔØI NOÙI ÑAÀU
Một danh nhân đã nói: “Học phải đi đôi với hành” câu nói ấy tuy vô cùng ngắn gọn nhưng mang tính thực tiễn rất cao. Đặc biệt đối với những ai chọn con đường khoa học kỹ thuật thi câu nói ấy càng thiết thực hơn bao giờ hết. Lịch sử khoa học và hiện tại khoa học đã chứng minh điều đó.
Trải qua năm năm học tập tại trường Đại Học Bách Khoa Thành Phố Hồ Chí Minh các thầy cô giàu kinh nghiệm đã truyền đạt cho tôi rất nhiều kiến thức lý luận cũng như thực tiễn. Đồ án môn học này là một cơ hội để tôi tổng hợp, rà soát lại những hiểu biết, mức độ “thẩm thấu” những kiến thức mà bản thân tiếp nhận được. Nó như một công trình nho nhỏ của bản thân, một lời tri ân chân thành đối với quí Thầy (Cô) khoa Điện nói chung và bộ môn Điện tử nói riêng.
Trang 2
ấ
SVTH: Tr n T n Linh ầ Phan Đăng C ngườ
Em xin chân thành cảm ơn sự giúp đỡ tận tình của Thầy Bùi Minh Thành cùng các Thầy cô trong bộ môn Điện tử Viễn thông đã giúp em hoàn thành đồ án môn học .
ử ễ
ệ
Đ Án Đi n T Vi n Thông 2 GVHD: Bùi Minh ồ Thành
Ph n I: Quy Trình Thi
t K Chip
ầ
ế ế
i trong h u h t các v t d ng đi n t ồ ạ ở Các con Chip hi n nay đang t n t ệ ậ ụ ầ ấ ớ ủ ấ ế ế ớ ợ ữ ữ ệ ậ ữ ứ ẻ ạ ề ề ng cao. ớ thu t ph i có ch t l ả ự ỏ ề ặ ẹ ấ ượ ữ ậ ỹ
t k m t ASIC (Application Specific Integrated Circuit): ế ế ộ ệ ử , ệ i ngành công nghi p nh n th y vai trò đóng góp to l n c a Chip do đó trên th gi ậ ộ đ s n xu t ra nh ng con chip hay nh ng vi m ch tich h p này hi n đang là m t ể ả trong nh ng lĩnh v c m i m và h a h n nhi u ti m năng. V y quy trình và nh ng đòi h i v m t k I. Quy trình thi
M ch tích h p ng d ng c th ASIC là linh ki n đ ạ ụ ượ ả ư ệ ấ ỉ ụ ể ấ ở ạ ổ ầ ề ấ ầ ộ ấ ả ắ ầ ế ạ ữ ế ẽ c s n xu t ch a hoàn ợ ứ ế ạ d ng t ng quát. Quá trình ch t o ch nh (hay m t ph n) b i nhà cung c p ASIC ầ ở ban đ u này r t ph c t p, m t nhi u th i gian và là ph n đ c ti n nh t trong toàn ứ ạ ề ờ b quá trình s n xu t. K t qu c a quá trình ch t o ban đ u này s là nh ng chip ấ ộ silicon có các d i transistor ch a n i v i nhau. ấ ả ủ ư ố ớ ả
Quá trình ch t o sau cùng là quá trình k t n i các transistor v i nhau, s đ i thi t khi ng ấ ế ạ ườ ế ế ộ ế ố t k c th và ng ế ế ụ ể ườ c ẽ ượ ớ ự i này mu n th c ườ ố ng có th th c hi n đi u này trong ệ ể ự ề ờ
ầ Có hai lo i linh ki n ASIC, đó là d i c ng (gate array) và cell chu n (standard t k chip có m t thi hoàn t hi n lên trên ASIC. Nhà cung c p ASIC th ấ ệ vài tu n và g i đây là th i gian làm thay đ i hoàn toàn. ổ ả ổ ọ ạ ệ ẩ cell).
1. D i c ng (Gate Array)
ạ ả ổ ả ổ : Đ c chia thành hai lo i d i c ng là d i c ng
ặ ơ ả ượ c chia kênh hay có kênh và d i c ng không có kênh: ả ổ ồ ộ ố ữ ả ổ ấ ơ ả ượ ử ụ ả ổ đ ượ - D i c ng có kênh đ ượ ả ộ ơ ả ế ố ể ờ ủ ầ
- D i c ng không có kênh đ ả ổ ơ ả
ấ ớ ấ ụ ươ ứ ừ
vài ngàn c ng t ổ ế ố ng c ng này khó có th đ ể ượ ử ụ c s n xu t m t ho c vài hàng cell c b n ngang ộ qua chip silicon. M t cell c b n bao g m m t s transistor. Các kênh c s d ng đ liên k t n i các cell c b n gi a các hàng cell c b n đ ơ ả trong th i gian c a quá trình s n xu t sau cùng theo yêu c u khách hàng. ấ ả c s n xu t v i r t nhi u cell c b n ngang ề ượ ả ế ố qua chip silicon và không có các kênh chuyên d ng cho vi c liên k t n i. ệ ng đ ng (nh c ng NAND 2 Các d i c ng ch a t ư ổ ổ ả ổ ươ ng ho c h n n a. Do không ngõ vào) đ n vài trăm ngàn c ng t ng đ ươ ặ ơ ữ ươ ế i h n trên các d i c ng có kênh, gian đ nh tuy n (đ liên k t n i) b gi ả ổ ế ị ớ ạ ể ị cho nên s l ố ổ c s d ng h t t ng s c ng ế ổ ổ ố ượ có s n (kho ng t ả ừ
ấ ỗ ợ ẽ 70 đ n 90%) ế ữ ơ ả ề ẵ ư ệ ổ ả ổ ứ ứ ạ ẫ ề ườ ộ ư ạ ủ ạ ế ứ ạ ượ ị ạ ả ấ ướ ạ c đ c tr ng hóa b i ng ở ồ - Th vi n các cell do nh ng nhà cung c p d i c ng h tr s bao g m: các c ng logic c b n m u, thanh ghi, macro c ng và macro m n. Các ng có đ ph c t p c a MSI và LSI, macro c ng và macro m m th ch ng h n nh m ch ghép kênh, m ch so sánh và m ch đ m. Macro ẳ i d ng các m u cell c b n. c ng đ ơ ả c đ nh nghĩa b i nhà s n xu t d ẫ ứ ở ư i thi Khi so sánh các macro m n đ ườ ư ề ượ ặ vi c ch ra đ r ng các bit trong m ch so sánh hai ngõ vào ch ng h n. ẳ ạ ộ ộ t k , nh ế ế ạ ệ
Trang 3
ấ
SVTH: Tr n T n Linh ầ Phan Đăng C ngườ
2. Cell chu n (Standard cell): ỉ ẩ
ử ễ
ệ
Đ Án Đi n T Vi n Thông 2 GVHD: Bùi Minh ồ Thành
ẩ ề ệ ệ ơ ả ấ ướ ả c s n xu t tr ượ ả ộ ấ ượ ậ ừ ụ ề ệ ư ệ ứ ộ ứ ạ ủ ả ổ ứ ữ ẳ ề ư ộ ề ể ộ
ư ệ ứ ề ả ổ ệ ể ự ệ - Các linh ki n cell chu n không có khái ni m v cell c b n và không có c trên chip silicon. Nhà s n xu t t o thành ph n nào đ ấ ạ ầ ra các m t n tùy thu c khách hàng cho t ng giai đo n c a quá trình s n ả ạ ủ ặ ạ c t n d ng hi u qu h n nhi u so v i xu t chip, có nghĩa là silicon đ ớ ả ơ các d i c ng. Nhà s n xu t cung c p các th vi n macro c ng và macro ấ ấ ả m m ch c nh ng ph n t ạ có đ ph c t p c a LSI và VLSI , ch ng h n ầ ử nh b đi u khi n, ALU và b vi x lý. ử Ngoài ra th vi n macro m n còn ch a nhi u m ch ch c năng RAM mà ề ạ ứ c m t cách có hi u qu các linh ki n d i c ng; ộ ả ẫ c th c hi n hi u qu h n trong các m u ng đ ệ ượ ượ ườ ả ơ ệ ệ ự ạ ta không th th c hi n đ M ch ch c năng ROM th cell c b n. ứ ơ ả
SYSTEM REQUIREMENTS
SPECIFICATION
SPECIFICATION
MODELLING
LOGIC DESIGN
SYNTHESIS
LOGIC DESIGN
VERIFICATION
TEST GENERATION
SIGN-OFF / Mapping
PHYSICAL
MANUFAC / Place & Route
/ Configuration data
PROTOTYPE
PROTO VERIFICATION
SYSTEM TESTING
Mô hình lu ng thi t k ASIC ồ ế ế
t k d a trên FPGA (Field Programmable Gate Array): ế ế ự
II. Quy trình thi
Trang 4
ấ
SVTH: Tr n T n Linh ầ Phan Đăng C ngườ
ử ễ
ệ
Đ Án Đi n T Vi n Thông 2 GVHD: Bùi Minh ồ Thành
D i c ng l p trình đ ậ ệ ượ ạ ư ượ ấ ấ c d ng tr c tính đ c l p v i thi ộ ậ ế c và nh ng kh i này đ ậ ượ ế ượ ề ộ ố ằ ậ ượ ậ ứ ố ể ấ ạ ệ ữ ề ố
ng là linh ki n đ c s n xu t hoàn ch nh ườ ỉ ả ổ ượ ả ề t k . M i nhà s n xu t FPGA đ u nh ng v n duy trì đ ả ỗ ế ế ớ ẫ đăng ký đ c quy n các ki n trúc FPGA c a mình. Tuy nhiên, nh ng ki n trúc này ộ ữ ủ ố ớ s bao g m m t s kh i logic l p trình đ c n i v i ữ ố ồ ẽ c. Đ c u hình cho m t linh nhau b ng các ma tr n chuy n m ch l p trình đ ể ộ ạ ậ ki n cho m t ch c năng c th , nh ng ma tr n chuy n m ch này đ c l p trình ụ ể ượ ậ ể ệ đ đ nh tuy n các tín hi u gi a nhi u kh i logic riêng r . ẽ ữ ể ị Nh v y v i các tính năng c a ASIC và FPGA s đ ẽ ượ ủ ớ ộ ế ư ậ ủ ả ọ ự ườ ễ ẩ ớ ứ ế ế ế ẫ ể ấ ạ ề ệ ệ ố ượ ậ ậ ứ ệ ạ ớ ệ ậ ạ ẽ ậ ớ ễ c ch n l a tùy vào giá ng d dàng và thành c a s n ph m. Tuy nhiên v i FPGA, vi c l p trình th ệ ậ ệ nhanh chóng, ch c năng tùy thu c khách hàng. H n n a các FPGA cho phép vi c ộ ữ ơ b trí bo m ch in b ng công c CAD đ t k bên trong c ti n hành, trong khi thi ụ ượ ằ ạ ố t. Th t c này cho phép ta ki m tra s tích h p ph n FPGA v n đang hoàn t ầ ự ủ ụ ợ ấ ể t k này có th c ng và ph n m n. N u vi c ki m tra h th ng th t b i, thi ầ ế ế ể ế ứ c l p trình ngay l p t c v i chi phí c s a đ i và linh ki n khác FPGA đ đ ổ ượ ử ớ ệ ng đ i th p. V i các chip FPGA và CPLD d ng SSP (l p trình ngay trên h t ấ ố ươ th ng) hi n nay, vi c l p trình l i s hoàn toàn d dàng v i chi phí không đáng ệ ố k .ể
V i nh ng lý do trên, các thi ớ ướ ữ ệ ố ạ ế c tiên h ế ế ơ ng tr ỏ ớ ộ
Verilog RTL Coding
Verilog model
Verilog test bench
Functional/Gate simulation & Verification
sdc
Verilog Netlist
Logic Synthesis
ngc
ucf
Physical Layout
par
Device Configuration
Trang 5
ấ
SVTH: Tr n T n Linh ầ Phan Đăng C ngườ
bit
ng l ấ ộ ự ệ ố ể ng đ n FPGA đ t k th ế ướ ế ế ườ c đ nh t k đ ki m tra h th ng và có th i gian s n xu t nh . K đ n, thi ờ ế ế ượ ị ể ấ ả ế ế quy mô l n h n. Các th a hi p thi t k i đ n m t ASIC đ s n xu t ng l h ấ ở ể ả ệ ỏ ướ FPGA sang ASIC. Thí d nh th i gian ph i đ i t c xem xét khi đ nh h ụ ư ờ ạ ừ ướ ị ả ượ gi ứ xu t hi n trong ASIC do t c đ th c hi n ch c dài có th không bao gi ệ ờ ữ năng đ ể c c i ti n. ượ ả ế
ử ễ
ệ
Đ Án Đi n T Vi n Thông 2 GVHD: Bùi Minh ồ Thành
Mô hình lu ng thi t k FPGA ồ ế ế
Công ngh FPGA: ệ
III.
A. Nguyên lý Antifuse: 1. Cấu trúc Antifuse:
ị
ế ẽ ơ Antifuse: c u chì ngh ch. ầ Difussion: khuy ch tán. L p trình b ng dòng đi n. ệ ằ ậ ư
2.
ướ
ệ ớ
bào: (a) Phần giao nhau ản (b) Hình v đ n gi (c) Antifuse ho t đ ng nh 1 công t c ạ ộ ắ u khuy t đi m: ể ế Ư Kích th ỏ. c nh Quy trình ch t o khác v i công ngh CMOS. ế ạ ế
B. Nguyên lý t SRAM:
ram: ế ấ
1. C u trúc t bào S
Hình 2: C u trúc t bào SRAM (hãng Xilinx) ấ ế
2.
Ư • Tái s d ng và nâng c p thi t k d dàng. C p nh t và thay đ i ế ế ễ ậ ệ ố ổ h th ng ậ ể : u khuy t đi m ế ử ụ ấ ự ế ầ ứ ệ
c l n h n antifuse ấ b ng tái c u hình ph n c ng tr c ti p. Công ngh CMOS ằ • D li u b m t khi ngu n cung c p b ng t. Kích th ồ ữ ệ ị ấ ị ắ ấ ướ ớ ơ
Trang 6
ấ
SVTH: Tr n T n Linh ầ Phan Đăng C ngườ
EPROM: ọ ộ C. Nguyên lý UVEPROM VÀ EEPROM: 1. Nguyên lý h at đ ng Transistor
ử ễ
ệ
Đ Án Đi n T Vi n Thông 2 GVHD: Bùi Minh ồ Thành
Hình 3: C u trúc transistor EPROM (hãng Xilinx) ấ
ế ể
2. Ưu khuy t đi m:
ậ ộ ớ ệ ỏ.
Tái l p trình không c n b nh ngoài. Di n tích nh Không tái c u hình tr c ti p trên m ch. ầ ự ế ạ ấ
Ph n II: Ngô ng Verilog
ữ
ầ
i thi u v Verilog: ệ ề
I. Gi ớ
1. Khái quát:
ữ t k ph n c ng s d ng đ mô t ph n c ng chính (g m VHDL và t k các i thi Verilog là m t trong hai ngôn ng mô t ườ ộ ượ ế ế ồ , thi ả ế ế ể ầ ứ Verilog HDL) đ ử ụ . h th ng s , ví d nh máy tính hay linh ki n đi n t ệ ử ệ ố ả ầ ứ ệ c ng ụ ư ố
ẩ ượ ễ ọ ễ ử ụ ố ấ c chu n hoá theo ượ c ữ ơ chu n IEEE vào năm 1995 và 2001. Verilog r t gi ng ngôn ng C và đ gi ớ ứ ử ụ
Verilog d h c và d s d ng h n VHDL. Verilog đ ẩ i chuyên môn nghiên c u, s d ng nhi u. c s d ng đ thi Verilog HDL có th đ ể ượ ử ụ ề ể t k h th ng s ế ế ệ ố m c cao nh các mô hình đ c tr ng đ n các m c th p nh ế ư ặ ư ụ ở ứ ệ ạ ố ộ ự ả ữ
ụ nhi u m c ứ ề ố ở ư khác nhau, ví d ấ ứ các c ng mô hình b trí dây, đi n tr , transistor trên m t m ch tích h p; mô t ổ ả ợ ở ữ ệ thanh ghi và s di chuy n d li u logic, flip_flop trong h th ng s ; mô t ể ố ệ ố gi a các thanh ghi (RTL - Register Transfer Level). 2. M c đích s d ng Verilog HDL: ử ụ
Trang 7
ấ
SVTH: Tr n T n Linh ầ Phan Đăng C ngườ
ố ế Ở ấ ệ ố ộ ệ ố c p đ chi ti ộ ồ ể m c c ng không còn s ớ ệ ố ậ ề ữ ề H th ng s là m t h th ng ph c t p b c cao. ậ ầ ư t k ế ế ở ứ ổ ủ ế ế ầ ứ ữ ồ ủ ổ i ph c t p các liên k t không theo ch c năng c a thi ả ứ ạ ủ ế ỹ ư ệ ứ ổ ướ ứ ữ ậ ỹ ấ t nh t, ứ ạ chúng có th bao g m hàng nghìn thành ph n nh : các transistor ho c các ặ ử c ng logic, cho nên v i h th ng s l n, thi ố ớ ổ t k logic cũng không d ng n a. Qua nhi u th p k , gi n đ logic c a các thi ả ồ ỷ ụ m t m c còn nhi u n a. Ngày nay, s ph c t p c a ph n c ng đã tăng lên ứ ở ộ ứ ạ ủ ự ạ đ mà gi n đ c a c ng logic h u nh vô ích khi nó ch bi u di n m t m ng ộ ễ ư ầ ộ ỉ ể t k . T nh ng năm l ế ế ừ ữ ướ ầ ứ ng theo ngôn ng mô t 1970, các k s đi n và máy tính đ i h ph n c ng ả ữ ph n c ng n i b t trong k thu t là Verilog và (HDL). Hai ngôn ng mô t ổ ậ ầ ả t k công ngh thích s d ng Verilog h n. VHDL nh ng nh ng nhà thi ử ụ ệ ế ế ữ ư ơ
ử ễ
ệ
Đ Án Đi n T Vi n Thông 2 GVHD: Bùi Minh ồ Thành
ế ế ế ế t k và mô t các công c thi ụ ố ở h th ng s ả ệ ố t k b ng máy ế ế ằ ứ Verilog cho phép các nhà thi ề t k logic thi ự ỗ ợ ừ t k nh ng m c đ khác nhau. ứ ộ ế ế ở ữ ể
nhi u m c đ khác nhau và có s h tr t ộ tính đ giúp cho vi c x lý thi ệ ử ơ ả ủ ạ ướ ế ế ạ ể Cách s d ng c b n c a Verilog HDL trong thi ỏ ợ ấ
ả ạ ứ ệ ố ấ ố ụ ử ạ ẫ ộ ệ ơ ơ ể ạ ế ố ậ ượ t k dùng Verilog trên FPGA s ti t k m ch tích h p là mô ụ c khi chuy n sang s n xu t. M c ả ể ủ ử ụ ạ m t cách chính xác ch c năng c a b t kỳ h th ng s nào và n p ủ ả ộ ng trình t o m u lên FPGA, ví d nh máy tính, các b vi x lý,… tuy ư t k m c th p h n trong ấ ế ế ứ ữ ộ c th c hi n trên VLSI đ đ t đ n t c đ c c đ i và có di n tích ệ ộ ự ạ t ki m chi ệ ế ế ẽ ế ử ụ ph ng thi t k và t o m u trên FPGA tr ẫ ế ế tiêu c a Verilog không ph i t o ra nh ng chip VLSI mà s d ng Verilog đ ữ mô t ch ươ t c đ ch m và lãng phí di n tích h n. Nh ng thi ố Verilog đ ự c c ti u. Tuy nhiên s d ng thi ự ể phí và th i gian thi ờ ệ ử ụ t k . ế ế
II. Các ki u d li u trong Verilog: ể ữ ệ
Có 2 ki u d li u:
ữ ệ
c tham chi u ướ ộ ầ ố ượ ượ c khai báo mà không có t m, theo m c đ nh các đ i t ầ ng. N u m t t m đ ượ
ầ ẽ ặ ừ d ng vô h ế ở ạ ng có nhi u bit và đ ọ ượ ề ộ
:
hình 3.7, s ể ữ ệ - Ki u d li u net. ể ữ ệ - Ki u d li u thanh ghi. ể ữ ệ N u các đ i t ặ ng d li u net (wire, wand, wor, tri, supply0, supply1) ho c ố ượ ế regiter (reg) đ ng này ượ ặ ị r ng 1-bit và đ c khai ộ ế báo, đ i t ể ượ c c g i là vector. M t vector có th đ ố ượ ộ tham chi u trong tr ng thái toàn b , m t ph n ho c t ng bit riêng r khi c n. ầ ộ ế ạ 1. Ki u d li u net ể ữ ệ ố ượ ữ ệ ở ổ ợ Các đ i t ễ ng d li u net là kh năng t ng h p, đ ượ ả ệ ự ế ố ậ ể ế ơ ả ủ ể ể ị ế ế ụ ẽ ể ể ế ố ế ẽ c ch ra ỉ bi u di n và mô hình s k t n i v t lý các tín hi u. M t phép gán trong ộ verilog là c ch c b n đ gán giá tr đ n các ki u d li u c a net và ơ ữ ệ register. C th là, phát bi u gán ti p t c s gán giá tr đ n b t kỳ ki u nào ụ ể ấ ị ế trong các ki u d li u c a net và do v y k t n i đ n m t đ ự ế ng dây th c t ộ ườ ậ ữ ệ ủ ể trong m ch đi n suy ra đ c. ạ
Wire: M t tín hi u ki u wire bi u di n cho m t dây n i trong m ch thi ượ ể ễ ạ ố
ể ể ế ố ọ ử ế t ộ c dùng đ k t n i các c ng logic, các module. Các tín ặ c gán trong các hàm ho c ượ giá tr c a nó và nó ị ủ ư ặ ượ ế c k t c gán giá tr b ng các l nh gán đ ng th i ho c đ ệ ổ
ệ ệ ộ k và đ ổ ế ượ c đ c, không đ hi u ki u wire ch đ ỉ ượ ể ệ các block. Tín hi u ki u wire không l u tr ể ệ ph i đ ị ằ ờ ồ ả ượ n i vào các output c a các c ng logic, các module. ủ ố Cú pháp:
Wire [msb : lsb ] wire_variable_list ;
ộ ộ ổ ố ủ ẽ ượ ổ
Wor: Mô hình OR- n i dây c a vài m ch kích đang kích cùng m t net. ợ ộ Wand: Mô hình AND- n i dây c a vài m ch đang kích cùng m t net. M t ạ ộ M t c ng OR s đ ố c t ng h p. ẽ ượ ổ ạ c t ng h p. ủ ợ c ng AND s đ ổ
2. Ki u d li u Register : ể ữ ệ
Trang 8
ấ
SVTH: Tr n T n Linh ầ Phan Đăng C ngườ
Ki u d li u register l u gi giá tr t ữ ệ ữ ị ừ ộ ể phát bi u gán th t c k ti p và có ý nghĩa là đ i t ng này l u gi ư ủ ụ ế ế m t phát bi u gán th t c đ n ế ị giá tr ủ ụ ữ ố ượ ư ể ể
ử ễ
ệ
Đ Án Đi n T Vi n Thông 2 GVHD: Bùi Minh ồ Thành
ỏ ủ ụ ộ ả ậ ạ ữ ệ ủ ợ ộ ụ ượ ử ụ ề ị ướ ở ữ ủ ụ ư ạ ể ữ c duy trì cho đ n phép gán th t c k ti p cho ki u d ế ộ trên các chu kỳ delta mô ph ng. Phép gán th t c là m t phép gán cho m t c ki u d li u c a register và không hàm ý r ng m t thanh ghi v t lý s đ ẽ ượ ể ượ c s d ng cho m c đích này. Phép gán đ t ng h p , m c dù phép gán đ c ổ i nh ng đi u ki n kích kh i, ch ng h n nh các s d ng đ gán giá tr d ư ẳ ệ ể ử ụ ữ ệ giá tr trong m t ki u d li u phát bi u if và case. Phép gán th t c l u gi ộ ị ể c a register và đ ữ ủ ể ế ế ủ ụ ượ li u c a register đó. ệ ủ
3. Thông s :ố
ộ ể ố ỉ ề ố ẽ ị ượ ị ử ụ ủ ể ữ ệ ư ọ ố ị ộ ố ớ ố ớ ụ ộ M t ki u d li u thông s s đ nh nghĩa m t h ng. Ch có các h ng ằ ữ ệ ộ ằ ợ thông s nguyên (không th c ) đ c s d ng v i ph n m m t ng h p. ớ ự ổ ầ c xác đ nh chúng là Gi ng nh m i ki u d li u khác, v trí c a chúng s đ ẽ ượ toàn c c đ i v i m t module hay là c c b đ i v i m t phát bi u always ể ộ ụ riêng bi
tệ Thí dụ:
Parameter A = 4’b 1011, B = 4’b 1000 ;
Parameter Stop = 0, Slow = 1, Medium = 2, Fast = 3;
4. S nguyên: ố
ể ượ ể ế ị giá tr s . Không có t m nào đ ị ố ượ ế ỉ ầ ố ạ Các ki u d li u nguyên đ ụ c dùng đ khai báo các bi n có công d ng ữ ệ ầ ứ t ng quát đ s d ng trong các vòng l p, chúng không có ý đ nh ph n c ng ặ ể ử ụ ổ c ch rõ khi m t đ i tr c ti p và l u gi ộ ố ữ ư ự t ế . Đây là các s nguyên có d u và t o ra các k t c khai báo ng nguyên đ ấ ượ ượ qu d ng bù 2. ả ạ
Thí dụ: integer N;
5. T p giá tr : ị ậ
ng d li u wire và d li u reg có th có nh ng giá tr sau : Các đ i t ị ể ữ ữ ệ ữ ệ
ặ ặ
ị
ạ ở
ố ượ 0 1 X Z Bi n reg đ ng trình. Bi n wire ạ ươ ổ ị ầ ế ế không đ đ u ch ở ầ ị
ỡ ủ ặ
logic 0 ho c sai logic 1 ho c đúng giá tr logic không xác đ nh ị tr ng thái t ng tr cao c a c ng ba tr ng thái ủ ổ c gán giá tr ban đ u là X ượ c n i v i b t kỳ cái gì cũng có giá tr là X. ượ ố ớ ấ Có th xác đ nh c c a thanh ghi ho c dây trong khai báo. ể ị : Ví dụ reg [7:0] A,B; //thanh ghi A và B có 8 bit t 0 – 7, bit cao nh t là bit 7 ừ ấ (MSB).
wire [3:0] data; //dây data có 4 đ ừ ườ
c a thanh ghi. Ví ớ 0 – 3. ư ơ ủ 16 bit Vùng nh : Vùng nh đ ớ ượ d m t vùng nh g m 1024 t ụ ộ ớ ồ ng t c đ nh nghĩa gi ng nh vect ố ị , m i t ừ ỗ ừ
ớ ầ ẽ
Trang 9
ấ
SVTH: Tr n T n Linh ầ Phan Đăng C ngườ
ừ ủ ể ế ằ ộ ớ c a vùng nh , reg [15:0] Mem [1024:0]; Kí hi u Mem[0] s tham chi u đ n vùng nh đ u tiên . . . ế ệ Chú ý r ng không th tham chi u đ n m t bit trong 1 t ố ế ế mu n làm đi u này ph i chuy n d li u vào m t thanh ghi trung gian. ể ữ ệ ề ả ộ
ệ
ử ễ
Đ Án Đi n T Vi n Thông 2 GVHD: Bùi Minh ồ Thành III.
module: Mô t ả
Đ nh nghĩa module luôn luôn b t đ u b ng t ị ừ ằ ệ ả
, khóa module. Tên module ắ ầ c tiên danh sách port, khai báo port, thông s (parameter) ph i hi n di n tr ệ ướ ố trong đ nh nghĩa module. Danh sách port và khai báo port ch hi n di n khi ệ ỉ ệ ị module có port t ng bên ngoài.
ườ Năm thành ph n trong module là:
ữ ệ
ơ
ng tác v i môi tr ớ ươ ầ - Các khai báo bi nế - Các phát bi u lu ng d li u. ể ồ - Th ể hi n c a các module th p h n. ệ ủ ấ - Các kh i hành vi. ố - Task ho c function. ặ Các thành ph n này có th ầ ể ở ấ ầ ơ ứ . Phát bi u endmodule là phát bi u sau cùng trong đ nh nghĩa module. b t kỳ n i nào trong module và không c n th ể ể ị t ự
ầ (ngo i tr ạ ừ ọ module, tên module và endmodule) là tùy ch n, ọ ề t k . Verilog cho phép nhi u ầ ươ c đ nh nghĩa trong m t t p tin duy nh t và không c n th t . ứ ự ầ ng thích theo yêu c u thi ế ế ấ ộ ậ
Toán t ử và các phát bi u đi u khi n: ể ể ề M i thành ph n có th tr n l n và t ể ộ ẫ module đ ượ ị IV.
G m các toán t quan h so sánh 2 toán h ng và tr ra giá tr logic. Đúng ử ệ ả ạ ị
N u b t kì bit nào không xác đ nh thì k t qu ra là không xác đ nh .
1. Toán tử: ồ là 1, sai là 0. ế ấ
ế ả ị ị
> : l n h n. ớ ơ
>= : l n h n ho c b ng ớ ơ ặ ằ
< : nh h n ỏ ơ
<= : nh h n ho c b ng ặ ằ ỏ ơ
== : b ng logic ằ
!= : khác
Các toán t đi u ki n ử ề ệ
! : đ o logic ả
&& : AND logic
|| : OR logic
Các toán t set bit ử
~ : đ o bit ả
& : AND
| : OR
^ : XOR
Trang 10
ấ
SVTH: Tr n T n Linh ầ Phan Đăng C ngườ
~& : NAND
ử ễ
ệ
Đ Án Đi n T Vi n Thông 2 GVHD: Bùi Minh ồ Thành
~| : NOR
Các toán t khác ử
{,} : ghép thanh ghi ho c dây ặ
<< : d ch trái thanh ghi ị
>> : d ch ph i thanh ghi ả ị
?: : đi u ki n ệ ề
t m t module gi i đa h p t Ví dụ: dùng đi u l nh assign đ vi ề ệ ả ợ ừ ườ ng sang 4 đ ng (b n có th t vi t gi 2 đ 3 sang 8 hay 4 sang 16) i đa h p t ườ ể ự ế ạ ể ế ả ộ ợ ừ
module demux(data, in1, in0, out0, out1, out2, out3);
input data; input in0,in1; output out0,out1,out2,out3; assign out0= data&(~in1)&(~in0); assign out1= data&(~in1)&(in0); assign out2= data&(in1)&(~in0); assign out3= data&(in1)&(in0);
endmodule
ể : Các c u trúc đi u khi n ề ấ
2.
ấ ệ ể ế ằ ườ ậ ặ ữ ấ ấ khóa begin và end trong Verilog HDL. Nh đã nói ầ Verilog r t phong phú các câu l nh đi u khi n có th s d ng trong ph n ể ử ụ ề i l p trình b ng ngôn ộ ớ t l n nh t chính là thay d u ngo c {} trong ngôn ng C ữ ặ trên, d u ngo c ấ ư ừ ở th t c. H u h t chúng r t quen thu c v i nh ng ng ủ ụ ấ ầ ng C. Đi m khác bi ệ ớ ể ữ b ng t ằ {,} dùng đ n i chu i các bit. Có các lo i c u trúc sau: ạ ấ ể ố ỗ
C u trúc if . . . else ấ
C u trúc case : không gi ng c u trúc case trong C ấ ố ở ầ ệ ch không c n l nh ỗ ấ break.
Ví d :ụ
case (State)
st0: State = st1; st1: State = st2; st2: State = st3; st3: State = st0;
endcase
các module nên bài vi ấ Ngoài ra còn có các vòng l p for, while và repeat. Tuy nhiên chúng r t ề t này s không đ ẽ ử ụ ệ ế ả ặ hi m khi s d ng trong vi c mô t ế c p đ n. ậ ế
Trang 11
ấ
SVTH: Tr n T n Linh ầ Phan Đăng C ngườ
ộ ạ ấ ế Ví dụ: m t module 3 tr ng thái dùng always và c u trúc if . . .else, n u tr ng thái ế ẽ ở ạ ằ ngõ Con là 1 thì ngõ ra b ng ngõ vào, n u Con là 0 thì ngõ ra s t ng tr cao. ở ổ
ử ễ
ệ
Đ Án Đi n T Vi n Thông 2 GVHD: Bùi Minh ồ Thành
module tristate(In, Con, Out);
input In, Con; output Out; reg Out; always begin if (Con==1'b1) Out=In; else Out=1'bz;
end
endmodule
Ví dụ: m t module so sánh 2 s A và B 4 bit ộ ố
module sosanh(A, B, A_GT_B, A_EQ_B, A_LT_B);
input [3:0] A,B;
output A_GT_B, A_EQ_B, A_LT_B;
reg A_GT_B, A_EQ_B, A_LT_B;
always
begin
if(A==B)
A_EQ_B=1’b1;
else A_EQ_B=1’b0;
if(A>B)
A_GT_B=1’b1;
else A_GT_B=1’b0;
if(A
V.Phép gán (assignment) trong Verilog:
ử ứ ế ể
Toán t Phép gán đ ng th i: phép gán này ch dùng đ gán giá tr bên ngoài các gán dùng đ gán k t qu tr v c a 1 bi u th c(hàm logic). ả ả ề ủ ỉ ể ờ ị ở ể ồ block
signal1 = signal2;
Trang 12
ấ
SVTH: Tr n T n Linh ầ Phan Đăng C ngườ
Syntax: assign ví d :ụ assign Phép gán tu n t ch dùng đ gán giá tr bên trong các block. Có 2 lo i phép a = b & c; ể ầ ự ỉ ạ ị gán non-blocking assignment " <= " và blocking assignment "=".
ử ễ
ệ
Đ Án Đi n T Vi n Thông 2 GVHD: Bùi Minh ồ Thành
c xem xét gi ng nh phép gán trong ngôn ng C. Tín hi u s ữ ố ệ ẽ c s d ng làm giá tr cho ị ẽ ượ ử ụ ư ị ớ i. đ ượ tín hi u đó cho l nh ti p theo phía d ệ
Blocking đ ượ c gán giá tr ngay l p t c. và giá tr m i này s đ ị ệ Non-Blocking đ ậ ứ ế ượ ướ ố ư D ờ ờ ồ ờ c th c hi n. Tín hi u s đ ươ D ẽ c xem xét gi ng nh phép gán đ ng th i các l nh gán ệ ồ t sau khi c gán đ ng th i sau kho n th i gian ả ả c gán giá tr sau kho n ị ẽ ượ ệ ệ t . Giá tr m i này s không s d ng làm giá tr cho tín hi u đó, tín ệ ử ụ ị ớ ẽ i. Giá tr m i s ế non-blocking trong 1 block s đ ẽ ượ các l nh trong block đ ự ệ th i gian ị ờ hi u v n l y giá tr cũ s d ng cho l nh ti p theo phía d ướ ử ụ ẫ ấ ệ c s d ng cho l n th c hi n block ti p theo. đ ệ ự ượ ữ ụ ị ớ ị ầ ệ ế
Ví d :ụ Begin a = 2; b = a+1;
a <= 3; c = a;
ể và s d ng blocking assignment trong always block dùng đ mô t ả Đ ngh s d ng nonblocking assignment trong always block dùng đ mô t ả ệ h ị ử ụ ử ụ ể end ề h tu n t ệ ầ ự h p. t ổ ợ
ấ ứ đ ư ượ ồ
ơ ở ự c s d ng đ t ng h p ra các b ch t (latch), các ể ượ ử ụ ờ ể ổ ộ ợ ố
Always block là c u trúc c s trong mô hình m c RTL. Các always block c xem nh là các module th c thi đ ng th i. Always block có th đ h p. ặ ệ ổ ợ ượ ự ệ ọ ở flip-flop ho c h t ố ậ ủ ạ ố ạ khóa or ). c g i th c thi các l nh bên trong block b i các s ki n ự ệ ặ c m nh n v m c logic, c nh lên(posedge), c nh xu ng(negedge) c a 1 ho c ả nhi u tín hi u ( các tín hi u cách nhau b ng t ằ Kh i always đ ề ứ ệ ừ ệ ề
thi h p nh sau: Syntax: always @(event_1 or event_2 or ...) begin: name_for_block ... statements ... End ề ị ử ụ ể ả ế ế ệ ồ ợ ư
Đ ngh s d ng always block đ mô t always @( t ấ ả t c các tín hi u input c a h t ệ t k h t h p ủ ệ ổ ợ ở ứ trong list s ki n m c ự ệ logic)
thi t k h tu n t nh sau: begin … end ề ị ử ụ ể ả ế ế ệ ầ ự ư
Đ ngh s d ng always block đ mô t always @(posedge clk or negedge rst_)
begin
Trang 13
ấ
SVTH: Tr n T n Linh ầ Phan Đăng C ngườ
if (rst_ == 1'b0) {
ử ễ
ệ
Đ Án Đi n T Vi n Thông 2 GVHD: Bùi Minh ồ Thành
… } else {
… }
end
c s d ng đ mô t thi t k
VI. Mô hình structural và procedural: Các phát bi u th t c trong Verilog đ ủ ụ
ượ ử ụ ể ả ế ế ở ứ m c tr u t ng cao ừ ượ
ể (algorithmic level, RTL level). ứ ấ ể ự ệ ứ ạ Các phát bi u này cung c p các cách th c cho vi c th c thi các thi ỏ ế ế t k ự s gây ra s ớ ự ả ẽ ậ ổ ớ ề ạ ầ ứ
c sinh ra. c s d ng bên trong các th t c (always, ph c t p. Tuy nhiên v i s thay đ i nh trong cách l p trình mô t ổ thay đ i l n v m ch ph n c ng đ ượ Các phát bi u th t c ch đ ể ỉ ượ ử ụ ủ ụ ủ ụ function …).
ộ ố ơ ả ầ
VII. Mô hình m t s thành ph n logic c b n:
Input
H t
h p
ệ ổ ợ
Outpu t
Các giá tr ngõ ra ch ph thu c vào giá tr hi n th i c a ngõ vào nên khi ng ờ ủ ị ệ ộ ị ỏ vào thay đ i ng ra s thay đ i theo. ỉ ụ ổ ổ
Đ mô t ủ ộ ị ữ ể ệ d ng l nh gán đ ng th i. ụ
A
C
B
S
Half Adder
C = A and B;
assign C = A & B;
S = A or B;
assign S = A ^ B;
ẽ ỏ s ph thu c vào giá tr ngõ vào c a ngõ ra. Trong verilog s ụ ả ự ồ ờ ả ộ ộ b c ng bán ph n ầ Ví d : Mô t ụ
Trang 14
ấ
SVTH: Tr n T n Linh ầ Phan Đăng C ngườ
A B S C
ử ễ
ệ
Đ Án Đi n T Vi n Thông 2 GVHD: Bùi Minh ồ Thành
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1
ố ư
VIII. T i u hoá mô hình:
Miêu t i u hóa mà có th đ ả ằ ự ể ượ ự ố ư ả ế ủ ữ c s p x p l nh ng t ữ ằ ạ ượ ắ ố ư ế ữ i u hóa logic. M ch logic đ
. Di chuy n m t phát bi u t ộ i có th có nh h ể ễ ắ c t o ra, nó có th tăng ho c gi m s l ặ ượ ạ ể ả c th c thi b ng mô hình c a ngôn ng verilog nh m c i ti n m ch th c thi. Trong trình biên d ch ngôn ng C, m t ộ ạ ị ữ i u hóa t o ra mã máy t b t ể ế ạ d ch chuy n i u hóa: code thì đ i, ố ư ị ộ ố ư i u hóa cũng có th th c thi , h n th n a gi m th i gian th c thi, t theo th t ể ự ờ ả ứ ự ơ ự ng b i c t o ra thì d dàng b nh h b i b t ở ị ả ưở ạ ở ộ ố ư ễ ượ ạ c miêu t m t n i này đ n cách m t mô hình đ ế ể ừ ộ ơ ể ả ượ ộ ng sâu s c lên m t n i khác ho c chia ra nh ng di n gi ưở ả ả ữ ộ ơ c ng logic đ ổ ng nh ng c ng t ng ổ ữ ố ượ ặ ổ h p.ợ
a. Phân chia tài nguyên.
b. Di chuy n code. ể
c. Phân tích thành th a sừ ố chung.
d. Giao hoán và k t h p. ế ợ
e. T i u hóa Flip-flop và m ch ch t. ố ư ạ ố
f. Kích th c thi ướ t k . ế ế
g. ử ụ ấ ặ S d ng d u ngo c đ n.ơ
Ph n 3: Thi
t k UART:
ầ
ế ế
i thi u thi ệ t k : ế ế
I. Gi ớ
t b cho ế ị phép nh n và phát thông tin, theo th t ườ ậ ồ
Trang 15
ấ
SVTH: Tr n T n Linh ầ Phan Đăng C ngườ
UART cho phép truy n thông tin gi a máy tính và m t ngòai thi t b ngo i vi UART (Universal Asynchronous Receiver and Transmitter) là m t thi và các đ ứ ự ữ ộ ng không đ ng b . ộ ế ị ề ộ ạ khác (máy in, modem....), k t n i b ng cáp theo c ng RS 232. ế ố ằ ổ
ệ
ử ễ
t c a UART: Đ t t chi ti ế ủ ặ ả
Đ Án Đi n T Vi n Thông 2 GVHD: Bùi Minh ồ Thành II.
Phát theo ki u n i ti p. ể ố ế
ng pháp n i ti p c phát b i b UART theo ph ươ ữ ệ ố ế , m t gói d li u ộ ở ộ đ ượ
ắ ầ ữ ệ
ế
ộ
c phát thì đ ng phát và đ D li u đ ượ ữ ệ c phát 11 bit. Bit 0 đánh d u đi m b t đ u gói d li u. ấ ể 8 bit k cho d li u. ữ ệ M t bit k cho vi c ki m tra ch n l ệ ế Bit 1 đánh d u đi m cu i c a gói d li u. ể ấ Khi không có d li u đ ữ ệ . ẵ ẻ ữ ệ ườ ể ố ủ ượ ườ ự ng nh n ph i tích c c ả ậ m c 1. ở ứ
ấ ấ
Bit đ Bit ki m tra ch n l ầ ẵ ẻ c set m c 1 ho c m c 0, tuy theo s 1 đ ứ ượ ẵ ượ ử ụ ể ả c phát đ u tiên là LSB (least significant bit), bit th p nh t. ố ứ ể không đ thì đ ặ ượ c s d ng có nghĩa là s 1 ph i là ch n, ki m tra l ẵ ố . N u bit ki m tra ch n l ượ ẳ ẻ ể ẽ ế ố c phát. c đ ẽ ượ ọ c ch n ượ ể N u ki m tra ch n đ ế s d ng có nghĩa là s 1 ph i là l ử ụ thì m t l i phát đ ả ệ ượ
ộ ỗ ố ộ c phát hi n. ố ị
T c đ phát thì c đ nh. UART có th đ c chia thành 2 kh i: kh i nh n và kh i phát. ể ượ ậ ố ố ố
Data reception:
• the 8 bits of information arrive in a serial way, at any moment, via the
rx signal. The starting point is given par a 0 value of rx
• the UART places the 8 bits in a parallel way over dataout, and
announces their availability setting rxrdy active
Trang 16
ấ
SVTH: Tr n T n Linh ầ Phan Đăng C ngườ
• the information reading is made active with the read signal
ử ễ
ệ
Đ Án Đi n T Vi n Thông 2 GVHD: Bùi Minh ồ Thành
Phát d li u:
ữ ệ ự ự ế ế ệ o Ki m tra n u tín hi u txrdy tích c c, n u tích c c thì 8 bit d li u có
c ghi trong khi phát.
ữ ệ ể th đ ể ượ ặ ữ ệ ự ệ
ố thì tín hi uệ o Đ t 8 bit d li u vào và tích c c tín hi u ghi. o UART g i 8 bit theo tín hi u tx. Trong su t quá trình phát ệ txrdy ph i không ho t đ ng. ử ả
i và đ c set ự ế ả ở ạ ượ ở ứ m c ạ ộ o K t thúc quá trình phát, txrdy ph i tích c c tr l
i m i th i đi m, theo ố ế ạ ượ ề ể ọ ờ
ể ị
1. Nh n d li u: ậ ữ ệ o 8 bit c a thông tin đ n đ ế ủ ắ ầ c truy n song song lên dataout c truy n n i ti p t . Đi m b t đ u nh n có giá tr là 0. ậ ề tín hi u rxệ ặ ượ o UART đ t 8 bit đ
UART b ng Verilog (RTL code): ằ
III. Mô t ả
module uart (reset, txclk, ld_tx_data, tx_data, tx_enable, tx_out, tx_empty, rxclk, uld_rx_data, rx_data, rx_enable, rx_in, rx_empty); // Port declarations.
reset; txclk; ld_tx_data; tx_data; tx_enable; tx_out; tx_empty; rxclk; uld_rx_data;
input input input input [7:0] input output output input input output [7:0] rx_data; input input output rx_enable; rx_in; rx_empty;
// Internal Variables
Trang 17
ấ
SVTH: Tr n T n Linh ầ Phan Đăng C ngườ
reg [7:0] reg reg reg [3:0] reg reg [7:0] reg [7:0] reg [3:0] reg [3:0] reg tx_reg; tx_empty; tx_over_run; tx_cnt; tx_out; rx_reg; rx_data; rx_sample_cnt; rx_cnt; rx_frame_err;
ử ễ
ệ
Đ Án Đi n T Vi n Thông 2 GVHD: Bùi Minh ồ Thành
reg reg reg reg reg rx_over_run; rx_empty; rx_d1; rx_d2; rx_busy;
// UART RX Logic
always @ (posedge rxclk or posedge reset) if (reset) begin <= 0; rx_reg rx_data <= 0; rx_sample_cnt <= 0; <= 0; rx_cnt <= 0; rx_frame_err <= 0; rx_over_run <= 1; rx_empty <= 1; rx_d1 <= 1; rx_d2 <= 0; rx_busy end else begin
// Synchronize the asynch signal
rx_d1 rx_d2 <= rx_in; <= rx_d1;
// Uload the rx data
if (uld_rx_data) begin
rx_data rx_empty <= rx_reg; <= 1;
end
// Receive data only when rx is enabled
if (rx_enable) begin
// Check if just received start of frame
if (!rx_busy && !rx_d2) begin
rx_busy rx_sample_cnt rx_cnt <= 1; <= 1; <= 0;
Trang 18
ấ
SVTH: Tr n T n Linh ầ Phan Đăng C ngườ
end
ệ
ử ễ
Đ Án Đi n T Vi n Thông 2 GVHD: Bùi Minh ồ Thành // Start of frame detected, Proceed with rest of data
if (rx_busy) begin
rx_sample_cnt <= rx_sample_cnt + 1;
// Logic to sample at middle of data
if (rx_sample_cnt == 7) begin
if ((rx_d2 == 1) && (rx_cnt == 0)) begin rx_busy <= 0;
end else begin rx_cnt <= rx_cnt + 1;
// Start storing the rx data
if (rx_cnt > 0 && rx_cnt < 9) begin
rx_reg[rx_cnt - 1] <= rx_d2;
end if (rx_cnt == 9) begin
rx_busy <= 0;
// Check if End of frame received correctly
if (rx_d2 == 0) begin
rx_frame_err <= 1;
end else begin
rx_empty <= 0; rx_frame_err <= 0;
// Check if last rx data was not unloaded,
rx_over_run <= (rx_empty) ? 0 : 1;
Trang 19
ấ
SVTH: Tr n T n Linh ầ Phan Đăng C ngườ
end end end end end
ệ
ử ễ
Đ Án Đi n T Vi n Thông 2 GVHD: Bùi Minh ồ Thành end
if (!rx_enable) begin
rx_busy <= 0;
end
end
// UART TX Logic
always @ (posedge txclk or posedge reset) if (reset) begin tx_reg <= 0; tx_empty <= 1; tx_over_run <= 0; tx_out <= 1; tx_cnt <= 0;
end else begin if (ld_tx_data) begin
if (!tx_empty) begin tx_over_run <= 0; end else begin tx_reg <= tx_data; tx_empty <= 0; end end if (tx_enable && !tx_empty) begin
tx_cnt <= tx_cnt + 1; if (tx_cnt == 0) begin tx_out <= 0;
end if (tx_cnt > 0 && tx_cnt < 9) begin
tx_out <= tx_reg[tx_cnt -1];
Trang 20
ấ
SVTH: Tr n T n Linh ầ Phan Đăng C ngườ
end if (tx_cnt == 9)
ử ễ
ệ
Đ Án Đi n T Vi n Thông 2 GVHD: Bùi Minh ồ Thành
begin
tx_out <= 1; tx_cnt <= 0; tx_empty <= 1;
end
end
if (!tx_enable) begin
tx_cnt <= 0;
end
end
Trang 21
ấ
SVTH: Tr n T n Linh ầ Phan Đăng C ngườ
endmodule