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