---
# System prepended metadata

title: 驗證 0
tags: [system verilog]

---

# 驗證 0

###### tags: `system verilog`

> 隨手筆記

[TOC]

## 驗證計畫的內容

主要分為三項：
- `驗證功能`
- `覆蓋率要求`： 程式碼覆蓋率 + 功能覆蓋率
- `測試案例的應用場景`：數據傳輸、命令處理、容錯處理

## 驗證環境

:::info
驗證平台都環繞在DUT周圍，目的皆為：
- 產生激勵 (Generate stimulus)
- 獲取響應 (Capture response)
- 檢查正確性 (Check for correctness)
- 通過覆蓋率來評估驗證進度 (Measure progress through coverage matrix)
:::

### 驗證平台的屬性
- 可重用，易於修改
    > `物件導向 (Object oriented programming)`
- 分層的驗證平台，易於重複使用
    > 扁平化的驗證平台難以修改和維護，因此分層的驗證平台`將程式碼分隔成獨立的功能模組`，將通用的功能放在一段程式碼中
- 迅速獲取信息並可快速達到較高的覆蓋率
    > `隨機化驗證技術 (Randomize)` 

### 分層的驗證平台 (5層)
- 信號層 (Signal Layer)
    > DUT 與 TB 的訊號連接 使用 `interface` 連接 (而不是使用 wire 連接 module)
- 命令層 (Command Layer)
    - 驅動器 (Driver)
        > 將命令 (send, read, write) 轉換為信號，驅動到 DUT
    - 接收器 (Receiver)
        > 將 DUT 的輸出信號轉換成命令 (monitor)
    - 斷言 (Assertions)
        > 斷言可以對時間周期的系統行為進行建模 (確認時序是否正確)

    ![](https://i.imgur.com/fyRdjUS.png)
- 功能層 (Functional Layer)
    - 將事務級信息 (transactions) 轉換成命令驅動到 DUT (像是 DMA read operation)
    - 代理器 (Agent)
        > 暫存事務級信息，按照一定的順序發送這些信息
    - 檢查器 (Checker)
        > 接收 DUT 的輸出數據，並與期望的結果進行比對
    - 計分板 (Scoreboard)
        > 將比較的結果反饋在計分板中
- 應用層 (Scenario Layer)
    - 生成器 (Generator)
        - 生成期望的數據
        - 定向測試
        - 帶約束的隨機測試


- 測試層 (Test Layer)
    - 測試案例可以控制所有輸入到驗證環境中的所有內容
    - 為輸入的激勵訊息設置約束
    - 組合多個測試案例

- 功能覆蓋率 (Functional Coverage)
    > 利用功能覆蓋率的統計結果來調整約束，產生下一步的輸入激勵

![](https://i.imgur.com/Q6dGOg1.png)


## 分層驗證平台的好處
- 更新驗證環境的`時間少`
- 通過頂層文件可以很`容易配置`驗證平台
- 測試器件所有的有效的配置
    - 選擇不同的設計配置進行回歸測試
    - 帶約束的隨機化配置對象
- 提高`可重複性`

---

## Reference

- ➜ []()
