Kiến thức cơ bản

FlipFlop trong logic design

FlipFlop trong logic design

FlipFlop trong Logic Design

Đối với thiết kế số và thiết kế logic, thuật ngữ FlipFlop được hiểu khá rộng rãi và phổ biến. Ở bài viết này, Admin sẽ không đi sâu vào phân tích cấu tạo của FlipFlop từ mức CMOS, NMOS, và không phân tích hết các dạng của FlipFlop có trong thực tế. Thay vào đó, những vấn đề nổi bật quan trọng mà cần thiết khi thiết kế sẽ được nêu ra trên quan điểm cá nhân của Admin, để chúng ta có thể trao đổi và học hỏi lẫn nhau.

 

 

1. Nguyên lý cơ bản

 Flipflop là phần tử nhớ cơ bản trong các thiết kế logic. Hoạt động của Flipflop dựa vào một tín hiệu kích hoạt theo cạnh, ở đây đó là clock. Về mặt lý thuyết, Flipflop vẫn có thể hoạt động được nếu các bạn dùng một tín hiệu không chu kỳ để kích hoạt nó. Tuy nhiên, trong thực tế, để giải quyết các vấn đề về timing và đồng bộ giữa các Flipflop với nhau, người ta chỉ dùng clock để kích hoạt cho Flipflop. Do vậy, khi nhắc đến Flipflop thì chúng ta tự hiểu rằng, nó được kích hoạt bằng sườn của 1 tín hiệu có chu kỳ đó là clock. 

 

Kích hoạt theo sườn là như thế nào ?

Để hiểu khái niệm này, trước tiên, chúng ta tìm hiểu kích hoạt là gì và kích hoạt theo mức. Kích hoạt ( trigger ) là một sự kiện, một thay đổi ( mức tín hiệu 0--> 1, 1-->0 ) của tín hiệu này, sẽ tạo ra sự bắt đầu cho một sự thay đổi của tín hiệu khác.

Với cách hiểu như thế, thì kích hoạt theo mức có nghĩa là, sự thay đổi kéo theo sẽ được kích hoạt bởi sự thay đổi về mức tín hiệu. Ví dụ đơn giản như các cổng AND, OR, NOT, XOR.... Khi đầu vào thay đổi mức, thì đầu ra cũng thay đổi theo tùy theo mức của đầu vào. 

Tương tự, Flipflop sẽ nhận sự thay đổi của tín hiệu clock ngay tại cạnh lên ( hoặc cạnh xuống ) mà thực hiện chức năng của mình, đó là gán giá trị của D sang chân Q ở đầu ra. 

 Đặc tính của clock mà các bạn cần quan tâm, đó là Chu kỳ và Duty cycle. Thông thường thì clock có Duty Cycle 50%, nhưng cũng không ít trường hợp khác 50%. Ví dụ như:

Ví dụ về các dạng tín hiệu clock.

Theo ví dụ trên, cả 2 clock A và B đều có chu kỳ là T, nhưng khác nhau về thời gian của mỗi mức. Clock A có mức High và mức Low là như nhau, nên Duty Cycle của clock A là 50%. Clock B thì có mức High chỉ bằng 1/3 mức Low, nên clock B có Duty Cycle là 25%. 

 

 Tại sao chúng ta không quan tâm đến độ lớn của tín hiệu clock ?

Tín hiệu clock và tín hiệu số nói chung, về mặt lý thuyết chỉ có 2 mức là High và Low, cũng có thể hiểu là mức "1" à "0". Mức 1 hoặc High này sẽ tương đương với nguồn VDD, mức 0 hoặc Low sẽ tương đương với đất GND. VDD sẽ tùy theo công nghệ của các thư viện mà dao động. Do đó, chúng ta không cần quan tâm đến độ lớn của tín hiệu đối với thiết số. 

Trong thiết kế số phần layout hoặc implementation sẽ có những phần liên quan đến vật lý, theo đó, sẽ có các điểm kiểm tra về tính chất vật lý của tín hiệu. Ngược lại, phần thiết kế logic, mô phỏng logic sẽ không bao gồm các bước kiểm tra này.

 

 Chức năng nhớ của Flipflop là như thế nào ?

Quay trở lại với chức năng chính của Flipflop, chức năng nhớ các giá trị. Như đã tìm hiểu bên trên, Flipflop là phần tử được kích hoạt tại cạnh của tín hiệu clock. Như vậy, có thể hiểu rằng, sự thay đổi giá trị chỉ xảy ra tại thời điểm có cạnh của clock. Trong khoảng thời gian còn lại, khi không có cạnh clock xuất hiện, thì giá trị của Q là không đổi. Bên cạnh đó, tại thời điểm có xung cạnh tích cực của clock, nếu giá trị D bằng với giá trị Q trước đó thì Q cũng sẽ không thay đổi giá trị. Tính chất của phần tử nhớ cũng thể hiện ở hoạt động này của Flipflop. 

 

Flipflop được ký hiệu trong thực tế.

 

Theo như hình vẽ bên trên, Flipfop được nhận giá trị D0 là từ chính đầu ra của nó, và D1 là đầu vào khác. Tùy vào giá trị của tín hiệu S0, mà đầu ra của Flipflop có được cập nhật mới hay là không. 

 

2. Waveform

Hoạt động của Flipflop về cơ bản sẽ có dạng sóng như hình bên dưới:

Waveform của một Flipflop với đầu vào D và clock.

Phần cạnh lên của clock chính là thời điểm mà chức năng của Flipflop được kích hoạt, giá trị đầu ra Q sẽ được gán giá trị của đầu vào D tại thời điểm đó. Phần cạnh lên clock có nét đứt màu đỏ thể hiện sự hoạt động của Flipflop làm thay đổi đầu ra Q. Phần cạnh lên màu xanh thể hiện sự hoạt động của Flipflop mà không làm thay đổi giá trị đầu ra.

Như vậy, giá trị của đầu ra Q luôn luôn được cập nhật mỗi khi có cạnh clock lên ( rising edge ). Tuy nhiên, nếu giá trị mới của D bằng với giá trị trước đó của Q, thì sau cạnh clock lên đó, giá trị của Q là không đổi. Như vậy, như đã nói ở trên, khả năng nhớ của Flipflop thể hiện rõ ở tính chất này. Người thiết kế có thể ghi vào Flipflop 1 giá trị nào đó, và giữ chúng ở đó trong 1 khoảng thời gian, hoặc một trạng thái nhất định, thì hoàn toàn có thể coi Flipflop là 1 bộ nhớ. Trong thiết kế, thông thường, 1 Flipflop sẽ có giá trị tương đương với 1 bit nhớ. Nếu các bạn có 32 Flipflop nối với nhau thành 1 thanh ghi ( register ), thì đó được gọi là thanh ghi 32 bits. 

Hi vọng bài viết này đã có thể mang lại cho các bạn các  góc nhìn về Flipflop và khả năng chính của nó là phần tử nhớ logic. Nếu các bạn có thắc mắc, thì để lại comment bên dưới nhé ! 

Cảm ơn các bạn đã theo dõi !