baocao vlsi (1)

83
TRƯỜNG ĐẠI HC BÁCH KHOA HÀ NI VIỆN ĐIỆN T- VIN THÔNG THIT KIC ĐỒNG HSSPEC Sunday, February 17, 2013

Upload: independent

Post on 23-Jan-2023

1 views

Category:

Documents


0 download

TRANSCRIPT

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

VIỆN ĐIỆN TỬ - VIỄN THÔNG

THIẾT KẾ IC ĐỒNG HỒ SỐ

SPEC Sunday, February 17, 2013

THÔNG TIN ĐỀ TÀI

Tên đề tài: Thiết kế IC đồng hồ số

Nội dung đề tài Thiết kế IC đồng hồ số

Ngày bắt đầu 16/02/2013. Ngày kết thúc 16/04/2013.

Người hướng

dẫn đề tài

TS. Nguyễn Vũ Thắng

Kỹ sư Nguyễn Nam Phong

Nhóm tác giả Nhóm 5.

Địa chỉ email [email protected]

Thông tinThông tin báo cáo tài liệu

Tiêu đề tài liệu Spec chi tiết về thiết kế IC đồng hồ số

Ngày báo cáo 12/03/2013

Ngày nộp 12/03/2013

Mục lục 1. Tổng quan đề tài ....................................................................................................................................... 7

1.1. Mục tiêu .......................................................................................................................................... 14

1.2. Nền tảng cơ bản ............................................................................................................................... 14

1.3. Yêu cầu hệ thống ............................................................................................................................. 14

Yêu cầu chức năng .................................................................................................................................. 14

Yêu cầu phi chức năng ............................................................................................................................ 14

2. Mô tả mạch đồng hồ số ........................................................................................................................... 14

3. Thực hiện lưu đồ thuật toán IC đồng hồ số .............................................................................................. 16

4. Sơ đồ khối thiết kế .................................................................................................................................. 19

4.1. Top module ......................................................................................................................................... 20

4.2. Datapath Module ................................................................................................................................. 21

4.3. Controller Module ........................................................................................................................... 23

4.4. Khối chuyển đổi thập phân thành BCD ................................................................................................ 25

4.5. Hiển thị BCD Led 7 thanh ................................................................................................................... 28

DANH MỤC HÌNH ẢNH

Figure 1 Phân loại ASIC dựa vào phương pháp thiết kế ........................................................... 8

Figure 2 Sơ đồ thiết kế ASIC ................................................................................................... 9

Figure 3 Sequence of steps in designing an ASIC (design flow) ............................................. 11

Figure 4 Sơ đồ khối của IC đồng hồ số ................................................................................... 14

Figure 5 Lưu đồ thuật toán. .................................................................................................... 16

Figure 6 Kiến trúc mạch đồng hồ số ....................................................................................... 19

Figure 7 Sơ đồ khối tổng quát Top module ............................................................................. 20

Figure 8 Sơ đồ khối tổng quát Datapath module ..................................................................... 21

Figure 9 Sơ đồ khối Datapath ................................................................................................. 22

Figure 10 Sơ đồ khối tổng quát Controller module ................................................................. 23

Figure 11 Sơ đồ khối khối Controller ..................................................................................... 24

Figure 12 FSM datapath module ............................................................................................ 25

Figure 13 Sơ đồ khối tổng quát Conver_dec_to_BCD ............................................................ 25

Figure 14 Sơ đồ khối Cover_dec_to_BCD ............................................................................. 26

Figure 15 Sơ đồ khối tổng quát Led_7_segs ........................................................................... 28

Figure 16 Sơ đồ khối Led-7-segs ............................................................................................ 29

Figure 17 Tạo project mới bằng leda ...................................................................................... 30

Figure 18 Đặt tên cho project ................................................................................................. 30

Figure 19 Chọn ngôn ngữ miêu tả phần cứng và phiên bản .................................................... 31

Figure 20 Thêm file vào project ............................................................................................. 31

Figure 21 Tạo xong project .................................................................................................... 32

Figure 22 Cấu hình chân reset và enable ................................................................................ 32

Figure 23 Check lỗi ................................................................................................................ 33

Figure 24 Khởi động vcs ........................................................................................................ 34

Figure 25 Start gui VCS ......................................................................................................... 34

Figure 26 Kết quả mô phỏng .................................................................................................. 35

Figure 27 Kết quả mô phỏng .................................................... Error! Bookmark not defined.

Figure 28 Kết quả mô phỏng .................................................... Error! Bookmark not defined.

Figure 29 Khởi động DC ........................................................................................................ 36

Figure 30 Màn hình khởi động Design Compiler .................................................................... 36

Figure 31 Cài đặt thư viện ...................................................................................................... 37

Figure 32 Đọc file thiết kế ...................................................................................................... 38

Figure 33 Analyze .................................................................................................................. 38

Figure 34 Elaborate ................................................................................................................ 39

Figure 35 Check Design ......................................................................................................... 39

Figure 36 Chọn tín hiệu clock để set Constraints .................................................................... 40

Figure 37 Xét constraints cho input ........................................................................................ 41

Figure 38 Xét constraints cho output ...................................................................................... 41

Figure 39 Xét điều kiện hoạt động .......................................................................................... 42

Figure 40 Wire Load .............................................................................................................. 42

Figure 41 Xét kích thước tối đa .............................................................................................. 43

Figure 42 Compile ................................................................................................................. 44

Figure 43 Compile ultra ......................................................................................................... 44

Figure 44 Xuất Report Timing Path........................................................................................ 46

Figure 45 Xuất Report Constraints ......................................................................................... 46

Figure 46 Xuất Report Power ................................................................................................. 47

Figure 47 Xuất Report resource .............................................................................................. 47

Figure 48 Report Timing ........................................................................................................ 48

Figure 49 Report Timing ........................................................................................................ 48

Figure 50 Tạo file netlish dùng cho formality ......................................................................... 49

Figure 51 Tạo file *.ddc ......................................................................................................... 49

Figure 52 Kết quả mô phỏng VCS sau DC ............................................................................. 53

Figure 53 Khởi động formality ............................................................................................... 54

Figure 54 Load file *.svf ........................................................................................................ 54

Figure 55 Load các file trước khi tổng hợp ............................................................................. 55

Figure 56 Set top .................................................................................................................... 55

Figure 57 Load file sau khi tổng hợp ...................................................................................... 56

Figure 58 Chọn thư viện tổng hợp .......................................................................................... 56

Figure 59 Set top cho file .v sau tổng hợp............................................................................... 57

Figure 60 Run Matching......................................................................................................... 57

Figure 61 Verify ..................................................................................................................... 58

Figure 62 Khởi động PrimeTime ............................................................................................ 59

Figure 63 Report Coverage .................................................................................................... 60

Figure 64 Thiết lập constraint ................................................................................................. 62

Figure 65 Export Report Timing maxdelay ............................................................................ 63

Figure 66 Report Timing maxdelay ........................................................................................ 63

Figure 67 Export Report Timing mindelay ............................................................................. 64

Figure 68 Export Report Timing mindelay ............................................................................. 65

Figure 69 Report Timing mindelay......................................................................................... 65

Figure 70 Khởi động ICC ....................................................................................................... 66

Figure 71 Cài đặt thư viện ...................................................................................................... 67

Figure 72 Tạo thư viện ........................................................................................................... 67

Figure 73 Đọc file *.DDC ...................................................................................................... 68

Figure 74 Đọc file *.SDC ....................................................................................................... 69

Figure 75 Các cell của IC chưa sắp xếp .................................................................................. 69

Figure 76 Xét thư viện TLU+ ................................................................................................. 70

Figure 77 Khởi tạo nền ........................................................................................................... 71

Figure 78 Nền và các cell ....................................................................................................... 72

Figure 79 VDD và VSS .......................................................................................................... 72

Figure 80 Chọn lớp cho VDD ................................................................................................ 73

Figure 81 Chọn lớp cho VSS .................................................................................................. 73

Figure 82 Sau khi tạo VDD và VSS ....................................................................................... 74

Figure 83 Độ rộng VDD ......................................................................................................... 74

Figure 84 Độ rộng VSS .......................................................................................................... 75

Figure 85 Tạo vòng đệm ........................................................................................................ 75

Figure 86 Sắp xếp cell ............................................................................................................ 76

Figure 87 Sau khi xắp xếp cell ............................................................................................... 76

Figure 88 Clock tree ............................................................................................................... 78

Figure 89 Kết quả clock tree................................................................................................... 78

Figure 90 Routing .................................................................................................................. 79

Figure 91 Extract RC ............................................................................................................. 79

Figure 92 Kết quả sau ICC ..................................................................................................... 80

Figure 93 Thiết lập vcs sau icc ................................................. Error! Bookmark not defined.

Figure 94 Kết quả mô phỏng VCS sau ICC ............................................................................ 81

Figure 95 Kết quả mô phỏng VCS sau ICC .............................. Error! Bookmark not defined.

LỜI NÓI ĐẦU

Ngày nay, các thiết bị điện tử với đa tính năng đang đựơc ứng dụng rộng rãi và thâm

nhập ngày càng nhiều, trong các lĩnh vực kỹ thuật và đời sống xã hội. Từ các thiết bị văn

phòng cho đến các thiết bị trong gia đình, hầu hết đều có chứa các vi mạch tích hợp (còn gọi

tắt là IC), nhằm đem lại sự tiện nghi cho con người, trong thời đại công nghiệp hoá, hiện đại

hoá. Do đó, ngành thiết kế IC đang rất được chú trọng. Chính vì vậy, thông qua môn học

“Thiết kế VLSI” ,chúng em đã thực hiện một bài tập lớn với đề tài “Thiết kế IC đồng hồ số” sử

dụng bộ công cụ phần mềm thiết kế IC của Synopsys.

Khối đếm giờ là một khối vô cùng phổ biến trong các IC ngày nay, đặc biệt là các vi xử

lý, vi điều khiển hiện đại do hầu hết các ứng dụng đều cần đến bộ định giờ. Bên cạnh đó, một

bộ đếm giờ và hiển thị ra led 7 thanh gần như đầy đủ các thành phần của một thiết kế số, bao

gồm từ các phần tử tuần tự cho tới các thành phần mạch tổ hợp. Mặt khác, nó cũng đủ nhỏ để

một nhóm sinh viên có thể hoàn thành trong một kỳ học. Do vậy, việc thiết kế IC đồng hồ số

và hiển thị ra led 7 thanh là một bài tập lớn rất phù hợp, phục vụ tốt cho việc học môn “Thiết

kế VLSI”.

Chúng em xin chân thành cảm ơn thầy giáo Ts. Nguyễn Vũ Thắng và Ks. Nguyễn Nam

Phong đã tận tình chỉ bảo và hướng dẫn, cung cấp cho chúng em những điều kiện tốt nhất để

thực hiện đề tài này.

1. Quy trình thiết kế mạch vi điện tử chuyên dụng (ASIC)

1.1 Tổng quan về công nghệ ASIC

ASIC (Application-Specific Integrated Circuit) là một vi mạch được thiết kế dành cho một

ứng dụng cụ thể, ví dụ như vi mạch được thiết kế cho vệ tinh, vi mạch thiết kế cho ô tô, vi

mạch thiết kế cho giao diện giữa bộ nhớ và CPU. ASIC ngày nay được ứng dụng hầu như khắp

mọi nơi.

Dựa vào phương pháp thiết kế có thể phân loại ASIC như sau:

ASIC

Semi

CustomFull Custom

Cell-based

(Standard Cells)Array-based

