digital-vcd-parser/test/test_order.js
2024-11-30 00:50:32 +08:00

56 lines
1.5 KiB
JavaScript

/**
* @description 有序性测试
* @author 锦恢
*/
const fs = require('fs');
const { makeVcdStream } = require('../bin/vcd');
const createVcd = require('../out/vcd.js');
/**
*
* @param {number[][]} waves
* @returns {boolean}
*/
function isordered(waves) {
let lastTime = undefined;
let i = 0;
for (const wave of waves) {
const time = wave[0];
if (lastTime !== undefined && lastTime > time) {
console.error('detect error time, current time: ' + time, ', last time: ' + lastTime);
console.log(waves[i - 2]);
console.log(waves[i - 1]);
console.log(waves[i]);
console.log(waves[i + 1]);
console.log(waves[i + 2]);
console.log(waves[i + 3]);
return false;
}
lastTime = time;
i ++;
}
return true;
}
async function main() {
// 初始化 wasm
const wasmBinary = fs.readFileSync('./out/vcd.wasm');
const vcdstream = await makeVcdStream({ wasmBinary });
// 读入 vcd 转换成 arraybuffer 输入 其中进行计算
const arraybuffer = fs.readFileSync('test/SIMv0.2/Tb_Sync_FIFO.vcd');
vcdstream.consume(arraybuffer);
const info = vcdstream.getBasicInfo();
const values = info.signalValues;
console.log('time', info.time);
console.log('timescale', info.vcdInfo.timescale);
// clk link is #
// 每隔 12500 翻转一次
console.log(isordered(values['#'].wave));
}
main();