1. Trang chủ
  2. » Luận Văn - Báo Cáo

Nghiên cứu huấn luyện delay locked loop

79 0 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Nghiên Cứu Huấn Luyện Delay Locked Loop Để Lấy Dữ Liệu Trong Quá Trình Giao Tiếp Tốc Độ Cao (2GHz)
Tác giả Nguyễn Trung Kiên
Người hướng dẫn ThS. Trương Văn Trương
Trường học Đại học Duy Tân
Chuyên ngành Điện – Điện tử
Thể loại Báo cáo đồ án tốt nghiệp
Năm xuất bản 2023
Thành phố Đà Nẵng
Định dạng
Số trang 79
Dung lượng 3,11 MB

Cấu trúc

  • CHƯƠNG 1 MỞ ĐẦU (14)
    • 1.1 Lý do chọn đề tài (14)
    • 1.2 Mục tiêu (16)
    • 1.3 Đối tượng, phạm vi nghiên cứu (16)
      • 1.3.1 Đối tượng nghiên cứu (16)
      • 1.3.2 Phạm vi nghiên cứu (16)
  • CHƯƠNG 2 CƠ SỞ LÝ THUYẾT (17)
    • 2.1 Giới thiệu về ngôn ngữ mô tả phần cứng verilog (17)
      • 2.1.1 Tổng quan (17)
      • 2.1.2 Đặc điểm (17)
      • 2.1.3 Ưu điểm (17)
    • 2.2 Giới thiệu về giao tiếp Advanced Peripheral bus (APB) (18)
      • 2.2.1 Giao tiếp APB (18)
      • 2.2.2 Ưu điểm (18)
      • 2.2.3 Chức năng (18)
    • 2.3 Giới thiệu về clock domain crossing (CDC) (19)
      • 2.3.1 Clock Domain Crossing (CDC) là gì? (19)
      • 2.3.2 Ảnh hưởng (19)
      • 2.3.3 Khắc phục (19)
    • 2.4 Giới thiệu tổng quan về khối Loopback (19)
      • 2.4.1 Tại sao sử dụng khối Loopback? (19)
      • 2.4.2 Tổng quan về Khối Loopback (20)
      • 2.4.3 Sơ đồ kết nối (20)
  • CHƯƠNG 3 THIẾT KẾ (22)
    • 3.1 Giới thiệu tổng quan về thiết kế (22)
      • 3.1.1 Tổng quan sơ đồ khối và chức năng của thiết kế (22)
      • 3.1.2 Thông số của hệ thống (22)
      • 3.1.3 Thuật toán tìm điểm tối ưu (22)
      • 3.1.4 Chức năng của hệ thống (24)
      • 3.1.5 Chương trình thực thi (25)
      • 3.1.6 Sơ đồ kết nối giao diện (26)
    • 3.2 Khối Advanced Peripheral bus (APB) (28)
      • 3.2.1 Tổng quan (28)
      • 3.2.2 Sơ đồ kết nối (28)
      • 3.2.3 Chức năng (29)
    • 3.3 Khối Control and status register (CSR) (32)
      • 3.3.1 Tổng quan (32)
      • 3.3.2 Sơ đồ kết nối (32)
      • 3.3.3 Chức năng (33)
    • 3.4 Khối Sequencer (34)
      • 3.4.1 Tổng quan (34)
      • 3.4.2 Sơ đồ kết nối (35)
      • 3.4.3 Chức năng (36)
    • 3.5 Khối Pattern Generator (53)
      • 3.5.1 Tổng quan (53)
      • 3.5.2 Sơ đồ kết nối (54)
      • 3.5.3 Chức năng (55)
    • 3.6 Khối DLL Communication (57)
      • 3.6.1 Tổng quan (57)
      • 3.6.2 Sơ đồ kết nối (58)
      • 3.6.3 Chức năng (59)
    • 3.7 Khối Comparator (61)
      • 3.7.1 Tổng quan (61)
      • 3.7.2 Sơ đồ kết nối (61)
      • 3.7.3 Chức năng (62)
    • 3.8 Khối Asynchronous FIFO (63)
      • 3.8.1 Tổng quan (63)
      • 3.8.2 Sơ đồ kết nối (64)
      • 3.8.3 Chức năng (64)
  • CHƯƠNG 4 KẾT QUẢ & ĐÁNH GIÁ (66)
    • 4.1 Xác minh thiết kế (66)
      • 4.1.1 Môi trường kiểm thử (66)
      • 4.1.2 Kịch bản kiểm thử (0)
      • 4.1.3 Kết quả kiểm thử (68)
    • 4.2 Thiết kế synthesis/STA (70)
      • 4.2.1 Ràng buộc về thiết kế (Design Constraints) (70)
      • 4.2.2 Kết quả Synthesis (72)
      • 4.2.3 Kiểm tra chất lượng sau quá trình Synthesis (73)
    • 4.3 Thiết kế để kiểm thử (74)
      • 4.3.1 Môi trường (74)
      • 4.3.2 Quy định của thiết kế (0)
      • 4.3.3 Kết quả SCAN Insertion (76)
      • 4.3.4 Kết quả kiểm tra độ bao phủ của ATPG Stuck-at (77)
  • CHƯƠNG 5 KẾT LUẬN (78)
    • 5.1 Kết luận (78)

Nội dung

Một trong những lý do chính khiến em quyết định tập trung vào thiết kế vi mạch là do sự hấp dẫn của lĩnh vực này đến từ sự đa dạng và tính ứng dụng rộng lớn. Thiết kế vi mạch không chỉ liên quan đến việc tạo ra các linh kiện điện tử nhỏ gọn, mà còn mở ra cánh cửa cho nhiều ứng dụng khác nhau như hệ thống nhúng, thiết bị IoT1, máy tính, điện thoại di động và nhiều lĩnh vực công nghiệp khác. Sự linh hoạt và tính ứng dụng của thiết kế vi mạch là nguồn động viên lớn, giúp em cảm thấy hứng thú và đầy đủ động lực để theo đuổi đề tài này. Một lợi ích khác khi chọn đề tài thiết kế vi mạch là khả năng tiếp cận và áp dụng các công nghệ tiên tiến. Việc này đặt ra một loạt các thách thức thú vị và đòi hỏi kiến thức sâu rộng về nền tảng lý thuyết và kỹ thuật thực tế. Khả năng nắm bắt và ứng dụng những tiến bộ mới nhất trong lĩnh vực này không chỉ giúp em phát triển bản thân mình mà còn đóng góp vào sự phát triển của cộng đồng nghiên cứu và công nghiệp điện tử nói chung. Một trong những vấn đề trong quá trình truyền tải dữ liệu độ cao giữa các chip với nhau. Dữ liệu và xung clock có thể được truyền cùng một lúc giữa hai chip với nhau. Ở trạng thái tín hiệu không bị nhiễu, điểm tối ưu nhất mà khối có thể bắt được chính là ở vị trí bằng 25% chu kỳ của xung của tín hiệu clock. Hình 1.1 Điểm tối ưu khi tín hiệu không bị nhiễu Nhưng mà trong thực tế, việc trao đổi dữ liệu này có thể bị ảnh hưởng bởi nhiều yếu tố tác nhân bên ngoài như: nhiệt độ trong chip tăng, các điện áp trong chip thay đổi, thay đổi trong quá trình tính toán các tác nhân này còn được gọi là PVT (Process, Voltage, Temperature). Làm cho dữ liệu bị nhiễu, không còn chính xác và không ổn định khiến2 mẫu dữ liệu hẹp đi. Khi chip bắt những tín hiệu này xác xuất để nó bắt trúng những vùng này rất cao. Hình 1.2 Điểm tối ưu khi tín hiệu nhiễu. Vì vậy bên trong mỗi chip có một khối Delay Locked Loop (DLL) dùng để làm chậm xung clock nhằm mục đích giúp chip có thể bắt được dữ liệu một cách chính xác để tránh những ảnh hưởng từ các nhân trên. Để khối Delay Locked Loop này hoạt động cần thuật toán để vận hành. Hình 1.3 Khối Delay Locked Loop trong chip Từ đó, em quyết định chọn đề tài “Nghiên cứu huấn luyện Delay Locked Loop để lấy dữ liệu trong quá trình giao tiếp” để thiết kế hệ thống điều khiển khối Delay Locked Loop. Đây là một giải pháp nghiên cứu thực tiễn để giải quyết vấn đề nhiễu do các tác nhân như nhiệt độ, điện áp và quá trình xử lí gây ra.3 1.2 MỤC TIÊU • Thiết kế thuật toán tìm điểm tối ưu nhất trong mẫu tín hiệu dữ liệu. • Thiết kế hệ thống điều khiển khối Delay Locked Loop và áp dụng thuật toán tìm điểm tối ưu cho hệ thống này. 1.3 ĐỐI TƯỢNG, PHẠM VI NGHIÊN CỨU 1.3.1 Đối tượng nghiên cứu • Tìm hiểu về thiết kế mạch Digital design. • Tìm hiểu ngôn ngữ VerilogSystemVerilog2 cho RTL và Verification3. • Tìm hiểu về giao tiếp Advanced Peripheral Bus (APB). • Tìm hiểu về Clock domain crossing (CDC). • Tìm hiểu về Khối Delay Locked Loop (Loopback) 1.3.2 Phạm vi nghiên cứu • Ngôn ngữ TCL. • Ngôn ngữ SystemVerilog. • Công cụ Synopsys VCS® • Công cụ Design Compiler

