Thời gian trễ trung bình trong verilog

Era globalisasi saat ini memiliki beragam masalah yang semkin berkembang. Individu menghadapi permasalahan dengan dirinya sendiri, orang lain, maupun lingkungannya. Berkembangnya berbagai macam masalah diikuti pula solusi atau cara penyelesaian permasalahan tersebut, salah satunya dengan Neuro-Linguistic Programming [NLP]. NLP merupakan program latihan yang memanfaatkan diri sendiri untuk menyelesaikan suatu permasalahan dengan melihat proses munculnya permasalahan tersebut. Hal ini sebagaimana fungsi konseling itu sendiri, yaitu memberikan perlakuan agar dapat berpikir rasional dan memiliki perasaan yang sesuai sehingga dapat merencanakan serta melaksanakan suatu tindakan yang produktif dan nomatif. Oleh karena itu, dengan proses NLP dalam konseling dapat memudahkan individu dalam berpikir rasional dan memiliki perasaan yang tepat.

The Sketch Engine is a corpus query system based on grammatical relations of a language. This system has been widely used in lexicography, particularly for building dictionaries of different languages such as English, Japanese, Chinese etc. This paper presents an approach to applying the Sketch Engine to Vietnamese in which a method for building corpus and fundamental grammatical relations for Vietnamese has been proposed.

Wikipedia nổi tiếng là một bách khoa toàn thư mở lớn nhất hiện nay với mục đích phổ cập kiến thức cho tất cả mọi người trên thế giới. Với việc áp dụng robot trong khâu tạo bài tự động, dự án tiếng Việt là một trong 13 dự án ngôn ngữ có hơn một triệu bài viết. Tuy nhiên, điều đó tạo cho Wikipedia tiếng Việt nhiều thách thức trong việc nâng cao chất lượng bài, sắp xếp thể loại, chống phá hoại nội dung và nhiều công tác khác. Trong bài báo này, chúng tôi phân loại thể loại ở Wikipedia tiếng Việt, chi tiết hơn là cấu trúc và các quy ước đặt tên thể loại. Phương pháp chính là áp dụng các tiêu chuẩn và cấu trúc thể loại sẵn có ở tiếng Anh, một dự án Wikipedia lớn nhất về mặt thông tin đóng góp, từ đó áp dụng cho phiên bản tiếng Việt. Tuy nhiên, điều đó không thực hiện dễ dàng, do đó chúng tôi phải kết hợp nhiều phương pháp xã hội cũng như chuyên môn để đạt được sự kỳ vọng. Việc phân tích tên thể loại và dữ liệu từ Wikidata được chúng tôi áp dụng là một tiền đề xây dựng một công cụ chuyển ...

Penelitian ini bertujuan: [1] mendeskripsikan komponen literasi versi PIRLS, [2] mendeskripsikan penilaian pemahaman menurut PIRLS, dan [3] mengidentifikasi komponen yang perlu dipertimbangkan dalam menentukan kerangka penilaian kompetensi literasi membaca kelas IV SD. Hasil penelitian sebagai berikut. Pertama, komponen literasi versi PIRLS meliputi: konsep literasi membaca, framework asesmen, tolok ukur, komponen literary text, dan penentuan sistem penilaian. Kedua, kompetensi literasi membaca didefinisikan sebagai kemampuan membaca dan memahami teks berjenis sastra dan informatif, berdasarkan empat tingkatan kognitif, dari berbagai tipe teks, dan mengikuti konteks lokal di sekitar anak dan konteks nasional. Ketiga, kerangka penilaian kompetensi literasi untuk peserta didik kelas IV SD perlu mempertimbangkan hal-hal sebagai berikut: kosakata atau diksi yang terlalu sulit lebih dari tiga; penarikan makna secara implisit; aplikasi teks pada kognisi tingkat lanjut; ilustrasi yang sesu...

Văn học Việt Nam nửa đầu thế kỉ XX được xem là giai đoạn “giao thời”, với sự đấu tranh giữa thơ Cũ và thơ Mới, giữa truyền thống và cách tân, tồn tại nhiều khuynh hướng, dòng phái khác nhau. Từ góc độ thể loại, không ít người cho đây là thời điểm thơ tự do thắng thế, thơ Đường luật nói chung bị xem là hết mùa, lỗi thời. Song vẫn còn đó một minh chứng hùng hồn cho sự hiện diện của thơ Nôm Đường luật Việt Nam ở nửa đầu thế kỉ XX, đó là Nôm Đường luật Phan Bội Châu. Bài viết trên cơ sở chỉ ra một vài đặc điểm về ngôn ngữ trong thơ Nôm Đường luật Phan Bội Châu thời kỳ ở Huế, từ đó cho thấy những đổi mới, cách tân của Phan Sào Nam trong việc sử dụng thể thơ truyền thống của dân tộc.

