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 |
Chia sẻ: trungkhoi17 | Lượt xem: 560 | 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