2.3 KiB
2.3 KiB
Value Change Dump (VCD) parser using llparse based on wavedrom.
Prepare
Build
source $EMCC_HOME/emsdk_env.sh
# once only
npm install browserify terser node-gyp -g
# once only
npm i
# build
make -j 12
production are :
./out/vcd.js
./out/vcd.wasm
move them to your development worksapce.
Test
After first building, run following
npm run test
note: don't run browserify
if you want to test.
Deploy to web
source deploy.sh /path/to/digital-vcd-render
Usage
Only stream of Uint8 is supported as input. e.g. we want to parse a certain *.vcd
read in browser-like environment. Mount vcd to window in your index.html
:
<!DOCTYPE html>
<html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<link rel="stylesheet" href="./vcd.css">
<title>
<%= htmlWebpackPlugin.options.title %>
</title>
<script src="./vcd.js"></script>
</head>
<body>
<noscript>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled.
Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
</body>
</html>
In your main workspace (App.vue
for example), goes like this:
const uint8array = await readVcdFile();
const vcdstream = await getVcdStream();
// level size diagram data
const values = {};
vcdstream.change.any((id, time, cmd, value, mask) => {
if (values[id] === undefined) {
values[id] = [];
}
values[id].push({time, cmd, value, mask});
})
const maxChunkLength = 1 << 17;
for (let i = 0; i < uint8array.length; i += maxChunkLength) {
const piece = uint8array.slice(i, i + maxChunkLength);
vcdstream.write(piece);
}
// structure info of wires in vcdstream.info
console.log(vcdstream.info);
License
MIT LICENSE