直接读入 wasm binary 进行解析

This commit is contained in:
锦恢 2024-10-31 19:59:53 +08:00
parent 4e53d54c37
commit 34dc4a004d
3 changed files with 28 additions and 5 deletions

View File

@ -110,8 +110,8 @@ function parseTimescale(timescale) {
* clean: () => void
* }}
*/
async function makeVcdStream() {
const vcdstream = await getVcdStream();
async function makeVcdStream(moduleArg) {
const vcdstream = await getVcdStream(moduleArg);
// 使用 vcdstream 的 any 回调获取波形数据,并按照正确的格式进行解码和存储
// 这段处理来自 https://github.com/wavedrom/vcd 的 vcd-pipe-deso.js 的 58 行
// 请严格对准转换规则
@ -203,8 +203,8 @@ function consume(vcdstream, arraybuffer, config) {
}
}
async function getVcdStream() {
const wasm = await createVCD();
async function getVcdStream(moduleArg) {
const wasm = await createVCD(moduleArg);
const vcdstream = await webVcdParser(wasm);
return vcdstream;
}

View File

@ -1,4 +1,4 @@
browserify ./bin/vcd.js | terser --compress -o ./out/vcd-web.js
sed -i -e 's/wasmBinaryFile=Module.locateFile?Module.locateFile(path,scriptDirectory):scriptDirectory+path/wasmBinaryFile=self.location.href.replace("worker.js", "vcd.wasm")/g' out/vcd-web.js
sed -i -e 's/wasmBinaryFile=Module.locateFile?Module.locateFile(path,scriptDirectory):scriptDirectory+path/wasmBinaryFile=Module.locateFile?Module.locateFile(path,scriptDirectory):scriptDirectory+path/g' out/vcd-web.js
cp out/vcd-web.js $1/public/vcd.js
cp out/vcd.wasm $1/public/vcd.wasm

23
test/test.js Normal file
View File

@ -0,0 +1,23 @@
const fs = require('fs');
const { makeVcdStream } = require('../bin/vcd');
const createVcd = require('../out/vcd.js');
async function main() {
const wasmBinary = fs.readFileSync('./vcd.wasm');
const wasm = await createVcd({ wasmBinary });
console.log(wasm);
return;
// const vcdstream = await makeVcdStream();
// const arraybuffer = fs.readFileSync('./test/samples/iverilog.small.vcd');
// const answers = JSON.parse(fs.readFileSync('./test/samples/iverilog.small.json'));
// vcdstream.consume(arraybuffer);
// const info = vcdstream.getBasicInfo();
// const values = info.signalValues;
}
main();