Dẫn nhập thiết kế hệ thống số với Verilog
Khi kích thước và độ phức tạp của hệ thống thiết kế ngày càng tăng, nhiều công cụ hỗ trợ thiết kế trên máy tính được sử dụng vào quá trình thiết kế phần cứng
Bạn đang xem trước 20 trang tài liệu Dẫn nhập thiết kế hệ thống số với Verilog, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ức Khải University of Information Technology
NỘI DUNG
Chương1. Dẫn nhập thiết kế hệ thống số với Verilog
Khi kích thước và độ phức tạp của hệ thống thiết kế ngày càng tăng,
nhiều công cụ hỗ trợ thiết kế trên máy tính (CAD) được sử dụng vào quá
trình thiết kế phần cứng. Thời kì đầu, những công cụ mô phỏng và tạo ra
phần cứng đã đưa ra phương pháp thiết kế, kiểm tra, phân tích, tổng hợp và
tự động tạo ra phần cứng một cách phức tạp. Sự phát triển không ngừng
của những công cụ thiết kế một cách tự động là do sự phát triển của những
ngôn ngữ mô tả phần cứng (HDLs) và những phương pháp thiết kế dựa trên
những ngôn ngữ này. Dựa trên những ngôn ngữ mô tả phần cứng (HDLs),
những công cụ CAD trong thiết kế hệ thống số được phát triển và sử dụng
rộng rãi bởi những kĩ sư thiết kế phần cứng. Hiện tại, người ta vẫn đang
tiếp tục nghiên cứu để tìm ra những ngôn ngữ mô tả phần cứng tốt hơn và
trừu tượng hơn. Một trong những ngôn ngữ mô tả phần cứng được sử dụng
rộng rãi nhất đó là ngôn ngữ Verilog HDL. Do được chấp nhận rộng rãi
trong ngành công nghiệp thiết kế số, Verilog đã trở thành một kiến thức
được đòi hỏi phải biết đối với những kĩ sư cũng như sinh viên làm việc và
học tập trong lĩnh vực phần cứng máy tính.
Trong chương này, ta sẽ trình bày những công cụ và môi trường làm
việc có sẵn tương thích với ngôn ngữ Verilog mà một kĩ sư thiết kế có thể
sử dụng trong qui trình thiết kế tự động của mình để giúp đẩy nhanh tiến độ
thiết kế. Chúng ta sẽ thảo luận từng bước về thiết kế phân cấp, thiết kế mức
cao từ việc mô tả thiết kế bằng ngôn ngữ Verilog đến việc tạo ra phần cứng
của thiết kế đó. Những qui trình và những từ khóa chuyên môn cũng sẽ
được minh họa ở phần này. Kế tiếp, chúng ta cũng sẽ thảo luận những công
ức Khải University of Information Technology
cụ CAD hiện có tương thích với Verilog và chức năng của nó trong môi
trường thiết kế tự động. Phần cuối cùng của chương này sẽ nói về một số
đặc tính của Verilog khiến nó trở thành một ngôn ngữ được nhiều kĩ sư
thiết kế phần cứng lựa chọn.
1.1 Qui trình thiết kế số
Trong thiết kế một hệ thống số sử dụng môi trường thiết kế tự động,
qui trình thiết kế bắt đầu bằng việc mô tả thiết kế tại nhiều mức độ trừu
tượng khác nhau và kết thúc bằng việc tạo ra danh sách các linh kiện cũng
như các đường kết nối giữa các linh kiện với nhau ( netlist) cho một mạch
tích hợp với ứng dụng cụ thể (ASIC), mạch in ( layout) cho một mạch tích
hợp theo yêu cầu khách hàng ( custom IC), hoặc một chương trình cho một
thiết bị logic có khả năng lập trình được (PLD). Hình 1.1 mô tả từng bước
trong qui trình thiết kế này.
Bước đầu của thiết kế, một thiết kế sẽ được mô tả bởi sự hỗn hợp
giữa mô tả ở mức độ hành vi (behavioural) Verilog, sử dụng những gói
(module) thiết kế Verilog đã được thiết kế sẵn, và việc gán hệ thống các
bus và wire để liên kết các gói thiết kế này thành một hệ thống hoàn chỉnh.
Kĩ sư thiết kế cũng phải có trách nhiệm tạo ra dữ liệu để kiểm tra
(testbench) xem thiết kế đúng chức năng hay chưa cũng như dùng để kiểm
tra thiết kế sau khi tổng hợp. Việc kiểm tra thiết kế có thể thực hiện được
bằng việc mô phỏng, chèn những kĩ thuật kiểm tra, kiểm tra thông thường
hoặc kết hợp cả ba phương pháp trên. Sau bước kiểm tra đánh giá thiết kế (
bước này được gọi là kiểm tra tiền tổng hợp (presynthesis verification)),
thiết kế sẽ được tiếp tục bằng việc tổng hợp để tạo ra phần cứng thực sự
cho hệ thống thiết kế cuối cùng (ASIC, custom IC or FPLD,…). Nếu hệ
thống thiết kế là ASIC, thiết kế sẽ sẽ được sản xuất bởi nhà sản xuất khác;
ức Khải University of Information Technology
nếu là custom IC, thiết kế sẽ được sản xuất trực tiếp; nếu là FPLD, thiết kế
sẽ được nạp lên thiết bị lập trình được. Sau bước tổng hợp và trước khi
phần cứng thực sự được tạo ra, một quá trình mô phỏng khác (hậu tổng hợp
(postsynthesis)) phải được thực hiện. Việc mô phỏng này, ta có thể sử dụng
testbench tương tự testbench đã sử dụng trong mô phỏng tiền tổng hợp
(presynthesis). Bằng phương pháp này, mô hình thiết kế ở mức độ hành vi
và mô hình phần cứng của thiết kế được kiểm tra với cùng dữ liệu ngõ vào.
Sự khác nhau giữa mô phỏng tiền tổng hợp và hậu tổng hợp đó là mức độ
chi tiết có thể đạt được từ mỗi loại mô phỏng.
ức Khải University of Information Technology
Những phần tiếp theo sẽ mô tả tỉ mỉ về mỗi khối trong hình 1.1.
1.1.1 Dẫn nhập thiết kế
Bước đầu tiên trong thiết kế hệ thống số là bước dẫn nhập thiết kế.
Trong bước này, thiết kế được mô tả bằng Verilog theo phong cách phân
cấp từ cao xuống thấp (top-down). Một thiết kế hoàn chỉnh có thể bao gồm
những linh kiện ở mức cộng hoặc mức transistor, những khối (module)
phần cứng có chức năng phức tạp hơn được mô tả ở mức độ hành vi, hoặc
những linh kiện được liệt kê bởi cấu trúc bus.
Do những thiết kế Verilog ở mức cao thường được mô tả ở mức độ
mà tại đó nó mô tả hệ thống những thanh ghi và sự truyền dữ liệu giữa
những thanh ghi này thông qua hệ thống bus, việc mô tả hệ thống thiết kế ở
mức độ này được xem như là mức độ truyền dữ liệu giữa các thanh ghi
(RTL). Một thiết kế hoàn chỉnh được mô tả như vậy sẽ tạo ra được phần
cứng tương ứng thực sự rõ ràng. Những cấu trúc thiết kế Verilog ở mức độ
RTL sử dụng những phát biểu qui trình (producedural statements), phép
gán liên tục (continuous assignments), và những phát biểu gọi sử dụng khối
(module) đã xây dựng sẵn.
Những phát biểu qui trình Verilog (procedural statements) được
dùng để mô tả mức độ hành vi ở mức cao. Một hệ thống hoặc một linh kiện
được mô tả ở mức độ hành vi thì tương tự vời việc mô tả trong ngôn ngữ
phần mềm. Ví dụ, chúng ta có thể mô tả một linh kiện bằng việc kiểm tra
điều kiện ngõ vào của nó, bật cờ hiệu, chờ cho đến khi có sự kiện nào đó
xảy ra, quan sát những tín hiệu bắt tay và tạo ra ngõ ra. Mô tả hệ thống một
cách qui trình như vậy, cấu trúc if-else, case của Verilog cũng như những
ngôn ngữ phần mềm khác đều sử dụng như nhau.
ức Khải University of Information Technology
Những phép gán liên tục (continuous assignment) trong Verilog là
những phép gán cho việc thể hiện chức năng những khối logic, những phép
gán bus, và mô tả việc kết nối giữa hệ thống bus và các chân ngõ vào và
ngõ ra. Kết hợp với những hàm Boolean và những biểu thức có điều kiện,
những cấu trúc ngôn ngữ này có thể được để mô tả những linh kiện và hệ
thống theo những phép gán thanh ghi và bus của chúng.
Những phát biểu gọi sử dụng khối Verilog đã được thiết kế sẵn
(instantiantion statements) được dùng cho những linh kiện mức thấp trong
một thiết kế ở mức độ cao hơn. Thay vi mô tả ở mức độ hành vi, chức
năng, hoặc bus của một hệ thống, chúng ta có thể mô tả một hệ thống bằng
Verilog bằng cách kết nối những linh kiện ở mức độ thấp hơn. Những linh
kiện này có thể nhỏ như là mức cổng hay transistor, hoặc có thể lớn như là
một bộ vi xử lí hoàn chỉnh.
1.1.2 Testbench trong Verilog
Một hệ thống được thiết kế dùng Verilog phải được mô phỏng và
kiểm tra xem thiết kế đã đúng chức năng chưa trước khi tạo ra phần cứng.
Trong quá trình chạy mô phỏng này, những lỗi thiết kế và sự không tương
thích giữa những linh kiện dùng trong thiết kế có thể được phát hiện. Chạy
mô phỏng một thiết kế đòi hỏi việc tạo ra một dữ liệu ngõ vào kiểm tra và
quá trình quan sát kết quả sau khi chạy mô phỏng, dữ liệu dùng để kiểm tra
này được gọi là testbench. Một testbench sử dụng cấu trúc mức cao của
Verilog để tạo ra dữ liệu kiểm tra, quan sát đáp ứng ngõ ra, và cả việc bắt
tay giữa những tín hiệu trong thiết kế. Bên trong testbench, hệ thống thiết
kế cần chạy mô phỏng sẽ được gọi ra (instantiate) trong testbench. Dữ liệu
testbench cùng với hệ thống thiết kế sẽ tạo ra một mô hình mô phỏng mà sẽ
được sử dụng bởi một công cụ mô phỏng Verilog.
ức Khải University of Information Technology
1.1.3 Đánh giá thiết kế
Một nhiêm vụ quan trọng trong bất kì thiết kế số nào cũng cần đó là
đánh giá thiết kế. Đánh giá thiết kế là quá trình mà người thiết kế sẽ kiểm
tra thiết kế của họ có sai sót nào có thể xảy ra trong suốt quá trình thiết kế
hay không. Một sai sót thiết kế có thể xảy ra do sự mô tả thiết kế mơ hồ, do
sai sót của người thiết kế, hoặc sử dụng không đúng những khối trong thiết
kế. Đánh giá thiết kế có thể thực hiện bằng mô phỏng, bằng việc chèn
những kĩ thuật kiểm tra, hoặc kiểm tra thông thường.
1.1.3.1 Mô phỏng
Chạy mô phỏng dùng trong việc đánh giá thiết kế được thức hiện
trước khi thiết kế được tổng hợp. Bước chạy mô phỏng này được hiểu như
mô phỏng ở mức độ hành vi, mức độ RTL hay tiền tổng hợp. Ở mức độ
RTL, một thiết kế bao gồm xung thời gian clock nhưng không bao gồm trí
hoãn thời gian trên cổng và dây kết nối (wire). Chạy mô phỏng ở mức độ
này sẽ chính xác theo xung clock. Thời gian của việc chạy mô phỏng ở
mức độ RTL là theo tín hiệu xung clock, không quan tâm đến những nguy
hiểm tiềm ẩn có thể khiến thiết kế bị lỗi (hazards, glitch), hiện tượng chạy
đua không kiểm soát giữa những tín hiệu (race conditions), những vi phạm
về thời gian setup và hold của tín hiệu ngõ vào, và những vấn đề liên quan
đến định thời khác. Ưu điểm của việc mô phỏng này là tốc độ chạy mô
phỏng nhanh so với chạy mô phỏng ở mức cổng hoặc mức transistor.
Chạy mô phỏng cho một thiết kế đòi hỏi dữ liệu kiểm tra, thông
thường trong môi trường mô phỏng Verilog sẽ cung cấp nhiều phương
pháp khác nhau để đưa dữ liệu kiểm tra này vào thiết kế để kiểm tra. Dữ
liệu kiểm tra có thể được tạo ra bằng đồ họa sử dụng những công cụ soạn
thảo dạng sóng, hoặc bằng testbench. Hình 1.2 mô tả hai cách khác nhau để
ức Khải University of Information Technology
định nghĩa dữ liệu kiểm tra ngõ vào của một công cụ mô phỏng. Những
ngõ ra của công cụ mô phỏng là những dạng sóng ngõ ra ( có thể quan sát
trực quan).
Để chạy mô phỏng với Verilog testbench, trong testbench sẽ gọi hệ
thống thiết kế ra để kiểm tra, lúc này hệ thống thiết kế được xem như là
một phần của testbench, testbench sẽ cung cấp dữ liệu kiểm tra đến ngõ vào
của hệ thống thiết kế. Hình 1.3 mô tả một đoạn code của một mạch đếm,
testbench của nó, cũng như kết quả chạy mô phỏng của nó dưới dạng sóng
ngõ ra. Quan sát hình ta thấy việc chạy mô phỏng sẽ đánh giá chức năng
của mạch đếm. Với mỗi xung clock thì ngõ ra bộ đếm sẽ tăng lên 1. Chú ý
rằng, theo biểu đồ thời gian thì ngõ ra bộ đếm thay đổi tại cạnh lên xung
clock và không có thời gian trì hoãn do cổng cũng như trì hoãn trên đường
truyền. Kết quả chạy mô phỏng chỉ ra rằng chức năng của mạch đếm là
chính xác mà không cần quan tâm đến tần số xung clock.
Hiển nhiên, những linh kiện phần cứng thực sự sẽ có đáp ứng khác
nhau. Dựa trên định thời và thời gian trì hoãn của những khối được sử
ức Khải University of Information Technology
dụng, thời gian từ cạnh lên xung clock đến ngõ ra của bộ đếm sẽ có độ trì
hoãn khác không. Hơn nữa, nếu tần số xung clock được cấp vào mạch thực
sự quá nhanh so với tốc độ truyến tín hiệu bên trong các cổng và transistor
của thiết kế thì ngõ ra của thiết kế sẽ không thể biết được.
Việc mô phỏng này không cung cấp chi tiết về các vấn đề định thời
của hệ thống thiết kế được mô phỏng. Do đó, những vấn đề tiềm ẩn về định
thời của phần cứng do trì hoãn trên cổng sẽ không thể phát hiện được. Đây
là vấn đề điển hình của quá trỉnh mô phỏng tiền tổng hợp hoặc mô phỏng ở
mức độ hảnh vi. Điều biết được trong hình 1.3 đó là bộ đếm của ta đếm số
nhi phân. Thiết kế hoạt động nhanh chậm thế nào, hoạt đông được ở tần số
nào chỉ có thể biết được bằng việc kiểm tra thiết kế sau tổng hợp.
ức Khải University of Information Technology
!
1.1.3.2 Kĩ thuật chèn kiểm tra (assertion)
Thay vì phải dò theo kết quả mô phỏng bằng mắt hay tạo những dữ
liệu kiểm tra testbench phức tạp, kĩ thuật chèn thiết bị giám sát có thể được
sử dụng để kiểm tra tuần tự những đặc tính của thiết kế trong suốt quá trình
mô phỏng. Thiết bị giám sát được đặt bên trong hệ thống thiết kế được mô
phỏng bởi người thiết kế. Người thiết kế sẽ quyết định xem chức năng của
thiết kế đúng hay sai, những điều kiện nào thiết kế cần phải thỏa mãn.
Những điều kiện này phải tuân theo những đặc tính thiết kế, và thiết bị
giám sát được chèn vào hệ thống thiết kế để đảm bảo những đặc tính này
không bị vi phạm. Chuỗi thiết bị giám sát này sẽ sai nếu một đặc tính nào
đó được đặt vào bởi người thiết kế bị vi phạm. Nó sẽ cảnh báo người thiết
kế rằng thiết kế đã không đúng chức năng như mong đợi. Thư viện OVL (
Open Verification Library) cung cấp một chuỗi những thiết bị giám sát để
chèn vào hệ thống thiết kế để giám sát những đặc tính thông thường của
thiết kế. Người thiết kế có thể dùng những kĩ thuật giám sát của riêng mình
để chèn vào thiết kế và dùng chúng kết hợp với testbench trong việc kiểm
tra đánh giá thiết kế.
1.1.3.3 Kiểm tra thông thường
Kiểm tra thông thường là quá trình kiểm tra những đặc tính bất kì
của thiết kế. Khi một thiết kế hoàn thành, người thiết kế sẽ xây dựng một
chuỗi những đặc tính tương ứng với hành vi của thiết kế. Công cụ kiểm tra
thông thường sẽ kiểm tra thiết kế để đảm bảo rằng những đặc tính được mô
tả đáp ứng được tất cả những điều kiện. Nếu có một đặc tính được phát
hiện là không đáp ứng đúng, đặc tính đó được xem như vi phạm. Đặc tính
độ bao phủ (coverage) chỉ ra bao nhiêu phần trăm đặc tính của thiết kế đã
được kiểm tra.
ức Khải University of Information Technology
"
1.1.4 Biên dịch và tổng hợp thiết kế
Tổng hợp là quá trình tạo ra phần cứng tự động từ một mô tả thiết kế
phần cứng tương ứng rõ ràng. Một mô tả phần cứng Verilog dùng để tổng
hợp không thể bao gồm tín hiệu và mô tả định thời ở mức cổng, và những
cấu trúc ngôn ngữ khác mà không dịch sang những phương trình logic tuần
tự hoặc tổ hợp. Hơn thế nữa, những mô tả phân cứng Verilog dùng cho
tổng hợp phải tuân theo những phong cách viết code một cách nhất định
cho mạch tổ hợp cũng như mạch tuần tự. Những phong cách này và cấu
trúc Verilog tương ứng của chúng được định nghĩa trong việc tổng hợp
RTL.
Trong qui trình thiết kế, sau khi một thiết kế được mô tả hoàn thành
và kết quả mô phỏng tiền tổng hợp của nó được kiểm tra bởi người thiết kế,
nó phải được biên dịch để nó tiến gần hơn đến việc tạo thành phần cứng
thực sự trên silicon. Bước thiết kế này đòi hỏi việc mô tả phần cứng của
thiết kế phải được nhận ra. Ví dụ, chúng ta phải chỉ đến một ASIC cụ thể,
hoặc một FPGA cụ thể như là thiết bị phần cứng mục đích của thiết kế. Khi
thiết bị mục đích được chỉ ra, những tập tin mô tả về công nghệ
(technology files) của phần cứng ( ASIC, FPGA, hoặc custom IC) sẽ cung
cấp chi tiết những thông tin về định thời và mô tả chức năng cho quá trình
biên dịch. Quá trình biên dịch sẽ chuyển đổi những phần khác nhau của
thiết kế ra một định dạng trung gian ( bước phân tích), kết nối tất cả các
phần lại với nhau, tạo ra mức logic tương ứng ( bước tổng hợp), sắp xếp và
kết nối ( place and route ) những linh kiện trong thiết bị phần cứng mục
đích lại với nhau để thực hiên chức năng như thiết kế mong muốn và tạo ra
thông tin chi tiết về định thời trong thiết kế.
ức Khải University of Information Technology
Hình 1.4 mô tả quá trình biên dịch và mô tả hình ảnh kết quả ngõ ra
của mỗi bước biên dịch. Như trên hình, ngõ vào của bước này là một mô tả
phần cứng bao gồm những mức độ mô tả khác nhau của Verilog, và kết quả
ngõ ra của nó là một phần cứng chi tiết cho thiết bị phần cứng mục đích
như FPLD hay để sản xuất chip ASIC.
1.1.4.1 Phân tích
Một thiết kế hoàn chỉnh được mô tả dùng Verilog có thể bao gồm mô
tả ở nhiều mức độ khác nhau như mức độ hành vi, hệ thống bus và dây kết
nối với những linh kiện Verilog khác. Trước khi một thiết kế hoàn chỉnh
tạo ra phần cứng, thiết kế phải được phân tích và tạo ra một định dạng đồng
nhất cho tất cả các phần trong thiết kế. Bước này cũng kiểm tra cú pháp và
ngữ nghĩa của mã ngõ vào Verilog.
1.1.4.2 Tạo phần cứng
Sau khi tạo được một dữ liệu thiết kế có định dạng đồng nhất cho tất
cả các linh kiện trong thiết kế, bước tổng hợp sẽ bắt đầu bằng chuyển đổi
dữ liệu thiết kế trên sang những định dạng phần cứng thông thường như
một chuỗi những biểu thức Boolean hay một netlist những cổng cơ bản.
ức Khải University of Information Technology
1.1.4.3 Tối ưu logic
Bước kế tiếp của quá trình tổng hợp, sau khi một thiết kế được
chuyển đổi sang một chuỗi những biểu thức Boolean, bước tối ưu logic
được thức hiện. Bước này nhằm mục đích làm giảm những biểu thức với
ngõ vào không đổi, loại bỏ những biểu thức lập lại, tối thiểu hai mức, tối
thiểu nhiều mức.
Đây là quá trình tính toán rất hao tốn thời gian và công sức, một số
công cụ cho phép người thiết kế quyết định mức độ tối ưu. Kết quả ngõ ra
của bước này cũng dưới dạng những biểu thức Boolean, mô tả logic dưới
dạng bảng, hoặc netlist gồm những cổng cơ bản.
ức Khải University of Information Technology
1.1.4.4 Binding
Sau bước tối ưu logic, quá trình tổng hợp sử dụng thông tin từ thiết
bị phần cứng mục đích để quyết định chính xác linh kiện logic nào và thiết
bị nào cần để hiện thực mạch thiết kế. Quá trình này được gọi là binding và
kết quả ngõ ra của nó được chỉ định cụ thể sử dụng cho FPLD, ASIC, hay
custom IC.
1.1.4.5 Sắp xếp và đi dây liên kết
Bước sắp xếp và đi dây lien kết sẽ quyết định việc đặt vị trí của các
linh kiện trên thiết bị phần cứng mục đích. Việc kết nối các ngõ vào và ngõ
ra của những linh kiện này dùng hệ thống dây liên kết và vùng chuyển
mạch trên thiết bị phần cứng mục đích được quyết định bởi bước sắp xếp
và đi dây liên kết này. Kết quả ngõ ra của bước này được đưa tới thiết bị
phần cứng mục đích, như nạp lên FPLD, hay dùng để sản xuất ASIC.
Một ví dụ minh họa về quá trình tổng hợp được chỉ ra trên hình 1.5.
Trong hình này, mạch đếm mà đã được dùng chạy mô phỏng trong hình 1.3
được tổng hợp. Ngoài việc mô tả phần cứng thiết kế dùng Verilog, công cụ
tổng hợp đòi hỏi những thông tin mô tả thiết bị phần cứng đích để tiến hành
quá trình tổng hợp của mình. Kết quả ngõ ra của công cụ tổng hợp là danh
sách các cổng và flip-flop có sẵn trong thiết bị phần cứng đích và hệ thống
dây kết nối giữa chúng. Hình 5 cũng chỉ ra một kết quả ngõ ra mang tính
trực quan mà đã được tạo ra tự động bằng công cụ tổng hợp của Altera
Quartus II.
ức Khải University of Information Technology
1.1.5 Mô phỏng sau khi tổng hợp thiết kế
Sau khi quá trình tổng hợp hoàn thành, công cụ tổng hợp sẽ tạo ra
một netlist hoàn chỉnh chứa những linh kiện của thiết bị phần cứng đích và
các giá trị định thời của nó. Những thông tin chi tiết về các cổng được dùng
để hiện thực thiết kế cũng được mô tả trong netlist này. Netlist này cũng
bao gồm những thông tin về độ trì hoãn trên đường dây và những tác động
của tải lên các cổng dùng trong quá trình hậu tổng hợp. Có nhiều định dạng
netlist ngõ ra có thể được tạo ra bao gồm cả định dạng Verilog. Một netlist
như vậy có thể được dùng để mô phỏng, và mô phỏng này được gọi là mô
phỏng hậu tổng hợp. Những vấn đề về định thời, về tần số xung clock, về
hiện tượng chạy đua không