Toàn bộ quy trình thiết kế IC được phân chia thành hai phần, phần thứ
nhất Front-End Design - thiết kế logic và Back-End Design - Thiết kế vật lý.
Chú ý rằng khái niệm Front-End và Back-end nếu dùng cho quá trình sản
xuất IC thì lại được hiểu khác, khi đó Front-end là toàn bộ các bước từ thiết kế
logic cho đến khi chế tạo xong IC, Back-end là quy trình kiểm tra và đóng gói IC.
Mô tả thuật toán (Specification): Đối với những thiết kế phức tạp thì
quá trình hoàn thiện các tài liệu mô tả thuật toán chiếm thời gian không nhỏ
trong toàn bộ thiết kế. Mô tả chức năng bao gồm đặt vấn đề bài toán, trên cơ
sở đó phân tích để tìm ra thuật toán giải quyết. Thuật toán thường được thể
hiện bằng các sơ đồ khối trên đó mô tả chi tiết chức năng của từng khối và
cách chúng liên kết với nhau. Một trong những điểm khó nhất trong việc mô tảChương IV - Thiết kế vi mạch sổ trên thư viện cổng chuẩn 10
thuật toán là phải lập được biểu đồ trạng thái làm việc của mạch theo thời
gian. Nếu mô tả ở phần này càng chi tiết thì càng đơn giản cho quá trình viết
mã HDL ở dưới và tránh được những lỗi thiết kế về mặt thuật toán.
RTL coding là thuật ngữ chỉ mô tả thiết kế ở mức thanh ghi truyền tải. Đây là
một trong những bước quan trọng nhất trong quy trình thiết kế logic, ở bước
này các kỹ sư sẽ mô tả thiết kế bằng ngôn ngữ mô tả phần cứng HDL
(Hardware Description Language) trên cơ sở tài liệu mô tả thuật toán ở bước
trên, nếu so sánh với lập trình viên phần mềm thì bước này tương ứng với
bước viết code chương trình. Mô tả VHDL thường được chia nhỏ thành các
module độc lập, việc chia nhỏ này thực chất cũng đã được thực hiện ở bước
một, các module khi này có thể được tiến hành mô tả độc lập và song song với
nhau.
RTL Simulation: kiểm tra thiêt kế ở mức cao đã được đề cập ở chương hai, tuy
nhiên khi làm những thiết kế phức tạp không thể bỏ qua bước đầu tiên là lập
phương án kiểm tra. Lập phương án kiểm tra bao gồm xác định phương pháp
kiểm tra, dạng kiểm tra (đầy đủ hay không đầy đủ), và miền kiểm tra. Việc kiểm
tra thiết kế được thực hiện từ theo lần lượt từ các module riêng lẻ cấp dưới
đến các module lớn hơn và cuối cùng là module tổng (Top-level module). Kiểm
tra theo quy trình đó là cách tốt nhất nhằm đơn giản hóa quá trình kiểm tra vì
kiểm soát lỗi ở module nhỏ bao giờ cũng đơn giản hơn kiểm soát lỗi ở một
module cỡ lớn.
                
              
                                            
                                
            
 
            
                 29 trang
29 trang | 
Chia sẻ: trungkhoi17 | Lượt xem: 723 | Lượt tải: 0 
              
            Bạn đang xem trước 20 trang tài liệu Giáo trình Transitor - Chương 5: Thiết kế vi mạch số trên thư viện cổng chuẩn, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