CƠ SỞ LÝ THUYẾT

Giới thiệu về ngôn ngữ mô tả phần cứng verilog

Verilog là một ngôn ngữ mô tả phần cứng (HDL – Hardware Description Language) Được tạo ra vào những năm 1980, và đã trở thành một trong những ngôn ngữ phổ biến nhất trong ngành thiết kế VLSI(Very Large Scale Integration)[6] và FPGA(Field Programmable Gate Array)[7] Được sử dụng trong việc thiết kế các các hệ thống số, các mạch tích hợp: như bộ nhớ RAM, bộ vi xử lý hoặc đơn giản là D-FlipFlop

Ngôn ngữ Verilog có 2 dạng: Verilog HDL (Hardware Description Language) và Verilog AMS(Analog and Mixed-Signal)

- Cấu trúc: Thực hiện mô phỏng ở mức thấp( mức cổng logic), mạch tổng hợp chính xác

- Luồng dữ liệu: Đầu ra phụ thuộc đầu vào (thường dùng từ khóa assign) Mô tả chính xác hầu như mọi trường hợp

- Hành vi: Chỉ mô tả chức năng của mạch Mức hành vi mô tả một hệ thống số bằng những thuật toán (một số lệnh giống ngôn ngữ C như: if, case, for, while…) Mạch khó tổng hợp chính xác (dùng từ khóa always @)

- HDL là ngôn ngữ mô tả phần cứng không phải là ngôn ngữ lập trình

- Một điều khác giữa Verilog và C/C++ là không những Verilog thực hiện tuần tự mà còn thực hiện song song

- Nền tảng mạnh: chuẩn hóa năm 1995 bởi IEEE[8], hỗ trợ công nghiệp, phổ biến cho các nhà ASIC vì dễ học, cho phép mô phỏng và tổng hợp hiệu quả

- Tính đa năng: cho phép quá trình thiết kế thực hiện trong môi trường thiết kế cả phân tích và kiểm tra

- Hỗ trợ công nghiệp: phổ biến cho các nhà thiết kế ASIC vì dễ học, cho phép mô phỏng nhanh và tổng hợp hiệu quả

- Có khả năng mở rộng IEEE Std 1364 chứa định nghĩa của PLI Verilog (Programming Language Interface) cho phép mở rộng khả năng của Verilog Nó là một tập hợp các bộ định tuyến cho phép các chức năng bên ngoài truy nhập thông tin chức năng thiết kế Verilog

Giới thiệu về giao tiếp Advanced Peripheral bus (APB)

Advanced Peripheral Bus[8] là một loại giao diện được sử dụng trong các hệ thống SoC (System-on-Chip), nơi nhiều thành phần ngoại vi khác nhau được tích hợp trên một vi mạch duy nhất APB thường được sử dụng để kết nối và điều khiển các vi mạch ngoại

- Mức độ tiêu thụ năng lượng thấp

- Đơn giản và dễ dàng sử dụng

- Có thể tương thích với nhiều giao diện khác như:giao diện AMBA Advanced High

- performance bus lite (AHB-Lite) và giao diện AMBA Advanced Extensible interface (AXI)

Hình 2.1 FSM của AMBA3 APB

Giao tiếp APB có chế độ hoạt đông như sau:

- IDLE : Trạng thái ban đầu của APB

- SETUP: Khi có yêu cầu từ người dùng, chuyển sang trạng thái SETUP

- ACCESS: Bắt đầu đọc và viết vào các thiết bị trong hệ thống

Giới thiệu về clock domain crossing (CDC)

2.3.1 Clock Domain Crossing (CDC) là gì?

Clock Domain Crossing[9] là việc truyền tín hiệu từ miền đồng hồ này sang miền đồng hồ khác Nếu hai miền đồng hồ này khác tần số với nhau, tạo ra nhiều vùng tần số khác nhau trong 1 chip dẫn đến tình trạng không đồng bộ

Hình 2.2 Clock domain crossing (CDC)

− Metasbility: Khi một tín hiệu chuyển từ một nguồn tần số này sang một nguồn tần số khác Sẽ xảy ra trạng thái không ổn đinh như tín hiệu ở trạng thái logic này sang trạng thái logic khác hoặc ở trạng thái lơ lửng trong một khoảng thời gian ngắn

− Vi phạm Setup và hold time: ảnh hưởng tới việc lấy mấu của tín hiệu ở flip-flop trong hệ thống số

− Độ lệch: Sự chênh lệch giữa các tín hiệu clock trong các domain khác nhau có thể dẫn điến vấn đề lệch, làm tăng khả năng xảy ra metastability

- Double-Registering: sử dụng 2 flip flop để lấy mẫu tín hiệu khi chuyển từ domain này sang domain khác, giúp giảm nguy cơ metastability

- FIFO (First In - First Out): Sử dụng bộ đệm FIFO để làm giảm những ảnh hưởng về thời gian, cung cấp thêm thời gian cho tín hiệu để ổn định

- Handshaking Protocols: Sử dụng các giao thức giao tiếp giữa các miền để đảm bảo đồng bộ và tránh các vấn đề về thời gian.

Giới thiệu tổng quan về khối Loopback

2.4.1 Tại sao sử dụng khối Loopback?

Khi thiết kế chip chúng ta khó để có thể thể ghép 2 chip lại với nhau để kiểm tra xem hệ thống đã hoạt động ổn định hay chưa vì những nguyên nhân sau:

- Không thể kiểm soát được độ nhiễu giữa việc giao tiếp của 2 chip để sử dụng cho kiểm thử

- Tốn chi phí và quá trình để làm ra chip để kiểm thử vì để tạo ra chip thì trải qua nhiều công đoạn sản xuất chưa kết thời gian in chip

- Trong quá trình kiểm tra nếu chúng ta kiểm thử bằng việc sử dụng 2 hệ thống giống nhau để kiểm tra, sẽ tốn thời gian và tài nguyên mặt khác trong quá trình chúng ta kiểm thử, dữ liệu trao đổi có thể bị nhiễu và chúng ta không thể kiểm soát được việc nhiễu đó

Vì vậy, chúng ta thay thế việc đó bằng khối Loopback để thuận tiện hơn trong việc giao tiếp và truyền nhận dữ liệu, sẽ không có sinh ra hiện tượng nhiễu giúp chúng ta có thể kiểm tra hệ thống chính xác hơn

2.4.2 Tổng quan về Khối Loopback

Khối Loopback được kết nối với khối DLL Training nằm mục đích nhận giá trị độ trễ từ đó khối DLL sẽ điều chỉnh tín hiệu xung Mặt khác trong đường giá trị dữ liệu, chúng ta có thể tùy chỉnh độ nhiễu của dữ liệu tùy theo mong muốn của chúng ta nhằm mục đích kiểm thử hệ thống

Hình 2.3 Khối Loopback kết nối khối DLL Training

- Khối RX Data: Điều chỉnh độ nhiễu của đường dữ liệu

- Khối DLL CTL: Nhận tín hiệu giá trị độ trễ từ khối DLL Communication để làm trễ tín hiệu ra RX Clock

Bảng 2.1 Kết nối của khối LOOPBACK

Tên Pin Loại Xung Độ lớn Mô Tả

LOOPBACK rx_clk output clk 1 Tín hiệu tx clock rx_data output clk 2 Dữ liệu TX csr_dly_code_left input clk 6 Giá trị độ trễ bắt đầu từ cạnh trái csr_dly_code_right input clk 6 Giá trị độ trễ bắt đầu từ cạnh phải csr_dly_code_step input clk 5 Giá trị độ trễ mỗi bước thực hiện dly_done output clk 1 Tín hiệu hoàn thành DLL CTL đã thực hiện xong dly_en input clk 1 Tín hiệu bật khối DLL CTL tx_clk input clk 1 Tín hiệu tx clock tx_data input clk 2 Dữ liệu TX

THIẾT KẾ

Giới thiệu tổng quan về thiết kế

3.1.1 Tổng quan sơ đồ khối và chức năng của thiết kế

Em đã xây dựng hệ thống bao gồm 3 khối chính:

- Khối APB CTL: Giao tiếp giữa người dùng và hệ thống

- Khối CSR CTL: Lưu trữ dữ liệu trong hệ thống

- Khối DLL Training: Khối thực thi thuật toán tìm điểm tối ưu và ổn định dữ liệu nhất

3.1.2 Thông số của hệ thống:

Hệ thống em thiết kế có thông số như sau:

- Tần số lớn nhất của xung chính : 2 GHz

- Tần số lớn nhất của xung APB : 250 MHz

- Tần số lớn nhất của xung SCAN : 50 MHz

- Giao tiếp với người dùng : AMBA 3 APB protocol.[10]

- Thiết kế để kiểm thử : Có

3.1.3 Thuật toán tìm điểm tối ưu

Hệ thống chung tối sử dụng thuật toán như sau:

Hình 3.2 Điểm tối ưu trong mắt dữ liệu

- Bắt đầu khởi tạo độ trễ DLL từ 1 điểm ở phía bên trái

- Khởi tạo giá trị ở chân TX, và bắt giá trị tại chân RX