Gate Array FPGAs/PLDs

Figure 1 Phân loại ASIC dựa vào phương pháp thiết kế

Full custom ASIC

Full custom ASIC là IC đặc chế, là một vi mạch có các tế bào lôgic (logic cell) và các lớp

mặt nạ được xây dựng (đặc chế hóa) theo yêu cầu của khách hàng. Những IC đặc chế này

thường nhắm tới các ứng dụng riêng biệt và do đó, chúng ta có thể gọi một số IC đặc chế này

là ASIC đặc chế.

Ưu điểm của các IC này là sự tối ưu về diện tích về hiệu suất làm việc, tuy nhiên quy trình

thiết kế tốn nhiều thời gian, chi phí cao dẫn đến giá thành sản phẩm rất đắt.

Semi Custom ASIC

Semi Custom ASIC là các IC được thiết kế dựa trên các khối đã được định nghĩa sẵn. Semi

Custom ASIC được chia thành các hướng như sau:

ASIC dựa trên các tế bào chuẩn (Standard-Cell-Based ASIC): mỗi tế bào là môt

tập hợp mô tả các chức năng logic, thông số vật lí (trễ, điện cảm, điện dung, điện trở...) và các

đặc tính hình học cần thiết cho việc tạo ra mặt nạ của một phần tử cơ bản như các cổng AND,

OR, XOR, MUX, FF...Ưu điểm: Tiết kiệm thời gian, giảm chi phí sản xuất và giảm rủi ro do

sử dụng tế bào chuẩn đã được thiết kế sẵn và kiểm tra trước. Nhược điểm : mất thời gian chế

tạo các lớp mặt nạ, không tối ưu về diện tích cũng như hiệu suất.

ASIC dựa trên mảng cổng lôgíc (Gate-Array-Based ASIC): ASIC được đúc sẵn

bằng mảng các cổng hoặc các cell giống hết nhau nhưng chưa từng được kết nối với nhau. Các

cell này được đặt tại các vị trí được xác định trước. Channeled-gate aray ASIC: Các kết nối và

các mảng logic nằm trên cùng một lớp, các kết nối tạo thành các kênh nằm giữa các mảng

cổng logic. Channeless-gate aray ASIC: Các kết nối nằm ở lớp trên, còn các mảng logic nằm ở

lớp dưới.

Các vi mạch lập trình được (PLD: Programmable Logic Devices): PLD: gồm

một mảng logic AND/OR lập trình được có kích thước xác định. Mạch logic thực hiện trong

PLD theo dạng tổng của tích (sum-of-product). PLD có thể cấu hình hay lập trình để tạo nên

một bộ phận tùy biến cho các ứng dụng riêng biệt nên chúng cũng thuộc họ ASIC. Đặc điểm:

logic cell và các lớp mặt nạ không được tùy biến, thiết kế nhanh giá thành rẻ.

Mảng cổng lôgíc có thể lập trình được theo trường (FPGA: Field Programmable

Gate Array): Kiến trúc của FPGA là kiến trúc mảng các khối logic, khối logic, điểm này giúp

FPGA có thể chứa nhiều hơn các phần tử logic và phát huy tối đa khả năng lập trình của các

phần tử logic và hệ thống mạch kết nối.

1.2 Quy trình thiết kế ASIC

Quy trình thiết kế ASIC được chia làm hai phần chính là front-end và back-end. Sơ đồ thiết

kế được miêu tả trong Hình 2. Front-end bao gồm các bước không phụ thuộc vào công nghệ

chế tạo, là quá trình kiểm thử thiết kế và ta có thể sử dụng những dữ liệu của phần này cho

nhiều công nghệ chế tạo khác nhau mà không ảnh hưởng đến sản phẩm cuối cùng. Ngược lại,

back-end gồm các bước thực hiện dựa trên công nghệ sử dụng.

Design

specification

Behavioral

description

RTL coding

Functional

verification and

testing

Logic

synthesis

Layout verification

and implementation

Physical

layout

Floor planning,

place and route

Gate level

nestlist

FAB

Logic

verification

and testing

Front end Back end

Figure 2 Sơ đồ thiết kế ASIC

Design specification

Design specification là một phần quan trọng của luồng thiết kế ASIC. Trong bước này,

các đặc tính và chức năng của chip ASIC được định nghĩa. Kế hoạch thiết kế cũng được

đưa ra như thời gian hoàn thành dự án, chi phí, diện tích chip ….

Dựa vào yêu cầu chức năng và yêu cầu phi chức năng kiến trúc và vi kiến trúc cho từng

module của ASIC được xác định. Trong quá trình mô phỏng kiến trúc, kiến trúc ASIC có

thể thay đổi nếu kết quả mô phỏng cho thấy nó không đáp ứng những yêu cầu về đặc tả.

RTL coding

RTL coding là bước mô tả thiết kế dưới dạng mã RTL bằng một ngôn ngữ mô tả phần cứng

như VHDL hoặc verilog. Mã RTL phải đảm bảo có thể tổng hợp được thành mạch vật lý, do

đó việc mã hóa RTL phải tuân theo một bộ các quy tắc phụ thuộc vào vào khả năng hỗ trợ của

nhà sản xuất phần cứng.

Logic synthesis

Logic synthesis là bước tổng hợp mạch từ code RTL thành cổng logic. Dựa vào những cell

có sẵn trong tập tin thư viên công nghệ, mạch cổng logic được tổng hợp để thực hiện những

chức năng như code RTL mô tả. Kết quả của bước Synthesis này là các "net-list" cấu trúc theo

một tiêu chuẩn nào đó.

Logic verification and testing

Logic verification and testing là bước kiểm tra chức năng của mạch tổ hợp được từ bước

trước, so với yêu cầu chức năng trong specs. Ngoài ra, bước này có thể bao gồm cả việc kiểm

tra timing.

Physical layout

Phần này thường được đảm nhiệm bởi chuyên gia trong các hãng sản xuất bán dẫn. Họ sử

dụng các công cụ để chuyển net-list sang kiểu dữ liệu cho layout. Netlist sẽ trở thành bản vẽ

cách bố trí các transistor, capacitor, resistor,... Ở đây phải tuân thủ nghiêm ngặt một thứ gọi là

Design Rule. Các luật này được đưa ra dựa vào các giới hạn của việc chế tạo, để đảm bảo bản

Physical layout có thể chế tạo được.

Layout verification and implementation

Layout verification and implementation là bước kiểm tra sau layout để kiểm tra chức năng

của mạch so với mạch netlist đã tạo ra từ các phần trước. Ngoài ra ở bước này, các luật của nhà

sản xuất đã đưa ra cũng được kiểm tra.

Fabrication

Fabrication là bước cuối cùng, đó là chế tao chip dựa vào mạch layout.

1.3 Bộ phần mền Synopsys

1.3.1 Trình tự các bước thiết kế một ASIC (design flow) trong Synopsys.

Figure 3 Sequence of steps in designing an ASIC (design flow)

Design entry

o Sử dụng schematic hoặc dùng ngôn ngữ mô tả phần cứng như VHDL,

Verilog, System Verilog.

Logic synthesis

o Dùng HDL và công cụ tổng hợp logic để xây dựng netlist – là sự mô tả

của components và kết nối (interconnect) giữa chúng

System partitioning

o Chia hệ thống lớn thành các khối thích hợp

Simulation

o Kiểm tra chức năng của hệ thống

o Kiểm tra timing của hệ thống để đảm bảo đáp ứng được các yêu cầu về

thời gian.

Floorplanning

o Sắp xếp các block trên chip

Placement

o Phân chia vị trí của các cells trong 1 khối.

Routing

o Tạo nên các kết nối giữa các cells và các blocks.

Circuit extraction

o Tính toán trở kháng và dung kháng của các interconnect

Post layout simulation

o Kiểm tra khả năng làm việc ổn định của toàn bộ thiết kế trong trường

hợp có thêm tải từ lớp interconnect.

Các bước thiết kế 1 - 5: logic.

Các bước thiết kế 5 – 9 : vật lý.

1.3.2 Các phần mềm trong bộ phần mềm của Synopsys.

Synopsys cung cấp các phần mềm phục vụ hầu hết các công đoạn trong quy trình thiết

kế ASIC, tập hợp thành bộ Synopsys Tools. Các phần mềm trong bộ phần mềm thiết kế

ASIC của Synopsys:

Leda

Leda là một công cụ kiểm tra đi kèm với một số luật định trước để kiểm tra mã Verilog

hoặc VHDL. Leda kiểm thử cả code RTL và netlist, Leda có thể kiểm tra thiết kế từ đầu đến

cuối để tìm những lỗi có thể dẫn tới vấn đề trong các quá trình mô phỏng, tổng hợp mạch.

VCS

VCS là chương trình mô phỏng mã phần cứng. VCS cho phép người thiết kế phân tích,

dịch và mô phỏng các miêu tả phần cứng bằng Verilog... Đầu vào VCS là các tệp HDL

(.v, .sv, .vhd . . .), thư viện của nhà sản xuất IC, tệp chứa các thông số trễ (.sdf). Đầu ra VCS

là kết quả mô phỏng (file đầu ra .txt, .doc; waveform ...).

Design Compiler

Design compiler (DC) là công cụ quan trọng nhất trong bộ sản phẩm tổng hợp của

Synopsys. Phần mềm DC sẽ tối ưu thiết kế để đưa ra một mô hình logic nhỏ nhất và nhanh

nhất để thực hiện chức năng đã đưa ra.

Yêu cầu đầu vào để tổng hợp mạch bao gồm 3 thành phần:

RTL Source: Code VHDL hoặc Verilog

Contraints: các thiết lập ban đầu cho đầu vào

Technology Libraries: Các thư viện công nghệ của các nhà sản xuất

Đầu ra sau khi thực hiện phần mềm Design Compier:

Gate-level Netlist *.v: file mô tả mạch bằng các phần tử logic cơ bản, đầu vào cho VCS.

File “*.svf”: file thông tin cài đặt Formality cho việc so sánh sự giống nhau ở đầu ra

trong Formality

File “*.ddc”: lưu thiết kế unmapped

File “*.sdc”: ghi ra script trong Synopsys Design Contraints định dạng “.sdc”

File “*.sdf”: ghi ra một file chú thích Standard Delay Format

Primetime

Primetime là một công cụ phân tích thời gian tĩnh ở mức cổng cho các thiết kế phức

tạp, nhiểu triệu cổng. Primetime được tích hợp vào trong quá trình tổng hợp vật lý của

Synopsys vì nó sử dụng nhiều thư viện, cơ sở dữ liệu và các câu lệnh giống như các công cụ

khác của Synopsys như Design Compiler. Đầu vào của Primetime là các file đầu ra sau khi

tổng hợp (netlist, .sdf, .sdc) và Thư viện công nghệ. Đầu ra của Primetime là các thông tin về

trễ và dữ liệu điện dung kí sinh.

IC Compiler

Là công cụ thực hiện tổng hợp ở mức vật lý, bao gồm layout (thực hiện việc sắp xếp và

tối ưu vị trí các khối, nối dây, bố trí đường đi của xung clock) và giải nén RC. IC Compiler cho

phép người thiết kế làm việc có hiệu quả cao khi thiết kế các khối phức tạp. Đầu vào: netlist

(.v) hoặc file .ddc, .sdc. Đầu ra: netlist (.v), .sdc,…

Formality

Formality là phần mền phát hiện ra sự khác biệt không mong muốn có thể xảy ra

trong quá trình triển khai thiết kế. Formality thực hiện kiểm chứng hình thức để xem xét sự

