VCD 文件及其查看器,如 GTKWave,擅長記錄和展示波形,而 MATLAB 擅長對復(fù)雜數(shù)據(jù)進行計算、分析和可視化。在項目設(shè)計開發(fā)階段,有時候,我們需要將 EDA 工具生成的波形數(shù)據(jù),導(dǎo)入到 MATLAB 中進行更深入的分析、處理或可視化。
然而,EDA 工具生成的波形數(shù)據(jù)文件,通常無法直接支持 MATLAB 的快速導(dǎo)入,需要對波形數(shù)據(jù)文件進行一系列的預(yù)處理和格式轉(zhuǎn)化。那 Primus 生成的波形 vcd 文件,又需要進行怎樣的預(yù)處理和格式轉(zhuǎn)化,才能允許 MATLAB 直接導(dǎo)入呢?
本文將給大家分享這個過程的實現(xiàn)步驟,技巧和經(jīng)驗。
Part 01第一部分:應(yīng)用場景
我們首先來看看,什么時候需要將波形 VCD 文件進行轉(zhuǎn)化并導(dǎo)入 MATLAB?這里我為大家總結(jié)了一些典型的應(yīng)用場景:
應(yīng)用場景 1. 集成電路設(shè)計與驗證
模擬電路分析:將 SPICE 仿真(如放大器、濾波器、ADC/DAC)的瞬態(tài)分析、交流分析結(jié)果導(dǎo)入MATLAB,進行頻域分析(FFT)、信噪比計算、諧波失真分析等。MATLAB 的信號處理工具箱非常強大。
數(shù)字電路驗證:將數(shù)字仿真(如 FPGA、ASIC)的時序波形導(dǎo)入 MATLAB,與理論值或 MATLAB 生成的黃金參考進行對比,驗證算法功能的正確性。
應(yīng)用場景 2. 信號完整性分析
分析高速串行鏈路(如 PCIe, DDR)的仿真波形,在 MATLAB 中進行眼圖生成、浴盆曲線繪制、抖動分解等,這些在 VCD 查看器中很難完成。
應(yīng)用場景 3. 混合信號系統(tǒng)協(xié)同仿真
當你有一個系統(tǒng),一部分在 Simulink(控制算法)中建模,另一部分(具體的電路實現(xiàn))在 EDA 工具中仿真時,可以將電路仿真輸出的 VCD 文件導(dǎo)入 MATLAB/Simulink,進行系統(tǒng)級聯(lián)合驗證。
Part 02第二部分:具體實現(xiàn)步驟
了解了什么時候需要將波形 VCD 文件進行轉(zhuǎn)化并導(dǎo)入 MATLAB后,再繼續(xù)了解如何實現(xiàn) VCD 文件的處理和轉(zhuǎn)化。
VCD 波形文件雖然是文本格式,但其結(jié)構(gòu)復(fù)雜,不適合直接用 MATLAB 讀取。而將 VCD轉(zhuǎn)換為表格形式的 CSV 文件則是理想的中介。
下面給大家分享 VCD 轉(zhuǎn) CSV 的具體實現(xiàn)步驟,以及處理要求和技巧。本文分享基于Python 腳本的轉(zhuǎn)化工具。整個過程分為兩大步:轉(zhuǎn)換 和 導(dǎo)入。
步驟一:轉(zhuǎn)換
使用 Python 腳本,將 VCD 文件轉(zhuǎn)換為 CSV 文件,你可以使用 `vcdvcd` 這個 Python 庫,它非常強大。
1. 安裝庫 vcdvcd 庫:
```bash
pip install vcdvcd
```
2. 編寫 Python 腳本(這里我們使用 `vcd2csv.py`):
```python
from vcdvcd import VCDVCD
import csv
# 讀取 VCD 文件
vcd = VCDVCD('your_simulation.vcd')
# 獲取所有信號名稱
signal_names = list(vcd.signals.keys())
print("找到以下信號:", signal_names)
# 獲取所有時間點
times = sorted({time for signal in vcd.signals.values() for time in signal.values})
# 創(chuàng)建 CSV 文件并寫入數(shù)據(jù)
with open('output.csv', 'w', newline='') as csvfile:
writer = csv.writer(csvfile)
# 寫入表頭:第一列是時間,后面是各個信號名
header = ['time'] + signal_names
writer.writerow(header)
# 遍歷每個時間點
for time in times:
row = [time]
for sig_name in signal_names:
# 獲取該信號在當前時間點的值,如果不存在則用上一個值(或空格)
sig = vcd[sig_name]
# find_value 方法可以找到在指定時間點的值
value = sig.find_value(time)row.append(value if value is not None else '')
writer.writerow(row)
print("轉(zhuǎn)換完成!")
```
注意:這是一個基礎(chǔ)示例。對于大型 VCD 文件,你可能需要優(yōu)化代碼,例如處理信號層次結(jié)構(gòu)、選擇特定信號等。`vcdvcd` 庫提供了豐富的功能來處理這些情況。
步驟二:導(dǎo)入
將第一步生成的 CSV 文件導(dǎo)入 MATLAB在 MATLAB 中,這一步非常簡單。你可以選擇兩個兩個方法的任意一種。
導(dǎo)入方法:1. 使用 `readtable` 函數(shù):
```matlab
% 導(dǎo)入 CSV 文件
data = readtable('output.csv');
% 顯示前幾行數(shù)據(jù),確認導(dǎo)入成功
head(data)
% 現(xiàn)在你可以像操作普通 MATLAB 變量一樣操作這個表格
% 例如,提取時間和某個信號
time = data.time;
signal_a = data.YourSignalName; % 將 YourSignalName 替換為 CSV 表中的實際列名
% 進行繪圖和分析
figure;
plot(time, signal_a);
xlabel('Time (s)');
ylabel('Signal Value');
title('Imported VCD Signal');
```
導(dǎo)入方法 2. 使用導(dǎo)入數(shù)據(jù)工具(GUI 方式) :
在 MATLAB 的“主頁”選項卡中,點擊“導(dǎo)入數(shù)據(jù)”。然后選擇你的 CSV 文件。在導(dǎo)入工具中,你可以指定列數(shù)據(jù)類型、跳過標題行等,然后點擊“導(dǎo)入選擇”將其生成腳本或變量。
Part 03第三部分:重要注意事項和陷阱
注意事項 1:文件大小
VCD 文件可能非常巨大(幾個 GB),轉(zhuǎn)換后的 CSV文件可能更大。這會導(dǎo)致轉(zhuǎn)換和導(dǎo)入過程非常緩慢,甚至內(nèi)存不足。因此,在轉(zhuǎn)換時,使用 Python腳本只選擇你真正需要分析的幾個信號,而不是全部導(dǎo)出。
注意事項 2: 時間點對齊
VCD 是事件驅(qū)動的,每個信號的值變化時才記錄。這意味著不同信號的時間點可能不完全一致。上面的 Python 腳本通過生成所有時間點的并集來解決這個問題,缺失值會用上一個值或空值填充。你需要根據(jù)你的分析目的決定如何處理這些缺失值(例如,前向填充)。
注意事項 3:數(shù)據(jù)格式
數(shù)字信號在 VCD 中可能是多位二進制、十進制或十六進制。我們需要確保轉(zhuǎn)換腳本能正確理解這些格式。而模擬信號通常是實數(shù)值。要確保轉(zhuǎn)換時精度沒有損失。
注意事項 4:信號命名
VCD 中的信號名可能帶有層次結(jié)構(gòu)分隔符(如top.module.signal`),在 CSV 中可能會變成列名。要確保 MATLAB 能夠正確處理這些列名,有時可能需要手動修改 CSV 表頭。
Part 04第四部分:總結(jié)
當你需要利用 MATLAB 強大的計算和可視化能力,去分析 Primus 產(chǎn)生的波形數(shù)據(jù)時,標準的處理流程為:
Primus 生成 `.vcd` → Python 腳本 對 .vcd 進行 預(yù)處理 并 轉(zhuǎn)換為 `.csv` → MATLAB 導(dǎo)入并分析
易靈思有整套的 Python 腳本來幫您完成 vcd 的預(yù)處理和轉(zhuǎn)換,歡迎聯(lián)系索取。
易靈思公司介紹
易靈思是一家國產(chǎn)FPGA公司,總部位于深圳前海。公司憑借自主可控的Quantum硬件架構(gòu),采用邏輯和路由可以互換的XLR結(jié)構(gòu),實現(xiàn)了創(chuàng)新的產(chǎn)品設(shè)計與軟件算法,使得FPGA產(chǎn)品具備低功耗、小體積、高密度、高性能等優(yōu)勢。已量產(chǎn)的40nm Trion系列及16nm鈦金系列 FPGA產(chǎn)品,廣泛應(yīng)用于機器視覺、顯示、工業(yè)控制、醫(yī)療、汽車、AI和通信等終端領(lǐng)域。
重要產(chǎn)品
鈦金系列FPGA具有增強的Quantum架構(gòu),16nm工藝,35K 至 1,000K 邏輯單元,超高性能 300-500MHz,封裝最小可至3.5mm*3.4mm@60K LE,功耗低至競爭對手的1/4,硬核資源豐富,最新產(chǎn)品TJ375現(xiàn)已量產(chǎn)。
-
模擬電路
+關(guān)注
關(guān)注
126文章
1605瀏覽量
105407 -
matlab
+關(guān)注
關(guān)注
189文章
3025瀏覽量
238682 -
仿真
+關(guān)注
關(guān)注
54文章
4480瀏覽量
138208 -
eda
+關(guān)注
關(guān)注
72文章
3113瀏覽量
182819
原文標題:將Primus生成的波形文件導(dǎo)入MATLAB的處理過程和技巧
文章出處:【微信號:易靈思官微,微信公眾號:易靈思官微】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
如何將dxf導(dǎo)入Allegro
如何向LABVIEW導(dǎo)入MATLAB生成的EXCEL數(shù)據(jù)?
如何將數(shù)據(jù)從txt文本中導(dǎo)入matlab 并生成矩陣
如何將solidworks文件導(dǎo)入到labview中
請問如何將采集到的脈搏信號導(dǎo)入MATLAB中?
MATLAB如何將串口中的數(shù)據(jù)存入TXT文件中
如何將ECC密鑰導(dǎo)入HSE FW?
如何建立matlab和freemaster的關(guān)系?如何將freemaster數(shù)據(jù)導(dǎo)入matlab/simulink?
如何將AD庫轉(zhuǎn)換導(dǎo)入到PADS中使用
將示波器信號完整數(shù)據(jù)導(dǎo)入Matlab進行分析
TARGET3001!用法篇-如何將Altium文件導(dǎo)入到TARGET中
如何將python文件導(dǎo)入到ROS系統(tǒng)中
如何將Primus生成的波形文件導(dǎo)入MATLAB
評論