- Kiểm tra xem giá trị tại chân RX có đúng như mong đợi hoặc không

- Nếu giá trị không như mong đợi, tăng độ trễ DLL lên và lặp lại đến khi nào đúng thì dừng lại Khi đó chúng ta có giá trị cạnh bên trái

- Bắt đầu khởi tạo độ trễ DLL từ 1 điểm ở phía bên phải

- Khởi tạo giá trị ở chân TX, và bắt giá trị tại chân RX

- Kiểm tra xem giá trị tại chân RX có đúng như mong đợi hoặc không

- Nếu giá trị không như mong đợi, giảm độ trễ DLL lên và lặp lại đến khi nào đúng thì dừng lại Khi đó chúng ta có giá trị cạnh bên phải

• Điểm tối ưu được tính từ giá trị trung bình của 2 cạnh

3.1.4 Chức năng của hệ thống

Khối DLL Training bao gồm các khối con dưới đây:

Hình 3.3 Khối chức năng chính

Hệ thống có 5 chức năng chính, mỗi chức năng có 8 bits với độ lớn của bộ nhớ là 4 bits Bảng dưới đây, em đã sử dụng bit[7:6] để định nghĩa các chức năng

Bảng 3.1 Cấu trúc và chức năng các lệnh

BURST 0 0 DLL_EN DLL_DIR CYC[3:0]

FLUSH 1 0 DLL_EN DLL_DIR CYC[3:0]

MISC 1 1 END INIT/WAITn CYC[3:0]

- DLL_EN: Điều khiển khối DLL communication

- DLL_DIR: Điều khiển hướng của độ trễ DLL

- CYC: chu kì của hệ thống

- FLAG: Điều khiển chế độ của JMPIF

- END: Điều khiển tín hiệu Dừng chương trình

- INT: Chế độ khởi tạo giá trị

3.1.5 Chương trình thực thi Để quá trình thực thi được chính xác em đã thiết kế chương trình thực thi Chương trình thực thi bao gồm các lệnh có trong Train_program[16][8] Dưới đây là chương trình thực thi của:

Hình 3.4 Chương trình thực thi

Quá trình chương trình thực thi:

1) MISC_INIT: Cho phép khối Pattern Generator đọc giá trị csr_prbs_seed

2) FLUSH_INCR: Cho phép khối DLL Communication đọc giá trị độ trễ từ thanh ghi csr_dly_code_left và csr_dly_code_step

3) FLUSH: Xóa cờ so sánh, xóa toàn bộ dữ liệu trong khối FIFO

4) BURST_INCR: Cho phép khối Pattern Generator đưa dữ liệu qua khối

Loopback và dữ liệu được khối DLL CTL thay đổi độ trễ và làm dữ liệu nhiễu Sau đó dữ liệu được khối Comparator so sánh và đưa ra cờ match Nếu match 1 thì tăng độ trễ lên 1 UI, không thì tăng độ trễ dựa vào giá trị csr_dly_code_step

5) JUMPIF_FALLING: Nếu match = 1 thì thông báo đọc địa chỉ kế tiếp, không thì nhảy đến địa chỉ 4’b0010 dựa và thực thi lệnh đó Lặp lại vòng lặp trên đến khi nào match = 1

6) FLUSH: Xóa cờ so sánh, xóa toàn bộ dữ liệu trong khối FIFO

7) BURST_INCR: Cho phép khối Pattern Generator đưa dữ liệu qua khối

Loopback và dữ liệu được khối DLL CTL thay đổi độ trễ và làm dữ liệu nhiễu

Sau đó dữ liệu được khối Comparator so sánh và đưa ra cờ match Nếu match 1 thì tăng độ trễ lên 1 UI, không thì giảm độ trễ dựa vào giá trị csr_dly_code_step

8) JUMPIF_FALLING: Nếu match = 1 thì thông báo đọc địa chỉ kế tiếp, không thì nhảy đến địa chỉ 4’b0101 dựa và thực thi lệnh đó Lặp lại vòng lặp trên đến khi nào match = 1

9) MISC_END: Kết thúc chương trình

Dưới đây là quá trình thực thi lệnh:

Hình 3.5 Quá trình thực thi

3.1.6 Sơ đồ kết nối giao diện

Bảng 3.2 Sơ đồ chân của thiết kế

Tên Pin Loại Xung Kích thước

CTL Interface Ports clk input _ 1 Tín hiệu tần số 2GHz cho thiết kế rst_n input async 1 Reset không đồng bộ, hoạt động ở mức thấp train_en input clk 1 Bật chế độ training, hoạt động ở mức cao train_program

[15:0][7:0] input clk 128 Chương trình huấn luyện train_done output clk 1 Tín hiệu chương trình đã training xong train_error output clk 1 Tín hiệu chương trình bị lỗi

Loopback Function Connection rx_clk input clk 1 Tín hiệu rx clock rx_data input clk 2 Dữ liệu RX csr_dly_code_left input clk 6 Giá trị độ trễ bắt đầu từ cạnh trái

14 csr_dly_code_right input clk 6 Giá trị độ trễ bắt đầu từ cạnh phải csr_dly_code_step input clk 5 Giá trị độ trễ mỗi bước thực hiện csr_prbs_seed input clk 16 Giá trị khởi tạo cho khối Pattern

Generator dly_done input clk 1 Tín hiệu hoàn thành DLL CTL đã thực hiện xong dly_en output clk 1 Tín hiệu bật khối DLL CTL tx_clk output clk 1 Tín hiệu tx clock tx_data output clk 2 Dữ liệu TX csr_dly_code_strb output Clk 1 Tín hiệu cho phép ghi dữ liệu từ khối nội bộ csr_dly_code_hw output clk 6 Giá trị độ trễ từ khối nội bộ

APB CTL Ports pclk input _ 1 Tín hiệu tần số 250MHz cho khối

APB Controller presetn input async 1 Reset không đồng bộ, hoạt động ở mức thấp cho khối APB paddr input pclk 5 Địa chỉ ô nhớ để đọc và ghi giá trị pwrite input pclk 1 Tín hiệu này hiển thị quyền truy cập ghi vào ô nhớ Hoạt động ở mức cao psel input pclk 1 Tín hiệu chọn, chọn nhận biết được các lần đọc và ghi giá trị penable input pclk 1 Tín hiệu cho phép hoạt động của

APB pwdata input pclk 32 Tín hiệu ghi giá trị vào CSR prdata output pclk 32 Tín hiệu đọc giá trị từ CSR pready output pclk 1 Tín hiệu này để kéo dài quá trình truyền APB

SCAN Ports scan_clk input _ 1 Tín hiệu tần số 50MHz cho khối

SCAN Controller scan_rst input async 3 Reset không đồng bộ, hoạt động ở mức thấp cho chân SCAN scan_mode input scan_clk 1 Chế độ Scan scan_en input scan_clk 3 Bật chế dộ scan scan_in input scan_clk 3 Giá trị đầu vào của ATPG scan scan_out output scan_clk 3 Giá trị đầu ra của ATPG scan

Khối Advanced Peripheral bus (APB)

Bộ điều khiển APB được sử dụng để điều khiển sự tương tác giữa người dùng và các thanh ghi CSR Người dùng có thể truy cập vào các thanh ghi CSR để định cấu hình giá trị DLL thông qua các cổng APB và truy cập trực tiếp bằng khối APB Khối APB sử dụng clk là tần số của hệ thống và pclk để tương tác với người dùng Em đã sử dụng kỹ thuật handshake để đồng bộ 2 nguồn tần số tránh hiện tượng CDC

Dưới đây là chức năng của các khối sub-APB :

- Request: o Khối Request sẽ gửi tín hiệu yêu cầu khi ngườssi dùng muốn tương tác với các thanh ghi CSR o Sau khi nhận được tín hiệu xác nhận, khối này kết thúc tín hiệu yêu cầu và xác nhận tín hiệu sẵn sàng cho giao dịch tiếp theo

- Acknowledgement: o Khi nhận được tín hiệu yêu cầu từ khối yêu cầu, khối này sẽ đưa giá trị vào hoặc lấy giá trị ra từ các thanh ghi trong khối CSR o Sau khi hoàn thành đọc hoặc ghi, tín hiệu xác nhận sẽ được bật

Bảng 3.3 Sơ đồ chân của khối APB

Tên Pin Loại Xung Kích thước

APB CTL Ports clk Input _ 1 Tín hiệu tần số 2GHz của thiết kế rst_n Input async 1 Reset không đồng bộ, hoạt động ở mức thấp pclk Input _ 1 Tín hiệu tần số 2GHz của khối APB presetn Input async 1 Reset không đồng bộ của khối APB, hoạt động ở mức thấp

16 paddr Input pclk 5 Địa chỉ thanh ghi để đọc và ghi giá trị pwrite Input pclk 1 Tín hiệu này hiển thị quyền truy cập ghi vào ô nhớ Hoạt động ở mức cao psel Input pclk 1 Tín hiệu chọn, nhân biết được các lần đọc và ghi giá trị của mỗi lần truyền penable Input pclk 1 Tín hiệu cho phép hoạt động của APB pwdata Input pclk 32 Tín hiệu ghi giá trị vào CSR prdata Output pclk 32 Tín hiệu đọc giá trị vào CSR pready Output pclk 1 Tín hiệu này để kéo dài quá trình truyền APB