tương đương giữa hai thiết kế và đưa ra các phân tích chi tiết về bất cứ sự sai khác nào giữa

chúng. Đầu vào : 2 file HDL cần kiểm chứng, file .svf. Đầu ra: kết quả so sánh 2 file HDL.

2. Tổng quan đề tài

1.1. Mục tiêu

- Thiết kế hoàn thiện IC đồng hồ số.

- Củng cố kinh nghiệm về cách xây dựng và hoàn thành 1 đề tài.

- Nâng cao khả năng mô tả phần cứng bằng ngôn ngữ Verilog.

- Nâng cao khả năng sử dụng phần mềm Synopsis.

1.2. Nền tảng cơ bản

- Biết mô tả phần cứng bằng ngôn ngữ Verilog.

- Có khả năng đọc tài liệu và tìm kiếm tài liệu trên mạng.

- Có kiến thức cơ bản về thiết kế IC.

1.3. Yêu cầu hệ thống

Yêu cầu chức năng

- Hiển thị được giờ phút giây.

- Nhận 2 nút bấm button1 và button2 kịp thời để điều chỉnh thời gian chính xác.

Yêu cầu phi chức năng

- Cách bố trí và sắp xếp menu đơn giản, dễ điều chỉnh thời gian.

3. Mô tả mạch đồng hồ số

IC đồng hồ số là mạch tích hợp cỡ nhỏ thực hiện chức năng của một chiếc đồng hồ số.

Mạch đồng hồ số cho hiển phép thị thời gian từ 0 giờ 0 phút 0 giây (00:00:00) cho tới 23 giờ

59 phút 59 giây (23:59:59). Các số chỉ giờ phút giây được hiển thị trên led 7 thanh.

DigitalClock

IC

Hiển thị giờ

Hiển thị phút

Hiển thị giây

rst

button1

button2

Button

Button

Button

hour_led[13:0]

min_led[13:0]

sec_led[13:0]clk

hour_led[13:0]

min_led[13:0]

sec_led[13:0]

Figure 4 Sơ đồ khối của IC đồng hồ số

- Người dùng có thể điều khiển mạch đồng hồ số bằng 3 nút bấm Reset, button1 và button2.

Trong đó:

Reset: tín hiệu cho phép thiết lập lại trạng thái ban đầu của đồng hồ. Khi tín hiệu này

bằng „0‟, đồng hồ sẽ được thiết lập lại với trạng thái là 00 giờ 00 phút 00 giây.

Button1: cho phép chọn tín hiệu được điều chỉnh. Khi button1 được nhấn lần 1, thì tín

hiệu blink được gán bằng 1 (tức là giờ được hiển thị nhấp nháy, và ta có thể thay đổi

giờ), nếu được nhấn lần 2 thì blink được gán bằng 2 (tức là phút được hiển thị nhấp

nháy, và ta có thể thay đổi phút), nếu được nhấn lần 3 thì blink sẽ được gán bằng 0.

Button2: cho phép tăng giá trị của tín hiệu hiển thị nhấp nháy.

- Thời gian được hiển thị qua các led 7 thanh.

4. Thực hiện lưu đồ thuật toán IC đồng hồ số

Dựa vào đặc điểm đồng hồ số được mô tả như phần 2, ta xây dựng được lưu đồ thuật

toán cho mạch đồng hồ số như sau:

Initial

h=0

m=0

s=0

blink=0

Start

blink=1

button1=1

button2=1button1=1

blink=2

button1=1

blink=0

T

T

T

F

T

F

s=s+1 s=59F

s=0

T

m=59

h=23

m=0

T

h=0

T

F

F

F

T

button2=1

F

F

m=m+1

h=h+1

h=h+1h=23

h=0

F

T

T

m=m+1m=59

m=0

F

Figure 5 Lưu đồ thuật toán.

Triển khai thuật toán trên C++, ta được kết quả đúng với yêu cầu đã nêu ở trên:

Code C++: // digital_clock.cpp : Defines the entry point for the console application. #include "iostream" #include "conio.h" using namespace std; int main(){

cout<<"Implement to digital clock algorithm"<<endl; int blink0=0; int button1=0; int button2=0; int h=22; int m=58; int s=58; do{

cout<<"button1="; cin>>button1; cout<<"button2="; cin>>button2; if((button1==0)&&(blink0==0)){ if(s==59){ s=0; if(m==59){ m=0;

if(h==23){ h=0; } else { h=h+1; } } else{

m=m+1; } } else { s=s+1; } } else {

if((button1==1)&&(blink0==0)){ blink0=1; } else { if((button1==1)&&(blink0==1)){ blink0=2; } else {

if((button1==1)&&(blink0==2)){ blink0=0; } else { if((button2==1)&&(blink0==1)){ if(h==23){ h=0; }

else { h=h+1; } } else { if((button2==1)&&(blink0==2)){ if(m==59){ m=0; }

else { m=m+1; } } } } }

} }

cout<< h << ":" << m << ":" << s <<" blink="<<blink0<< endl; }while( (s!=60) || (m!=60) || (h!=24) ); return 0;

};

Kết quả triển khai thuật toán trên C++:

5. Sơ đồ khối thiết kế

Triển khai thuật toán trên phần cứng bằng mô hình FSMD, ta có kiến trúc của mạch

đồng hồ số như sau:

LED_7_segs

cover_dec_to_BCD

Datapathcontroller

rst

clk

button1

button2control_signal

[9:0]

hour[5:0]

min[5:0]

sec[5:0]

hour_tens[3:0]

min_tens[3:0]

sec_tens[3:0]

comp_h

comp_m

comp_s

blink[0] Two 7-segment min

Two 7-segment hour

Two 7-segment sec

hour_led[13:7]

min_led[13:7]

sec_led[13:7]

hour_ones[3:0]

cover_dec_to_BCD

min_ones[3:0]

cover_dec_to_BCD

sec_ones[3:0]

LED_7_segs

LED_7_segs

LED_7_segs

LED_7_segs

LED_7_segs

hour_led[6:0]

min_led[6:0]

sec_led[6:0]

blink[1]

blink[0]

blink[1]

1'b1

1'b1

Figure 6 Kiến trúc mạch đồng hồ số

- Trong sơ đồ trên bao gồm các module:

1. Datapath: Module bao gồm các thanh ghi, bộ cộng, bộ so sánh cần sử dụng trong việc

thực hiện chức năng của mạch.

2. Controller: Module điều khiển hoạt động của mạch, sử dụng mô hình máy trạng thái

FSM. Tín hiệu đưa ra control_signal dùng để điều khiển việc tăng các tín hiệu thời gian

và hiển thị nhấp nháy tín hiệu đang được điều chỉnh.

3. 7-segment Decoder: Giải mã các tín hiệu mang thông tin về giờ, phút, giây để hiển thị

trên led 7 thanh, vì giờ phút giây được biểu diễn bởi 2 chữ số, nên ta cần 2 led 7 thanh

cho mỗi đơn vị giờ, phút và giây. Dựa vào blink[1:0] để nhấp nháy tín hiệu đang được

điều chỉnh.

5.1. Top module

DigitalClock

IC

rst

button1

button2

rst

button1

button2

hour_led[13:0]

min_led[13:0]

sec_led[13:0]

clk

hour_led[13:0]

min_led[13:0]

sec_led[13:0]

clk

Figure 7 Sơ đồ khối tổng quát Top module

STT

Tên

Kích

thước

(bit)

I/O

Mô tả

1 Clk 1 Input Tín hiệu xung nhịp cho toàn hệ thống.

2 Rst 1 Input

Tín hiệu cho phép thiết lập lại trạng thái ban đầu cho

mạch.

Active mức thấp:

rst = 0: Reset

rst = 1: Không Reset

3 Button1 1 Input

Tín hiệu cho phép điều chỉnh thời gian hiển thị:

+ button1 được nhấn lần 1: giờ hiển thị nhấp nháy.

+ button1 được nhấn lần 2: phút hiển thị nhấp nháy.

+ button1 được nhấn lần 3: trở về trạng thái không

điều chỉnh.

4 Button2 1 Input

Tín hiệu cho phép tăng tín hiệu đang được điều chỉnh:

+ button2 = 1: tăng tín hiệu đang nhấp nháy.

+ button2 = 0: giữ nguyên tín hiệu đang nhấp nháy.

5 Hour_led 14 Output

Tín hiệu được giải mã led 7 thanh hiển thị giờ:

7 bit cao: giải mã cho led 7 thanh biểu diễn hàng

chục.

7 bit thấp: giải mã cho led 7 thanh biểu diễn hàng

đơn vị.

6 Min_led 14 Output Tín hiệu được giải mã led 7 thanh hiển thị phút:

7 bit cao: giải mã cho led 7 thanh hàng chục.

7 bit thấp: giải mã cho led 7 thanh hàng đơn vị.

7 Sec_led 14 Output

Tín hiệu được giải mã led 7 thanh hiển thị giây:

7 bit cao: giải mã cho led 7 thanh hàng chục.

7 bit thấp: giải mã cho led 7 thanh hàng đơn vị.

5.2. Datapath Module

Datapath

control_signal[9:0]

hour[5:0]

min[5:0]

sec[5:0]

comp_h

comp_m

comp_s

blink[1:0]

hour[5:0]

min[5:0]

sec[5:0]

blink[1:0]

comp_h

comp_m

comp_s

control_signal[9:0]

Figure 8 Sơ đồ khối tổng quát Datapath module

STT

Tên

Kích

thước

(bit)

I/O Mô tả

1 Control

_signal 10 Input

Tín hiệu điều khiển từ Controller theo trọng số tương

ứng “9876543210”.

Control_signal[9:8] dùng để xác định tín hiệu nhấp nháy,

điều khiển blink[1:0] để hiển thị hoặc tắt led 7 thanh.

Nếu tín hiệu này bằng “01” thì giờ được nhấp nháy, nếu

bằng “10” thì phút được nhấp nháy, còn lại không tín

hiệu nào nhấp nháy.

2 Hour 6 Output Tín hiệu mang thông tin về giờ, nhận giá trị từ 0 đến 23,

cơ số 10.

3 Min 6 Output Tín hiệu mang thông tin về phút, nhận giá trị từ 0 đến 59,

cơ số 10.

4 Sec 6 Output Tín hiệu mang thông tin về giây, nhận giá trị từ 0 đến 59,

cơ số 10.

5 s_comp 1 Output

Tín hiệu nhận từ bộ so sánh báo hiệu cho Controller:

comp = 1 khi (phút!=59) và (giây==58)

comp = 0 trong các trường hợp còn lại

6 m_comp 1 Output

Tín hiệu nhận được từ bộ so sánh báo hiệu cho

Controller:

comp = 1 khi (phút==59) và (giây==58)

comp = 0 trong các trường hợp còn lại

7 h_comp 1 Output

Tín hiệu nhận được từ bộ so sánh báo hiệu cho

Controller:

comp = 1 khi (giờ==23) và (phút==59) và

(giây==58)

comp = 0 trong các trường hợp còn lại

8 blink 2 output

Xác định led 7 thanh tắt hay bật:

Nếu bằng 11: bật cả 4 led giờ và phút.

Nếu bằng 01: tắt 2 led giờ.

Nếu bằng 10: tắt 2 led phút

2 1 0

hour min sec

2 1 0Compare hour=23

Compare min=59

Compare sec=58

c7c6

c5

c4

c3

c2

c1

c0

c7c6

comp_h comp_m comp_s+1

control_signal: c

Figure 9 Sơ đồ khối Datapath

Các khối chức năng trong Datapath:

3 thanh ghi 6 bít: Lưu các giá trị giờ, phút và giây.

- Có tín hiệu điều khiển việc thiết lập giá trị ban đầu và nạp giá trị mới bằng rst và load.

+ rst = 1: Thiết lập lại giá trị thanh ghi về 0.

+ Load = 1: Cập nhật giá trị ở đầu vào.

3 bộ Compare (so sánh):

- So sánh 2 giá trị đầu vào bộ so sánh, một bên là các giá trị giờ, phút, giây ở thời điểm

hiện tại với một bên là giá trị 23, 59 và 58.

- Trong đó, giá trị giờ được so sánh với 23, còn giá trị phút so sánh với 59 và giây so

sánh với giá trị 58.

1 bộ cộng: Cộng giá trị đầu vào của nó với 1. Đầu vào có thể là giá trị giờ, phút, giây từ

các thanh ghi lưu trữ và việc chọn giá trị được thực hiện thông qua bộ mux với giá trị điều

khiển nhận được từ bộ điều khiển FSM.

5.3. Controller Module

controller

rst

clk

button1

button2control_signal

[9:0]

comp_h

comp_m

comp_s

rstclk

button1button2

control_signal[9:0]

comp_h

comp_m

comp_s

Figure 10 Sơ đồ khối tổng quát Controller module

STT

Tên

Kích

thước

(bit)

I/O

Mô tả

1 Clk 1 Input Tín hiệu xung nhịp, đồng bộ hoạt động của mạch.

2 Rst 1 Input

Tín hiệu thiết lập lại trạng thái ban đầu cho mạch.

Active mức thấp:

rst = 0: Reset

rst = 1: Không Reset

3 Button1 1 Input

Tín hiệu dung để điều chỉnh việc hiển thị tín hiệu:

button1 nhấn lần 1: giờ hiển thị nhấp nháy.

button1 nhấn lần 2: phút hiển thị nhấp nháy.

button1 nhấn lần 3: hiển thị bình thường.

4 Button2 1 Input

Tín hiệu cho phép tăng tín hiệu đang điều chỉnh:

button2 = 1: tăng tín hiệu đang nhấp nháy.

button2 = 0: giữ nguyên giá trị của tín hiệu.

5 s_comp 1 Output

Tín hiệu nhận được từ Datapath:

comp = 1 khi (phút!=59) và (giây==58)

comp = 0 trong các trường hợp còn lại

6 m_comp 1 Output

Tín hiệu nhận được từ Datapath:

comp = 1 khi (phút==59) và (giây==58)

comp = 0 trong các trường hợp còn lại

7 h_comp 1 Output

Tín hiệu nhận được từ Datapath:

comp=1 khi (giờ=23 và phút=59 và giây=58)

comp = 0 trong các trường hợp còn lại

8 Control_signal 10 Output Tín hiệu điều khiển hoạt động trong Datapath.

Sơ đồ khối

Combinational logic

button1button2

control_signal[9:0]

comp_h

comp_m

comp_s

Sequentiallogic

rstclk

ns

button1button2

comp_hcomp_mcomp_s

control_signal[9:0]

rstclk

ps

Figure 11 Sơ đồ khối khối Controller

Triển khai theo mô hình FSM:

rst

S1

B1_b2_h_m_s

S2

Button1:menuButton2:increateHour=23 -> h=1Minute=59 -> m=1Second=59 -> s=1

0xxxx

0xx01

0xxxx

S3

0xxx0

0x011

0xxxx

S4

0x111

S5

S6

S7

S8

S9

1xxxx

1xxxx

1xxxx

1xxxx

010xx

011xx

00xxx

01

1xx0

1xx

x

010xx

00xxx

1xxxx

1xxxx

1xxxx01x0x

00xxx

01x1x

00xxx01

x1x

01xxx

01x0x

1xxx0

1xx01

1x0

11

1x1

11

00xxx

00xxx

S1: tang sS2 tang m,s=0S3 tang h, m=0,s=0S4 h nhap nhayS5 phut nhap nhayS6 tang hS7 h=0S8 tang mS9 m=0

00_00_10_10_10

00_00_00_00_01 00_01_00_01_10 00_10_01_10_10

h=s=m=0

01_00_00_00_00

10_00_00_00_00

01_10_01_00_00

01_10_10_00_00

10_01_00_01_00

10_01_00_10_00

1x011

1x111

1xx

011

xxx0

1x1

11

1xxx0

1xx0

1

1x011

Figure 12 FSM datapath module

5.4. Khối chuyển đổi thập phân thành BCD: Chuyển đổi số thập phân 6 bit thành hai

thành phần hàng chục và hàng đơn vị được mã hóa BCD.

Conver_dec_to BCDDec[5:0]

Ones[3:0]

Tens[3:0]

Figure 13 Sơ đồ khối tổng quát Conver_dec_to_BCD

STT

Tên

Kích thước

(bit)

I/O

Mô tả

1 Dec 6 Input Tín hiệu mang thông tin về số thập

phân mã hóa 6 bit.

2 Ones 5 Output Tín hiệu mã hóa BCD biểu diễn hàng

đơn vị.

3 Tens 5 Output Tín hiệu mã hóa BCD biểu diễn hàng

chục.

OUT[0]OUT[1]OUT[2]OUT[3]OUT[4]OUT[5]OUT[6]OUT[7]OUT[8]OUT[9]

OUT[10]OUT[11]OUT[12]OUT[13]OUT[14]OUT[15]

IN[0]IN[1]IN[2]IN[3]

DECODER

ADD3

OUT[0]OUT[1]OUT[2]OUT[3]OUT[4]OUT[5]OUT[6]OUT[7]OUT[8]OUT[9]

OUT[10]OUT[11]OUT[12]OUT[13]OUT[14]OUT[15]

IN[0]IN[1]IN[2]IN[3]

DECODER

ADD3

OUT[0]OUT[1]OUT[2]OUT[3]OUT[4]OUT[5]OUT[6]OUT[7]OUT[8]OUT[9]

OUT[10]OUT[11]OUT[12]OUT[13]OUT[14]OUT[15]

IN[0]IN[1]IN[2]IN[3]

DECODER

ADD3

DEC[0]

DEC[1]

DEC[2]

DEC[3]

DEC[5]DEC[4]

0

Tens[0]

Ones[0]

Ones[1]

Ones[2]

Ones[3]

Tens[1]

Tens[2]

Tens[3]0

Figure 14 Sơ đồ khối Cover_dec_to_BCD

Sử dụng thuật toán Double dabble: dịch và cộng 3 để thực hiện.

Có thể tham khảo thêm trên Wikipedia: http://en.wikipedia.org/wiki/Double_dabble.

Ví dụ với số 6 bit:

Hundre Tiere Enere Binary number

(6 bit)

Start 0000 0000 0000 11 1111

Shift left (1) 0000 0000 0001 11 111

Shift left (2) 0000 0000 0011 11 11

Shift left (3) 0000 0000 0111 11 1

Add3 (4) 0000 0000 1010 11 1

Shift left (4) 0000 0001 0101 11

Add3 (5) 0000 0001 1000 11

Shift left (5) 0000 0011 0001 1

Shift left (6) 0000 0110 0011

Result 0 6 3

Ví dụ với số 16 bit:

Ti Tiesen Tusen Hundre Tiere Enere Binary number (16)

Start 0000 0000 0000 0000 0000 1111 1111 1111 1111

Shift left(1) 0000 0000 0000 0000 0001 1111 1111 1111 111

Shift left(2) 0000 0000 0000 0000 0011 1111 1111 1111 11

Shift left(3) 0000 0000 0000 0000 0111 1111 1111 1111 1

Add3 0000 0000 0000 0000 1010 1111 1111 1111 1

Shift left(4) 0000 0000 0000 0001 0101 1111 1111 1111

Add3 0000 0000 0000 0001 1000 1111 1111 1111

Shift left(5) 0000 0000 0000 0011 0001 1111 1111 111

Shift left(6) 0000 0000 0000 0110 0011 1111 1111 11

Add3 0000 0000 0000 1001 0011 1111 1111 11

Shift left(7) 0000 0000 0001 0010 0111 1111 1111 1

Add3 0000 0000 0001 0010 1010 1111 1111 1

Shift left(8) 0000 0000 0010 0101 0101 1111 1111

Add3 0000 0000 0010 1000 1000 1111 1111

Shift left(9) 0000 0000 0101 0001 0001 1111 111

Add3 0000 0000 1000 0001 0001 1111 111

Shift left(10) 0000 0001 0000 0010 0011 1111 11

Shift left(11) 0000 0010 0000 0100 0111 1111 1

Add3 0000 0010 0000 0100 1010 1111 1

Shift left(12) 0000 0100 0000 1001 0101 1111

Add3 0000 0100 0000 1100 1000 1111

Shift left(13) 0000 1000 0001 1001 0001 111

Add3 0000 1011 0001 1100 0001 111

Shift left(14) 0001 0110 0011 1000 0011 11

Add3 0001 1001 0011 1011 0011 11

Shift left(15) 0011 0010 0111 0110 0111 1

Add3 0011 0010 1010 1001 1010 1

Shift left(16) 0110 0101 0101 0011 0101

Result 6 5 5 3 5

Dịch từng bit sang trái, đến khi một hàng bằng hoặc lớn hơn 5, thì cộng thêm 3 vào hàng đó,

(nếu có nhiều hơn 1 hàng lớn hơn hoặc bằng 5 thì các hàng đó đều được cộng với 3), rồi lại

dịch tiếp. Khi 1 số 8 bit thì cần 8 lần dịch trước khi kết thúc thuật toán.

Chữ số có gạch chân là kết quả sau khi cộng 3.

5.5. Hiển thị BCD Led 7 thanh: Hiển thị led 7 thanh các giá trị BCD.

Cấu tạo Led 7 thanh: trong thiết kết sử dụng Led 7 thanh Anode chung để thuận tiện

cho việc kiểm tra trên FPGA.

Bảng mã hiển thị led 7 đoạn dành cho led 7 đoạn có Anode chung (các led đơn sáng ở

mức 0):

Số hiển thị

trên led 7 đoạn Mã hiển thị dạng nhị phân Mã hiển thị dạng hexa

gfedcba gfedcba

0 1000000 40

1 1111001 79

2 0100100 24

3 0110000 30

4 0011001 19

5 0010010 12

6 1000010 42

7 1111000 78

8 0000000 00

9 0010000 10

Sơ đồ khối:

Led_7_segsinput[3:0] output[6:0]

en

Figure 15 Sơ đồ khối tổng quát Led_7_segs

STT

Tên

Kích thước

(bit)

I/O

Mô tả

1 Input 4 Input Tín hiệu BCD được giải mã và hiển thị.

2 output 5 Output Tín hiệu led 7 thanh.

IN[0]IN[1]IN[2]IN[3]

OUT[0]OUT[1]OUT[2]OUT[3]OUT[4]OUT[5]OUT[6]OUT[7]OUT[8]OUT[9]

OUT[10]OUT[11]OUT[12]OUT[13]OUT[14]OUT[15]

input_i[0]input_i[1]input_i[2]input_i[3]

0

1

0

1

0

1

0

1

0

1

0

1

0

1

1

1

1

1

1

1

1

en

Output_o[0]

Output_o[1]

Output_o[2]

Output_o[3]

Output_o[4]

Output_o[5]

Output_o[6]

Decoder

Figure 16 Sơ đồ khối Led-7-segs

6. Thực hiện thiết kế sử dụng công cụ của synopsys

6.1. Leda