Sau khi đã hiểu về mô hình mô phỏng sự kiện của Verilog và System Verilog qua bài 1, bài 2, bài 3 và bài 4 với những ví dụ minh họa cụ thể. Bài này sẽ trình bày về hiện tượng “chạy đua” [race condition] và những nguyên tắc để hạn chế hiện tượng chạy đua trong Verilog và System Verilog. Đồng thời giải thích vì sao có hiện tượng này khi chạy mô phỏng.

  1. Chạy đua là gì?

Trong cuộc sống, chạy đua là thi xem ai đến đích trước. Việc ai đến đích trước sẽ làm cho kết quả cuộc thi khác nhau. Tương tự, thuật ngữ chạy đua dựa trên ý tưởng hai tín hiệu “đua” nhau để xem tín hiệu nào sẽ tác động đến đầu ra trước. Thứ tự tác động của chúng làm cho đầu ra có thể mang các giá trị khác nhau và sinh ra lỗi không mong muốn cho một thiết kế, một hệ thống hoặc một quá trình xử lý. Tóm lại, điều kiện chạy đua là một sai sót thể hiện ở việc một đầu ra phụ thuộc không mong muốn vào định thời [timing] hoặc thứ tự sắp xếp [ordering] của các sự kiện.

  1. Phân loại “chạy đua”

Chạy đua có thể được chia làm 2 nhóm là chạy đua phần cứng [hardware race] và chạy đua sinh ra do mô phỏng [simulation induced race]

2.1] Chạy đua phần cứng

Chạy đua phần cứng xuất hiện trong mạch tổ hợp do bản chất vật lý của mạch. Trên thực tế, các tín hiệu trong một mạch tổ hợp có độ trễ lan truyền khác nhau. Khi đầu vào của một cổng logic thay đổi trạng thái thì phải mất một khoảng thời gian trễ trước khi thay đổi này truyền đến ngõ ra của cổng logic. Trong khoảng thời gian này, ngõ ra có thể thay đổi đến một trạng thái không mong muốn trước khi chuyển đến trạng thái ổn định. Trạng thái không mong muốn này gọi là glitch. Tuy nhiên các cuộc chạy đua tạm thời này thường không ảnh hưởng đến hoạt động chính xác của hệ thống, nếu nó không phải là đường clock hoặc reset bất đồng bộ. Đường clock và rest bất đồng bộ rất nhạy bởi sự thay đổi tín hiệu nên glitch trên các đường này là vô cùng nguy hiểm.

Một ví dụ về chạy đua phần cứng mà các bạn có thể dễ tìm gặp là mạch sau:

Hình 1: Minh họa chạy đua phần cứng

Giả sử cồng NOT trễ 1ns, cổng AND trễ 2ns, dây nối có độ trễ không đáng kể. Khi in chuyển từ mức “0” đến mức “1” thì sau 1ns in’ mới bằng “0”. Như vậy, trong 1ns trước khi in’ chuyển đến trạng thái đúng, cả 2 ngõ vào cổng AND bằng “1”. Sau 2ns, ngõ ra out sẽ thể hiện mức 1 này. Một ví dụ điển hình khác về chạy đua là trạng thái cấm của Latch S-R trong hình minh họa sau:

Hình 2: Mô hình R-S Latch

Khi hai ngõ vào S và R được gán đến giá trị “1” đồng thời thì hai ngõ ra của cổng NOR sẽ là “0”. Lúc này, do đường hồi tiếp từ Q và /Q đến ngõ vào của 2 cổng NOR nên nếu chỉ có S hoặc R chuyển trạng thái:

  • S chuyển sang trạng thái “0” thì hai ngõ ra Q và /Q sẽ ổn định về “01”.
  • R chuyển sang trạng thái “0” thì hai ngõ ra Q và /Q sẽ ổn định về “10”.

Nhưng nếu cả S và R cùng chuyển trạng thái từ “1” sang “0” đồng thời thì xảy ra chạy đua và trạng thái cuối cùng của hai ngõ ra Q và /Q là không thể dự đoán được. Các chạy đua phần cứng là bản chất vậy lý bên trong mỗi hệ thống, các kỹ thuật thiết kế thích hợp và công cụ có thể ngăn chặn hiệu quả điều này.

2.2] Chạy đua sinh ra do mô phỏng

Chạy đua sinh ra do mô phỏng không do bản chất bên trong của thiết kế hay tính chất vật lý của nó mà là hệ quả tự nhiên không mong muốn của thuật toán mô phỏng theo sự kiện sử dụng trong Verilog và System Verilog.

Trong khi bản chất thực tế của phần cứng có thể xử lý song song đồng thời thì trình mô phỏng chỉ có thể xử lý một sự kiện tại một thời điểm, nên trong cùng một khe thời gian, một chuỗi các sự kiện sẽ được lập thời gian biểu để thực hiện tuần tự. Như vậy, các hoạt động đồng thời của phần cứng sẽ được mô hình hóa bằng một tập hợp các hoạt động theo thứ tự của trình mô phỏng. Độ lệch của mô hình này so với phần cứng thực tế gây ra các chạy đua không có trong phần cứng thực tế, mà do trình mô phỏng tạo ra.