CSR Interaction Ports addr Output clk 5 Địa chỉ của thanh ghi của khối CSR rnw Output clk 1 Tín hiệu chỉ đọc wdata Output clk 32 Giá trị của APB ghi vào CSR en Output clk 1 Tính hiệu cho phép quá trình gia tiếp rdata Input clk 32 Giá trị của APB đọc vào CSR

Hình 3.7 Các khối con trong khối Request

- Tín hiệu psel phải được bật trước khi tín hiệu penable để khối Request có thể hoạt động đúng

- Từ người dùng bật tín hiệu psel và bật tín hiệu penable và req_int trong chu kì kế tiếp Thiết kế không áp dụng cho trường hợp psel và penable hoạt động sai cách

- Khối Request nhận tín hiệu và đồng bộ tín hiệu ack_int

- Nếu tín hiệu ack_syn = 1, thì tắt tín hiệu req_int và nếu tín hiệu ack_syn = 0 thì bật tín hiệu pready

- Khi tín hiệu pready = 1, quá trình ghi dữ liệu hoàn thành hoặc quá trình đọc dữ liệu được hiển thị tại chân prdata Tín hiệu pready = 1 chỉ trong 1 chu kì

Hình 3.8 Waveform khi ghi giá trị

- Khi bắt đầu quá trình ghi thì địa chỉ thanh ghi, giá trị, tín hiệu được chọn sẽ thay đổi sau cạnh tăng của chu kì

- Khi tín hiệu penable = 0 vào cuối quá trình sau khi pready = 1 trong 1 chu kì Tín hiệu psel = 0 trừ khi quá trình được xảy ra ngay lập tức sau khi người dùng sử dụng cùng một tính hiệu ngoại vi

Hình 3.9 Waveform khi đọc giá trị

Hình 3.10 Các khối con trong khối ACK

- Khối Acknowledgement nhận và đồng bộ tín hiệu req_int

- Nếu tín hiệu syn_req = 1, thì khối acknowledgement sẽ bật tín hiệu ce để bắt các giá trị, nếu tín hiệu ack_int = 0, khối này sẽ tắt tín hiệu ce

Hình 3.11 Waveform khối thực thi yêu cầu

Khối Control and status register (CSR)

Khối thanh ghi CSR được sử dụng để lưu trữ các cấu hình của hệ thống Những thanh ghi được sử dụng để chỉnh sửa giá trị cho từng chế độ và lưu trữ những giá trị đó để gỡ lỗi cho chương trình

Những thanh ghi CSR được truy cập bởi người dùng thông qua các chân APB

Hình 3.12 Top-level của thiết kế

Bảng 3.4 Sơ đồ chân của khối CSR

Tên Pin Loại Xung Kích thước

CSR Ports clk Input _ 1 Tín hiệu tần số 2GHz của thiết kế rst_n Input Async 1 Reset không đồng bộ, hoạt động ở mức thấp

APB CTL Interaction Ports en Input clk 1 Tính hiệu cho phép quá trình gia tiếp addr Input clk 5 Địa chỉ của thanh ghi của khối

CSR rnw Input clk 1 Tín hiệu chỉ đọc wdata Input clk 32 Giá trị của APB ghi vào CSR rdata Output clk 32 Giá trị của APB đọc vào CSR

DLL Training Interaction Ports csr_dly_code_left Input clk 6 Giá trị độ trễ bắt đầu từ cạnh trái csr_dly_code_right Input clk 6 Giá trị độ trễ bắt đầu từ cạnh phải

20 csr_dly_code_step Input clk 6 Giá trị độ trễ mỗi bước thực hiện csr_prbs_seed Input clk 6 Giá trị khởi tạo cho khối Pattern

Generator csr_dly_code_ledg e_ro

Output clk 6 Giá trị độ trễ cạnh trái của mắt dữ liệu Chỉ đọc csr_dly_code_redg e_ro

Output clk 6 Giá trị độ trễ cạnh phải của mắt dữ liệu Chỉ đọc csr_dly_code_train

Output clk 6 Giá trị độ trễ điểm tối ưu của mắt dữ liệu Chỉ đọc csr_train_err_code

Output clk 2 Tín hiệu khi không thể tìm được cạnh phải hoặc cạnh trái của mắt dữ liệu

• 0b00: Không thể tìm mắt data trên 1 kênh

• 0b01: Không thể tìm mắt data lớn hơn 1 kênh

Các thanh ghi trong khối CSR chia làm 2 loại: Chỉ đọc (RO) và đọc viết (RW)

- Chỉ đọc (RO): là những thanh ghi có thể đọc từ các cổng APB

- Đọc viết (RW): là những thanh ghi có thể đọc và viết từ các cổng APB

Khối DLL Training có thể đọc và viết các giá trị vào CSR thông qua các cổng bên trong thiết kế

Dữ liệu được xuất ra bị giữ lại 1 chu kì sau khi tín hiệu en = 1 Đầu vào của trường hợp này có thể lấy từ các tính hiệu nội bộ

Hình 3.14 Khối Read and Write

Dữ liệu có thế được ghi vào thanh ghi từ 2 nguồn là người dùng và tín hiệu nội bộ

Bảng 3.5 Thanh ghi trong CSR

Thanh ghi Loại Mô tả dly_code_left[4:0] RW Độ trễ khi bắt đầu train từ cạnh trái dly_code_right[4:0] RW Độ trễ khi bắt đầu train từ cạnh phải dly_code_step[4:0] RW Độ trễ mỗi bước prbs_seed[16:0] RW Giá trị khởi tạo dữ liệu cho khối Pattern Generator train_err_code[1:0] RO Tín hiệu khi không thể tìm được cạnh phải hoặc cạnh trái của mắt dữ liệu

• 0b00: Không thể tìm mắt data trên 1 kênh

• 0b01: Không thể tìm mắt data lớn hơn 1 kênh

• 0b11: Lỗi Khác dly_code_ledge[4:0] RO Độ trễ khi đã tìm được mắt dữ liệu bên trái dly_code_redge[4:0] RO Độ trễ khi đã tìm được mắt dữ liệu bên phải dly_code_train[4:0] RO Giá trị độ trễ tối ưu nhất.

Khối Sequencer

Khối Sequencer được sử dụng để điều khiển quá trình huấn luyện trong thiết kế

Khối Sequencer có 5 khối bao gồm: pAddr, OPFSM, Error, CTLFSM, Counter

Hình 3.15 Tổng quan khối Sequencer

Chức năng của các khối như sau:

- Khối OPFSM : Điều khiển hoạt động trong khối Sequencer

- Khối CTLFSM: Điều khiển các lệnh và giữ các tín hiệu cho các khối xử lí hoạt động

- Khối pAddr: Điều khiển các thanh ghi để đọc các lệnh từ program

- Khối Counter: Bộ đếm để xử lí các chu kì có trong hệ thống

- Khối Error: Xử lí nhận biết các khối bị lỗi và lưu trữ lỗi đó vào thanh ghi CSR 3.4.2 Sơ đồ kết nối

Bảng 3.6 Sơ đồ chân kết nối của khối Sequencer

Tên Pin Loại Xung Mô tả

CTL INTERFACE PORTS clk input Tín hiệu tần số 2GHz của hệ thống rst_n input Async Reset không đồng bộ, hoạt động ở mức thấp program[15:0][7:0] input clk Chương trình train train_en input clk Tín hiệu bật quá trình train train_done output clk Tín hiệu thông báo quá trình train đã hoàn tất train_error output clk Tín hiệu thông báo lỗi trong quá trình train

CTL FUNCTION BLOCK INTERFACE PORT seq_gen_en output clk Tín hiệu cho phép hoạt động khối Pattern

Generator seq_dll_en output clk Tín hiệu cho phép hoạt động khối DLL communication seq_dll_init ouput clk Tín hiệu cho phép đọc giá trị từ thanh ghi

CSR của khối DLL communication

3.4.3.1 Khối The Operation FSM (OPFSM) a) Tổng quan

Khối The Operation FSM (OPFSM) được sử dụng trong thiết kế để điểu khiển khối CTLFSM để tìm điểm tối ưu và khối Address Pointer để đọc chương trình seq_dll_dir ouput clk Tín hiệu điều hướng độ trễ cho khối DLL communication

• 0: từ phải sang trái seq_dll_strb output clk Tín hiệu cho phép ghi giá trị vào thanh ghi

CSR của khối DLL communication seq_dll_jump output clk Tín hiệu cho phép tăng độ trễ giá trị lên 1UI

= 32 step của khối DLL communication seq_dll_done input clk Tín hiệu xác nhận giá trị độ trễ đã được áp dụng seq_dll_error input clk Tín hiệu thông báo lỗi của khối DLL communication seq_cmp_en output clk Tín hiệu cho phép hoạt động của khối

Comparator seq_cmp_flush output clk Tín hiệu cho phép xóa cờ và dữ liệu của khối Comparator Hoạt động tại mức cao seq_cmp_match input clk Tín hiệu cho biết dữ liệu có trung hay không của khối Comparator seq_cmp_empty input clk Tín hiệu cho biết dữ liệu có bên trong ô nhớ