Tạo thư mục “rtl” chứa code Verilog của thiết kế và thư mục “leda” trong project. Mở

cửa sổ terminal, chọn đường dẫn đến thư mục leda, rồi gõ lệnh “leda”, cửa sổ giao diện phần

mềm hiện ra:

Chọn new project → chọn OK

Figure 17 Tạo project mới bằng leda

Sau khi cửa sổ hiện ra trong mục Project Name có thể thay tên project có đuôi mở rộng

là “.pro”, sau đó chọn next.

Figure 18 Đặt tên cho project

Sau khi cửa sổ mới hiện ra, trong mục “Verision” chọn 2001 (verilog 2001):

Figure 19 Chọn ngôn ngữ miêu tả phần cứng và phiên bản

Chọn “Next”. Cửa sổ tiếp theo hiện ra

Figure 20 Thêm file vào project

Chọn “Add” rồi chọn đường dẫn đến thư mục chưa code verilog. Chọn OK chọn

“Next” ở cửa sổ tiếp theo chọn “Finish”.

Figure 21 Tạo xong project

Vào “Check” chọn “Load Configuration” rồi chon RTL. Chọn biểu tượng “!” xuất hiện cửa sổ:

Figure 22 Cấu hình chân reset và enable

Sau khi xuất hiện cửa sổ vào mục “Test clock/reset” thiết lập clock và reset rồi chọn OK.

Cửa sổ mới sẽ hiện thỉ các trạng thái kiểm tra như sau:

Figure 23 Check lỗi

Nếu cửa sổ hiện thị trạng thái các ô màu xanh thì code đã được kiểm tra đúng

Nếu hiện thị các ô màu nâu báo các cảnh báo nên đọc qua và có thể điều chỉnh.

Nếu hiển thị các ô màu đỏ phải đọc chi tiết các cảnh báo vào sửa lại code tuân theo các luật

mình đã chọn.

Sau khi sửa code chạy lại kiểm tra một lần nữa cho đến khi nào trên cửa sổ không xuất hiện

màu đỏ nữa.

6.2. VCS_Kiểm tra chức năng trước khi tổng hợp.

Tạo thư mục “vcs” trong project. Trong thư mục “vcs” tạo thư mục “pre_syn” để chứa các

file sinh ra trong quá trình mô phỏng code RTL trước khi tổng hợp bằng design compiler. Vào

thư mục “pre_syn” mở của sổ lệnh Terminal gõ lệnh sau:

vcs -debug +v2k ../../rtl/*.v

Figure 24 Khởi động vcs

Sau khi phân tích các file .v xong nó sẽ tạo ra một file “simv” trong thư mục “pre_syn”.

tiếp tục vào terminal gõ lệnh sau để thực hiện mô phỏng chức năng:

./simv –gui

Figure 25 Start gui VCS

Sau khi cửa sổ hiện ra chọn file testbench click chuột phải vào chọn “Add to Wave” rồi

chọn “New Wave view”. Cửa số mới hiện ra bấm “F5” hoặc chọn run (mũi tên có chiều hướng

xuống dưới) sẽ xuất hiện ra timing cần kiểm tra.

Kết quả:

Figure 26 Kết quả mô phỏng

Dựa vào kết quả hiển thị trên waveform chúng ta có thể kết luận rằng code Rtl đã thỏa mãn

các yêu cầu chức năng của specification.

6.3. Design Compiler:

Tạo thư mục “dc” trong project, vào terminal gõ lệnh:

design_vision

Giao diện người dùng hiện lên:

Figure 28 Màn hình khởi động Design Compiler

Figure 27 Khởi động DC

Bước 1: Cài đặt thư viện

File → Setup

Figure 29 Cài đặt thư viện

- Search path : chọn đường dẫn đến thư viện milkyway :

/home/huyentt/milkyway/tcbn45gsbwp_120a/frame_only_HVH_0d5_0/tcbn45gsbwp/LM/

- Target library: thư viện công nghệ của nhà sản xuất

/home/huyentt/milkyway/tcbn45gsbwp_120a/frame_only_HVH_0d5_0/tcbn45gsbwp/LM/tcbn

45gsbwpbc.db

- Symbol library : thư viện kí hiệu có sẵn trong thư mục cài đặt của synopsys

/usr/synopsys/dc/libraries/syn/generic.sdb

- Synthetic library : thư viện tổng hợp có sẵn trong thư viện của synopsys

/usr/synopsys/dc/libraries/syn/dw_foundation.sldb

- Link library : đường dẫn đến thư viện bao gồm 2 thư viện Synthetic library và Target

library

Bước 2 : Tạo file theo dõi quá trình có đuôi mở rộng “.svf”.

Vào terminal gõ lệnh

set_svf top.svf

Bước 3: đọc file *.v

File → Read

Đọc tất cả các file verilog trong thư mục “rtl” trừ các file testbench.

Figure 30 Đọc file thiết kế

Bước 4 : Analyze

File → Analyze

Figure 31 Analyze

Bước 5: Elaborate

File →Elaborate

Trong mục Design chọn file top module

Figure 32 Elaborate

Bước 6: Kiểm tra thiết kế

Design → Check Design → OK

Bước này sẽ kiểm tra thiết kế. Trên cửa sổ terminal sẽ có các cảnh báo nên đọc kỹ.

Figure 33 Check Design

Bước 7: Set clock constraints

Chọn vào biểu tượng trên thanh menu sẽ hiện lên schematic. Sử dụng I (zoom in) và O

(zoom out) để phóng to hoặc thu nhỏ sơ đồ, dùng lăn chuột và shift hoặc ctrl để lên xuống hoặc

sang ngang.

Chọn vào tín hiệu “clk” trong sơ đồ:

Figure 34 Chọn tín hiệu clock để set Constraints

Sau khi chọn tín hiệu “clk” vào “Atributes” trên thanh Menu chọn “Specify Clock”

Ta có các thiết lập sau:

create_clock -name "clk" -period 1000000000 -waveform { 0 500000000 } { clk }

-Trong mục “Clock name” đặt tên là clk.

- Trong mục Period : 1000000000 (ns)(do chu kì thực hiện của đồng hồ số là 1s ).

- Trong mục rising: 0 (tại 0 thì xuất hiện sường lên của xung nhịp).

- Trong mục falling: 500000000 ns (tại 0.5 s thì xuất hiện sườn xuống của xung nhịp).

- Chọn “Don't touch network” : trong quá trình tổng hợp thì tín hiệu clock được bảo vệ.

- Chọn “ Fix hold” : khắc phục các lỗi hold time sau khi tổng hợp.

Ngoài ra còn có các ràng buộc khác bằng cách sử dụng câu lệnh như:

- set_clock_uncertainty 10000000 [get_clocks clk] // thiết lập độ lệch giữa 2 FF kế tiếp nhau.

- set_clock_latency 200000000 [get_clocks clk] // thiết lập độ trễ của xung clock từ bộ tạo dao

động đến FF.

- set_input_transition 100000000 [all_inputs] // thiết lập độ trễ chuyển trạng thái của lock (độ

dốc của sườn clock).

Bước 8: Thiết lập các ràng buộc thiết kế (constrain)

Trễ đầu vào: Chọn các tín hiệu đầu vào trên sơ đồ (trừ tín hiệu clock)

Trên thanh Menu vào “Atributes” chọn Operating Environment → Input delay

Figure 35 Xét constraints cho input

Trễ đầu ra : Chọn các tín hiệu ra trên sơ đồ

Trên thanh Menu vào “Atributes” chọn Operating Environment → Output delay

Figure 36 Xét constraints cho output

Điều kiện hoạt động (Operating condition)

Trên thanh Menu vào “Atributes” chọn Operating Environment →Operating conditions

Figure 37 Xét điều kiện hoạt động

Wire load:

Trên thanh Menu vào “Atributes” chọn Operating Environment →Wire load

Figure 38 Wire Load

Thiết lập điện trở, điện dung đầu vào, đầu ra cho IC:

Khi các cổng kích thích đầu vào và tải đầu ra chưa biết thì ta dùng Load Budget, xác định dự

phòng cho thiết kế.

Giả sử các đầu vào được kích thích bằng cell yếu nhất

set all_in_ex_clk [remove_from_collection [all_inputs] [get_ports clk]]

set_driving_cell -no_design_rule -lib_cell INVD0BWP $all_in_ex_clk

Đặt điện dung đầu vào lớn nhất là 10 cell AN2D0BWP

set MAX_INPUT_LOAD [expr [load_of tcbn45gsbwpbc/AN2D0BWP/A1] * 10]

set_max_capacitance $MAX_INPUT_LOAD $all_in_ex_clk

Đặt điện dung đầu ra lớn nhất là 3 khối 10 cell

set_load [expr $MAX_INPUT_LOAD * 3] [all_outputs]

Hình vẽ:

Design constraints

Trên thanh Menu vào “Atributes” chọn Operating Environment →Design constraints

Figure 39 Xét kích thước tối đa

Có thể thiết lập thêm các ràng buộc về công suất động, công suất dòng rò, Max fanout,

maxtransition.

Bước 9 : Compile Design

Trên thanh Menu vào Design → Compile Design → OK

Ngoài ra bạn có thêm các lựa chọn sao cho sau quá trình tổng hợp thiết kế của mình tối ưu

nhất.

Figure 40 Compile

Bước 10: Compile Ultra

Sau quá trình tổng hợp thiết kế, bước này sẽ vừa tổng hợp vừa tối ưu hóa thiết kế những cổng

nào thừa hoặc không cần thiết trong quá trình tổng hợp sẽ bị xóa.

Trên thanh Menu vào Design → Compile Ultra → OK

Figure 41 Compile ultra

Sau quá trình tổng hợp khi xem lại sơ đồ mạch sẽ trở nên phức tạp hơn rất nhiều:

Figure 42 Kết quả sau DC

Figure 43 Kết quả sau DC

Có thể thấy rằng sau khi compile ultra thì mạch hoàn toàn là các standard cell nối với nhau =>

có thể xuất ra file netlist.

Bước 11 : Xuất báo cáo

Sau khi tổng hợp để kiểm tra xem thiết kế của mình có đáp ứng được các yêu cầu về

timing, công suất, diện tích,.. hay không cần phải xem qua các báo cáo mà phần mềm đã tự

động tạo ra cho mình. Có một số báo cáo điển hình như sau:

- report_timing : Timing → Report Timing Path

Figure 44 Xuất Report Timing Path

- report_constraints: Design → Report Constraints

Figure 45 Xuất Report Constraints

- report_power : Design → Report Power

Figure 46 Xuất Report Power

- report_Resource : Design → Report resource

Figure 47 Xuất Report resource

Max time

Figure 48 Report Timing

Min time

Figure 49 Report Timing

Bước 12 : Tạo file “Netlist”

File Netlist là file mô tả mức cổng của thiết kế bao gồm các cell cơ bản (AND, OR, MUX, FF)

được nối dây với nhau.

File → Save as

Figure 50 Tạo file netlish dùng cho formality

Bước 13 : Tạo file “.ddc”

File “.ddc” được sử dụng cho phần mềm ICC để layout và kiểm tra chức năng trong Primetime

File → Save as

Figure 51 Tạo file *.ddc

Bước 14 : Tạo file “.sdf”

File “.sdf” là file định nghĩa trễ từng cổng, dây dẫn..

Vào terminal gõ lệnh sau:

write_sdf top.sdf

Bước 15 : Tạo file “.sdc”

File “.sdc” (synopsys design constraints) được sử dụng trong ICC để đưa các ràng buộc thiết

kế của mình vào để thực hiện layout.

Vào Terminal gõ lệnh sau:

write_sdc top.sdc

Bước 16 : Tắt file theo dõi

Vào terminal gõ câu lệnh:

set_svf -off

File “.svf” được sử dụng trong quá trình kiểm tra Formality.

Thiết lập cho Design Compiler:

set_svf top.svf read_file -format verilog {/home/huyentt/final/date_18/rtl/add3.v /home/huyentt/final/date_18/rtl/controller.v /home/huyentt/final/date_18/rtl/cover_dec_to_BCD.v /home/huyentt/final/date_18/rtl/datapath.v /home/huyentt/final/date_18/rtl/decoder_7segs.v /home/huyentt/final/date_18/rtl/top_digital_1.v} analyze -format verilog {/home/huyentt/final/date_18/rtl/top_digital_1.v /home/huyentt/final/date_18/rtl/decoder_7segs.v /home/huyentt/final/date_18/rtl/datapath.v /home/huyentt/final/date_18/rtl/cover_dec_to_BCD.v /home/huyentt/final/date_18/rtl/controller.v /home/huyentt/final/date_18/rtl/add3.v} elaborate top_digital -architecture verilog -library DEFAULT uplevel #0 check_design create_clock -name "clk" -period 1000000000 -waveform { 0 500000000 } { clk } set_clock_uncertainty 10000000 [get_clocks clk] set_clock_latency 200000000 [get_clocks clk] set_input_transition 100000000 [all_inputs] set_input_delay -clock clk -add_delay -max -rise 200000000 "rst button1 button2" set_input_delay -clock clk -add_delay -max -fall 200000000 "rst button1 button2" set_input_delay -clock clk -add_delay -min -rise 100000000 "rst button1 button2" set_input_delay -clock clk -add_delay -min -fall 100000000 "rst button1 button2" set_input_delay -clock clk -add_delay -max -rise 200000000 "rst button1 button2" set_input_delay -clock clk -add_delay -max -fall 200000000 "rst button1 button2" set_input_delay -clock clk -add_delay -min -rise 100000000 "rst button1 button2" set_input_delay -clock clk -add_delay -min -fall 100000000 "rst button1 button2" set_output_delay -clock clk -add_delay -max -rise 200000000 "{blink[1]} {blink[0]} {sec_led[13]} {sec_led[12]} {sec_led[11]} {sec_led[10]} {sec_led[9]} {sec_led[8]} {sec_led[7]} {sec_led[6]} {sec_led[5]} {sec_led[4]}

{sec_led[3]} {sec_led[2]} {sec_led[1]} {sec_led[0]} {min_led[13]} {min_led[12]} {min_led[11]} {min_led[10]} {min_led[9]} {min_led[8]} {min_led[7]} {min_led[6]} {min_led[5]} {min_led[4]} {min_led[3]} {min_led[2]} {min_led[1]} {min_led[0]} {hour_led[13]} {hour_led[12]} {hour_led[11]} {hour_led[10]} {hour_led[9]} {hour_led[8]} {hour_led[7]} {hour_led[6]} {hour_led[5]} {hour_led[4]} {hour_led[3]} {hour_led[2]} {hour_led[1]} {hour_led[0]} {min_led[1]} {min_led[12]} {sec_led[3]} {hour_led[11]} {hour_led[2]} {min_led[5]} {sec_led[7]} {hour_led[6]} {sec_led[13]} {sec_led[0]} {min_led[9]} {min_led[2]} {min_led[13]} {sec_led[4]} {hour_led[12]} {hour_led[3]} {sec_led[10]} {min_led[6]} {sec_led[8]} {hour_led[7]} {min_led[10]} {sec_led[1]} {hour_led[0]} {blink[0]} {min_led[3]} {sec_led[5]} {hour_led[13]} {hour_led[4]} {sec_led[11]} {min_led[7]} {sec_led[9]} {hour_led[8]} {min_led[0]} {min_led[11]} {sec_led[2]} {hour_led[10]} {hour_led[1]} {blink[1]} {min_led[4]} {sec_led[6]} {hour_led[5]} {sec_led[12]} {min_led[8]} {hour_led[9]}" set_output_delay -clock clk -add_delay -max -fall 200000000 "{blink[1]} {blink[0]} {sec_led[13]} {sec_led[12]} {sec_led[11]} {sec_led[10]} {sec_led[9]} {sec_led[8]} {sec_led[7]} {sec_led[6]} {sec_led[5]} {sec_led[4]} {sec_led[3]} {sec_led[2]} {sec_led[1]} {sec_led[0]} {min_led[13]} {min_led[12]} {min_led[11]} {min_led[10]} {min_led[9]} {min_led[8]} {min_led[7]} {min_led[6]} {min_led[5]} {min_led[4]} {min_led[3]} {min_led[2]} {min_led[1]} {min_led[0]} {hour_led[13]} {hour_led[12]} {hour_led[11]} {hour_led[10]} {hour_led[9]} {hour_led[8]} {hour_led[7]} {hour_led[6]} {hour_led[5]} {hour_led[4]} {hour_led[3]} {hour_led[2]} {hour_led[1]} {hour_led[0]} {min_led[1]} {min_led[12]} {sec_led[3]} {hour_led[11]} {hour_led[2]} {min_led[5]} {sec_led[7]} {hour_led[6]} {sec_led[13]} {sec_led[0]} {min_led[9]} {min_led[2]} {min_led[13]} {sec_led[4]} {hour_led[12]} {hour_led[3]} {sec_led[10]} {min_led[6]} {sec_led[8]} {hour_led[7]} {min_led[10]} {sec_led[1]} {hour_led[0]} {blink[0]} {min_led[3]} {sec_led[5]} {hour_led[13]} {hour_led[4]} {sec_led[11]} {min_led[7]} {sec_led[9]} {hour_led[8]} {min_led[0]} {min_led[11]} {sec_led[2]} {hour_led[10]} {hour_led[1]} {blink[1]} {min_led[4]} {sec_led[6]} {hour_led[5]} {sec_led[12]} {min_led[8]} {hour_led[9]}" set_output_delay -clock clk -add_delay -min -rise 100000000 "{blink[1]} {blink[0]} {sec_led[13]} {sec_led[12]} {sec_led[11]} {sec_led[10]} {sec_led[9]} {sec_led[8]} {sec_led[7]} {sec_led[6]} {sec_led[5]} {sec_led[4]} {sec_led[3]} {sec_led[2]} {sec_led[1]} {sec_led[0]} {min_led[13]} {min_led[12]} {min_led[11]} {min_led[10]} {min_led[9]} {min_led[8]} {min_led[7]} {min_led[6]} {min_led[5]} {min_led[4]} {min_led[3]} {min_led[2]} {min_led[1]} {min_led[0]} {hour_led[13]} {hour_led[12]} {hour_led[11]} {hour_led[10]} {hour_led[9]} {hour_led[8]} {hour_led[7]} {hour_led[6]} {hour_led[5]} {hour_led[4]} {hour_led[3]} {hour_led[2]} {hour_led[1]} {hour_led[0]} {min_led[1]} {min_led[12]} {sec_led[3]} {hour_led[11]} {hour_led[2]} {min_led[5]} {sec_led[7]} {hour_led[6]} {sec_led[13]} {sec_led[0]} {min_led[9]} {min_led[2]} {min_led[13]} {sec_led[4]} {hour_led[12]} {hour_led[3]} {sec_led[10]} {min_led[6]} {sec_led[8]} {hour_led[7]} {min_led[10]} {sec_led[1]} {hour_led[0]} {blink[0]} {min_led[3]} {sec_led[5]} {hour_led[13]} {hour_led[4]} {sec_led[11]} {min_led[7]} {sec_led[9]} {hour_led[8]} {min_led[0]} {min_led[11]} {sec_led[2]} {hour_led[10]} {hour_led[1]} {blink[1]} {min_led[4]} {sec_led[6]} {hour_led[5]} {sec_led[12]} {min_led[8]} {hour_led[9]}" set_output_delay -clock clk -add_delay -min -fall 100000000 "{blink[1]} {blink[0]} {sec_led[13]} {sec_led[12]} {sec_led[11]} {sec_led[10]} {sec_led[9]} {sec_led[8]} {sec_led[7]} {sec_led[6]} {sec_led[5]} {sec_led[4]} {sec_led[3]} {sec_led[2]} {sec_led[1]} {sec_led[0]} {min_led[13]} {min_led[12]} {min_led[11]} {min_led[10]} {min_led[9]} {min_led[8]} {min_led[7]} {min_led[6]} {min_led[5]} {min_led[4]} {min_led[3]} {min_led[2]} {min_led[1]} {min_led[0]} {hour_led[13]} {hour_led[12]} {hour_led[11]} {hour_led[10]} {hour_led[9]} {hour_led[8]} {hour_led[7]} {hour_led[6]} {hour_led[5]} {hour_led[4]} {hour_led[3]} {hour_led[2]} {hour_led[1]} {hour_led[0]} {min_led[1]} {min_led[12]} {sec_led[3]} {hour_led[11]} {hour_led[2]} {min_led[5]} {sec_led[7]} {hour_led[6]} {sec_led[13]} {sec_led[0]} {min_led[9]} {min_led[2]} {min_led[13]} {sec_led[4]} {hour_led[12]} {hour_led[3]} {sec_led[10]} {min_led[6]} {sec_led[8]} {hour_led[7]} {min_led[10]} {sec_led[1]} {hour_led[0]} {blink[0]} {min_led[3]} {sec_led[5]} {hour_led[13]} {hour_led[4]} {sec_led[11]} {min_led[7]} {sec_led[9]} {hour_led[8]} {min_led[0]} {min_led[11]} {sec_led[2]} {hour_led[10]} {hour_led[1]} {blink[1]} {min_led[4]} {sec_led[6]} {hour_led[5]} {sec_led[12]} {min_led[8]} {hour_led[9]}" set_operating_conditions -library tcbn45gsbwpbc BCCOM set_wire_load_model -name TSMC512K_Lowk_Aggresive -library tcbn45gsbwpbc set all_in_ex_clk [remove_from_collection [all_inputs] [get_ports clk]] set_driving_cell -no_design_rule -lib_cell INVD0BWP $all_in_ex_clk set MAX_INPUT_LOAD [expr [load_of tcbn45gsbwpbc/AN2D0BWP/A1] * 10]

set_max_capacitance $MAX_INPUT_LOAD $all_in_ex_clk set_load [expr $MAX_INPUT_LOAD * 3] [all_outputs] set_max_area 1000 uplevel #0 check_design compile -exact_map compile_ultra write -hierarchy -format verilog -output top_netlist.v write -hierarchy -format ddc -output top.ddc write_sdf top.sdf write_sdc top.sdc set_svf –off uplevel #0 { report_constraint -significant_digits 2 } uplevel #0 { report_power -analysis_effort low } uplevel #0 { report_resources } uplevel #0 { report_timing -path full -delay max -nworst 1 -max_paths 1 -significant_digits 2 -sort_by group }

6.4. VCS_Kiểm tra sau khi tổng hợp

Tạo thư mục “after_syn” trong thư mục “vcs”

Sau khi tổng hợp bằng công cụ Design Compiler sẽ sinh ra một file Netlist có đuôi mở rộng là

“.v” bao gồm các cell cơ bản được nối dây với nhau và file delay có đuôi mở rộng là “.sdf”. Để

kiểm tra timming sau khi tổng hợp cần có 4 file cần thiết là:

- file netlist “.v”

- file delay “.sdf”

- file thư viện cell “tcbn45gsbwp.v”

- file testbench “.v”

Chú ý: các file .v đều phải chèn dòng `timescale 1ns/1ps.

Các file kia cần phải copy vào trong thư mục “after_syn”.

Vào terminal gõ các lệnh sau :

vlogan -debug +v2k *.v

vcs -debug “tên file module của testbench” -sdf typ:“tên modue top”:“file.sdf –l comp.log

Ví dụ: vcs -debug tb_digital_clock -sdf typ:top_digital_1:top.sdf -l comp.log

Sau khi phần tích các file trên trong thư mục, sẽ tạo ra file “simv”.

Vào terminal gõ lệnh sau:

./simv -gui

Rồi làm tương tự như các bước trước khi trước khi tổng hợp.

Figure 52 Kết quả mô phỏng VCS sau DC

Có thể thấy mạch vẫn đáp ứng được yêu cầu về chức năng như ban đầu. Các điểm màu vàng

trong wave form là do mô phỏng có chứa tham số về thời gian gây ra trễ, dẫn tới chuyển trạng

thái không đồng thời trên các đường tín hiệu.

6.5. Formality

Tạo thư mục “fm” trong project.

Để thực hiện phần mềm cần co cac file sau:

- File theo doi “top.svf”

- cac file code RTL “*.v”

- File Netlist “top.v”

Bước 1: Mở terminal gõ lệnh hiện thị giao diện người dùng

fm_shell –gui

Figure 53 Khởi động formality

Bước 2: Chọn Guidance chọn đường dẫn đến file “top.svf” → chọn Load Files

Figure 54 Load file *.svf

Bước 3: Chọn Reference đọc tất cả cac file verilog trừ file testbench

Chọn Load File

Figure 55 Load các file trước khi tổng hợp

Vào mục 3 chọn Set Top Design chọn file top module → Set top → Set reference

Figure 56 Set top

Bước 4 : Chọn Implementation

Chọn Verilog chọn đường dẫn mở file “top.v” sau khi tổng hợp ở trong thư mục “dc”.

Chọn Load File.

Figure 57 Load file sau khi tổng hợp

Chọn Read DB Libraries : chọn file “tcbn45gsbwpbc.v” trong thư viện Milkyway →

chọn Load Files

Figure 58 Chọn thư viện tổng hợp

Chọn file top module → Set top → Set Implementation.

Figure 59 Set top cho file .v sau tổng hợp

Bước 5: Match

Chọn “Run Matching” sẽ có cửa sổ thông báo có bao nhiêu điểm so sánh giống nhau và bao

nhiêu điểm so sánh khác nhau.

Figure 60 Run Matching

Bước 6 : Verify

Chọn “Verify” : Trên cửa sổ báo Verify Succeeded tức la kiểm tra đã thành công.

Trong mục Debug sẽ hiện ra cac điểm so sanh giữa 2 file code RTL va file netlist.

Figure 61 Verify

6.6. Primetime trước khi layout

Mô phỏng mạch tổng hợp logic bằng vcs chỉ cho ta biết thiết kế sau khi tổng hợp logic có

thỏa mãn các yêu cầu chức năng hay không, mà không đảm bảo thiết kế đó không vi phạm các

tiêu chuẩn về thời gian. Để đảm bảo điều này, thiết kế của chúng ta phải được kiểm tra bằng

phần mềm prime time trong bộ phần mềm synopsys, prime time sẽ kiểm tra lỗi thời gian tất

các các path có thể của thiết kế.

Bước 1 : Cài đặt thư viện

Tạo thư mục “pt” trong project

Vào thư mục pt mở cửa sổ lệnh gõ lênh:

pt_shell

Cài đặt Search Path: set lib_path "/home/huyentt/Desktop/milkyway/tcbn45gsbwp_120a/frame_only_HVH_0d5_0/tcbn45gsbwp/LM"; set ADDITIONAL_SEARCH_PATH "$lib_path"; set TARGET_LIBRARY_FILES "tcbn45gsbwpbc.db"; set_app_var search_path "$search_path $ADDITIONAL_SEARCH_PATH"; set_app_var target_library $TARGET_LIBRARY_FILES; set_app_var link_library "* $target_library";

Bước 2 : Đọc file “.ddc”

Để đọc file “.ddc” sử dụng câu lệnh sau:

read_ddc ../dc/top.ddc

Mở giao diện người dùng dùng lệnh :

start_gui

Figure 62 Khởi động PrimeTime

Bước 3: Xuất báo cáo

Xuất báo cáo “Coverage.txt”:

Vào timing → Analysis Coverage → Lưu file báo cáo đặt tên file là “coverage.txt”

Figure 63 Report Coverage

Như vậy, tất cả các path(712 path) của thiết kế đều được kiểm tra và không có path nào gặp

phải các lỗi về thời gian.

Xét các thông số constraint về timing giống như ở DC:

create_clock -name "clk" -period 1000000000 -waveform { 0 500000000 } { clk }

set_clock_uncertainty 10000000 [get_clocks clk]

set_clock_latency 200000000 [get_clocks clk]

set_input_transition 100000000 [all_inputs]

set_input_delay -clock clk -add_delay -max -rise 200000000 "rst button1 button2"

set_input_delay -clock clk -add_delay -max -fall 200000000 "rst button1 button2"

set_input_delay -clock clk -add_delay -min -rise 100000000 "rst button1 button2"

set_input_delay -clock clk -add_delay -min -fall 100000000 "rst button1 button2"

set_input_delay -clock clk -add_delay -max -rise 200000000 "rst button1 button2"

set_input_delay -clock clk -add_delay -max -fall 200000000 "rst button1 button2"

set_input_delay -clock clk -add_delay -min -rise 100000000 "rst button1 button2"

set_input_delay -clock clk -add_delay -min -fall 100000000 "rst button1 button2"

set_output_delay -clock clk -add_delay -max -rise 200000000 "{blink[1]} {blink[0]} {sec_led[13]} {sec_led[12]}

{sec_led[11]} {sec_led[10]} {sec_led[9]} {sec_led[8]} {sec_led[7]} {sec_led[6]} {sec_led[5]} {sec_led[4]}

{sec_led[3]} {sec_led[2]} {sec_led[1]} {sec_led[0]} {min_led[13]} {min_led[12]} {min_led[11]} {min_led[10]}

{min_led[9]} {min_led[8]} {min_led[7]} {min_led[6]} {min_led[5]} {min_led[4]} {min_led[3]} {min_led[2]}

{min_led[1]} {min_led[0]} {hour_led[13]} {hour_led[12]} {hour_led[11]} {hour_led[10]} {hour_led[9]}

{hour_led[8]} {hour_led[7]} {hour_led[6]} {hour_led[5]} {hour_led[4]} {hour_led[3]} {hour_led[2]} {hour_led[1]}

{hour_led[0]} {min_led[1]} {min_led[12]} {sec_led[3]} {hour_led[11]} {hour_led[2]} {min_led[5]} {sec_led[7]}

{hour_led[6]} {sec_led[13]} {sec_led[0]} {min_led[9]} {min_led[2]} {min_led[13]} {sec_led[4]} {hour_led[12]}

{hour_led[3]} {sec_led[10]} {min_led[6]} {sec_led[8]} {hour_led[7]} {min_led[10]} {sec_led[1]} {hour_led[0]}

{blink[0]} {min_led[3]} {sec_led[5]} {hour_led[13]} {hour_led[4]} {sec_led[11]} {min_led[7]} {sec_led[9]}

{hour_led[8]} {min_led[0]} {min_led[11]} {sec_led[2]} {hour_led[10]} {hour_led[1]} {blink[1]} {min_led[4]}

{sec_led[6]} {hour_led[5]} {sec_led[12]} {min_led[8]} {hour_led[9]}"

set_output_delay -clock clk -add_delay -max -fall 200000000 "{blink[1]} {blink[0]} {sec_led[13]} {sec_led[12]}

{sec_led[11]} {sec_led[10]} {sec_led[9]} {sec_led[8]} {sec_led[7]} {sec_led[6]} {sec_led[5]} {sec_led[4]}

{sec_led[3]} {sec_led[2]} {sec_led[1]} {sec_led[0]} {min_led[13]} {min_led[12]} {min_led[11]} {min_led[10]}

{min_led[9]} {min_led[8]} {min_led[7]} {min_led[6]} {min_led[5]} {min_led[4]} {min_led[3]} {min_led[2]}

{min_led[1]} {min_led[0]} {hour_led[13]} {hour_led[12]} {hour_led[11]} {hour_led[10]} {hour_led[9]}

{hour_led[8]} {hour_led[7]} {hour_led[6]} {hour_led[5]} {hour_led[4]} {hour_led[3]} {hour_led[2]} {hour_led[1]}

{hour_led[0]} {min_led[1]} {min_led[12]} {sec_led[3]} {hour_led[11]} {hour_led[2]} {min_led[5]} {sec_led[7]}

{hour_led[6]} {sec_led[13]} {sec_led[0]} {min_led[9]} {min_led[2]} {min_led[13]} {sec_led[4]} {hour_led[12]}

{hour_led[3]} {sec_led[10]} {min_led[6]} {sec_led[8]} {hour_led[7]} {min_led[10]} {sec_led[1]} {hour_led[0]}

{blink[0]} {min_led[3]} {sec_led[5]} {hour_led[13]} {hour_led[4]} {sec_led[11]} {min_led[7]} {sec_led[9]}

{hour_led[8]} {min_led[0]} {min_led[11]} {sec_led[2]} {hour_led[10]} {hour_led[1]} {blink[1]} {min_led[4]}

{sec_led[6]} {hour_led[5]} {sec_led[12]} {min_led[8]} {hour_led[9]}"

set_output_delay -clock clk -add_delay -min -rise 100000000 "{blink[1]} {blink[0]} {sec_led[13]} {sec_led[12]}

{sec_led[11]} {sec_led[10]} {sec_led[9]} {sec_led[8]} {sec_led[7]} {sec_led[6]} {sec_led[5]} {sec_led[4]}

{sec_led[3]} {sec_led[2]} {sec_led[1]} {sec_led[0]} {min_led[13]} {min_led[12]} {min_led[11]} {min_led[10]}

{min_led[9]} {min_led[8]} {min_led[7]} {min_led[6]} {min_led[5]} {min_led[4]} {min_led[3]} {min_led[2]}

{min_led[1]} {min_led[0]} {hour_led[13]} {hour_led[12]} {hour_led[11]} {hour_led[10]} {hour_led[9]}

{hour_led[8]} {hour_led[7]} {hour_led[6]} {hour_led[5]} {hour_led[4]} {hour_led[3]} {hour_led[2]} {hour_led[1]}

{hour_led[0]} {min_led[1]} {min_led[12]} {sec_led[3]} {hour_led[11]} {hour_led[2]} {min_led[5]} {sec_led[7]}

{hour_led[6]} {sec_led[13]} {sec_led[0]} {min_led[9]} {min_led[2]} {min_led[13]} {sec_led[4]} {hour_led[12]}

{hour_led[3]} {sec_led[10]} {min_led[6]} {sec_led[8]} {hour_led[7]} {min_led[10]} {sec_led[1]} {hour_led[0]}

{blink[0]} {min_led[3]} {sec_led[5]} {hour_led[13]} {hour_led[4]} {sec_led[11]} {min_led[7]} {sec_led[9]}

{hour_led[8]} {min_led[0]} {min_led[11]} {sec_led[2]} {hour_led[10]} {hour_led[1]} {blink[1]} {min_led[4]}

{sec_led[6]} {hour_led[5]} {sec_led[12]} {min_led[8]} {hour_led[9]}"

set_output_delay -clock clk -add_delay -min -fall 100000000 "{blink[1]} {blink[0]} {sec_led[13]} {sec_led[12]}

{sec_led[11]} {sec_led[10]} {sec_led[9]} {sec_led[8]} {sec_led[7]} {sec_led[6]} {sec_led[5]} {sec_led[4]}

{sec_led[3]} {sec_led[2]} {sec_led[1]} {sec_led[0]} {min_led[13]} {min_led[12]} {min_led[11]} {min_led[10]}

{min_led[9]} {min_led[8]} {min_led[7]} {min_led[6]} {min_led[5]} {min_led[4]} {min_led[3]} {min_led[2]}

{min_led[1]} {min_led[0]} {hour_led[13]} {hour_led[12]} {hour_led[11]} {hour_led[10]} {hour_led[9]}

{hour_led[8]} {hour_led[7]} {hour_led[6]} {hour_led[5]} {hour_led[4]} {hour_led[3]} {hour_led[2]} {hour_led[1]}

{hour_led[0]} {min_led[1]} {min_led[12]} {sec_led[3]} {hour_led[11]} {hour_led[2]} {min_led[5]} {sec_led[7]}

{hour_led[6]} {sec_led[13]} {sec_led[0]} {min_led[9]} {min_led[2]} {min_led[13]} {sec_led[4]} {hour_led[12]}

{hour_led[3]} {sec_led[10]} {min_led[6]} {sec_led[8]} {hour_led[7]} {min_led[10]} {sec_led[1]} {hour_led[0]}

{blink[0]} {min_led[3]} {sec_led[5]} {hour_led[13]} {hour_led[4]} {sec_led[11]} {min_led[7]} {sec_led[9]}

{hour_led[8]} {min_led[0]} {min_led[11]} {sec_led[2]} {hour_led[10]} {hour_led[1]} {blink[1]} {min_led[4]}

{sec_led[6]} {hour_led[5]} {sec_led[12]} {min_led[8]} {hour_led[9]}"

Figure 64 Thiết lập constraint

Xuất báo cáo độ trễn tối đa :

Vào Timing → Report Timing → Lưu tên file là “ rpt_timing_max.txt”

Figure 65 Export Report Timing maxdelay

Figure 66 Report Timing maxdelay

Xuất báo cáo độ trễ tối thiểu:

Report Timing → Edit → Trong thư mục Data type chọn “min” → Lưu tên file là

“mindelay.txt”

Figure 67 Export Report Timing mindelay

Figure 68 Export Report Timing mindelay

Figure 69 Report Timing mindelay

6.7. IC Compiler

Phần IC Complier là phần mềm có chức năng layout tạo ra IC dựa vào file nestlist (.ddc),

(.sdc) và các thư viện vật lý (milkyway techfile). Quy trình thiết kế của IC Complier được

biểu diễn như sau :

Cài đặt dữ liệu

Floor Planning

Placement

Tạo clock tree

Thực hiện đi dây

Xuất các file .sdc, .sdf, .v, .spef,..và báo cáo

Bước 1: Cài đặt dữ liệu

Mở cửa sổ giao diện người dung bằng cách gõ lệnh sau:

icc_shell –gui

Figure 70 Khởi động ICC

Cài đặt thư viện

File → Setup → Application Setup

Thực hiện tương tự như bước cài đặt thư viện trong Design Compiler

Figure 71 Cài đặt thư viện

Tạo thư viện milkyway

File → Creat Library

Figure 72 Tạo thư viện

Có các thiết lập sau:

New library path: Chọn đường dẫn đến thư mục minh cần chứa thư viện

New library name : đặt tên thư viện

Ví dụ :my_lib

Technology Files: Chọn đường dẫn đến file thư viện cong nghệ trong Milkyway

Ví dụ: /home/huyentt/Desktop/milkyway/tcbn45gsbwp_120a/techfiles/HVH_0d5_0

/tsmcn45_10lm7X2ZRDL.tf

Trong mục “input reference libraries” Chọn “Add” chọn đến thư viện tcnbn45gspwb

Ví dụ :

/home/huyentt/Desktop/milkyway/tcbn45gsbwp_120a/frame_only_HVH_0d5_0/tcbn45

gsbwp

Chọn “Open library”

Đọc File “top.ddc”

File → Import → Read DDC

Figure 73 Đọc file *.DDC

Đọc file “top.sdc”

File SDC là file ràng buộc thiết kế. No được đưa vao để rang buộc thiết kế sao cho thiết kế

của mình tối ưu nhất.

File → Import → Read SDC

Figure 74 Đọc file *.SDC

Sau khi đọc file “top.sdc”, chọn Window → New layout window , sẽ xuất hiện cửa sổ giao

diện hiển thị các cell được xếp chồng lên nhau.

Figure 75 Các cell của IC chưa sắp xếp

Tạo TLU+

File → Set TLU+

Figure 76 Xét thư viện TLU+

Có các thiết lập sau:

Max TLU+ file : Chọn đến thư viện công nghệ theo đường dẫn sau:

/home/huyentt/Desktop/milkyway/tcbn45gsbwp_120a /techfiles/tluplus/cln45gs_1p10m

+alrdl_rcbest_top2.tluplus

Min TLU+ file : Chọn đến thư viện cong nghệ theo đường dẫn sau:

/home/huyentt/Desktop/milkyway/tcbn45gsbwp_120a/techfiles/tluplus/cln45gs_1p10m

+alrdl_rcworst_top2.tluplus

Layer name …: Chọn đến thư viện cong nghệ theo đường dẫn sau:

/home/huyentt/Desktop/milkyway/tcbn45gsbwp_120a /techfiles/tluplus/star.map_10M

Lưu ý: Trong thư viện có nhiều lựa chọn khác nhau ứng với số lớp metal khác nhau.

Để kiểm tra thư viện sử dụng các lệnh sau :

check_library

check_tlu_plus_files

list_libs

Ngoài ra có thể xuất các báo cáo để kiểm tra xem trong quá trình layout gặp phải vấn đề gì

thông qua các lệnh sau:

check_timing

report_timing_requirements

report_disable_timing

report_case_analysis

report_clock

report_clock -skew

Trong khi tổng hợp, các cổng được xét ở mức lý tưởng nên khi layout cần phải xóa đặc tính

này, sử dụng câu lệnh:

remove_ideal_network

Sau khi cài đặt xong dữ liệu, cần lưu lại bước này để có thể dễ dàng xem lại các thiết lập của

mình, sử dụng câu lệnh sau:

save_mw_cel -as data_setup

Hoặc vao File → Save Design.

Bước 2: Floor Planning

Thực hiện khởi tạo nền

Floorplan → Initialize Floorplan

Figure 77 Khởi tạo nền

Sau khi khởi tạo nền sẽ có hình như sau:

Figure 78 Nền và các cell

Thực hiện tạo chân nối nguồn và nối đất VDD và VSS

PreRoute → Derive PG Conection

Figure 79 VDD và VSS

Tạo các vòng dây VDD và VSS

Preroute → Creat ring → Net(chọn VDD)

Figure 80 Chọn lớp cho VDD

Tiếp theo chọn VSS

Figure 81 Chọn lớp cho VSS

Sau khi tạo được các vòng dây VDD và VSS trên hình sẽ xuất hiện như sau:

Figure 82 Sau khi tạo VDD và VSS

Thiết lập độ rộng cho day nguồn dây đất cho từng lớp kim loại:

Preroute → Creat power strap

VDD:

Figure 83 Độ rộng VDD

VSS:

Figure 84 Độ rộng VSS

Tạo vòng đệm:

Preroute → Creat Pad ring

Figure 85 Tạo vòng đệm

Sau khi xong bước Floor Planning ta cần lưu lại sử dụng câu lệnh

save_mw_cel -as floorplanned

Bước 3: Placement (sắp xếp cell) va kiểm tra tắc nghẽn

Placement → Core Placement and Optimization

Figure 86 Sắp xếp cell

Sau khi sắp xếp các cell xong ta có:

Figure 87 Sau khi xắp xếp cell

Để kiểm tra tắc nghẽn xuất báo cáo sau:

report_congestion -grc_based -by_layer -routing_stage global

Lưu lại quá trình thực hiện Placement:

save_mw_cel -as placed

Bước 4: Tạo clock tree

Clock Tree Synthesis là công cụ dùng để tối ưu đường tín hiệu clock phân phối cho các

mạch dãy ở trong thiết kế. Khi không có Clock Tree Synthesis thì trong thiết kế sẽ xuất hiện

như sau:

Khi thực hiện xong Clock Tree Synthesis, phân bố tín hiệu clock sẽ như sau:

Để thực hiện Clock Tree Synthesis, chọn Clock → Core CTS and Optimization

Figure 88 Clock tree

Sau khi tạo được clock tree:

Figure 89 Kết quả clock tree

Lưu lại bước tạo clock tree

save_mw_cel -as ctsed

Bước 5: Thực hiện đi dây

Route → Core Routing and Optimization

Figure 90 Routing

Lưu lại kết quả sau khi đi dây tự động

save_mw_cel -as routed

Route → Extract RC

Figure 91 Extract RC

Kết quả sau ICC:

Figure 92 Kết quả sau ICC

Bước 6: Xuất các file .sdc, .sdf, .v, .spef,..và báo cáo

Xuất các file .sdc, .sdf, .v, .spef,..

write_parasitics -output ./rpt/icc.spef -format SPEF

write_sdf ./rpt/icc.sdf

write_sdc ./rpt/icc.sdc

write_ddc ./rpt/icc.ddc

write_verilog ./rpt/icc.v

Xuất ra cac file báo cáo

report_qor > ./rpt/rpt_icc_qor.txt

report_area > ./rpt/rpt_icc_area.txt

report_constraint -all_violators > ./rpt/rpt_icc_constraint.txt

report_port > ./rpt/rpt_icc_port.txt

report_power > ./rpt/rpt_icc_power.txt

report_timing > ./rpt/rpt_icc_timing.txt

report_timing -nosplit > ./rpt/rpt_icc_timing_nosplit.txt

report_timing -delay min > ./rpt/rpt_icc_timing_delay_min.txt

report_design -physical > ./rpt/rpt_icc_design_physical.txt

6.8. VCS_ Kiểm tra sau khi layout

Tạo thư mục “after_icc” trong “vcs”.

Trong qúa trình Layout có thể làm sai timing vì vậy sau khi layout xong cần phải kiểm

tra lại timing xem có đúng như timming mình đã kiểm tra sau khi tổng hợp hay không.

Để kiểm tra timming ở bước này cần có các file sau:

file “.v” được tạo ra sau khi layout

file delay “.sdf” được tạo ra sau khi layout

file thư viện cell “tcbn45gsbwp.v”

file testbench “.v”

Thực hiện các bước tương tự như khi kiểm tra chức năng trước khi tổng hợp.

Figure 93 Kết quả mô phỏng VCS sau ICC

6.9. PT_Kiểm tra sau khi layout

Sử dụng file “.ddc” được tạo ra sau khi chạy ICC. Các bước thực hiện tương tự như trước khi

layout.

7. Kết luận

Chúng em đã hoàn thành thiết kế đồng hồ số hiển thị led 7 thanh theo quy trình thiết kế vi

mạch. Kết quả mô phỏng sau khi layout đáp ứng các yêu cầu chức năng và phi chức năng của

specification đề ra.

Qua quá trình thực hiện đề tài, chúng em đã hiểu hơn về thiết kế ASIC, củng cố thêm lý

thuyết được học trên lớp.