4.6. FPGA vs ASIC 
Dựa vào bảng trên cho thấy ASIC phù hợp với những thiết kế đòi hỏi tính 
tối ưu cao, chẳng hạn các vi mạch dùng cho các quá trình tính toán mô phỏng 
phức tạp vượt quá khả năng của PC hay FPGA, những vi mạch dùng trong quân 
sự, y học đòi hỏi làm việc với thời gian thực điều kiện môi trường khắc nghiệt, 
Chương IV - Thiết kế vi mạch sổ trên thư viện cổng chuẩn 8 
những thiết bị dân dụng có thị trường lớn như Vi xử l{, vi điều khiển vì chi phí 
sản xuất khi đó sẽ thấp. 
FPGA sẽ thích hợp cho những thiết kế ứng dụng nhỏ, đặc biệc có khả 
năng tái cấu trúc, những thiết kế có chi phí thấp và thời gian hoàn thiện ngắn 
hạn, không đòi hỏi cao về khả năng làm việc hay điều kiện làm việc. 
3. Quy trình thiết kế ASIC trên thư viện cổng chuẩn. 
Phần trên đã trình bày sơ lược về quy trình sản xuất vi mạch bán dẫn, 
trên thực tế quy trình này rất phức tạp, có sự tham gia của nhiều nghành khoa 
học khác nhau và đòi hỏi độ chính xác rất cao. Trong khuôn khổ chương trình 
tại các trường đại học các sinh viên chủ yếu được giới thiệu về công nghệ thiết 
kế vi mạch trên máy tính. Nhờ có sự tiêu chuẩn hóa và thống nhất cao trong 
định dạng trao đổi dữ liệu cũng như quy trình công nghệ mà quá trình thiết kế 
có thể tách riêng không phụ thuộc nhiều vào quá trình sản xuất tại nhà máy. 
Đầu vào của quá trình sản xuất chính là bộ Physical layouts hay các mặt nạ 
(masks). Do đó sản phẩm cuối cùng của quy trình thiết kế là tạo ra phiên bản 
các mặt nạ (masks) phục vụ trong quá trình sản xuất hàng loạt. 
Sơ đồ tổng quan của quy trình thiết kế được trình bày ở hình sau: 
Chương IV - Thiết kế vi mạch sổ trên thư viện cổng chuẩn 9 
Mô tả thuật toán
(Specifitation)
RTL - coding
RTL Simulation/
Verification
Tổng hợp
(Synthesis)
Logic Verification
FRONT-END DESIGN
Floorplaning
(Specifitation)
Placement
Clock Tree 
Synthesis
Routing
Verification
(Formal, Timing, 
Physical)
BACK-END DESIGN
Fabrication
Mask Generation (GDSII), IC 
Manufacturing and Testing
Hình 4.7: Quy trình thiết kế IC. 
Toàn bộ quy trình thiết kế IC được phân chia thành hai phần, phần thứ 
nhất Front-End Design - thiết kế logic và Back-End Design - Thiết kế vật lý. 
Chú ý rằng khái niệm Front-End và Back-end nếu dùng cho quá trình sản 
xuất IC thì lại được hiểu khác, khi đó Front-end là toàn bộ các bước từ thiết kế 
logic cho đến khi chế tạo xong IC, Back-end là quy trình kiểm tra và đóng gói IC. 
Mô tả thuật toán (Specification): Đối với những thiết kế phức tạp thì 
quá trình hoàn thiện các tài liệu mô tả thuật toán chiếm thời gian không nhỏ 
trong toàn bộ thiết kế. Mô tả chức năng bao gồm đặt vấn đề bài toán, trên cơ 
sở đó phân tích để tìm ra thuật toán giải quyết. Thuật toán thường được thể 
hiện bằng các sơ đồ khối trên đó mô tả chi tiết chức năng của từng khối và 
cách chúng liên kết với nhau. Một trong những điểm khó nhất trong việc mô tả 
Chương IV - Thiết kế vi mạch sổ trên thư viện cổng chuẩn 10 
thuật toán là phải lập được biểu đồ trạng thái làm việc của mạch theo thời 
gian. Nếu mô tả ở phần này càng chi tiết thì càng đơn giản cho quá trình viết 
mã HDL ở dưới và tránh được những lỗi thiết kế về mặt thuật toán. 
RTL coding là thuật ngữ chỉ mô tả thiết kế ở mức thanh ghi truyền tải. Đây là 
một trong những bước quan trọng nhất trong quy trình thiết kế logic, ở bước 
này các kỹ sư sẽ mô tả thiết kế bằng ngôn ngữ mô tả phần cứng HDL 
(Hardware Description Language) trên cơ sở tài liệu mô tả thuật toán ở bước 
trên, nếu so sánh với lập trình viên phần mềm thì bước này tương ứng với 
bước viết code chương trình. Mô tả VHDL thường được chia nhỏ thành các 
module độc lập, việc chia nhỏ này thực chất cũng đã được thực hiện ở bước 
một, các module khi này có thể được tiến hành mô tả độc lập và song song với 
nhau. 
RTL Simulation: kiểm tra thiêt kế ở mức cao đã được đề cập ở chương hai, tuy 
nhiên khi làm những thiết kế phức tạp không thể bỏ qua bước đầu tiên là lập 
phương án kiểm tra. Lập phương án kiểm tra bao gồm xác định phương pháp 
kiểm tra, dạng kiểm tra (đầy đủ hay không đầy đủ), và miền kiểm tra. Việc kiểm 
tra thiết kế được thực hiện từ theo lần lượt từ các module riêng lẻ cấp dưới 
đến các module lớn hơn và cuối cùng là module tổng (Top-level module). Kiểm 
tra theo quy trình đó là cách tốt nhất nhằm đơn giản hóa quá trình kiểm tra vì 
kiểm soát lỗi ở module nhỏ bao giờ cũng đơn giản hơn kiểm soát lỗi ở một 
module cỡ lớn. 
4. Tổng hợp thiết kế bằng Synopsys Design Compiler 
Ở phần này sẽ tập trung vào giới thiệu quy trình tổng hợp thiết kế từ mã 
nguồn RTL trên thư viện cổng chuẩn, cụ thể là trên công cụ tổng hợp logic 
Design compiler của hãng Synopsys. Các lệnh minh họa và ví dụ được làm trên 
phiên bản Design compiler 2004, công cụ này chạy trên hệ điều hành Linux, ở 
chế độ dòng lệnh tương tự như khi dùng mô phỏng thiết kế trên Modelsim 
bằng Tcl Script. Ví dụ minh họa ở hình sau: 
Chương IV - Thiết kế vi mạch sổ trên thư viện cổng chuẩn 11 
Hình 4.8: Chương trình Design Compiler. 
Dữ liệu của đầu vào tổng hợp thiết kê bao gồm mô tả RTL, mô tả thư 
viện công nghệ (Technology Library) và mô tả các yêu cầu hay điều kiện ràng 
buộc đối với thiết kế. 
TECHNOLOGY 
LIBRARY
LOGIC 
SYNTHESIS
RTL model
CONSTRAINT
.DB file
NETLIST
Hình 4.9: Tổng hợp logic . 
Chương IV - Thiết kế vi mạch sổ trên thư viện cổng chuẩn 12 
4.4. Thiết lập điều kiện làm việc, mục tiêu thiết kế (Constraint design) 
Chức năng của thiết kế được quy định ở mô tả RTL là không thể thay đổi 
nhưng có thể hiện thực hóa theo nhiều phương án khác nhau. Thiết lập ràng 
buộc (Constraint design) là bước thiết lập các điều kiện làm việc, mục tiêu cho 
đối tượng thiết kế, những thiết lập này là cơ sở cho quá trình tối ưu hóa thiết 
kế khi thực hiện tổng hợp. Các điều kiện ràng buộc thiết lập có thể liên quan 
tới các tham số về mặt thời gian, diện tích, các tham số về điều kiện làm việc 
hay đối tượng công nghệ sẽ áp dụng. Các điều kiện đó được chia thành 2 dạng 
như sau: 
ENVIROMENT
CONSTRAIT
DESIGN
CONSTRAINT
CONSTRAINT
Hình 4.10: .Điều kiện ràng buộc cho tổng hợp logic 
- Enviroment constraint: Thiết lập các tham số vật lý về môi trường làm việc 
như nhiệt độ, điện áp 
- Design constraints: Là các điều kiện ràng buộc chi tiết, hay mục tiêu cho đối 
tượng thiết kế cụ thể. 
Các điều kiện ràng buộc thường được viết dưới dạng một file text, có 
đuôi mở rộng là .scr (không bắt buộc). Các lệnh này có thể được đưa vào tuần 
từ từ dòng lệnh hoặc đưa vào bằng cú pháp 
dc_shell> include 
 Ví dụ nội dung một file script như sau: 
current_design pu_pu 
clk_name = clk 
clk_period = 2950 
clk_s = "2950" 
if (find(port, clk) == {"clk"}) { 
clk_name = clk 
create_clock -period clk_period clk 
} 
set_clock_uncertainty 610 clk_name 
set_driving_cell -lib_cell SCWBUFXC1 all_inputs() 
Chương IV - Thiết kế vi mạch sổ trên thư viện cổng chuẩn 13 
set_max_fanout 4.0 all_inputs() 
set_input_delay 1500 -clock clk_name REG_CODE[*] 
set_load 0.01 all_outputs() 
set_max_transition 100 all_inputs() 
set_max_area 1150000 
set_multicycle_path 2 -from ctreg/Num_pack_out_bits[*] 
set_max_delay 4000 -from ctreg/XS[*] -to 
fu/pu_pack/PACK_OUT[*] 
set_multicycle_path 2 -from ctreg/M[*] 
set_multicycle_path 2 -from ctreg/Y[*] 
current_design pu_pu 
compile -boundary_optimization -map_effort medium 
Dưới đây ta sẽ lần lượt đi tìm hiểu các điều kiện ràng buộc này với các ví dụ 
viết cho trình tổng hợp logic Design Compiler của Synopsys 
4.4.1. Thiết lập các tham số về môi trường làm việc (Enviroment constraints) 
Set_operating_condition: Lệnh này thiết lập điều kiện làm việc của thiết kế, 
điều kiện đó được quy định bằng các tên gọi không độc lập với thư viện là xấu 
nhất (WORST), tiêu chuẩn (NOMINAL) và tốt nhất (BEST). Các tham số cụ thể 
gắn với từng tên gọi này được quy định trực tiếp trong mô tả thư viện. 
Set_operating_condition 
Ví dụ: 
dc_shell -t> set_operating_conditions WORST 
dc_shell -t> set_operating_conditions BEST 
Ví dụ mô tả operating condition có dạng như sau: 
operating_conditions (WORST) { 
process : 1.3 ; 
temperature: 100.0 ; 
voltage: 2.75 ; 
tree_type : worst_case_tree ; 
} 
operating_conditions (NOMINAL) { 
process : 1.0 ; 
temperature: 25.0 ; 
voltage : 3.00 ; 
tree_type : balanced_tree ; 
} 
operating_conditions (BEST) { 
process : 0.7 ; 
temperature: 0.0 ; 
voltage: 3.25 ; 
tree_type : best_case_tree ; 
} 
Chương IV - Thiết kế vi mạch sổ trên thư viện cổng chuẩn 14 
Điều kiện làm việc ảnh hưởng rất lớn tới kết quả tổng hợp, đặc biệt là về 
mặt thời gian. Ví dụ trong trường hợp WORST nhiệt độ môi trường làm việc là 
100oC thì các phần tử logic làm việc với độ trễ cao hơn so với bình thường ở 
25oC, và hiệu xuất làm việc của IC nói chung sẽ kém hơn. Một ví dụ khác là khi 
giá trị voltage là DC đầu vào càng lớn thì tốc độ làm việc càng cao và khả năng 
chống nhiễu càng tốt. 
Set_wire_load_model: thiết lập mô hình của đường kết nối, các dạng mô hình 
được định nghĩa sẵn ở trong thư viện công nghệ của Synopsys. Mô hình đường 
kết nối xác định các tham số vật l{ như điện trở (resistance) điện dung 
(capacitance) diện tích, fan-out length của kết nối trên một đơn vị chiều dài, 
các tham số này dùng cho mô hình tính trễ của đường truyền. Ví dụ như sau: 
set_wire_load_model -name 
dc_shell -t> set_wire_load_model-name MEDIUM 
Ví dụ về WIRE_LOAD_MODEL 
wire_load (SMALL) { 
resistance : 0.2 ; 
capacitance :1.0 ; 
area : 0 ; 
slope : 0.5 ; 
fanout_length( 1, 0.020) ; 
fanout_length( 2, 0.042) ; 
fanout_length( 3, 0.064) ; 
fanout_length( 4, 0.087) ; 
fanout_length(1000,20.0) ; 
} 
wire_load(MEDIUM) { 
resistance : 0.2 ; 
capacitance : 1.0 ; 
area : 0 ; 
slope : 1.0 ; 
fanout_length( 1, 0.022) ; 
fanout_length( 2, 0.046) ; 
fanout_length( 3, 0.070) ; 
fanout_length( 4, 0.095) ; 
fanout_length(1000,30.0) ; 
} 
set_wire_load_mode: định nghĩa lựa chọn một trong ba cách thức thực áp 
dụng mô hình dây dẫn là top, enclosed, và segmented trên thực tế chỉ một 
trong hai model đầu tiên thường được sử dụng. 
set_wire_load_mode 
dc_shell -t> set_wire_load_mode top 
Chương IV - Thiết kế vi mạch sổ trên thư viện cổng chuẩn 15 
top: quy định tất cả các module con đều được thừa hưởng mô hình kết 
nối giống như module ở cấp cao nhất (top-level module). 
enclosed: quy định rằng mô hình kết nối của module con sẽ giống mô 
hình kết nối của module trực tiếp chứa nó. 
segmented: quy định cho mô hình đường kết nối giưac các khối con ví dụ 
hai khối con B và C nằm trong khối A sẽ có kết nối theo mô hình của A, nhưng 
bản thân mô hình đường kết nối của các đường dữ liệu bên trong B và C thì 
được định nghĩa riêng. 
set_drive và set_driving_cell: sử dụng chỉ cho các đối tượng là inputs và 
outputs, set_drive dùng để thiết lập drive strength cho tín hiệu đầu vào, nếu 
dùng set_driving_cell thì giá trị drive strength đầu vào được lấy từ giá trị của 
cell được coi là đứng trước nó. Chú ý rằng trên thực tế không có cell nào được 
đặt thêm vào mạch. Cú pháp và ví dụ của các lệnh như ở dưới đây, chú { nếu 
drive strength được đặt là 0 thì có nghĩa là tín hiệu có độ mạnh nhất và thường 
dùng đặt cho tín hiệu clock. 
set_drive 
set_driving_cell –cell –pin 
dc_shell -t> set_drive 0 {CLK RST} 
dc_shell-t> set_driving_cell –cell BUFF1 –pin Z 
[all_inputs] 
set_load: quy định giá trị điện dung cho các tín hiệu thường là các tín hiệu đầu 
ra của các khối, đơn vị điện dung tính băng nf, pf tùy theo quy định về đơn vị 
trong thư viện. Cú pháp và ví dụ như sau: 
set_load 
dc_shell -t> set_load 1.5 [all_outputs] 
dc_shell -t> set_load 0.3 [get_nets blockA/n1234] 
Design Rule Constraints hay DRCs là tâp hợp các lệnh set_max_transition, 
set_max_fanout and set_max_capacitance thiết lập các quy tắc mà quá trình 
tổng hợp thiết kế phải tuân thủ, các quy định này được trích ra từ các tham số 
liên quan tới quy trình công nghệ sản xuất IC và nhất thiết không được vi phạm 
thì mới đảm bảo sản phẩm IC tạo ra làm việc đúng theo yêu cầu. DRC áp dụng 
cho tất cả input và output của thiết kế hiện hành. 
Chương IV - Thiết kế vi mạch sổ trên thư viện cổng chuẩn 16 
set_max_transition: thường được dùng cho các input, quy định rằng tất cả các 
đầu vào có thời gian truyền transition time lớn hơn thời gian quy định của chân 
tải đầu max_transition vào sẽ không được nối. Ví dụ 
set_max_transition 
dc_shell-t> set_max_transition 0.3 current_design 
set_max_capacitance: thường được dùng cho các output, quy định rằng đầu 
ra tương ứng chỉ được phép nối với các đường dẫn có tổng giá trị điện dung 
nhỏ hơn giá trị max_capacitance. 
set_max_capacitance 
dc_shell-t> set_max_capacitance 1.5 [get_ports out1] 
set_max_fanout: quy định số lượng lớn nhất các kết nối mà đầu ra có thể phục 
vụ. 
set_max_fanout 
dc_shell-t> set_max_fanout 3.0 [all_outputs] 
4.4.2. Thiết lập constraints cho thiết kế cụ thể. 
Đối với các thiết kế cụ thể, người thiết kế phải xác lập các mục tiêu và 
các điều kiện ràng buộc tương ứng về mặt thời gian và diện tích. Phụ thuộc vào 
các xác lập này, trình tổng hợp sẽ cố gắng đưa ra những phương án mạch 
nhằm đáp ứng những yêu cầu đó, quá trình đó chính là quá trình tối ưu hóa 
thiết kế. Một lưu { quan trọng là những xác lập phải dựa trên cơ sở thực tế, 
nếu người thiết kế cố tình đưa ra những yêu không có khả năng hiện thực hóa 
sẽ khiến quá trình tổng hợp kéo dài mà kết quả tổng hợp đưa không phải là tối 
ưu. 
create_clock: Lệnh quy định cho xung nhịp đồng bộ cho toàn bộ hoặc một phần 
của thiết kế, clock sẽ được xác lập với chu kz xác định và hình dạng tín hiệu. Ví 
dụ để xác nhận tín hiệu có tên CLK trong thiết kế là tín hiệu xung nhịp hệ thống 
với chu kz 40 ns và bán với 50% thời gian của chu kz đầu tích cực ở mức cao thì 
dùng câu lệnh như sau 
dc_shell-t> create_clock–period 40 –waveform [list 0 20] CLK 
Trong một số trường hợp khi làm việc với các khối tổ hợp thuần túy thì có thể 
tạo ra một xung nhịp ảo để giới hạn thời gian trễ đầu vào với đầu ra, tuy vậy 
cách làm đơn giản mà dễ sử dụng hơn là dùng lệnh set_max_delay, ví dụ 
set_max_delay -to all_outputs() 1.7 
Chương IV - Thiết kế vi mạch sổ trên thư viện cổng chuẩn 17 
create_generated_clock: lệnh này sử dụng để định nghĩa xung nhịp đồng thứ 
cấp được tạo ra bên trong khối thiết kế, thông thường bởi các khối chia tần. 
create_generated_clock –name –source <clock 
source> –divide_by | –multiply_by 
set_dont_touch_network: là một lệnh rất hữu dụng, thường được sử dụng với 
các tín hiệu như xung nhịp clock hay reset, khi gặp lệnh này Design compiler sẽ 
bỏ qua không thực hiện thay đổi thêm với các tín hiệu đó trong quá trình tối ưu 
thiết kế nữa. 
Ví dụ như sau: 
dc_shell> set_dont_touch_network {CLK, RST} 
set_dont_touch: Dùng để báo cho trình tổng hợp biết không được thay đổi cấu 
trúc của thiết kê, khối, cổng, chỉ ra trong dòng lệnh. Lệnh này rất hay được sử 
dụng khi tổng hợp module từ các module đơn lẻ, khi các module đơn lẻ đã đạt 
được cấu trúc hợp lý có thể dùng lệnh này để lưu giữ cấu trúc đó lại, quá trình 
tối ưu sẽ chỉ được thực hiện với các module khác bên ngoài nó. Ví dụ như sau: 
dc_shell-t> set_dont_touch current_design 
dc_shell -t> set_dont_touch [get_nets gated_rst] 
set_dont_use: Dùng để báo cho Design Compiler biết không được sử dụng 
cell, hoặc danh sách các cell chỉ định trong tham số dòng lệnh. Ví dụ lệnh sau 
ngăn không cho Design Compiler sử dụng các Flip-flop có tên SDFF* hoặc 
RSFF* 
dc_shell -t> set_dont_use [list mylib/SDFF* mylib/RSFF*] 
set_input_delay Là một lệnh khá quan trọng dùng để thiết lập giá trị độ trễ 
đầu vào cho thiết kế. Giá trị này được đặt chỉ khi mạch đang xét là mạch dãy, 
khi đó độ trễ thường được tính căn cứ vào thời điểm xung nhịp đồng bộ được 
kích hoạt. Xét như ở ví dụ dưới đây. 
dc_shell> set_input_delay –max 23.0 –clock CLK {datain} 
dc_shell> set_input_delay –min 0.0 –clock CLK {datain} 
Chương IV - Thiết kế vi mạch sổ trên thư viện cổng chuẩn 18 
Hình 4.11: Thiết lập input delay 
Khi ta đặt trễ đầu vào với tham số -max cho tín hiệu din nghĩa là khoảng 
thời gian kể từ điểm kích hoạt của xung nhịp đồng hồ cho tới khi tín hiệu đầu 
vào ổn định không được vượt giá trị thời gian quy định trong câu lệnh, hay nói 
một cách khác đó là thời gian trễ lớn nhất có thể của khối logic tổ hợp đầu vào 
của thiết kế giữa thanh ghi cuối cùng của module trước đó đến thanh ghi đầu 
tiên của module đang xét. Khi câu lệnh đi cùng tham số -min thì đó chính là 
giới hạn thời gian Thold của lớp thanh ghi tại vị trí đầu vào. 
Ở ví dụ trên: Như ở hình vẽ trên, tín hiệu xung nhịp đồng bộ có chu kz là 30ns, 
trong đó ½ chu kz là mức tích cực dương còn ½ là mức tích cực âm. Với hai câu 
lệnh trên thì thời gian trễ lớn nhất của khối logic đầu vào là 23ns, và thời gian 
Tsetup tương ứng là 7ns với Thold = 0ns 
set_output_delay: Dùng để thiết lập tham số thời gian trễ cho tín hiệu ra 
quy định khoảng thời gian kể từ khi giá trị tín hiệu đầu ra xác định đến 
thời điểm kích hoạt của xung nhịp đồng bộ tiếp theo. Ví dụ như sau: 
dc_shell> set_output_delay –max 19.0 –clock CLK {dataout} 
Hình 4.12: thiết lập input delay 
Chương IV - Thiết kế vi mạch sổ trên thư viện cổng chuẩn 19 
Với lệnh trên khối logic tổ hợp đầu ra có độ trễ tối đa không quá T – 19 
ns = 11ns, nghĩa là đầu ra buộc phải ổn định sau 11ns sau sườn xung nhịp. 
set_clock_uncertainty: Thiết lập giá trị cho clock skew hoặc điều chỉnh các giá 
trị cho Tsetup và Thold ví dụ, câu lệnh thứ nhất xác lập các giá trị Tsetup và Thold, câu 
lệnh thứ hai xác lập giá trị clock_skew 
dc_shell> set_clock_uncertainty –setup 0.5 –hold 0.25 CLK 
dc_shell> set_clock_uncertainty .25 CLK 
set_false_path: được sử dụng để báo cho Design compiler biết đường dữ liệu 
(paths) cần phải bỏ qua khi thực hiện tối ưu hóa thiết kế, lệnh này thường gặp 
ví dụ khi thiết kế của chúng ta có nhứng nhóm đường gây trễ lớn mà không 
thể tối ưu hơn được trong khi trình biên dịch lại bỏ qua những đường khác, 
việc bỏ qua các đường đó giúp Design Compiler làm việc tốt hơn với nhóm còn 
lại và có thể có kết quả ảnh hưởng theo chiều hướng tốt với các nhóm bị bỏ 
qua. 
dc_shell> set_false_path –from in1 –through U1/Z –to out1 
set_multicycle_path: Trong mô tả RTL có những tình huống mà thời gian trễ 
giữa hai lớp thanh ghi không phải lúc nào cũng là 1 xung nhịp đồng hổ mà có 
thể là vài xung nhịp. Lệnh set_multicycle_path cho phép quy định nhóm đường 
dữ liệu hoạt động với độ trễ là nhiều xung nhịp, việc đặt đúng tham số này sẽ 
giúp Design Compiler dễ dàng tối ưu hóa thiết kế tốt hơn do hiểu đúng cách 
thức làm việc của mạch thực tế. 
dc_shell> set_multicycle_path 2 –from U1/Z –through U2/A 
–to out1 
set_max_delay Xác định thời gian trễ lớn nhất cho một hay một nhóm đường 
dữ liệu, lệnh này thường được sử dụng để giới hạn thời gian trễ cho các khối 
logic tổ hợp, ví dụ câu lệnh sau giới hạn thời gian trễ từ tất cả đầu vào cho đến 
đầu ra không được vượt quá 5 ns 
dc_shell -t> set_max_delay 5 –from [all_inputs] –to 
[all_outputs] 
set_min_delay Thiết lập điều kiện ngược với set_max_delay, trên thực tế rất ít 
sử dụng lệnh này. 
dc_shell> set_min_delay 3 –from [all_inputs] –to 
[all_outputs] 
Chương IV - Thiết kế vi mạch sổ trên thư viện cổng chuẩn 20 
set_max_area: xác định giới hạn diện tích sử dụng cho thiết kế, diện tích tỷ lệ 
thuận với số lượng cổng và thông thường tỷ lệ nghịch với thời gian trễ hay tốc 
độ của mạch. Theo ngầm định thì Design Compiler ưu tiên tối ưu hóa về mặt 
tài nguyên trước sau đó mới đến diện tích. Việc tối ưu về diện tích thường 
được làm sau khi tối ưu về mặt thời gian, trên thực tế đôi khi quá trình tối ưu 
hóa về mặt diện tích lại có tác động tích cực lên các tham số thời gian. 
dc_shell> set_max_area 10000 
4.2 Tổng hợp logic 
Khái niệm tổng hợp logic (logic synthesis), trong thiết kế ASIC cũng giống 
như khái niệm tổng hợp thông thường, tức là chuyển mô tả RTL từ một mức 
độ trừu tượng cao xuống mức độ trừu tượng thấp hơn. Bên cạnh đó, thiết kế 
RTL là thiết kế độc lập với công nghệ còn kết quả của quá trình tổng hợp là đã 
gắn với một thư viện phần cứng xác định và do đó phụ thuộc vào công nghệ 
của thư viện đó. 
Có các phương pháp sau thường được sử dụng để tổng hợp logic dùng Design 
compiler. 
4.2.1 Tổng hợp toàn bộ 
Với phương pháp này module cấp cao nhất sẽ được tổng hợp, ở một số 
phiên bản cũ của Design compiler việc tổng hợp các module lớn (>10k gates) là 
một nhiệm vụ hết sức khó khăn, tuy vậy ở các phiên bản sau thì Design 
Compiler đã có thể dễ dàng làm việc với các mô tả >100K gates. Ưu điểm của 
phương pháp này là chỉ cần một file script thiết lập điều kiện cho quá trình 
tổng hợp và quá trình tối ưu được thực hiện giữa các khối, mang lại hiệu quả 
cao. Nhược điểm là thời gian tổng hợp thường rất lâu, một thay đổi nhỏ của 
một khối sẽ dẫn đến phải làm lại từ đầu. Mặt khác với những thiết kế sử dụng 
có cấu trúc xung nhịp hệ thống phức tạp (multicycle paths, generated clocks) 
thì kết quả tổng hợp thường không đạt tối ưu. 
4.2.2. Tổng hợp theo phương pháp chia nhỏ. 
Đối với phương pháp này thiết kế bị chia nhỏ thành các khối chức năng 
riêng, mỗi một khối được tổng hợp với các điều kiện ràng buộc riêng, sau đó 
mới tổng hợp module tổng dựa trên kết quả tổng hợp các khối con. Phương 
pháp này có ưu điểm là dễ dàng kiểm soát các mã tổng hợp cho các khối riêng, 
Chương IV - Thiết kế vi mạch sổ trên thư viện cổng chuẩn 21 
khi có sự thay đổi của một khối con thì chỉ cần tổng hợp lại riêng khối đó. Kết 
quả tổng hợp cũng sẽ tốt do các khối con được tối ưu theo đặc điểm riêng của 
khối. Nhược điểm là khi làm các khối đơn lẻ sẽ không dễ dàng quan sát được 
đường gây trễ cực đại cho toàn khối và không có sự tối ưu kết nối giữa các 
khối. Bên cạnh đó việc thành lập các file script tổng hợp riêng cho từng khối là 
tốn nhiều thời gian công sức. 
4.2.3. Tổng hợp tổng thể sau đó phân tách để tối ưu. 
Đây là phương pháp rất hay được ứng dụng, nó phù hợp với những thiết 
kế cỡ vừa và phức tạp. Thiết kế đầu tiên sẽ được tổng hợp sơ bộ sau đó sẽ 
được đặc trưng hóa từng khối bằng lệnh characterize, lệnh này sẽ lấy các 
tham số của khối con trong mối quan hệ với khối chính và thực hiện tổng hợp 
riêng để tối ưu riêng. Việc này vẫn đảm bảo khả năng tối ưu giữa các khối con 
vừa cho phép tối ưu từng khối riêng lẻ, nghĩa là kết hợp được cả hai ưu điểm 
của phương pháp trên. Phương pháp này nếu làm đúng có thể mang lại kết 
quả tối ưu nhất so với hai phương pháp trên. Tuy vậy nhược điểm bao gồm các 
nhược điểm của cả hai phương pháp trên, thời gian tổng hợp sẽ lâu và việc tối 
ưu khối này có thể dẫn đến làm mất tính tối ưu của khối khác trong sơ đồ tổng 
thể và ngược lại, ảnh hưởng đó có thể làm cho trình tổng hợp làm việc tốn rất 
nhiều thời gian. 
4.3. Kiểm tra sau tổng hợp logic 
Sau khi tổng hợp, Design compiler cho phép xuất ra file mô tả netlist để 
dùng cho mục đích kiểm tra, còn bản thân kết quả của quá trình tổng hợp 
được lưu dưới dạng file định kiểu có phần mở rộng là .db. Đó là đầu vào cho 
phần thiết kế vật lý ở bước sau này. 
File netlist là file mô tả bằng VHDL sử dụng các cell chuẩn trong thư viện, 
tương tự như khi ta làm việc với FPGA, muốn mô phỏng được file này thì phải 
có mô tả thư viện tương ứng, tức là mô tả chức năng của các cell trong thư 
viện chuẩn mà ta làm việc. Mô tả này thường đi kèm theo trong thư viện hoặc 
có thể được tạo ra từ các file thư viện gốc băng chương trình Library compiler. 
Chi tiết về quá trình này ta sẽ tìm hiểu ở phần thực hành thiết kế ở cuối 
chương này. 
Chương IV - Thiết kế vi mạch sổ trên thư viện cổng chuẩn 22 
5. Thiết kế vật lý (Physical design) 
Physical design hay Back-end design: Mỗi bước của giai đoạn thiết kế hoàn 
thiện giải quyết một bài toán tối ưu. Như đã trình bày ở trên, vi mạch logic tích 
hợp một khối lượng khổng lồ các phần tử logic vì vậy các bài toán như sắp đặt, 
phân bố, kết nối được thực hiện nhờ những chương trình hỗ trợ thiết kế 
(CADs). Mục tiêu của các bài toán này là hiện thực hóa thiết kế lên đối tượng 
vật lý cụ thể và các tham số tối ưu là thời gian trễ (delay timing), diện tích 
(area), mức độ tiêu tốn năng lượng (power consumtion) 
Floorplaning: Tại bước này các khối logic sẽ được sắp xếp, phân bố lên không 
gian bán dẫn cụ thể. Nếu như mô tả logic trong netlist chỉ cung cấp thông tin 
những phần tử nào được sử dụng và kết nối giữa chúng như thế nào thì tại 
bước này các khối logic sẽ được tính toán để phân bố một cách tương đối hợp 
lý trên chip vật lý cụ thể. Bên cạnh đó tại bước này cũng sẽ tính đến vị trí bố trí 
của các khối ngoại vi như RAM, ROM Và sự bố trí của các vị trí lưới nguồn cấp 
Vcc và nối đất Ground. Tham số tối ưu số 1 ở bước này là diện tích sử dụng, 
thông thường yêu cầu tối thiểu là phải đạt đượ
            Các file đính kèm theo tài liệu này:
 giao_trinh_transitor_chuong_5_thiet_ke_vi_mach_so_tren_thu_v.pdf giao_trinh_transitor_chuong_5_thiet_ke_vi_mach_so_tren_thu_v.pdf