FIFO của khối Comparator seq_cmp_fail[1:0] input clk Tín hiệu thông báo lỗi từ khối Comparator:

• 00: Sai 2 lane seq_cmp_done input clk Tín hiệu xác nhận khối Comparator đã thực hiện xong seq_cmp_init output clk Tín hiệu cho phép khối Comparator reset

CSR PORTS csr_train_err_ code_ro[1:0] output clk Tín hiệu khi quá trình train gặp lỗi

Hình 3.16 Sơ đồ khối Sequencer

Dưới đây là các trạng thái của khối The Operation FSM (OPFSM)

Hình 3.17 Sơ đồ trạng thái của khối Sequencer

Các chức năng có trong khối OPFSM:

- IDLE: Trạng thái ban đầu của OPFSM

- INIT: Khi tín hiệu train_en được bật, thì tín hiệu init sẽ bật trong 1 chu kì

- RUN: Đọc và thực thi các lệnh có trong chương trình

- CMD DONE: tín hiệu done được bật nếu lệnh đã được thực thi xong Nếu cờ done không được trả về tại trạng thái RUN thì tín hiệu error_en sẽ được bật và chuyển sang trạng thái ERROR

- ERROR: Khi tín hiệu error_en được bật, lưu trữ lỗi vào thanh ghi trong CSR và chuyển sang chế độ END_PROGRAM

- END PROGRAM: Nếu tín hiệu end được bật, xuất ra tính hiệu train_done b) Sơ đồ kết nối

Bảng 3.7 Sơ đồ chân khối Sequencer

Tên Pin Loại I/O Xung Mô tả

CTL INTERFACE PORTS clk input Tín hiệu tần số 2GHz của hệ thống rst input Async Reset không đồng bộ, hoạt động ở mức thấp train_en input clk Tín hiệu bật quá trình train train_done output clk Tín hiệu thông tháo quá trình train đã hoàn tất train_error output clk Tín hiệu thông báo lỗi trong quá trình train CTL FSM PORTS done input clk Tín hiệu xác nhận các lệnh đã thực hiện xong jmp_ok input clk Tín hiệu xác nhận cho phép nhảy địa chỉ thanh ghi

• 0 : Cho phép tăng 1 bit misc_end input clk Tín hiệu thông báo dừng chương trình misc_en output clk Tín hiệu cho phép khối MISC hoạt động flush_en ouput clk Tín hiệu cho phép khối FLUSH hoạt động jmp_en ouput clk Tín hiệu cho phép khối JUMPIF hoạt động burst_en output clk Tín hiệu cho phép khối BURST hoạt động pAddr PORTS cmd_en [1:0] input clk Lệnh thực thi

• 11 : Lệnh MISC p_incr output clk Tín hiệu cho phép tăng địa chỉ p_jmp output clk Tín hiệu cho phép nhảy địa chỉ

ERORR PORTS error_end input clk Tín hiệu dừng chương trình khi gặp lỗi

GENARATOR PORT init output clk Tín hiệu khởi tạo giá trị PRBS cho khối

3.4.3.2 Khối Address Pointer (pAddr) a) Tổng quan

Khối Address Pointer (pAddr) được sử dụng để đọc các lệnh có trong các ô nhớ ở cổng Program

- Khối ADD: Tín hiệu của thanh ghi DFF cộng với p_incr giúp tăng giá trị của tín hiệu lên 1 bit

- Khối SELECTOR: Chọn tín hiệu đầu vào từ khối ADD và tín hiệu jmp_addr

• p_incr = 1, lấy tín hiệu từ khối ADD

• p_jmp = 1, lấy tín hiệu jmp_addr

- Khối DFF: Lưu trữ dữ liệu và cập nhật dữ liệu theo cạnh lên của tín hiệu clk

- Khối MUX: Chọn lệnh thực thi có trong program dựa theo giá trị đầu ra của DFF

- Khối FF-MUX-OUT: Giúp tín hiệu được ổn định trước khi sử dụng

Hình 3.18 Sơ đồ khối Address Pointer b) Sơ đồ kết nối

Bảng 3.8 Sơ đồ chân khối Address Pointer

Tên Pin Loại I/O Xung Mô tả

CTL INTERFACE PORTS clk input Tín hiệu tần số 2GHz của hệ thống rst input async Reset không đồng bộ, hoạt động ở mức thấp program[15:0][7:0] input clk Chương trình train

Slave FSM PORTS jmp_addr[3:0] input clk Địa chỉ thanh ghi nhảy tới cmd[5:0] output clk Lênh điều khiển

OPFSM PORTS cmd_en[1:0] input clk Lên thực thi

• 11 : Lệnh MISC p_incr input clk Tín hiệu cho phép tăng p_jmp input clk Tín hiệu cho phép nhảy

Khối Error được sử dụng để xử lí khi có lỗi trong quá trình hoạt động và lưu các lỗi đó vào thanh ghi có trong CSR

Hình 3.19 Sơ đồ khối Error b) Sơ đồ kết nối

Bảng 3.9 Sơ đồ chân khối Error

Tên Pin Loại I/O Xung Mô tả

COUNTER PORTS clk input Tín hiệu tần số 2GHz của hệ thống rst_n input clk Reset không đồng bộ, hoạt động ở mức thấp burst_error_en input clk Lỗi từ khối BURST jmp_error_en input clk Lỗi từ khối JUMPIF burst_error[1:0] input clk Loại lỗi từ khối BURST error_end output clk Tín hiệu dừng chương trình csr_train_err_ code_ro[1:0] output clk Tín hiệu ghi loại lỗi vào thanh ghi trong CSR

Khối Counter được sử dụng để đếm số chu kì của chương trình, khi đếm hoàn tất thông báo tín hiệu cnt_done = 1

Hình 3.20 Sơ đồ khối Counter b) Sơ đồ kết nối

Bảng 3.10 Sơ đồ chân khối Counter

Tên Pin Loại I/O Xung Mô tả

COUNTER PORTS clk input Tín hiệu tần số 2GHz của hệ thống rst_n input clk Reset không đồng bộ, hoạt động ở mức thấp cnt _en input clk Bật khối đếm cyc_time[3:0] input clk Số lần đếm cnt_done output clk Tín hiệu khi bộ đếm đã đếm hoàn tất

3.4.3.5 Khối The Control FSM (CTLFSM) a) Tổng quan

Khối The Control FSM được sử dụng để điều khiển các khối xử lí thông qua các chân tín hiệu có trong hình dưới đây

Hình 3.21 Sơ đồ khối CTLFSM

- Khối Command: sẽ bao gồm 4 khối con thực thi 4 lệnh: BURST, JUMPIF, MISC, FLUSH

- Khối Selector: sẽ đảm nhận điều hướng tín hiệu dựa theo lệnh đang thực thi b) Sơ đồ chân

Bảng 3.11 Sơ đồ chân khối CTLFSM

Tên Pin Loại I/O Xung Mô tả

OPFSM PORTS clk input Tín hiệu tần số 2GHz của hệ thống rst_n input clk Reset không đồng bộ, hoạt động ở mức thấp burst _en input clk Tín hiệu cho phép khối BURST hoạt động jmp_en input clk Tín hiệu cho phép khối JUMPIF hoạt động flush_en input clk Tín hiệu cho phép khối FLUSH hoạt động misc_en input clk Tín hiệu cho phép khối MISC hoạt động burst_done Output clk Tín hiệu thông báo khối BURST đã thực hiện xong jmp_done Ouput clk Tín hiệu thông báo khối JUMPIF đã thực hiện xong flush_done Output clk Tín hiệu thông báo khối FLUSH đã thực hiện xong misc_done Output clk Tín hiệu thông báo khối MISC đã thực hiện xong jmp_ok Output clk Tín hiệu xác nhận cho phép nhảy địa chỉ thanh ghi

• 0 : Cho phép tăng 1 bit misc_end Output clk Tín hiệu dừng chương trình

ERROR PORTS jmp_error output clk Tín hiệu thông báo lệnh JUMPIF lỗi burst_error[1:0] output clk Tín hiệu thông báo loại lỗi của lệnh BURST burst_error_en output clk Tín hiêu thông báo lệnh BURST lỗi

FUNCTION BLOCK PORTS seq_dll_dir output clk Tín hiệu điều hướng độ trễ cho khối DLL

Communication seq_dll_init output clk Tín hiệu cho phép đọc giá trị từ thanh ghi

CSR của khối DLL Communication seq_dll_en output clk Tín hiệu cho phép khối DLL communi- cation hoạt động seq_dll_strb output clk Tín hiệu cho phép ghi giá trị vào thanh ghi

CSR của khối DLL communication seq_dll_jump output clk Tín hiệu cho phép tăng độ trễ giá trị lên 1 UI

= 32 Step của khối DLL Communi-cation seq_dll_done input clk Tín hiệu xác nhận giá trị độ trễ đã được áp dụng seq_dll_error input clk Tín hiệu thông báo của khối DLL comm- unication seq_cmp_done input clk Tín hiệu xác nhận khối Comparator đã được thực hiện xong seq_cmp_match input clk Tín hiệu cho biết dữ liệu có trùng hay không của khối Comparator seq_data_fail[1:0] input clk Tín hiệu thông báo lỗi

- 00: Sai 2 kênh. seq_cmp_flush output clk Tín hiệu cho phép xóa cờ và dữ liệu của khối