Những chạy đua này có thể làm cho trình mô phỏng cho kết quả:

  • Trường hợp 1: Thiết kế lỗi trong khi thực tế thiết kế là chính xác
  • Trường hợp 2: Thiết kế có vẻ đúng trong khi thực tế thiết kế không chính xác.

Trường hợp thứ hai nguy hiểm hơn rất nhiều so với trường hợp thứ nhất vì chúng ta sẽ không phát hiện được bug cho đến khi chạy phần cứng thực tế. Một nguyên nhân thường gặp của trường hợp thứ 2 là do code thiết kế vô tình theo đúng thứ tự cụ thể của thuật toán mô phỏng. Chính vì vậy mà Verilog và System Verilog quy định một vùng sự kiện cụ thể [ví dụ như Active, Re-Active, …] cho phép xử lý các phát biểu theo thứ tự tùy ý, nhưng các phát biểu trong mỗi block begin-end phải theo đúng thứ tự.

  1. Làm sao để phát hiện điều kiện chạy đua sinh ra do mô phỏng?

Trường hợp thứ nhất có thể được phát hiện và chỉnh sửa trong quá trình chạy mô phỏng trên phần mềm vì kết quả mô phỏng sẽ gây ra lỗi không mong muốn.

Đối với trường hợp thứ 2, chúng ta có thể xây dựng các hệ thống phần cứng thực tế dùng FPGA để có thể chạy thử nghiệm RTL code. Trên thực tế, hiện nay, một số công ty chuyên cung cấp công cụ và phần mềm mô phỏng còn phát triển các hệ thống mô phỏng kết hợp giữa phần cứng và phần mềm để giúp:

  • Mô phỏng code thiết kế gần giống thực tế nhất
  • Thời gian mô phỏng nhanh hơn
  • Có thể mô phỏng toàn bộ các thành phần của một hệ thống lớn ví dụ như một SoC với đầy đủ code RTL, hệ điều hành, chương trình ứng dụng thực tế, …

Một trong các hệ thống như vậy là HAPS [High-performance ASIC Prototyping Systems] của hãng Synopsys.

Hình 3: Hệ thống HAPS của Synopsys

Bản chất của chạy đua là đầu ra [ngõ ra] hoặc kết quả sinh ra sẽ không thể xác định trước nên mỗi trình mô phỏng khác nhau có thể cho kết quả khác nhau khi mô phỏng cùng một code có điều kiện chạy đua. Hoặc, cùng một trình mô phỏng nhưng phiên bản khác nhau cũng có thể cho kết quả khác nhau khi mô phỏng trên cùng một code. Vì vậy, chúng ta có thể mô phỏng trên nhiều phần mềm khác nhau và hãy luôn chú ý cập nhật phiên bản phần mềm mới. Bên cạnh đó, một số tool mô phỏng hiện nay có hỗ trợ phát hiện và báo các điều kiện chạy đua trong code [xem mục 6 - cuối bài viết để biết thêm chi tiết].

  1. Làm thế nào để tránh chạy đua sinh ra do mô phỏng

Nếu các bạn tìm google với từ khóa “race condition” các bạn có thể dễ dàng tìm thấy các lời khuyên [tip] để làm thế nào tránh hoặc hạn chế chạy đua khi sử dụng Verilog và System Verilog. Một tài liệu khá nổi tiếng là “Clifford E. Cummings , Arturo Salz , SystemVerilog Event Regions, Race Avoidance & Guidelines” của Sunburst Design. Theo bài viết này, việc tuân thủ các lời khuyên sau đây giúp loại bỏ từ 90% đến 100% các điều kiện chạy đua trong code RTL. Tuy không thể kiếm chứng nhưng khi phân tích kỹ thì hầu hết các lời khuyên là xác đáng. Ở đây ngoài việc dẫn lại một số lời khuyên cho việc coding thì bài này sẽ tập trung vào phân tích và đưa ra các ví dụ cụ thể.

4.1] Dùng phép gán nonblocking cho mô tả mạch tuần tự [dành cho code RTL]

Theo mô hình mô phỏng sự kiện của System Verilog và Verilog, phép gán nonblocking được thực thi trong 2 vùng là:

  • Vùng Active: Ước lượng giá trị vế phải của phép gán nonblocking. Hoạt động này giúp xác định giá trị hiện tại của vế phải.
  • Vùng NBA: Cập nhật giá trị bên trái của phép gán nonblocking. Hoạt động này đảm bảo tất cả các biến vế trái được cập nhật giá trị đã được xác định ở vùng Active chứ không phải giá trị vừa được gán mới trong vùng này.

Hành vi mô phỏng của phép gán nonblocking phù hợp với việc mô hình mạch tuần tự theo clock vì tại cạnh lên clock tất cả các ngõ ra Q của FF được cập nhật giá của ngõ vào D ở cùng một thời điểm. Nếu có nhiều FF mắc nối tiếp thì ngõ ra Q sẽ lấy giá trị ngõ vào D trước khi nó bị cập nhật bởi FF trước đó.

always @ [posedge clk] begin q0

Chủ Đề