Khối Pattern Generator

Khối Pattern Generator được sử dụng để khởi tạo dữ liệu và điều khiển xung Khối Comparator sẽ điều khiển phiên khối Pattern Generator thứ 2 để tạo dữ liệu dự kiến cho mục đích so sánh Em sử dụng LFSR (Linear Feedback Shift Register) để tạo dữ liệu cho 1 kênh và lấy giá trị nghịch đảo cho kênh còn lại

Hình 3.30 Sơ đồ khối Pattern Generator

Dưới đây là chức năng của các khối con:

- PRBS-1: Sau khi đọc dữ liệu từ thanh ghi csr_prbs_seed trong CSR Khi en_tx được bật khối này sẽ khởi tạo dữ liệu tx_data

- PRBS-2: Khi ren = 1 Khối này sẽ khởi tạo dữ liệu exp_data

- Gatting cell: Khởi tạo xung tx_clk cho cổng TX khi en_tx được bật tx_clk được khởi tạo cùng thời điểm với tx_data

Bảng 3.16 Sơ đồ chân khối Pattern Generator

Tên Pin Loại I/O Xung Mô tả

CTL Interface Ports clk input _ 1 Tín hiệu tần số 2GHz cho Hệ thống rst_n input async 1 Reset không đồng bộ, hoạt động ở mức thấp

Sequencer Interaction Ports init_en input clk 1 Tín hiệu cho phép đọc giá trị từ thanh ghi csr_prbs_seed trong khối CSR en_tx input clk 1 Tín hiệu cho phép truyền giá trị ra TX flush_clear input clk 1 Tín hiệu xóa tx_data và exp_data

Loopback Interaction Ports tx_clk output clk 1 Tín hiệu xung TX tx_data output clk 2 Giá trị TX

42 csr_prbs_seed input clk 16 Giá trị PRBS_SEED

Comparator Interaction Ports ren input clk 1 Bật khối Pattern Generator 2 exp_data output clk 2 Giá trị quy chiếu

3.5.3.1 Khối PRBS (Pseudorandom binary sequence)

Em đã thiết kế khối PRBS sử dụng thuật toán LFSR trong đó giá trị tại các thanh ghi [16, 13, 11, 1] được tổng hợp và sử dụng XOR để tính toán Kết quả của thanh ghi này là đầu vào của thanh ghi khác Giá trị của thanh ghi cuối cùng là đầu ra của khối PRBS

Giá trị đầu vào của thanh ghi csr_prbs_seed không được bằng 0 Vì khối này sẽ luôn luôn đưa ra giá trị bằng 0

Hình 3.31 Sơ đồ khối sub-Pattern Generator

Hình 3.32 Sơ đồ khối điều khiển Pattern Generator

Bảng 3.17 Bảng sự thật khối Pattern Generator init_en en_tx Chức năng

0 0 Tắt khởi tạo giá trị và chặn xung

0 1 Bật khởi tạo giá trị và chặn xung

1 X Bật để đọc giá trị PRBS từ thanh ghi CSR Đầu tiên, khi nhận được tín hiệu init_en, khối Pattern Generator sẽ đọc PRBS Seed 16-bit từ CSR Sau đó, tín hiệu en_tx sẽ xác nhận, khối Pattern Generator sẽ tạo ra dữ liệu và đồng hồ kiểm soát cùng lúc

Hình 3.33 Waveform khối Pattern Generator 3.5.3.2 Khối Gating Cell

Xung tx_clk được tạo ra bất cứ khi nào khối Pattern Generator tạo ra dữ liệu Nó không chỉ giúp tiết kiệm năng lượng mà còn thông báo cho FIFO biết dữ liệu đang tạo ra

44 Để ngăn chặn sự cố của đồng hồ, em sử dụng cổng D-Latch và AND được kích hoạt ở mức độ thấp để điều khiển đồng hồ, để đảm bảo rằng xung tx_clk sẽ được tạo cùng lúc với tx_data

Hình 3.35 Waveform khối Gating cell

Khối DLL Communication

The DLL Communication được sử dụng để giao tiếp với DLL Controller ở chế độ Misson mode Khối Sequencer sẽ điều khiển khối này để đọc giá trị độ trễ từ CSR và sau đó thông báo cho DLL controller để tăng giảm giá trị độ trễ theo csr_dly_code_step

Hình 3.36 Sơ đồ khối DLL Communication

Hạn chế của dự án này là em chỉ tìm thấy cạnh dữ liệu bên trái khi nó nằm trong chu kỳ xung nhịp 50% đầu tiên Khi cạnh dữ liệu bên trái bị lệch so với phạm vi đó, khối này sẽ khẳng định cờ lỗi để thông báo rằng nó không thể tìm thấy cạnh dữ liệu

Bảng 3.18 Sơ đồ chân khối DLL Communication

Tên Pin Loại I/O Xung Tên Pin

CTL Interface Ports clk input _ Tín hiệu tần số 2GHz cho Hệ thống rst_n input async Reset không đồng bộ, hoạt động ở mức thấp

Sequencer Interaction Ports init_en input clk Tín hiệu cho phép đọc giá trị từ thanh ghi CSR dll_dir input clk Tín hiệu điều hướng

• 0: Chiều giảm dll_en input clk Tín hiệu cho phép hoạt động jump input clk Tín hiệu cho phép tăng 1 UI (+32 or -32) dựa theo dll_dir cmd_done input clk Tín hiệu lệnh thực thi xong dll_code_strb input clk Tín hiệu cho phép ghi giá trị độ trễ vào thanh ghi CSR error output clk Tín hiệu thông báo lỗi

Dll Ctl Interaction Ports dly_en output clk Tín hiệu bật khối DLL CTL

CSR Interaction Ports csr_dly_code_left[5:0] input clk Giá trị độ trễ bắt đầu từ cạnh trái csr_dly_code_right[5:0] input clk Giá trị độ trễ bắt đầu từ cạnh phải csr_dly_code_step[4:0] input clk Giá trị độ trễ mỗi bước csr_dly_code_strb output clk Tín hiệu cho phép ghi giá trị độ trễ vào thanh ghi CSR csr_dly_code_hw[5:0] output clk Tín hiệu giá trị độ trễ sau khi tăng, giảm hoặc nhảy csr_dly_code_ledge_ro[5:0] output clk Giá trị độ trễ sau khi tìm được cạnh trái csr_dly_code_redge_ro[5:0] output clk Giá trị độ trễ sau khi tìm được cạnh phải csr_dly_code_train_ro[5:0] output clk Giá trị độ trễ tối ưu

3.6.3 Chức năng Đầu tiên, giả sử rằng chương trình được cấu hình để tìm cạnh dữ liệu bên trái trước, train_en sẽ xác nhận để kích hoạt khối này Khối Sequencer xác nhận dll_init và dll_dir, sau đó Khối DLL Communication sẽ đọc độ trễ bên trái và độ trễ mỗi bước từ CSR, sau đó kích hoạt khối DLL CTL trong chế độ Mission mode

DLL communication sẽ thay đổi mã trễ dựa trên sự điều khiển của Sequencer Trong khi thay đổi mã trễ, khối này sẽ vô hiệu hóa DLL CTL, sau đó cho phép DLL CTL đọc mã trễ mới

Khối Sequencer cũng điều khiển DLL Communication để lưu độ trễ vào thanh ghi trong CSR, đồng thời mã trễ sẽ được lưu vào địa chỉ tương ứng dựa trên DLL_DIR

Khối này cũng sẽ thông báo cho Sequencer bằng cách xác nhận tín hiệu lỗi nếu dữ liệu bị sai lệch so với phạm vi yêu cầu

Hình 3.37 Sơ đồ khối sub-DLL Communication

Dưới đây là chức năng từng khối con trong DLL Communication:

- Add Code : Khối này sẽ đọc độ trễ ban đầu và độ trễ mỗi bước từ CSR o Khi init_en = 1 && dll_dir = 1, Nó sẽ đọc giá trị từ thanh ghi csr_dly_code_left và csr_dly_code_step

Sau đó dựa theo tín hiệu điều khiển từ khối Sequencer o Nếu dll_en && jump = 10: Tăng độ trễ (+ csr_dly_code_step); o dll_en && jump = 11: Tăng độ trễ lên 1 UI

47 o Khi init_en = 1 && dll_dir = 0, Nó sẽ đọc csr_dly_code_right và csr_dly_code_step o Nếu dll_en && jump = 10: Giảm độ trễ (- csr_dly_code_step); o dll_en && jump = 11: Giảm độ trễ xuống 1 UI (-1 UI)

- Enable Dly: Khi cmd_done được bật, nó sẽ tắt dly_en để dừng hoạt động khối DLL

CTL Khi cmd_done tắt, sau 1 chu kì, tín hiệu dly_en sẽ được bật

- Comparator: Khối comparator được sử dụng để kiểm tra khi độ trễ lệch quá giá trị cho phép o Tín hiệu error = 1 khi dll_dir && csr_dly_code_hw > 31 Giới hạn của độ trễ

- Store: Khi dly_code_strb = 1, DLL Communication sẽ lưu trữ dữ liệu vào thanh ghi trong khối CSR o dll_dir = 0: lưu csr_dly_code_redge_ro và csr_dly_code_train_ro o dll_dir = 1: lưu csr_dly_code_ledge_ro và csr_dly_code_train_ro

Bảng 3.19 Bảng sự thật của khối DLL Communication dll_en jump dll_dir Chức năng

1 0 1 Tăng giá trị độ trễ dựa theo độ trễ mỗi bước

1 1 1 Tăng giá trị độ trễ 1 UI (delay code + 32)

1 0 0 Giảm giá trị độ trễ dựa theo độ trễ mỗi bước

1 1 0 Giảm giá trị độ trễ 1 UI (delay code – 32)

Dưới đây là waveform khối DLL Communication

Hình 3.38 Waveform khối DLL Communication

Khối Comparator

Khối này so sánh dữ liệu từ hai nguồn khác nhau Dữ liệu đầu tiên là từ dữ liệu gốc được tạo từ khối Pattern Generator thông qua tín hiệu exp_data Dữ liệu thứ hai là tín hiệu từ chân RX tin hiệu này đã được thay đỗi độ trễ trong mô hình loopback Khối này sẽ đưa ra tín hiệu từ kết qua so sánh

Hình 3.39 Sơ đồ khối Comparator

Bảng 3.20 Sơ đồ chân khối Comparator

Tên Pin Loại I/O Xung Tên Pin

Read Interation Port clk input clk Tín hiệu tần số 2GHz cho hệ thống rst_n input async Reset không đồng bộ, hoạt động ở mức thấp cmp_en input clk Tín hiệu cho phép khối Comparator hoạt động init input clk Reset đồng bộ, hoạt động ở mức cao flush input clk Tín hiệu xóa cờ và dữ liệu trong FIFO fifo_data[1:0] input clk Đọc dữ liệu từ khối FIFO exp_data[1:0] input clk Đọc dữ liệu từ khối Pattern Generator empty input clk Tín hiệu thông báo không có dữ liệu trong

FIFO almost_empty input clk Tín hiệu thông báo dữ liệu trong FIFO sắp trống

49 ren output clk Tín hiệu cho phép lấy giữ liệu từ khối

Pattern Generator match output clk Tín hiệu thông báo dữ liệu có trùng hay không data_fail[1:0] output clk Lỗi thông báo:

- 00: Sai 2 kênh cmp_done output clk Tín hiệu thông báo khối Comparator đã thực thi xong

Khối Comparator đọc dữ liệu từ khối Comparator và khối không đồng bộ FIFO Sau khi đọc dữ liệu, nó bắt đầu so sánh dữ liệu hiện tại với dữ liệu dự kiến và xác nhận cờ (khớp và dữ liệu không thành công) Tín hiệu error sẽ biểu thị lỗi không đạt dữ liệu trên kênh 1 hoặc kênh 2

Hình 3.40 Sơ đồ trạng thái của khối Comparator

Dưới đây là các trạng thái của khối Comparator:

• IDLE: Trạng thái ban đầu của khối comparator

• READ: Khi khối Comparator được bật, khối này bắt đầu đọc dữ liệu từ khối

Pattern Generator và khối Asynchronous FIFO

• DONE: Khối này thông báo đã so sánh tất cả các dữ liệu Sau đó khởi tạo giá trị data_fail và match

Khối Asynchronous FIFO

Khối Asynchronous FIFO sử dụng thiết kế FIFO trong đó các giá trị dữ liệu được ghi vào bộ đệm FIFO từ một miền tần số và các giá trị dữ liệu được đọc từ cùng một bộ đệm FIFO từ một miền tần số khác, trong đó hai miền tần số khác nhau

Khối asynchronous FIFO sử dụng một bộ đồng bộ hóa để phát hiện các tín hiệu trống(empty) và gần như trống(almost empty)

Trong thiết kế này, giá trị empty được xác định bằng cách so sánh các con trỏ đọc và ghi Con trỏ ghi luôn trỏ đến vị trí tiếp theo sẽ được ghi; con trỏ đọc luôn trỏ đến mục FIFO hiện tại cần đọc Khi đặt lại, cả hai con trỏ đều được đặt lại về 0 FIFO trống khi hai con trỏ bằng nhau

Hình 3.42 Sơ đồ khối FIFO không đồng bộ

Bảng 3.21 Sơ đồ chân khối FIFO không đồng bộ

Pin name Direction Clock Description

Write Interface Ports wclk input Tín hiệu tần số 2GHz cho hệ thống wrst_n input async Reset không đồng bộ, hoạt động tại mức thấp wdata [1:0] input rx_clk Giá trị được ghi vào trong FIFO

Read Interaction Ports rclk input clk Tín hiệu tần số 2GHz, sau khi đi qua

LOOPBACK rrst_n input async Reset không đồng bộ, hoạt động tại mức thấp rdata [1:0] output clk Giá trị được đọc ra từ FIFO ren input clk Tín hiệu cho phép đọc rempty output clk Tín hiệu thông báo rỗng almost_rempty output clk Tín hiệu thông báo sắp rỗng init input clk Reset đồng bộ, hoạt động tại mức thấp

Em đã thiết kế hệ thống sử dụng gray code để làm con trỏ nhằm mục đích tối ưu thời gian, giúp loại bõ vấn đề thay đổi các bit cùng 1 lúc trên 1 cạnh chu kì

Bảng 3.22 Bảng sự thật khối FIFO không đồng bộ

Empty Almost Empty Chức năng

1 X Trong bộ nhớ FIFO không có dữ liệu

0 0 Dữ liệu được đọc liên tục

0 1 Dữ liệu được đọc trong 1 chu kì và đợi trong 1 chu kì Tiếp tục cho đến khi empty = 1

Khi đọc dữ liệu từ FIFO, em sử dụng tín hiệu empty Nếu tín hiệu empty = 0, có nghĩa là có dữ liệu trong bộ nhớ của khối FIFO Lúc này dữ liệu sẽ được đọc ra thông qua tín hiệu rdata

Hình 3.43 Waveform khối FIFO không đồng bộ

KẾT QUẢ & ĐÁNH GIÁ

Xác minh thiết kế

4.1.1 Môi trường kiểm thử Để kiểm thử thiết kế, em đã thiết kế mô hình kiểm thử dưới đây

Hình 4.1 Môi trường kiểm thử

Môi trường kiểm thử bao gồm:

- Test items: Những kịch bản kiểm thử có trong bảng 4.1

- DLL Training top: Thiết kế được kiểm thử

- Virtual interface: Môi trường kết nối các khối kiểm thử

- Loopback behavioral model: Thiết kế hỗ trợ cho khối chính

4.1.2 Kịch bản kiểm thử

Bảng 4.1 Kịch bản kiểm thử

Mô tả quá trình kiểm thử Kết quả

- Kiểm tra Lệnh BURST ở khối Pattern Generator có khởi tạo giá trị với tất cả trường hợp thay đổi của chu kì

- Kiểm tra Lệnh BURST ở khối DLL Comunication có thể gửi dữ liệu tới khối Loopback để tăng, giảm, nhảy, hold giá trị độ trể

- Kiểm tra Lệnh BURST ở khối Comparator có thể tìm được mắt dữ liệu Cho độ lệch mắt ngẫu nhiêu trong khoảng 24 đến 32 (2UI) Đã hoàn tất

- Kiếm tra Lệnh JUMPIF có thể nhảy hoặc tăng địa chỉ

- Kiểm tra Lệnh JUMPIF điều khiển các chế độ như: PASSING, FAILLING, PROHIBITED Đã hoàn tất

- Kiểm tra lệnh FLUSH có thể xóa dữ liệu trong khối FIFO và Khởi tạo giá trị đỗ trể ban đầu

- Kiểm tra lênh FLUSH ở các chế độ điều khiển: CLEAR, DLL INIT Đã hoàn tất

- Kiểm tra lệnh MISC có thể khởi tạo giá trị cho Pattern Generator, có thể dừng chương trình hoặc chờ

- Kiểm tra lệnh MISC ở các chế độ điều khiển:

INIT, WAIT, END Đã hoàn tất

Huấn luyện toàn hệ thống

- Kiểm tra quá trình training có thể tìm được điểm tối ưu Bắt đầu từ bên trái Em tạo mắt dữ liệu từ khoảng 15 đến 32 độ trễ Đã hoàn tất

- Kiểm tra dữ liệu bị lỗi trên 1 kênh Với rx_data[0] bị lỗi

- Trong khối Loopback, em làm cho 2 cạnh của rx_data nằm trong khoảng độ trễ mã từ

- Kiểm tra dữ liệu bị lỗi trên 1 kênh Với giá trị rx_data ngẫu nhiên

- Trong khối Loopback, em làm cho 2 cạnh của rx_data nằm trong khoảng độ trễ mã từ

- Kiểm tra dữ liệu bị lỗi trên 2 kênh Với rx_data[1:0] bị lỗi Đã hoàn tất

- Kiểm tra dữ liệu bị lỗi trên 2 kênh Với rx_data[1:0] ngẫu nhiên

- Trong khối Loopback, em làm cho 2 cạnh của rx_data nằm trong khoảng độ trễ mã từ

- Kiểm tra lỗi xuất hiện khi lệnh JUMPIF cmd[5:4] = 00 | 11 Đã hoàn tất

4.1.3.1 Kiểm tra tổng quan về các chức năng

Hình 4.2 Độ hoàn thiện của thiết kế về mặt chức năng

4.1.3.2 Thuật toán của hệ thống ở dạng sóng a) Full Training

- Giá trị độ trễ cạnh trái của thanh ghi csr_dly_code_ledge_ro = 10

- Giá trị độ trễ cạnh phải của thanh ghi csr_dly_code_redge_ro = 17

- Giá trị độ trễ điểm tối ưu của thanh ghi csr_dly_code_train_ro = 13

Hình 4.3 Mô hình sóng để tìm điểm tối ưu b) Loopback

Hình 4.4 Xung sau khi giá trị độ trễ được áp dụng

Hình 4.5 Xung sau khi giá trị độ trễ được áp dụng và tìm được cạnh

4.1.3.3 Kết quả khi sử dụng thuật toán

Hình 4.6 Báo cáo full training

Chúng ta có thể thấy rằng, thuật toán đã chạy chính xác và đã tìm được điểm tối ưu của thiết kế

Thiết kế synthesis/STA

4.2.1 Ràng buộc về thiết kế (Design Constraints)

Design constraints (ràng buộc thiết kế) là các quy tắc và điều kiện mà mạch số phải tuân theo để đảm bảo rằng nó hoạt động đúng cách và đáp ứng các yêu cầu về thời gian

4.2.1.1 Ràng buộc xung (Clock constraint)

Clock constraint (ràng buộc xung) là các quy tắc và điều kiện về nguồn xung (Clock Domain), chu kì của xung (Clock period), tần số của xung (Frequency), độ lệch của pha (Skew), độ trễ của đồng hồ (Clock latency) Trong ràng buộc xung, em sử dụng ràng buộc về nguồn xung và tần số của xung

Bảng 4.2 Ràng buộc về xung

SDC Tên Xung Nguồn xung Tần số Chu kì (ns)

RX_CLK rx_clk 2GHz 0.50

Ràng buộc đầu ra/vào (I/O Constraints) là các điều kiện và quy tắc liên quan đến các tín hiệu đầu ra và đầu vào của mạch số Trong hệ thống em sử dụng 2 chế độ:

- Chế độ Mission: chạy theo chương trình

- Chế độ ATPG: dùng để kiểm thử chương trình trong phần DFT

Bảng 4.3 Ràng buộc về đầu vào đầu ra của xung

Loại Loại IO Chế độ Mission Chế độ ATPG clk pclk rx_clk clk pclk rx_clk Độ trễ lớn nhất Input 0.300 1.600 0.300 5.0 5.0 5.0

Output 0.300 1.600 0.300 5.0 5.0 5.0 Độ trễ nhỏ nhất Input 0.150 0.800 0.150 5.0 5.0 5.0

4.2.1.3 Các trường hợp có thể bỏ qua

Các trường hợp có thể bỏ qua bởi vì những trường hợp này đã áp dụng các biện pháp tránh CDC nên bất kì giá trị nào đi qua những đường dẫn này đều không thay đổi quá trình bắt dữ liệu

Bảng 4.4 Các đường dẫn bõ qua

59 Điểm bắt đầu Điểm kết thúc

Lớp đường dẫn Đường dẫn

(clk) in2reg setup set_clock_ group Đầu vào sử dụng pclk và clk Nên xảy ra hiện tượng CDC Cho nên không thê kiểm tra thời gian ở đường dẫn này

APB outputs reg2out setup Đầu ra sử dụng pclk và clk Nên xảy ra hiện tượng CDC Cho nên không thê kiểm tra thời gian ở đường dẫn này

FIFO registers in2reg setup set_clock_ group Đầu vào sử dụng rx_clk và clk Nên xảy ra hiện tượng CDC Cho nên không thê kiểm tra thời gian ở đường dẫn này

4.2.2.1 Báo cáo về thời gian

Bảng 4.5 Báo cáo về thời gian Điểm bắt đầu

Xung bắt đầu Điểm kết thúc

Lớp đường dẫn Đường dẫn

APB inputs pclk APB CTL registers clk in2reg setup Ngoại lệ

RX inputs rx_clk FIFO registers clk In2reg setup Ngoại lệ CSR registers clk APB outputs pclk reg2out setup Ngoại lệ

DLL Training registers clk reg2reg setup Trùng khớp

Training registers clk CSR registers clk reg2reg setup Trùng khớp

DLL Training registers clk in2reg setup Trùng khớp

DLL Training outputs clk reg2out setup Trùng khớp

4.2.2.2 Báo cáo về diện tích

Bảng 4.6 Báo cáo về diện tích

Loại Số lượng Diện tích

4.2.2.3 Báo cáo về mức năng lượng

Bảng 4.7 Báo cáo mức năng lượng

% io_pad 0 0 0 0 (00.00%) memory 0 0 0 0 (00.00%) black_box 0 0 0 0 (00.00%) clock_network 5.22E-05 0 2.74E-03 5.23E-05 (00.00%) register 1.0869 6.55E-03 12.7819 1.0935 (93.38%) sequential 0 0 0 0 (00.00%) combinational 2.98E-02 4.77E-02 8.8751 7.75E-02 (6.62%)

4.2.3 Kiểm tra chất lượng sau quá trình Synthesis

Thiết kế sau khi synthesis đã được kiểm tra thành công Các Flip-flops khác là các Flip-flop cố định và chưa được đọc, chúng không ảnh hưởng đến chức năng của thiết kế

Bảng 4.8 Chất lượng sau quá trình Synthesis Điểm kiểm tra Cổng DFF LAT Tổng Mô tả

Constant 0 16 0 16 16 thanh ghi chưa được ràng buộc rdata[31:16] trong khối APB

Don’t verify 3 0 0 3 3 cổng chưa được xác minh scan_out

Unread 22 0 0 22 16 đầu vào APB ports + scan_en[2:0] + scan_in[2:0].

Thiết kế để kiểm thử

Hình 4.7 Môi trường kiểm thử cho ATPG SCAN Đường dẫn reset cho từng xung trong thiết kế:

Bảng 4.9 Các cổng scan tương ứng với từng nguồn xung

Scan_en Scan_rst Clock Domain

Bảng 4.10 Các chế độ kiểm tra trong quá trình ATPG

Tên cổng Khối ràng buộc

Mô tả Stuck-at At-speed

Scan_rst[*] SOC 0/1 Không hỗ trợ Scan Reset

Scan_mode SOC 1 Không hỗ trợ Bật chế độ Scan

Scan_en SOC 0/1 Không hỗ trợ Bật chế độ shift

4.3.2 Quy định của thiết kế

Pre-DFT DRC (Design Rule Checking) là một phần quan trọng của quy trình thiết kế mạch tích hợp (IC Design) trước khi triển khai các công cụ DFT (Design for Testability) Các quy tắc kiểm tra thiết kế trước DFT đảm bảo rằng mạch cơ bản đã tuân thủ các quy tắc và yêu cầu thiết kế cơ bản trước khi thêm các yếu tố ràng buộc vào mạch

Quá trình kiểm tra thiết kế trước DFT giúp đảm bảo rằng thiết kế không có vi phạm, ổn định và đáp ứng các yêu cầu cơ bản trước khi áp dụng các loại kiểm tra DFT cụ thể Trong thiết kế em sử dụng Stuck-at để kiểm tra mạch

Stuck-at là một lỗi mà một tín hiệu trên mạch không thể chuyển đổi giữa giá trị logic "0" và "1" như dự kiến, nó giữ ở một giá trị nhất định

Hình 4.8 Design Rule Check trước khi ràng buộc

Như trên hình chúng ta có thể thấy 1 vi phạm đã xuất hiện trong thiết kế Lỗi này xảy ra ở cell trong khối Pattern Generator Khi thiết kế em sử dụng một con Latch để chặn giá trị đi ra mạch nên xuất hiện lỗi này Trong thiết kế, lỗi này có thể bỏ qua vì lỗi này là lỗi do ý đồ của nhà thiết kế và không ảnh hưởng tới bất kì hoạt động nào có trong mạch

Post-DFT DRC sẽ kiểm tra thiết kế sau khi các công cụ DFT đã được sử dụng để thay thế các Scan flip-flop vào các flip-flop cơ bản Các bước này kiểm tra xem thiết kế đã được chèn các cổng SCAN một cách đúng đắn, và xác định xem có vấn đề nào về quy tắc kiểm tra (DRC) không

Báo cáo của Scan insertion:

- Số lượng các con flip-flop được chuyển đổi thành Scan flip-flop

- Số lượng các flip-flop có trong từng Scan chain và các dường dẫn IO

Hình 4.9 Báo cáo số lượng flip-flop có trong các Scan chain

Chúng ta có thể thấy trên dưới, có 3 Scan Chain được tạo thành, trong đố mỗi scan chain có một nguồn xung khác nhau dựa theo từng đường dẫn scan path khác nhau

4.3.4 Kết quả kiểm tra độ bao phủ của ATPG Stuck-at

Hình 4.10 Báo cáo đã kiểm tra hết tất cả đường đẫn có bị stuck-at

Báo cáo cho chúng ta biết rằng có 12325 đường đẫn đã kiểm tra Có tổng 79 đường dẫn không thể được phát hiện Đạt độ bao phủ lên tới 99.69%

Ngày đăng: 17/03/2024, 09:22

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w