Compare commits
10 Commits
f35f172189
...
cd74a089e4
Author | SHA1 | Date | |
---|---|---|---|
cd74a089e4 | |||
f2324479da | |||
34dc4a004d | |||
4e53d54c37 | |||
2eda8afff7 | |||
f10bd6dce6 | |||
d4f2ec5845 | |||
60c77630cd | |||
a8804d9cc0 | |||
55d5c51f29 |
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,4 +1,3 @@
|
|||||||
/.vscode
|
|
||||||
/.nyc_output
|
/.nyc_output
|
||||||
/node_modules
|
/node_modules
|
||||||
/package-lock.json
|
/package-lock.json
|
||||||
@ -6,3 +5,4 @@
|
|||||||
/coverage
|
/coverage
|
||||||
/tmp
|
/tmp
|
||||||
/vcd_parser.*
|
/vcd_parser.*
|
||||||
|
/out
|
17
.vscode/c_cpp_properties.json
vendored
Normal file
17
.vscode/c_cpp_properties.json
vendored
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "Linux",
|
||||||
|
"includePath": [
|
||||||
|
"${workspaceFolder}/**",
|
||||||
|
"${EMCC_HOME}/node/14.18.2_64bit/include/node/*"
|
||||||
|
],
|
||||||
|
"defines": [],
|
||||||
|
"compilerPath": "/usr/bin/gcc",
|
||||||
|
"cStandard": "c17",
|
||||||
|
"cppStandard": "gnu++14",
|
||||||
|
"intelliSenseMode": "linux-gcc-x64"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"version": 4
|
||||||
|
}
|
62
.vscode/settings.json
vendored
Normal file
62
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
{
|
||||||
|
"files.associations": {
|
||||||
|
"*.rmd": "markdown",
|
||||||
|
"node_api.h": "c",
|
||||||
|
"typeinfo": "c",
|
||||||
|
"array": "c",
|
||||||
|
"atomic": "c",
|
||||||
|
"bit": "c",
|
||||||
|
"*.tcc": "c",
|
||||||
|
"bitset": "c",
|
||||||
|
"cctype": "c",
|
||||||
|
"chrono": "c",
|
||||||
|
"clocale": "c",
|
||||||
|
"cmath": "c",
|
||||||
|
"compare": "c",
|
||||||
|
"concepts": "c",
|
||||||
|
"condition_variable": "c",
|
||||||
|
"cstdarg": "c",
|
||||||
|
"cstddef": "c",
|
||||||
|
"cstdint": "c",
|
||||||
|
"cstdio": "c",
|
||||||
|
"cstdlib": "c",
|
||||||
|
"cstring": "c",
|
||||||
|
"ctime": "c",
|
||||||
|
"cwchar": "c",
|
||||||
|
"cwctype": "c",
|
||||||
|
"deque": "c",
|
||||||
|
"string": "c",
|
||||||
|
"unordered_map": "c",
|
||||||
|
"vector": "c",
|
||||||
|
"exception": "c",
|
||||||
|
"algorithm": "c",
|
||||||
|
"functional": "c",
|
||||||
|
"iterator": "c",
|
||||||
|
"memory": "c",
|
||||||
|
"memory_resource": "c",
|
||||||
|
"numeric": "c",
|
||||||
|
"optional": "c",
|
||||||
|
"random": "c",
|
||||||
|
"ratio": "c",
|
||||||
|
"string_view": "c",
|
||||||
|
"system_error": "c",
|
||||||
|
"tuple": "c",
|
||||||
|
"type_traits": "c",
|
||||||
|
"utility": "c",
|
||||||
|
"initializer_list": "c",
|
||||||
|
"iosfwd": "c",
|
||||||
|
"iostream": "c",
|
||||||
|
"istream": "c",
|
||||||
|
"limits": "c",
|
||||||
|
"mutex": "c",
|
||||||
|
"new": "c",
|
||||||
|
"numbers": "c",
|
||||||
|
"ostream": "c",
|
||||||
|
"semaphore": "c",
|
||||||
|
"stdexcept": "c",
|
||||||
|
"stop_token": "c",
|
||||||
|
"streambuf": "c",
|
||||||
|
"thread": "c",
|
||||||
|
"__nullptr": "c"
|
||||||
|
}
|
||||||
|
}
|
59
Makefile
59
Makefile
@ -1,7 +1,6 @@
|
|||||||
.PHONY: wasm all important clean
|
.PHONY: wasm all important clean
|
||||||
|
|
||||||
all: wasm
|
all: wasm
|
||||||
wasm: out/vcd.wasm
|
|
||||||
|
|
||||||
WASM_MAIN = wasm_main.cpp
|
WASM_MAIN = wasm_main.cpp
|
||||||
|
|
||||||
@ -13,10 +12,6 @@ CPP_FILES = \
|
|||||||
vcd_parser.c \
|
vcd_parser.c \
|
||||||
vcd_spans.c \
|
vcd_spans.c \
|
||||||
|
|
||||||
# this is a list of all C functions we want to publish to javascript
|
|
||||||
# In the main cpp file, each of these is wrapped in extern "C" {}
|
|
||||||
# the version here has a prepended underscore
|
|
||||||
# all lines must have trailing comma
|
|
||||||
EXPORT_STRING = \
|
EXPORT_STRING = \
|
||||||
"_execute", \
|
"_execute", \
|
||||||
"_init", \
|
"_init", \
|
||||||
@ -26,16 +21,6 @@ EXPORT_STRING = \
|
|||||||
# warning and error flags
|
# warning and error flags
|
||||||
CLANG_WARN_FLAGS = \
|
CLANG_WARN_FLAGS = \
|
||||||
-fno-exceptions \
|
-fno-exceptions \
|
||||||
-Wall \
|
|
||||||
-Wextra \
|
|
||||||
-Wno-ignored-qualifiers \
|
|
||||||
-Wundef \
|
|
||||||
-Werror=return-type \
|
|
||||||
-Wshadow \
|
|
||||||
|
|
||||||
# -Wconversion
|
|
||||||
# -flto \
|
|
||||||
# -Wl,--lto-O3 \
|
|
||||||
|
|
||||||
CLANG_OTHER_FLAGS = \
|
CLANG_OTHER_FLAGS = \
|
||||||
-DVCDWASM \
|
-DVCDWASM \
|
||||||
@ -50,15 +35,12 @@ ifdef OPT3
|
|||||||
CLANG_O_FLAG = '-O3'
|
CLANG_O_FLAG = '-O3'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# works however slows down
|
wasm: $(WASM_MAIN) $(CPP_FILES) $(HPP_FILES) Makefile
|
||||||
#-s DISABLE_EXCEPTION_CATCHING=0 \
|
|
||||||
|
|
||||||
out/vcd.wasm: $(WASM_MAIN) $(CPP_FILES) $(HPP_FILES) Makefile
|
|
||||||
mkdir -p out
|
mkdir -p out
|
||||||
emcc \
|
emcc \
|
||||||
$(WASM_MAIN) \
|
$(WASM_MAIN) \
|
||||||
$(CPP_FILES) \
|
$(CPP_FILES) \
|
||||||
-o out/vcd.html \
|
-o out/vcd.js \
|
||||||
-s DISABLE_EXCEPTION_CATCHING=1 \
|
-s DISABLE_EXCEPTION_CATCHING=1 \
|
||||||
-s WASM_BIGINT \
|
-s WASM_BIGINT \
|
||||||
-s ALLOW_MEMORY_GROWTH=1 \
|
-s ALLOW_MEMORY_GROWTH=1 \
|
||||||
@ -66,48 +48,11 @@ out/vcd.wasm: $(WASM_MAIN) $(CPP_FILES) $(HPP_FILES) Makefile
|
|||||||
-s MAXIMUM_MEMORY=2GB \
|
-s MAXIMUM_MEMORY=2GB \
|
||||||
-s ALLOW_TABLE_GROWTH=1 \
|
-s ALLOW_TABLE_GROWTH=1 \
|
||||||
-s MODULARIZE=1 \
|
-s MODULARIZE=1 \
|
||||||
-s EXPORT_NAME=createVCD \
|
|
||||||
-s EXPORTED_FUNCTIONS='[$(EXPORT_STRING) "_main"]' \
|
-s EXPORTED_FUNCTIONS='[$(EXPORT_STRING) "_main"]' \
|
||||||
-s EXPORTED_RUNTIME_METHODS='["ccall", "cwrap", "addOnPostRun", "addFunction", "setValue", "getValue"]' \
|
-s EXPORTED_RUNTIME_METHODS='["ccall", "cwrap", "addOnPostRun", "addFunction", "setValue", "getValue"]' \
|
||||||
$(CLANG_O_FLAG) $(CLANG_WARN_FLAGS) $(CLANG_OTHER_FLAGS)
|
$(CLANG_O_FLAG) $(CLANG_WARN_FLAGS) $(CLANG_OTHER_FLAGS)
|
||||||
|
|
||||||
# -s WASM=0 \
|
|
||||||
|
|
||||||
.PHONY: patchlib patchlib1 patchlib2
|
.PHONY: patchlib patchlib1 patchlib2
|
||||||
|
|
||||||
# patchlib: patchlib1 patchlib2
|
|
||||||
|
|
||||||
# PTSRC1=lib/BehaviorTree.CPP/src/xml_parsing.cpp
|
|
||||||
# PTPAT1=patch/xml_parsing.patch
|
|
||||||
# # see https://stackoverflow.com/questions/7394290/how-to-check-return-value-from-the-shell-directive
|
|
||||||
# PAPPLIED1 := $(shell patch -R -p0 -s -f --dry-run $(PTSRC1) < $(PTPAT1) 1>&2 2> /dev/null > /dev/null; echo $$?)
|
|
||||||
|
|
||||||
# # patch is pretty annoying to use here
|
|
||||||
# # we would like to apply the patch, or skip if already applied exit 0
|
|
||||||
# # inorder to do this, we first need to run a dry-run in the reverse direction
|
|
||||||
# # then check the exit code, then run it in the forward direction if actually needed
|
|
||||||
# # we also have to do the complicated line above to deal with exit codes
|
|
||||||
# # see https://unix.stackexchange.com/questions/55780/check-if-a-file-or-folder-has-been-patched-already
|
|
||||||
# patchlib1: $(PTPAT1)
|
|
||||||
# ifneq ($(PAPPLIED1),0)
|
|
||||||
# @echo "$(PTSRC1) is unpatched.\n"
|
|
||||||
# patch --forward --reject-file=- $(PTSRC1) < $(PTPAT1)
|
|
||||||
# else
|
|
||||||
# @echo "$(PTSRC1) already patched, skipping..."
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# PTSRC2=lib/BehaviorTree.CPP/src/tree_node.cpp
|
|
||||||
# PTPAT2=patch/tree_node.patch
|
|
||||||
# PAPPLIED2 := $(shell patch -R -p0 -s -f --dry-run $(PTSRC2) < $(PTPAT2) 1>&2 2> /dev/null > /dev/null; echo $$?)
|
|
||||||
|
|
||||||
# patchlib2: $(PTPAT2)
|
|
||||||
# ifneq ($(PAPPLIED2),0)
|
|
||||||
# @echo "$(PTSRC2) is unpatched.\n"
|
|
||||||
# patch --forward --reject-file=- $(PTSRC2) < $(PTPAT2)
|
|
||||||
# else
|
|
||||||
# @echo "$(PTSRC2) already patched, skipping..."
|
|
||||||
# endif
|
|
||||||
|
|
||||||
.PHONY: all build watch dev start test pretest lint jestc copydist cleandist prepare
|
.PHONY: all build watch dev start test pretest lint jestc copydist cleandist prepare
|
||||||
.PHONY: test testonly
|
.PHONY: test testonly
|
||||||
|
|
||||||
|
184
README.md
184
README.md
@ -1,85 +1,125 @@
|
|||||||
[](https://github.com/wavedrom/vcd/actions/workflows/linux-napi.yml)[](https://github.com/wavedrom/vcd/actions/workflows/linux-wasm.yml)[](https://github.com/wavedrom/vcd/actions/workflows/macos-napi.yml)[](https://github.com/wavedrom/vcd/actions/workflows/macos-wasm.yml)[](https://github.com/wavedrom/vcd/actions/workflows/windows-wasm.yml)
|
基于 [llparse](https://github.com/nodejs/llparse) 的 vcd 解析器,用于 [Digital IDE 的 wave 渲染器](https://github.com/Digital-EDA/digital-vcd-render) 的 vcd 后端解析器构建。
|
||||||
[](https://www.npmjs.org/package/vcd-stream)
|
|
||||||
|
## 准备工作
|
||||||
|
|
||||||
|
[安装 emcc](https://kirigaya.cn/blog/article?seq=55)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/Digital-EDA/digital-vcd-parser
|
||||||
|
cd digital-vcd-parser
|
||||||
|
npm i
|
||||||
|
npm install browserify terser node-gyp -g
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## 构建
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 激活 emcc
|
||||||
|
source $EMCC_HOME/emsdk_env.sh
|
||||||
|
|
||||||
|
# 生成 vcd_parser.c 和 vcd_parser.h(每次修改 ./bin/build.js 都需要重新运行)
|
||||||
|
# llparse 使用教程:https://kirigaya.cn/blog/article?seq=223
|
||||||
|
node bin/build.js
|
||||||
|
|
||||||
|
# build
|
||||||
|
make -j 12
|
||||||
|
```
|
||||||
|
|
||||||
|
生成 :
|
||||||
|
|
||||||
|
- `./out/vcd.js`
|
||||||
|
- `./out/vcd.wasm`
|
||||||
|
|
||||||
|
部署到 digital-vcd-render :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 将生成的 wasm 通过 浏览器化和特殊处理后部署到 render 项目中
|
||||||
|
source deploy.sh /mnt/c/Users/11934/Project/Digital-IDE/digital-vcd-render
|
||||||
|
```
|
||||||
|
|
||||||
|
## 测试
|
||||||
|
|
||||||
|
快速测试:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
node test/debug/basic.js
|
||||||
|
```
|
||||||
|
|
||||||
|
通用测试:
|
||||||
|
```bash
|
||||||
|
npm run test
|
||||||
|
```
|
||||||
|
|
||||||
|
> tip: 不要运行 `browserify` 如果你要进行测试的话
|
||||||
|
|
||||||
|
|
||||||
|
## 浏览器使用
|
||||||
|
|
||||||
|
```bash
|
||||||
|
source deploy.sh /path/to/digital-vcd-render
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
Value Change Dump ([VCD](https://en.wikipedia.org/wiki/Value_change_dump)) parser using [llparse](https://github.com/nodejs/llparse)
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
Install
|
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`:
|
||||||
|
|
||||||
```
|
```html
|
||||||
npm i vcd-stream
|
<!DOCTYPE html>
|
||||||
make wasm
|
<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>
|
||||||
```
|
```
|
||||||
|
|
||||||
Require
|
In your main workspace (`App.vue` for example), goes like this:
|
||||||
|
|
||||||
```js
|
```javascript
|
||||||
let vcd = require('vcd-stream');
|
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);
|
||||||
```
|
```
|
||||||
|
|
||||||
Create parser writable stream instance
|
---
|
||||||
|
|
||||||
```js
|
|
||||||
let inst = vcd.parser();
|
|
||||||
```
|
|
||||||
|
|
||||||
General event emitter
|
|
||||||
|
|
||||||
```js
|
|
||||||
inst.on(<eventName>, () => {});
|
|
||||||
```
|
|
||||||
|
|
||||||
Events:
|
|
||||||
* `$enddefinitions` - when all modules/wires are defined
|
|
||||||
* `finish` - end of stream
|
|
||||||
* `error` - error during parsing process
|
|
||||||
|
|
||||||
Change event emitter
|
|
||||||
|
|
||||||
```js
|
|
||||||
inst.change.on(<wireName>, (time, cmd) => {});
|
|
||||||
```
|
|
||||||
|
|
||||||
* `time` -- change time
|
|
||||||
* `cmd` -- change type
|
|
||||||
|
|
||||||
Info object
|
|
||||||
|
|
||||||
```js
|
|
||||||
let info = inst.info;
|
|
||||||
```
|
|
||||||
|
|
||||||
* `info.status` - (`'declaration'`|`'simulation'`)
|
|
||||||
* `info.wires` - hierarchy object of modules and wires
|
|
||||||
|
|
||||||
Pipe data into the instance
|
|
||||||
|
|
||||||
```js
|
|
||||||
myStream.pipe(inst);
|
|
||||||
```
|
|
||||||
|
|
||||||
## Test
|
|
||||||
|
|
||||||
### Build / Test Napi version
|
|
||||||
|
|
||||||
```
|
|
||||||
npm i
|
|
||||||
npm run mocha_napi
|
|
||||||
```
|
|
||||||
|
|
||||||
### Build / Test Wasm version
|
|
||||||
|
|
||||||
```
|
|
||||||
make
|
|
||||||
npm run mocha_wasm
|
|
||||||
```
|
|
||||||
|
|
||||||
### Test all
|
|
||||||
|
|
||||||
```
|
|
||||||
npm test
|
|
||||||
```
|
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
67
backup/napi_any.js
Normal file
67
backup/napi_any.js
Normal file
File diff suppressed because one or more lines are too long
138
backup/napi_basic.js
Normal file
138
backup/napi_basic.js
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
// 'use strict';
|
||||||
|
|
||||||
|
// /* eslint-disable no-console */
|
||||||
|
// /* eslint-disable indent */
|
||||||
|
|
||||||
|
// const expect = require('chai').expect;
|
||||||
|
// const parser = require('../lib/parser.js');
|
||||||
|
|
||||||
|
// describe('basic', () => {
|
||||||
|
|
||||||
|
// it('typeof vcd', done => {
|
||||||
|
// expect(parser).to.be.an('function');
|
||||||
|
// done();
|
||||||
|
// });
|
||||||
|
|
||||||
|
// it('typeof vcd instance', done => {
|
||||||
|
// expect(parser()).to.be.an('object');
|
||||||
|
// done();
|
||||||
|
// });
|
||||||
|
|
||||||
|
// it('fail: foo bar', done => {
|
||||||
|
// const inst = parser();
|
||||||
|
// expect(() => {
|
||||||
|
// inst.write(Buffer.from(' foo bar ???'));
|
||||||
|
// }).not.to.throw();
|
||||||
|
// expect(inst.info).to.deep.eq({
|
||||||
|
// stack: [{}],
|
||||||
|
// status: 'declaration',
|
||||||
|
// wires: {}
|
||||||
|
// });
|
||||||
|
// done();
|
||||||
|
// });
|
||||||
|
|
||||||
|
// it('fail: $comment', done => {
|
||||||
|
// const inst = parser();
|
||||||
|
// expect(() => {
|
||||||
|
// inst.write(Buffer.from(
|
||||||
|
// ' \n $comment some text $end $comment more text $end ???'
|
||||||
|
// ));
|
||||||
|
// }).not.to.throw();
|
||||||
|
// expect(inst.info).to.deep.eq({
|
||||||
|
// comment: ' more text ',
|
||||||
|
// stack: [{}],
|
||||||
|
// status: 'declaration',
|
||||||
|
// wires: {}
|
||||||
|
// });
|
||||||
|
// done();
|
||||||
|
// });
|
||||||
|
|
||||||
|
// it('$version', done => {
|
||||||
|
// const inst = parser();
|
||||||
|
// expect(inst.write(`
|
||||||
|
// $version Generated by VerilatedVcd $end
|
||||||
|
// $date Wed Sep 18 22:59:07 2019
|
||||||
|
// $end
|
||||||
|
// $timescale 1ns $end
|
||||||
|
|
||||||
|
// $scope module top $end
|
||||||
|
// $var wire 1 "}G clock $end
|
||||||
|
// $scope module leaf $end
|
||||||
|
// $var wire 64 {u counter [63:0] $end
|
||||||
|
// $upscope $end
|
||||||
|
// $scope module fruit $end
|
||||||
|
// $var wire 4 u) point [3:0] $end
|
||||||
|
// $upscope $end
|
||||||
|
// $upscope $end
|
||||||
|
|
||||||
|
// $enddefinitions $end
|
||||||
|
// `
|
||||||
|
// )).to.eq(true);
|
||||||
|
|
||||||
|
// expect(inst.write(`
|
||||||
|
|
||||||
|
// #1
|
||||||
|
// 0"}G
|
||||||
|
// #2
|
||||||
|
// 1"}G
|
||||||
|
// #300
|
||||||
|
// 0"}G
|
||||||
|
// b1111000000000000 {u
|
||||||
|
// #301
|
||||||
|
// b0000111100000000 {u
|
||||||
|
// #302
|
||||||
|
// b0000000011110000 {u
|
||||||
|
// #303
|
||||||
|
// b0000000000001111 {u
|
||||||
|
// `
|
||||||
|
// )).to.eq(true);
|
||||||
|
|
||||||
|
// console.log(inst.info);
|
||||||
|
|
||||||
|
// expect(inst.info).to.deep.eq({
|
||||||
|
// status: 'simulation',
|
||||||
|
// date: ' Wed Sep 18 22:59:07 2019\n ',
|
||||||
|
// version: ' Generated by VerilatedVcd ',
|
||||||
|
// timescale: ' 1ns ',
|
||||||
|
// t0: 1,
|
||||||
|
// varId: 'u)',
|
||||||
|
// wires: {
|
||||||
|
// top: {
|
||||||
|
// clock: '"}G',
|
||||||
|
// fruit: {
|
||||||
|
// point: 'u)'
|
||||||
|
// },
|
||||||
|
// leaf: {
|
||||||
|
// counter: '{u'
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// stack: [{
|
||||||
|
// top: {
|
||||||
|
// clock: '"}G',
|
||||||
|
// fruit: {
|
||||||
|
// point: 'u)'
|
||||||
|
// },
|
||||||
|
// leaf: {
|
||||||
|
// counter: '{u'
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// clock: '"}G',
|
||||||
|
// fruit: {
|
||||||
|
// point: 'u)'
|
||||||
|
// },
|
||||||
|
// leaf: {
|
||||||
|
// counter: '{u'
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// point: 'u)'
|
||||||
|
// }]
|
||||||
|
// });
|
||||||
|
// done();
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
|
||||||
|
// /* eslint-env mocha */
|
88
backup/napi_dump.js
Normal file
88
backup/napi_dump.js
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
// 'use strict';
|
||||||
|
|
||||||
|
// const fs = require('fs');
|
||||||
|
// const path = require('path');
|
||||||
|
|
||||||
|
// const expect = require('chai').expect;
|
||||||
|
// const parser = require('../lib/parser.js');
|
||||||
|
// const chopper = require('../lib/chopper.js');
|
||||||
|
|
||||||
|
// const expectaitions = [
|
||||||
|
// { id: '"}G', time: 100n, cmd: 14, value: 0n, mask: 0n },
|
||||||
|
// { id: '"}G', time: 200n, cmd: 15, value: 0n, mask: 0n },
|
||||||
|
// { id: '{u', time: 200n, cmd: 30, value: 0xf0f0f0f0f0f0f0f0n, mask: 0xff00ff00ff00ff00n },
|
||||||
|
// { id: '"}G', time: 300n, cmd: 14, value: 0n, mask: 0n },
|
||||||
|
// { id: '{u', time: 300n, cmd: 30, value: 0xf000000000000000n, mask: 0n },
|
||||||
|
// { id: 'u)', time: 300n, cmd: 30, value: 0n, mask: 0n },
|
||||||
|
// { id: '{u', time: 301n, cmd: 30, value: 0x0f00000000000000n, mask: 0n },
|
||||||
|
// { id: 'u)', time: 301n, cmd: 30, value: 1n, mask: 0n },
|
||||||
|
// { id: '{u', time: 302n, cmd: 30, value: 0x00f0000000000000n, mask: 0n },
|
||||||
|
// { id: 'u)', time: 302n, cmd: 30, value: 2n, mask: 0n },
|
||||||
|
// { id: '{u', time: 303n, cmd: 30, value: 0x000f000000000000n, mask: 0n },
|
||||||
|
// { id: 'u)', time: 303n, cmd: 30, value: 3n, mask: 0n },
|
||||||
|
// { id: '{u', time: 304n, cmd: 30, value: 0x0000f00000000000n, mask: 0n },
|
||||||
|
// { id: 'u)', time: 304n, cmd: 30, value: 4n, mask: 0n },
|
||||||
|
// { id: '{u', time: 305n, cmd: 30, value: 0x00000f0000000000n, mask: 0n },
|
||||||
|
// { id: 'u)', time: 305n, cmd: 30, value: 5n, mask: 0n },
|
||||||
|
// { id: '{u', time: 306n, cmd: 30, value: 0x000000f000000000n, mask: 0n },
|
||||||
|
// { id: 'u)', time: 306n, cmd: 30, value: 6n, mask: 0n },
|
||||||
|
// { id: '{u', time: 307n, cmd: 30, value: 0x0000000f00000000n, mask: 0n },
|
||||||
|
// { id: 'u)', time: 307n, cmd: 30, value: 7n, mask: 0n },
|
||||||
|
// { id: '{u', time: 308n, cmd: 31, value: 0x00000000f0000000n, mask: 0n },
|
||||||
|
// { id: 'u)', time: 308n, cmd: 30, value: 8n, mask: 0n },
|
||||||
|
// { id: '{u', time: 309n, cmd: 30, value: 0x000000000f000000n, mask: 0n },
|
||||||
|
// { id: 'u)', time: 309n, cmd: 30, value: 9n, mask: 0n },
|
||||||
|
// { id: '{u', time: 310n, cmd: 30, value: 0x0000000000f00000n, mask: 0n },
|
||||||
|
// { id: 'u)', time: 310n, cmd: 30, value: 10n, mask: 0n },
|
||||||
|
// { id: '{u', time: 311n, cmd: 30, value: 0x00000000000f0000n, mask: 0n },
|
||||||
|
// { id: 'u)', time: 311n, cmd: 30, value: 11n, mask: 0n },
|
||||||
|
// { id: '{u', time: 312n, cmd: 30, value: 0x000000000000f000n, mask: 0n },
|
||||||
|
// { id: 'u)', time: 312n, cmd: 30, value: 12n, mask: 0n },
|
||||||
|
// { id: '{u', time: 313n, cmd: 30, value: 0x0000000000000f00n, mask: 0n },
|
||||||
|
// { id: 'u)', time: 313n, cmd: 30, value: 13n, mask: 0n },
|
||||||
|
// { id: '{u', time: 314n, cmd: 30, value: 0x00000000000000f0n, mask: 0n },
|
||||||
|
// { id: 'u)', time: 314n, cmd: 30, value: 14n, mask: 0n },
|
||||||
|
// { id: '{u', time: 315n, cmd: 30, value: 0x000000000000000fn, mask: 0n },
|
||||||
|
// { id: 'u)', time: 315n, cmd: 30, value: 15n, mask: 0n },
|
||||||
|
// { id: '"}G', time: 316n, cmd: 15, value: 0n, mask: 0n }
|
||||||
|
// ];
|
||||||
|
|
||||||
|
// describe('napi dump', function () {
|
||||||
|
// it('simple napi', done => {
|
||||||
|
// fs.readFile(path.join(__dirname, 'dump.vcd'), function (err, src) {
|
||||||
|
// if (err) {
|
||||||
|
// throw new Error(err);
|
||||||
|
// }
|
||||||
|
// const inst = parser();
|
||||||
|
// const dump = [];
|
||||||
|
// ['"}G', '{u', 'u)'] // array of all signal ids
|
||||||
|
// .map(id =>
|
||||||
|
// inst.change.on(id, (time, cmd, value, mask) => {
|
||||||
|
// const row = {
|
||||||
|
// id,
|
||||||
|
// time: BigInt(time),
|
||||||
|
// cmd,
|
||||||
|
// value,
|
||||||
|
// mask
|
||||||
|
// };
|
||||||
|
// dump.push(row);
|
||||||
|
// // console.log(row);
|
||||||
|
// })
|
||||||
|
// );
|
||||||
|
|
||||||
|
// inst.on('finish', () => {
|
||||||
|
// expect(inst.getTime()).to.eq(316n);
|
||||||
|
// expect(dump).to.deep.eq(expectaitions);
|
||||||
|
// done();
|
||||||
|
// });
|
||||||
|
|
||||||
|
// for (const chunk of chopper(src, 100)) {
|
||||||
|
// // console.log('\u001b[31m[\u001b[0m' + chunk.toString() + '\u001b[31m]\u001b[0m');
|
||||||
|
// inst.write(chunk);
|
||||||
|
// }
|
||||||
|
// inst.end();
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
|
||||||
|
// /* eslint-env mocha */
|
79
backup/napi_events.js
Normal file
79
backup/napi_events.js
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
// 'use strict';
|
||||||
|
|
||||||
|
// const expect = require('chai').expect;
|
||||||
|
// const parser = require('../lib/parser.js');
|
||||||
|
|
||||||
|
// describe('events', () => {
|
||||||
|
|
||||||
|
// it('$enddefinitions', done => {
|
||||||
|
// const inst = parser();
|
||||||
|
// inst.on('$enddefinitions', () => {
|
||||||
|
// expect(inst.info).to.deep.eq({
|
||||||
|
// status: 'simulation',
|
||||||
|
// date: ' Wed Sep 18 22:59:07 2019\n ',
|
||||||
|
// version: ' Generated by VerilatedVcd ',
|
||||||
|
// timescale: ' 1ns ',
|
||||||
|
// varId: 'u)',
|
||||||
|
// wires: {
|
||||||
|
// top: {
|
||||||
|
// clock: '"}G',
|
||||||
|
// fruit: {
|
||||||
|
// point: 'u)'
|
||||||
|
// },
|
||||||
|
// leaf: {
|
||||||
|
// counter: '{u'
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// stack: [{
|
||||||
|
// top: {
|
||||||
|
// clock: '"}G',
|
||||||
|
// fruit: {
|
||||||
|
// point: 'u)'
|
||||||
|
// },
|
||||||
|
// leaf: {
|
||||||
|
// counter: '{u'
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// clock: '"}G',
|
||||||
|
// fruit: {
|
||||||
|
// point: 'u)'
|
||||||
|
// },
|
||||||
|
// leaf: {
|
||||||
|
// counter: '{u'
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// point: 'u)'
|
||||||
|
// }]
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
// expect(inst.write(`
|
||||||
|
// $version Generated by VerilatedVcd $end
|
||||||
|
// $date Wed Sep 18 22:59:07 2019
|
||||||
|
// $end
|
||||||
|
// $timescale 1ns $end
|
||||||
|
|
||||||
|
// $scope module top $end
|
||||||
|
// $var wire 1 "}G clock $end
|
||||||
|
// $scope module leaf $end
|
||||||
|
// $var wire 64 {u counter [63:0] $end
|
||||||
|
// $upscope $end
|
||||||
|
// $scope module fruit $end
|
||||||
|
// $var wire 4 u) point [3:0] $end
|
||||||
|
// $upscope $end
|
||||||
|
// $upscope $end
|
||||||
|
|
||||||
|
// $enddefinitions $end
|
||||||
|
// `
|
||||||
|
// )).to.eq(true);
|
||||||
|
|
||||||
|
// done();
|
||||||
|
// });
|
||||||
|
|
||||||
|
|
||||||
|
// });
|
||||||
|
|
||||||
|
// /* eslint-env mocha */
|
72
backup/wasm_any.js
Normal file
72
backup/wasm_any.js
Normal file
File diff suppressed because one or more lines are too long
135
backup/wasm_basic.js
Normal file
135
backup/wasm_basic.js
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
// 'use strict';
|
||||||
|
// /* eslint-disable no-console */
|
||||||
|
// /* eslint-disable indent */
|
||||||
|
// /* eslint-disable no-unused-vars */
|
||||||
|
|
||||||
|
// const expect = require('chai').expect;
|
||||||
|
// const createVCD = require('../out/vcd.js');
|
||||||
|
// const webVcdParser = require('../lib/web-vcd-parser.js');
|
||||||
|
|
||||||
|
// describe('wasm basic', () => {
|
||||||
|
|
||||||
|
// it('typeof vcd', async function () {
|
||||||
|
// const mod = await createVCD();
|
||||||
|
// expect(mod).to.be.an('object');
|
||||||
|
// });
|
||||||
|
|
||||||
|
// it('typeof vcd instance', async function () {
|
||||||
|
// const mod = await createVCD();
|
||||||
|
// const inst = await webVcdParser(mod);
|
||||||
|
// expect(inst).to.be.an('object');
|
||||||
|
// });
|
||||||
|
|
||||||
|
// it('fail: foo bar', async function () {
|
||||||
|
// const mod = await createVCD();
|
||||||
|
// const inst = await webVcdParser(mod);
|
||||||
|
// expect(inst.write(Buffer.from(' foo bar ???'))).to.eq(true);
|
||||||
|
// expect(inst.info).to.deep.eq({
|
||||||
|
// stack: [{}],
|
||||||
|
// status: 'declaration',
|
||||||
|
// wires: {}
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
|
||||||
|
// it('$comment', async function () {
|
||||||
|
// const mod = await createVCD();
|
||||||
|
// const inst = await webVcdParser(mod);
|
||||||
|
// expect(inst.write(Buffer.from(
|
||||||
|
// ' \n $comment some text $end $comment more text $end ???'
|
||||||
|
// ))).to.eq(true);
|
||||||
|
// expect(inst.info).to.deep.eq({
|
||||||
|
// comment: ' more text ',
|
||||||
|
// stack: [{}],
|
||||||
|
// status: 'declaration',
|
||||||
|
// wires: {}
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
|
||||||
|
// it('$version', async function () {
|
||||||
|
// const mod = await createVCD();
|
||||||
|
// const inst = await webVcdParser(mod);
|
||||||
|
// expect(inst.write(`
|
||||||
|
// $version Generated by VerilatedVcd $end
|
||||||
|
// $date Wed Sep 18 22:59:07 2019
|
||||||
|
// $end
|
||||||
|
// $timescale 1ns $end
|
||||||
|
|
||||||
|
// $scope module top $end
|
||||||
|
// $var wire 1 "}G clock $end
|
||||||
|
// $scope module leaf $end
|
||||||
|
// $var wire 64 {u counter [63:0] $end
|
||||||
|
// $upscope $end
|
||||||
|
// $scope module fruit $end
|
||||||
|
// $var wire 4 u) point [3:0] $end
|
||||||
|
// $upscope $end
|
||||||
|
// $upscope $end
|
||||||
|
|
||||||
|
// $enddefinitions $end
|
||||||
|
// `
|
||||||
|
// )).to.eq(true);
|
||||||
|
|
||||||
|
// expect(inst.write(`
|
||||||
|
|
||||||
|
// #1
|
||||||
|
// 0"}G
|
||||||
|
// #2
|
||||||
|
// 1"}G
|
||||||
|
// #300
|
||||||
|
// 0"}G
|
||||||
|
// b1111000000000000 {u
|
||||||
|
// #301
|
||||||
|
// b0000111100000000 {u
|
||||||
|
// #302
|
||||||
|
// b0000000011110000 {u
|
||||||
|
// #303
|
||||||
|
// b0000000000001111 {u
|
||||||
|
// `
|
||||||
|
// )).to.eq(true);
|
||||||
|
|
||||||
|
// expect(inst.info).to.deep.eq({
|
||||||
|
// status: 'simulation',
|
||||||
|
// date: ' Wed Sep 18 22:59:07 2019\n ',
|
||||||
|
// version: ' Generated by VerilatedVcd ',
|
||||||
|
// timescale: ' 1ns ',
|
||||||
|
// t0: 1,
|
||||||
|
// varId: 'u)',
|
||||||
|
// wires: {
|
||||||
|
// top: {
|
||||||
|
// clock: '"}G',
|
||||||
|
// fruit: {
|
||||||
|
// point: 'u)'
|
||||||
|
// },
|
||||||
|
// leaf: {
|
||||||
|
// counter: '{u'
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// stack: [{
|
||||||
|
// top: {
|
||||||
|
// clock: '"}G',
|
||||||
|
// fruit: {
|
||||||
|
// point: 'u)'
|
||||||
|
// },
|
||||||
|
// leaf: {
|
||||||
|
// counter: '{u'
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// clock: '"}G',
|
||||||
|
// fruit: {
|
||||||
|
// point: 'u)'
|
||||||
|
// },
|
||||||
|
// leaf: {
|
||||||
|
// counter: '{u'
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// point: 'u)'
|
||||||
|
// }]
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
|
||||||
|
// });
|
||||||
|
|
||||||
|
// /* eslint-env mocha */
|
98
backup/wasm_dump.js
Normal file
98
backup/wasm_dump.js
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
// 'use strict';
|
||||||
|
// /* eslint-disable no-console */
|
||||||
|
// /* eslint-disable indent */
|
||||||
|
// /* eslint-disable no-unused-vars */
|
||||||
|
|
||||||
|
// const fs = require('fs');
|
||||||
|
// const path = require('path');
|
||||||
|
|
||||||
|
// const expect = require('chai').expect;
|
||||||
|
// const createVCD = require('../out/vcd.js');
|
||||||
|
// const webVcdParser = require('../lib/web-vcd-parser.js');
|
||||||
|
// const chopper = require('../lib/chopper.js');
|
||||||
|
|
||||||
|
// const expectaitions = [
|
||||||
|
// { id: '"}G', time: 100n, cmd: 14, value: undefined, mask: undefined },
|
||||||
|
// { id: '"}G', time: 200n, cmd: 15, value: undefined, mask: undefined },
|
||||||
|
// { id: '{u', time: 200n, cmd: 30, value: 0xf0f0f0f0f0f0f0f0n, mask: 0xff00ff00ff00ff00n },
|
||||||
|
// { id: '"}G', time: 300n, cmd: 14, value: undefined, mask: undefined },
|
||||||
|
// { id: '{u', time: 300n, cmd: 30, value: 0xf000000000000000n, mask: 0n },
|
||||||
|
// { id: 'u)', time: 300n, cmd: 30, value: 0n, mask: 0n },
|
||||||
|
// { id: '{u', time: 301n, cmd: 30, value: 0x0f00000000000000n, mask: 0n },
|
||||||
|
// { id: 'u)', time: 301n, cmd: 30, value: 1n, mask: 0n },
|
||||||
|
// { id: '{u', time: 302n, cmd: 30, value: 0x00f0000000000000n, mask: 0n },
|
||||||
|
// { id: 'u)', time: 302n, cmd: 30, value: 2n, mask: 0n },
|
||||||
|
// { id: '{u', time: 303n, cmd: 30, value: 0x000f000000000000n, mask: 0n },
|
||||||
|
// { id: 'u)', time: 303n, cmd: 30, value: 3n, mask: 0n },
|
||||||
|
// { id: '{u', time: 304n, cmd: 30, value: 0x0000f00000000000n, mask: 0n },
|
||||||
|
// { id: 'u)', time: 304n, cmd: 30, value: 4n, mask: 0n },
|
||||||
|
// { id: '{u', time: 305n, cmd: 30, value: 0x00000f0000000000n, mask: 0n },
|
||||||
|
// { id: 'u)', time: 305n, cmd: 30, value: 5n, mask: 0n },
|
||||||
|
// { id: '{u', time: 306n, cmd: 30, value: 0x000000f000000000n, mask: 0n },
|
||||||
|
// { id: 'u)', time: 306n, cmd: 30, value: 6n, mask: 0n },
|
||||||
|
// { id: '{u', time: 307n, cmd: 30, value: 0x0000000f00000000n, mask: 0n },
|
||||||
|
// { id: 'u)', time: 307n, cmd: 30, value: 7n, mask: 0n },
|
||||||
|
// { id: '{u', time: 308n, cmd: 31, value: 0x00000000f0000000n, mask: 0n },
|
||||||
|
// { id: 'u)', time: 308n, cmd: 30, value: 8n, mask: 0n },
|
||||||
|
// { id: '{u', time: 309n, cmd: 30, value: 0x000000000f000000n, mask: 0n },
|
||||||
|
// { id: 'u)', time: 309n, cmd: 30, value: 9n, mask: 0n },
|
||||||
|
// { id: '{u', time: 310n, cmd: 30, value: 0x0000000000f00000n, mask: 0n },
|
||||||
|
// { id: 'u)', time: 310n, cmd: 30, value: 10n, mask: 0n },
|
||||||
|
// { id: '{u', time: 311n, cmd: 30, value: 0x00000000000f0000n, mask: 0n },
|
||||||
|
// { id: 'u)', time: 311n, cmd: 30, value: 11n, mask: 0n },
|
||||||
|
// { id: '{u', time: 312n, cmd: 30, value: 0x000000000000f000n, mask: 0n },
|
||||||
|
// { id: 'u)', time: 312n, cmd: 30, value: 12n, mask: 0n },
|
||||||
|
// { id: '{u', time: 313n, cmd: 30, value: 0x0000000000000f00n, mask: 0n },
|
||||||
|
// { id: 'u)', time: 313n, cmd: 30, value: 13n, mask: 0n },
|
||||||
|
// { id: '{u', time: 314n, cmd: 30, value: 0x00000000000000f0n, mask: 0n },
|
||||||
|
// { id: 'u)', time: 314n, cmd: 30, value: 14n, mask: 0n },
|
||||||
|
// { id: '{u', time: 315n, cmd: 30, value: 0x000000000000000fn, mask: 0n },
|
||||||
|
// { id: 'u)', time: 315n, cmd: 30, value: 15n, mask: 0n },
|
||||||
|
// { id: '"}G', time: 316n, cmd: 15, value: undefined, mask: undefined }
|
||||||
|
// ];
|
||||||
|
|
||||||
|
// describe('wasm dump', () => {
|
||||||
|
// it('simple wasm', done => {
|
||||||
|
// fs.readFile(path.join(__dirname, 'dump.vcd'), function (err, src) {
|
||||||
|
// if (err) {
|
||||||
|
// throw new Error(err);
|
||||||
|
// }
|
||||||
|
// createVCD().then((mod) => {
|
||||||
|
// webVcdParser(mod).then((inst) => {
|
||||||
|
// const dump = [];
|
||||||
|
// ['"}G', '{u', 'u)'] // array of all signal ids
|
||||||
|
// .map(id =>
|
||||||
|
// inst.change.on(id, (time, cmd, value, mask) => {
|
||||||
|
// const row = {
|
||||||
|
// id,
|
||||||
|
// time,
|
||||||
|
// cmd,
|
||||||
|
// value,
|
||||||
|
// mask
|
||||||
|
// };
|
||||||
|
// dump.push(row);
|
||||||
|
// // console.log(row);
|
||||||
|
// })
|
||||||
|
// );
|
||||||
|
|
||||||
|
// inst.on('finish', () => {
|
||||||
|
// expect(inst.getTime()).to.eq(316n);
|
||||||
|
// // console.log(dump);
|
||||||
|
// // expect(dump.length).to.eq(expectaitions.length);
|
||||||
|
// expect(dump).to.deep.eq(expectaitions);
|
||||||
|
// done();
|
||||||
|
// });
|
||||||
|
// const step = (Math.random() * 500) |0;
|
||||||
|
// for (const chunk of chopper(src, step)) {
|
||||||
|
// // console.log('\n\u001b[31m[\u001b[0m' + chunk.toString() + '\u001b[31m](\u001b[0m\n' + chunk.length + '\u001b[31m)\u001b[0m\n');
|
||||||
|
// inst.write(chunk);
|
||||||
|
// }
|
||||||
|
// inst.end();
|
||||||
|
// // console.log(step);
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
|
||||||
|
// /* eslint-env mocha */
|
83
backup/wasm_events.js
Normal file
83
backup/wasm_events.js
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
// 'use strict';
|
||||||
|
// /* eslint-disable no-console */
|
||||||
|
// /* eslint-disable indent */
|
||||||
|
// /* eslint-disable no-unused-vars */
|
||||||
|
|
||||||
|
// const expect = require('chai').expect;
|
||||||
|
// const createVCD = require('../out/vcd.js');
|
||||||
|
// const webVcdParser = require('../lib/web-vcd-parser.js');
|
||||||
|
|
||||||
|
// describe('wasm events', () => {
|
||||||
|
|
||||||
|
// it('$enddefinitions', async function () {
|
||||||
|
// const mod = await createVCD();
|
||||||
|
// const inst = await webVcdParser(mod);
|
||||||
|
|
||||||
|
// inst.on('$enddefinitions', () => {
|
||||||
|
// expect(inst.info).to.deep.eq({
|
||||||
|
// status: 'simulation',
|
||||||
|
// timescale: ' 1ns ',
|
||||||
|
// date: ' Wed Sep 18 22:59:07 2019\n ',
|
||||||
|
// version: ' Generated by VerilatedVcd ',
|
||||||
|
// varId: 'u)',
|
||||||
|
// wires: {
|
||||||
|
// top: {
|
||||||
|
// clock: '"}G',
|
||||||
|
// fruit: {
|
||||||
|
// point: 'u)'
|
||||||
|
// },
|
||||||
|
// leaf: {
|
||||||
|
// counter: '{u'
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// stack: [{
|
||||||
|
// top: {
|
||||||
|
// clock: '"}G',
|
||||||
|
// fruit: {
|
||||||
|
// point: 'u)'
|
||||||
|
// },
|
||||||
|
// leaf: {
|
||||||
|
// counter: '{u'
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// clock: '"}G',
|
||||||
|
// fruit: {
|
||||||
|
// point: 'u)'
|
||||||
|
// },
|
||||||
|
// leaf: {
|
||||||
|
// counter: '{u'
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// point: 'u)'
|
||||||
|
// }]
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
// expect(inst.write(`
|
||||||
|
// $version Generated by VerilatedVcd $end
|
||||||
|
// $date Wed Sep 18 22:59:07 2019
|
||||||
|
// $end
|
||||||
|
// $timescale 1ns $end
|
||||||
|
|
||||||
|
// $scope module top $end
|
||||||
|
// $var wire 1 "}G clock $end
|
||||||
|
// $scope module leaf $end
|
||||||
|
// $var wire 64 {u counter [63:0] $end
|
||||||
|
// $upscope $end
|
||||||
|
// $scope module fruit $end
|
||||||
|
// $var wire 4 u) point [3:0] $end
|
||||||
|
// $upscope $end
|
||||||
|
// $upscope $end
|
||||||
|
|
||||||
|
// $enddefinitions $end
|
||||||
|
// `
|
||||||
|
// )).to.eq(true);
|
||||||
|
// });
|
||||||
|
|
||||||
|
|
||||||
|
// });
|
||||||
|
|
||||||
|
// /* eslint-env mocha */
|
507
bin/build.js
507
bin/build.js
@ -1,311 +1,268 @@
|
|||||||
#!/usr/bin/env node
|
#!/usr/bin/env node
|
||||||
|
/* eslint-disable no-console */
|
||||||
|
/* eslint-disable indent */
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const cp = require('child_process');
|
const cp = require('child_process');
|
||||||
const llparse = require('llparse');
|
const llparse = require('llparse');
|
||||||
|
|
||||||
const gyp = cb => {
|
|
||||||
console.log('build');
|
|
||||||
const proc = cp.spawn('node-gyp', ['configure', 'build']);
|
|
||||||
proc.stderr.on('data', data => {
|
|
||||||
console.error(data.toString());
|
|
||||||
});
|
|
||||||
proc.on('close', (cb || (() => {
|
|
||||||
console.log('done');
|
|
||||||
})));
|
|
||||||
};
|
|
||||||
|
|
||||||
const objection = lut => arg => arg.split(/\s+/).reduce((res, key) => {
|
const objection = lut => arg => arg.split(/\s+/).reduce((res, key) => {
|
||||||
if (lut[key] === undefined) {
|
if (lut[key] === undefined) {
|
||||||
throw new Error(key);
|
throw new Error(key);
|
||||||
}
|
}
|
||||||
res[key] = lut[key];
|
res[key] = lut[key];
|
||||||
return res;
|
return res;
|
||||||
}, {});
|
}, {});
|
||||||
|
|
||||||
const properties = {
|
const properties = {
|
||||||
command: 'i8',
|
command: 'i8',
|
||||||
type: 'i8',
|
type: 'i8',
|
||||||
size: 'i32',
|
size: 'i32',
|
||||||
time: 'i64', // current simulation time
|
time: 'i64', // current simulation time
|
||||||
trigger: 'ptr',
|
trigger: 'ptr',
|
||||||
triee: 'ptr', // trigger event emitter
|
triee: 'ptr', // trigger event emitter
|
||||||
lifee: 'ptr', // life cycle event emmiter
|
lifee: 'ptr', // life cycle event emmiter
|
||||||
info: 'ptr',
|
info: 'ptr',
|
||||||
value: 'ptr', // value of the signal on change event
|
value: 'ptr', // value of the signal on change event
|
||||||
mask: 'ptr', // mask (x, z) of the signal on change event
|
mask: 'ptr', // mask (x, z) of the signal on change event
|
||||||
digitCount: 'i32',
|
digitCount: 'i32',
|
||||||
maskCount: 'i32',
|
maskCount: 'i32',
|
||||||
tmpStr: 'ptr',
|
tmpStr: 'ptr',
|
||||||
timeStampStr: 'ptr',
|
timeStampStr: 'ptr',
|
||||||
idStr: 'ptr',
|
idStr: 'ptr',
|
||||||
tmpStr2: 'ptr',
|
tmpStr2: 'ptr',
|
||||||
stackPointer: 'i32',
|
stackPointer: 'i32',
|
||||||
id: 'ptr',
|
id: 'ptr',
|
||||||
napi_env: 'ptr'
|
napi_env: 'ptr'
|
||||||
};
|
};
|
||||||
|
|
||||||
const spaces = [' ', '\n', '\r', '\t'];
|
const spaces = [' ', '\n', '\r', '\t'];
|
||||||
const lineSpaces = [' ', '\t'];
|
const lineSpaces = [' ', '\t'];
|
||||||
|
|
||||||
const generate = (cb) => {
|
function main() {
|
||||||
// const llparseDot = require('llparse-dot');
|
const projectName = 'vcd_parser';
|
||||||
|
|
||||||
const prj = 'vcd_parser';
|
// 有关左推解析器框架 llparse 的文章,移步我之前的博客:https://kirigaya.cn/blog/article?seq=223
|
||||||
const p = new llparse.LLParse(prj);
|
// 如果需要可视化项目图,可以取消下面的注释
|
||||||
|
// const { Dot } = require('llparse-dot');
|
||||||
|
// const llDot = new Dot();
|
||||||
|
// const dotCodeString = llDot.build(method);
|
||||||
|
// fs.writeFileSync(projectName + '.dot', code, { encoding: 'utf-8' });
|
||||||
|
|
||||||
|
// 项目名为 vcd_parser
|
||||||
|
const p = new llparse.LLParse(projectName);
|
||||||
|
|
||||||
|
// 注册一些属性
|
||||||
|
for (const propertyName of Object.keys(properties)) {
|
||||||
|
const propertyType = properties[propertyName];
|
||||||
|
p.property(propertyType, propertyName);
|
||||||
|
}
|
||||||
|
|
||||||
Object.keys(properties).map(key => p.property(properties[key], key));
|
// 自定义 code span,对于游走到这些 span 后要如何处理,都在 vcd_span.c 文件里
|
||||||
|
// 比如对于 varNameSpan 的定义,在 vcd_span.c 中存在一个同名的函数来定义它
|
||||||
|
const varSizeSpan = p.span(p.code.span('varSizeSpan'));
|
||||||
|
const varIdSpan = p.span(p.code.span('varIdSpan'));
|
||||||
|
const varNameSpan = p.span(p.code.span('varNameSpan'));
|
||||||
|
const idSpan = p.span(p.code.span('idSpan'));
|
||||||
|
const commandSpan = p.span(p.code.span('commandSpan'));
|
||||||
|
const timeSpan = p.span(p.code.span('timeSpan'));
|
||||||
|
|
||||||
|
// 自定义 node, 他们都是具体的节点
|
||||||
|
const declaration = p.node('declaration');
|
||||||
|
const varType = p.node('varType');
|
||||||
|
const varTypeEnd = p.node('varTypeEnd');
|
||||||
|
const varSize = p.node('varSize');
|
||||||
|
const varSizeEnd = p.node('varSizeEnd');
|
||||||
|
const varId = p.node('varId');
|
||||||
|
const varIdEnd = p.node('varIdEnd');
|
||||||
|
const varName = p.node('varName');
|
||||||
|
const varNameEnd = p.node('varNameEnd');
|
||||||
|
const inDeclaration = p.node('inDeclaration');
|
||||||
|
const simulation = p.node('simulation');
|
||||||
|
const inSimulation = p.node('inSimulation');
|
||||||
|
const simulationTime = p.node('simulationTime');
|
||||||
|
const simulationVector = p.node('simulationVector');
|
||||||
|
const simulationVectorEnd = p.node('simulationVectorEnd');
|
||||||
|
const simulationVectorRecovery = p.node('simulationVectorRecovery');
|
||||||
|
const simulationId = p.node('simulationId');
|
||||||
|
const enddefinitions = p.node('inDeclarationEnd');
|
||||||
|
// scopeType scopeTypeEnd
|
||||||
|
// scopeIdentifier scopeIdentifierEnd
|
||||||
|
|
||||||
const {
|
const cmd = objection({
|
||||||
// scopeIdentifierSpan,
|
$comment: 1,
|
||||||
varSizeSpan, varIdSpan, varNameSpan,
|
$date: 2,
|
||||||
idSpan,
|
$scope: 3,
|
||||||
commandSpan,
|
$timescale: 4,
|
||||||
timeSpan
|
$upscope: 5,
|
||||||
} = `
|
$var: 6,
|
||||||
varSizeSpan varIdSpan varNameSpan
|
$version: 7,
|
||||||
idSpan
|
$enddefinitions: 8,
|
||||||
commandSpan
|
$dumpall: 9,
|
||||||
timeSpan
|
$dumpoff: 10,
|
||||||
`
|
$dumpon: 11,
|
||||||
.trim().split(/\s+/)
|
$dumpvars: 12,
|
||||||
.reduce((res, n) => Object.assign(res, {[n]: p.span(p.code.span(n))}), {});
|
'#': 13,
|
||||||
|
'0': 14,
|
||||||
|
'1': 15,
|
||||||
|
x: 16, X: 17,
|
||||||
|
z: 18, Z: 19,
|
||||||
|
u: 20, U: 21, // VHDL states
|
||||||
|
w: 22, W: 23,
|
||||||
|
l: 24, L: 25,
|
||||||
|
h: 26, H: 27,
|
||||||
|
'-': 28,
|
||||||
|
b: 30, B: 31, r: 32, R: 33
|
||||||
|
});
|
||||||
|
|
||||||
// scopeIdentifierSpan
|
|
||||||
|
|
||||||
const {
|
// p.code.store('command') 的具体执行逻辑移步 command-handler.js 中的 commandHandler
|
||||||
declaration,
|
|
||||||
// scopeType, scopeTypeEnd,
|
|
||||||
// scopeIdentifier, scopeIdentifierEnd,
|
|
||||||
varType, varTypeEnd,
|
|
||||||
varSize, varSizeEnd,
|
|
||||||
varId, varIdEnd,
|
|
||||||
varName, varNameEnd,
|
|
||||||
inDeclaration,
|
|
||||||
simulation,
|
|
||||||
inSimulation,
|
|
||||||
simulationTime,
|
|
||||||
simulationVector, simulationVectorEnd, simulationVectorRecovery,
|
|
||||||
simulationId
|
|
||||||
} = `
|
|
||||||
declaration
|
declaration
|
||||||
varType varTypeEnd
|
.match(spaces, declaration)
|
||||||
varSize varSizeEnd
|
.select(cmd('$scope $var $upscope $comment $date $timescale $version #'),
|
||||||
varId varIdEnd
|
p.invoke(p.code.store('command'), commandSpan.start(inDeclaration)))
|
||||||
varName varNameEnd
|
.select(cmd('$enddefinitions'),
|
||||||
|
p.invoke(p.code.store('command'), commandSpan.start(enddefinitions)))
|
||||||
|
.otherwise(p.error(1, 'Expected declaration command'));
|
||||||
|
|
||||||
|
|
||||||
|
varType.match(spaces, varType).otherwise(varTypeEnd);
|
||||||
|
varTypeEnd
|
||||||
|
.select({
|
||||||
|
event: 1,
|
||||||
|
integer: 2,
|
||||||
|
parameter: 3,
|
||||||
|
real: 4,
|
||||||
|
realtime: 5,
|
||||||
|
reg: 6,
|
||||||
|
supply0: 7,
|
||||||
|
supply1: 8,
|
||||||
|
time: 9,
|
||||||
|
tri: 10,
|
||||||
|
triand: 11,
|
||||||
|
trior: 12,
|
||||||
|
trireg: 13,
|
||||||
|
tri0: 14,
|
||||||
|
tri1: 15,
|
||||||
|
wand: 16,
|
||||||
|
wire: 17,
|
||||||
|
wor: 18
|
||||||
|
}, p.invoke(p.code.store('type'), varSize))
|
||||||
|
.otherwise(p.error(3, 'Expected var type'));
|
||||||
|
|
||||||
|
// $var reg 3 ( r_reg [2:0] $end
|
||||||
|
// ^
|
||||||
|
|
||||||
|
varSize.match(spaces, varSize).otherwise(varSizeSpan.start(varSizeEnd));
|
||||||
|
varSizeEnd.match(spaces, varSizeSpan.end(varId)).skipTo(varSizeEnd);
|
||||||
|
|
||||||
|
// $var reg 3 ( r_reg [2:0] $end
|
||||||
|
// ^
|
||||||
|
|
||||||
|
varId.match(spaces, varId).otherwise(varIdSpan.start(varIdEnd));
|
||||||
|
varIdEnd.match(spaces, varIdSpan.end(varName)).skipTo(varIdEnd);
|
||||||
|
|
||||||
|
// $var reg 3 ( r_reg [2:0] $end
|
||||||
|
// ^^^^^
|
||||||
|
|
||||||
|
varName.match(spaces, varName).otherwise(varNameSpan.start(varNameEnd));
|
||||||
|
varNameEnd.match('$end', commandSpan.end(varNameSpan.end(declaration))).skipTo(varNameEnd);
|
||||||
|
|
||||||
|
// $end
|
||||||
|
|
||||||
inDeclaration
|
inDeclaration
|
||||||
|
.match('$end', commandSpan.end(declaration))
|
||||||
|
.skipTo(inDeclaration);
|
||||||
|
|
||||||
|
enddefinitions
|
||||||
|
.match('$end', commandSpan.end(simulation))
|
||||||
|
.skipTo(enddefinitions);
|
||||||
|
|
||||||
simulation
|
simulation
|
||||||
|
.match([' ', '\r', '\n', '\t', '$dumpvars', '$dumpall', '$end'], simulation)
|
||||||
|
.select(cmd('$dumpoff $dumpon $comment'),
|
||||||
|
p.invoke(p.code.store('command'), commandSpan.start(inSimulation)))
|
||||||
|
.select(cmd('#'),
|
||||||
|
p.invoke(p.code.store('command'), timeSpan.start(simulationTime)))
|
||||||
|
.select(cmd('0 1 x X z Z u U w W l L h H -'),
|
||||||
|
p.invoke(p.code.store('command'), idSpan.start(simulationId)))
|
||||||
|
.select(cmd('b B r R'),
|
||||||
|
p.invoke(p.code.store('command'), simulationVector))
|
||||||
|
.otherwise(p.error(4, 'Expected simulation command'));
|
||||||
|
|
||||||
inSimulation
|
inSimulation
|
||||||
|
.match('$end', commandSpan.end(simulation))
|
||||||
|
.skipTo(inSimulation);
|
||||||
|
|
||||||
simulationTime
|
simulationTime
|
||||||
simulationVector simulationVectorEnd simulationVectorRecovery
|
.match(spaces, timeSpan.end(p.invoke(p.code.span('onTime'), simulation)))
|
||||||
|
.skipTo(simulationTime);
|
||||||
|
|
||||||
|
simulationVector
|
||||||
|
.select(
|
||||||
|
{
|
||||||
|
0: 0,
|
||||||
|
1: 1,
|
||||||
|
x: 2, X: 2,
|
||||||
|
z: 3, Z: 3,
|
||||||
|
u: 3, U: 3, // VHDL states
|
||||||
|
w: 3, W: 3,
|
||||||
|
l: 3, L: 3,
|
||||||
|
h: 3, H: 3,
|
||||||
|
'-': 3
|
||||||
|
},
|
||||||
|
p.invoke(
|
||||||
|
// p.code.mulAdd('value', {base: 2, signed: false}),
|
||||||
|
p.code.value('onDigit'),
|
||||||
|
{ 1: p.error(5, 'Content-Length overflow') },
|
||||||
|
simulationVector
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.otherwise(simulationVectorEnd);
|
||||||
|
|
||||||
|
simulationVectorEnd
|
||||||
|
.match(lineSpaces, idSpan.start(simulationId))
|
||||||
|
.skipTo(simulationVectorRecovery);
|
||||||
|
|
||||||
|
simulationVectorRecovery
|
||||||
|
.select(
|
||||||
|
{
|
||||||
|
'\n': 1, '\r': 1
|
||||||
|
},
|
||||||
|
p.invoke(
|
||||||
|
p.code.value('onRecover'),
|
||||||
|
{ 1: p.error(6, 'recover') },
|
||||||
|
simulation
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.skipTo(simulationVectorRecovery);
|
||||||
|
|
||||||
simulationId
|
simulationId
|
||||||
`
|
.match(spaces, idSpan.end(p.invoke(p.code.span('onId'), simulation)))
|
||||||
.trim().split(/\s+/)
|
.skipTo(simulationId);
|
||||||
.reduce((res, n) => Object.assign(res, {[n]: p.node(n)}), {});
|
|
||||||
|
|
||||||
// scopeType scopeTypeEnd
|
const artifacts = p.build(declaration);
|
||||||
// scopeIdentifier scopeIdentifierEnd
|
|
||||||
|
|
||||||
const enddefinitions = p.node('inDeclarationEnd');
|
fs.writeFileSync(projectName + '.h', artifacts.header);
|
||||||
|
// fs.writeFileSync('verilog_preprocessor.bc', artifacts.bitcode);
|
||||||
|
fs.writeFileSync(projectName + '.c', artifacts.c);
|
||||||
|
|
||||||
const cmd = objection({
|
// const dot = new llparseDot.Dot();
|
||||||
$comment: 1,
|
// fs.writeFileSync(projectName + '.dot', dot.build(declaration));
|
||||||
$date: 2,
|
|
||||||
$scope: 3,
|
|
||||||
$timescale: 4,
|
|
||||||
$upscope: 5,
|
|
||||||
$var: 6,
|
|
||||||
$version: 7,
|
|
||||||
$enddefinitions: 8,
|
|
||||||
$dumpall: 9,
|
|
||||||
$dumpoff: 10,
|
|
||||||
$dumpon: 11,
|
|
||||||
$dumpvars: 12,
|
|
||||||
'#': 13,
|
|
||||||
'0': 14, '1': 15,
|
|
||||||
x: 16, X: 17,
|
|
||||||
z: 18, Z: 19,
|
|
||||||
u: 20, U: 21, // VHDL states
|
|
||||||
w: 22, W: 23,
|
|
||||||
l: 24, L: 25,
|
|
||||||
h: 26, H: 27,
|
|
||||||
'-': 28,
|
|
||||||
b: 30, B: 31, r: 32, R: 33
|
|
||||||
});
|
|
||||||
|
|
||||||
declaration
|
// 使用 binding.gyp 把生成的 c 和 h 进行编译
|
||||||
.match(spaces, declaration)
|
console.log('build');
|
||||||
// .select(cmd('$scope'),
|
const proc = cp.spawn('node-gyp', ['configure', 'build']);
|
||||||
// p.invoke(p.code.store('command'), commandSpan.start(scopeType)))
|
proc.stderr.on('data', data => {
|
||||||
// .select(cmd('$var'),
|
console.error(data.toString());
|
||||||
// p.invoke(p.code.store('command'), commandSpan.start(varType)))
|
});
|
||||||
.select(cmd('$scope $var $upscope $comment $date $timescale $version'),
|
proc.on('close', () => {
|
||||||
p.invoke(p.code.store('command'), commandSpan.start(inDeclaration)))
|
console.log('done');
|
||||||
.select(cmd('$enddefinitions'),
|
});
|
||||||
p.invoke(p.code.store('command'), commandSpan.start(enddefinitions)))
|
|
||||||
.otherwise(p.error(1, 'Expected declaration command'));
|
|
||||||
|
|
||||||
// $scope module clkdiv2n_tb $end
|
|
||||||
// ^^^^^^
|
|
||||||
|
|
||||||
// scopeType.match(spaces, scopeType).otherwise(scopeTypeEnd);
|
|
||||||
// scopeTypeEnd
|
|
||||||
// .select(
|
|
||||||
// {
|
|
||||||
// module: 0,
|
|
||||||
// task: 1,
|
|
||||||
// function: 2,
|
|
||||||
// begin: 3,
|
|
||||||
// fork: 4,
|
|
||||||
// // extra scopes from Verilator
|
|
||||||
// generate: 5,
|
|
||||||
// struct: 6,
|
|
||||||
// union: 7,
|
|
||||||
// class: 8,
|
|
||||||
// interface: 9,
|
|
||||||
// package: 10,
|
|
||||||
// program: 11
|
|
||||||
// },
|
|
||||||
// p.invoke(p.code.store('type'), scopeIdentifier))
|
|
||||||
// .otherwise(p.error(2, 'Expected scope type'));
|
|
||||||
|
|
||||||
// $scope module clkdiv2n_tb $end
|
|
||||||
// ^^^^^^^^^^^
|
|
||||||
|
|
||||||
// scopeIdentifier.match(spaces, scopeIdentifier).otherwise(scopeIdentifierSpan.start(scopeIdentifierEnd));
|
|
||||||
// scopeIdentifierEnd.match(spaces, scopeIdentifierSpan.end(inDeclaration)).skipTo(scopeIdentifierEnd);
|
|
||||||
|
|
||||||
// $var reg 3 ( r_reg [2:0] $end
|
|
||||||
// ^^^
|
|
||||||
|
|
||||||
varType.match(spaces, varType).otherwise(varTypeEnd);
|
|
||||||
varTypeEnd
|
|
||||||
.select({
|
|
||||||
event: 1,
|
|
||||||
integer: 2,
|
|
||||||
parameter: 3,
|
|
||||||
real: 4,
|
|
||||||
realtime: 5,
|
|
||||||
reg: 6,
|
|
||||||
supply0: 7,
|
|
||||||
supply1: 8,
|
|
||||||
time: 9,
|
|
||||||
tri: 10,
|
|
||||||
triand: 11,
|
|
||||||
trior: 12,
|
|
||||||
trireg: 13,
|
|
||||||
tri0: 14,
|
|
||||||
tri1: 15,
|
|
||||||
wand: 16,
|
|
||||||
wire: 17,
|
|
||||||
wor: 18
|
|
||||||
}, p.invoke(p.code.store('type'), varSize))
|
|
||||||
.otherwise(p.error(3, 'Expected var type'));
|
|
||||||
|
|
||||||
// $var reg 3 ( r_reg [2:0] $end
|
|
||||||
// ^
|
|
||||||
|
|
||||||
varSize.match(spaces, varSize).otherwise(varSizeSpan.start(varSizeEnd));
|
|
||||||
varSizeEnd.match(spaces, varSizeSpan.end(varId)).skipTo(varSizeEnd);
|
|
||||||
|
|
||||||
// $var reg 3 ( r_reg [2:0] $end
|
|
||||||
// ^
|
|
||||||
|
|
||||||
varId.match(spaces, varId).otherwise(varIdSpan.start(varIdEnd));
|
|
||||||
varIdEnd.match(spaces, varIdSpan.end(varName)).skipTo(varIdEnd);
|
|
||||||
|
|
||||||
// $var reg 3 ( r_reg [2:0] $end
|
|
||||||
// ^^^^^
|
|
||||||
|
|
||||||
varName.match(spaces, varName).otherwise(varNameSpan.start(varNameEnd));
|
|
||||||
varNameEnd.match('$end', commandSpan.end(varNameSpan.end(declaration))).skipTo(varNameEnd);
|
|
||||||
|
|
||||||
// $end
|
|
||||||
|
|
||||||
inDeclaration
|
|
||||||
.match('$end', commandSpan.end(declaration))
|
|
||||||
.skipTo(inDeclaration);
|
|
||||||
|
|
||||||
enddefinitions
|
|
||||||
.match('$end', commandSpan.end(simulation))
|
|
||||||
.skipTo(enddefinitions);
|
|
||||||
|
|
||||||
simulation
|
|
||||||
.match([' ', '\r', '\n', '\t', '$dumpvars', '$end'], simulation)
|
|
||||||
.select(cmd('$dumpall $dumpoff $dumpon $comment'),
|
|
||||||
p.invoke(p.code.store('command'), commandSpan.start(inSimulation)))
|
|
||||||
.select(cmd('#'),
|
|
||||||
p.invoke(p.code.store('command'), timeSpan.start(simulationTime)))
|
|
||||||
.select(cmd('0 1 x X z Z u U w W l L h H -'),
|
|
||||||
p.invoke(p.code.store('command'), idSpan.start(simulationId)))
|
|
||||||
.select(cmd('b B r R'),
|
|
||||||
p.invoke(p.code.store('command'), simulationVector))
|
|
||||||
.otherwise(p.error(4, 'Expected simulation command'));
|
|
||||||
|
|
||||||
inSimulation
|
|
||||||
.match('$end', commandSpan.end(simulation))
|
|
||||||
.skipTo(inSimulation);
|
|
||||||
|
|
||||||
simulationTime
|
|
||||||
.match(spaces, timeSpan.end(p.invoke(p.code.span('onTime'), simulation)))
|
|
||||||
.skipTo(simulationTime);
|
|
||||||
|
|
||||||
simulationVector
|
|
||||||
.select(
|
|
||||||
{
|
|
||||||
0: 0,
|
|
||||||
1: 1,
|
|
||||||
x: 2, X: 2,
|
|
||||||
z: 3, Z: 3,
|
|
||||||
u: 3, U: 3, // VHDL states
|
|
||||||
w: 3, W: 3,
|
|
||||||
l: 3, L: 3,
|
|
||||||
h: 3, H: 3,
|
|
||||||
'-': 3
|
|
||||||
},
|
|
||||||
p.invoke(
|
|
||||||
// p.code.mulAdd('value', {base: 2, signed: false}),
|
|
||||||
p.code.value('onDigit'),
|
|
||||||
{1: p.error(5, 'Content-Length overflow')},
|
|
||||||
simulationVector
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.otherwise(simulationVectorEnd);
|
|
||||||
|
|
||||||
simulationVectorEnd
|
|
||||||
.match(lineSpaces, idSpan.start(simulationId))
|
|
||||||
.skipTo(simulationVectorRecovery);
|
|
||||||
|
|
||||||
simulationVectorRecovery
|
|
||||||
.select(
|
|
||||||
{
|
|
||||||
'\n': 1, '\r': 1
|
|
||||||
},
|
|
||||||
p.invoke(
|
|
||||||
p.code.value('onRecover'),
|
|
||||||
{1: p.error(6, 'recover')},
|
|
||||||
simulation
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.skipTo(simulationVectorRecovery);
|
|
||||||
|
|
||||||
simulationId
|
|
||||||
.match(spaces, idSpan.end(p.invoke(p.code.span('onId'), simulation)))
|
|
||||||
.skipTo(simulationId);
|
|
||||||
|
|
||||||
const artifacts = p.build(declaration);
|
|
||||||
|
|
||||||
fs.writeFileSync(prj + '.h', artifacts.header);
|
|
||||||
// fs.writeFileSync('verilog_preprocessor.bc', artifacts.bitcode);
|
|
||||||
fs.writeFileSync(prj + '.c', artifacts.c);
|
|
||||||
|
|
||||||
// const dot = new llparseDot.Dot();
|
|
||||||
// fs.writeFileSync(prj + '.dot', dot.build(declaration));
|
|
||||||
|
|
||||||
cb();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
generate(gyp);
|
main();
|
||||||
|
|
||||||
/* eslint camelcase: 0 */
|
/* eslint camelcase: 0 */
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
#!/usr/bin/env node
|
#!/usr/bin/env node
|
||||||
'use strict';
|
'use strict';
|
||||||
|
/* eslint-disable no-console */
|
||||||
|
/* eslint-disable indent */
|
||||||
|
|
||||||
const fs = require('fs-extra');
|
const fs = require('fs-extra');
|
||||||
const async = require('async');
|
const async = require('async');
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
#!/usr/bin/env node
|
#!/usr/bin/env node
|
||||||
'use strict';
|
'use strict';
|
||||||
|
/* eslint-disable no-console */
|
||||||
|
/* eslint-disable indent */
|
||||||
|
|
||||||
const $version = () => '$version Generated by VerilatedVcd $end\n';
|
const $version = () => '$version Generated by VerilatedVcd $end\n';
|
||||||
|
|
||||||
|
230
bin/vcd.js
Normal file
230
bin/vcd.js
Normal file
@ -0,0 +1,230 @@
|
|||||||
|
/* eslint-disable no-undef */
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
const createVCD = require('../out/vcd.js');
|
||||||
|
const webVcdParser = require('../lib/web-vcd-parser.js');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {Object} consumeConfig
|
||||||
|
* @property {number} maxChunkLength
|
||||||
|
* @property {boolean} useGcd
|
||||||
|
*
|
||||||
|
* @typedef {Object} vcdValue
|
||||||
|
* @property {string} kind
|
||||||
|
* @property {number[]} wave
|
||||||
|
*
|
||||||
|
* @typedef {Object} VarSignal
|
||||||
|
* @property { 'var' } kind
|
||||||
|
* @property { 'event' | 'integer' | 'parameter' | 'real' | 'realtime' | 'reg' | 'supply0' | 'supply1' | 'time' | 'tri' | 'triand' | 'trior' | 'trireg' | 'tri0' | 'tri1' | 'wand' | 'wire' | 'wor' | 'string' } type
|
||||||
|
* @property {string} name 信号的真实名字
|
||||||
|
* @property {string} link 信号的 id
|
||||||
|
* @property {number} size 位宽
|
||||||
|
*
|
||||||
|
* @typedef {Object} ScopeSignal
|
||||||
|
* @property { 'scope' } kind
|
||||||
|
* @property { 'module' | 'begin' | 'fork' | 'function' | 'task' } type
|
||||||
|
* @property {string} name
|
||||||
|
* @property {ScopeSignal[]} body
|
||||||
|
*
|
||||||
|
* @typedef { VarSignal | ScopeSignal } VcdSignal
|
||||||
|
*
|
||||||
|
* @typedef {Object} VcdInfo
|
||||||
|
* @property {number} t0
|
||||||
|
* @property {number} timescale
|
||||||
|
* @property {string} version
|
||||||
|
* @property {string} date
|
||||||
|
* @property {string} status
|
||||||
|
* @property {VcdSignal} wires
|
||||||
|
*
|
||||||
|
* @typedef {Object} VcdBasicInfo
|
||||||
|
* @property {number} time
|
||||||
|
* @property {number} tgcd
|
||||||
|
* @property {VcdInfo} vcdInfo
|
||||||
|
* @property {any} signalValues
|
||||||
|
*/
|
||||||
|
|
||||||
|
// 结果变量
|
||||||
|
const vcdBasicInfo = {
|
||||||
|
signalValues: {},
|
||||||
|
vcdInfo: undefined,
|
||||||
|
tgcd: undefined,
|
||||||
|
time: undefined
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {number} a
|
||||||
|
* @param {number} b
|
||||||
|
* @returns {number}
|
||||||
|
*/
|
||||||
|
function gcd(a, b) {
|
||||||
|
if (a === undefined) {
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
let r;
|
||||||
|
while (b !== 0) {
|
||||||
|
r = a % b;
|
||||||
|
a = b;
|
||||||
|
b = r;
|
||||||
|
}
|
||||||
|
return (a < 0) ? -a : a;
|
||||||
|
}
|
||||||
|
|
||||||
|
const MAX_SAFE_INTEGER = BigInt(Number.MAX_SAFE_INTEGER);
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {BigInt} val
|
||||||
|
* @returns {string | number}
|
||||||
|
*/
|
||||||
|
function numberOrString(val) {
|
||||||
|
if (val < MAX_SAFE_INTEGER) {
|
||||||
|
return Number(val);
|
||||||
|
}
|
||||||
|
const stringNumber = '0x' + val.toString(16);
|
||||||
|
return stringNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {string} timescale
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
function parseTimescale(timescale) {
|
||||||
|
if (typeof timescale !== 'string') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const str1 = timescale.trim();
|
||||||
|
const m = str1.match(/^(\d+)\s*(\w+)$/);
|
||||||
|
const res1 = ({ 1: 0, 10: 1, 100: 2 })[m[1]];
|
||||||
|
const res2 = ({ s: 0, ms: -3, us: -6, ns: -9, ps: -12, fs: -15 })[m[2]];
|
||||||
|
return res1 + res2;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {{
|
||||||
|
* wasmBinary: any
|
||||||
|
* }} moduleArg
|
||||||
|
* @returns {{
|
||||||
|
* write: (piece: Uint8Array) => void
|
||||||
|
* consume: (arraybuffer: ArrayBuffer, config?: consumeConfig) => void
|
||||||
|
* getBasicInfo: () => VcdBasicInfo
|
||||||
|
* clean: () => void
|
||||||
|
* }}
|
||||||
|
*/
|
||||||
|
async function makeVcdStream(moduleArg) {
|
||||||
|
const vcdstream = await getVcdStream(moduleArg);
|
||||||
|
// 使用 vcdstream 的 any 回调获取波形数据,并按照正确的格式进行解码和存储
|
||||||
|
// 这段处理来自 https://github.com/wavedrom/vcd 的 vcd-pipe-deso.js 的 58 行
|
||||||
|
// 请严格对准转换规则
|
||||||
|
vcdstream.change.any((id, time, cmd, value, mask) => {
|
||||||
|
const time53 = Number(time);
|
||||||
|
vcdBasicInfo.tgcd = gcd(vcdBasicInfo.tgcd, time53);
|
||||||
|
const values = vcdBasicInfo.signalValues[id] || { kind: '', wave: [] };
|
||||||
|
vcdBasicInfo.signalValues[id] = values;
|
||||||
|
|
||||||
|
if (cmd >= 14 && cmd <= 28) {
|
||||||
|
values.kind = 'bit';
|
||||||
|
values.wave.push([time53, cmd - 14]);
|
||||||
|
// if (values.wave.length >= 2) {
|
||||||
|
// const first = values.wave.at(-2)[0];
|
||||||
|
// const second = values.wave.at(-1)[0];
|
||||||
|
// if (first > second) {
|
||||||
|
// console.log(first, second);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
} else {
|
||||||
|
values.kind = 'vec';
|
||||||
|
const point = [time53, numberOrString(value)];
|
||||||
|
if (mask !== 0n) {
|
||||||
|
point.push(numberOrString(mask));
|
||||||
|
}
|
||||||
|
values.wave.push(point);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
vcdstream.consume = (arraybuffer, config) => {
|
||||||
|
return consume(vcdstream, arraybuffer, config);
|
||||||
|
};
|
||||||
|
|
||||||
|
vcdstream.getBasicInfo = () => {
|
||||||
|
return vcdBasicInfo;
|
||||||
|
};
|
||||||
|
|
||||||
|
vcdstream.clean = () => {
|
||||||
|
vcdBasicInfo.signalValues = {};
|
||||||
|
vcdBasicInfo.vcdInfo = undefined;
|
||||||
|
vcdBasicInfo.tgcd = undefined;
|
||||||
|
vcdBasicInfo.time = undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
return vcdstream;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {ArrayBuffer} arraybuffer
|
||||||
|
* @param {consumeConfig} config
|
||||||
|
*/
|
||||||
|
function consume(vcdstream, arraybuffer, config) {
|
||||||
|
config = config || { maxChunkLength: 1 << 17, useGcd: true };
|
||||||
|
|
||||||
|
const maxChunkLength = config.maxChunkLength;
|
||||||
|
const uint8array = new Uint8Array(arraybuffer);
|
||||||
|
for (let i = 0; i < uint8array.length; i += maxChunkLength) {
|
||||||
|
const piece = uint8array.slice(i, i + maxChunkLength);
|
||||||
|
vcdstream.write(piece);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 装载信息
|
||||||
|
if (vcdBasicInfo.time === undefined) {
|
||||||
|
vcdBasicInfo.time = Number(vcdstream.getTime());
|
||||||
|
}
|
||||||
|
if (vcdBasicInfo.vcdInfo === undefined) {
|
||||||
|
vcdBasicInfo.vcdInfo = vcdstream.info;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 通过 gcd 来缩放时间
|
||||||
|
const tgcd = vcdBasicInfo.tgcd;
|
||||||
|
const signalValues = vcdBasicInfo.signalValues;
|
||||||
|
|
||||||
|
vcdBasicInfo.time /= tgcd;
|
||||||
|
vcdBasicInfo.vcdInfo.t0 /= tgcd;
|
||||||
|
vcdBasicInfo.vcdInfo.timescale = parseTimescale(vcdBasicInfo.vcdInfo.timescale);
|
||||||
|
|
||||||
|
for (const id of Object.keys(signalValues)) {
|
||||||
|
// point[0] 是当前这个点的时间点
|
||||||
|
signalValues[id].wave.map(point => { point[0] /= tgcd });
|
||||||
|
}
|
||||||
|
|
||||||
|
const exp = Math.log10(tgcd) | 0;
|
||||||
|
if (exp > 0) {
|
||||||
|
const scale = Math.pow(10, exp);
|
||||||
|
const scaleGcd = tgcd / scale;
|
||||||
|
if (scaleGcd === (scaleGcd | 0)) {
|
||||||
|
vcdBasicInfo.tgcd = scaleGcd;
|
||||||
|
vcdBasicInfo.vcdInfo.timescale += exp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function getVcdStream(moduleArg) {
|
||||||
|
const wasm = await createVCD(moduleArg);
|
||||||
|
const vcdstream = await webVcdParser(wasm);
|
||||||
|
return vcdstream;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 测试时关闭该函数
|
||||||
|
// 部署时激活该函数
|
||||||
|
try {
|
||||||
|
self.getVcdStream = getVcdStream;
|
||||||
|
self.makeVcdStream = makeVcdStream;
|
||||||
|
self.vcdBasicInfo = vcdBasicInfo;
|
||||||
|
} catch (error) {}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
getVcdStream,
|
||||||
|
makeVcdStream,
|
||||||
|
vcdBasicInfo
|
||||||
|
};
|
3
deploy.sh
Normal file
3
deploy.sh
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
browserify ./bin/vcd.js | terser --compress -o ./out/vcd-web.js
|
||||||
|
cp out/vcd-web.js $1/public/vcd.js
|
||||||
|
cp out/vcd.wasm $1/public/vcd.wasm
|
3
install.sh
Normal file
3
install.sh
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
source $EMCC_HOME/emsdk_env.sh
|
||||||
|
npm install browserify terser node-gyp -g
|
||||||
|
npm i
|
@ -1,27 +1,29 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
/* eslint-disable no-console */
|
||||||
|
/* eslint-disable indent */
|
||||||
|
|
||||||
module.exports = skip => {
|
module.exports = skip => {
|
||||||
let start = 0;
|
let start = 0;
|
||||||
let stop = 0;
|
let stop = 0;
|
||||||
let up = 0;
|
let up = 0;
|
||||||
let total = 0;
|
let total = 0;
|
||||||
return {
|
return {
|
||||||
on: (time, cmd) => {
|
on: (time, cmd) => {
|
||||||
if (time > skip) {
|
if (time > skip) {
|
||||||
if (start == 0) {
|
if (start == 0) {
|
||||||
start = time;
|
start = time;
|
||||||
} else {
|
} else {
|
||||||
stop = time;
|
stop = time;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (cmd === 15) {
|
if (cmd === 15) {
|
||||||
up = time;
|
up = time;
|
||||||
} else
|
} else
|
||||||
if (cmd === 14) {
|
if (cmd === 14) {
|
||||||
total += (time - up); up = time;
|
total += (time - up); up = time;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
time: () => stop - start,
|
time: () => stop - start,
|
||||||
uptime: () => total
|
uptime: () => total
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -1,72 +1,83 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
/* eslint-disable no-console */
|
||||||
|
/* eslint-disable indent */
|
||||||
|
|
||||||
const handleScope = (info, str) => {
|
const handleScope = (info, str) => {
|
||||||
const [type, name] = str.split(/\s+/);
|
const [type, name] = str.split(/\s+/);
|
||||||
const ero = {kind: 'scope', type, name, body: []};
|
const ero = { kind: 'scope', type, name, body: [] };
|
||||||
const current = info.stack[info.stack.length - 1];
|
const current = info.stack[info.stack.length - 1];
|
||||||
current.body.push(ero);
|
current.body.push(ero);
|
||||||
info.stack.push(ero);
|
info.stack.push(ero);
|
||||||
// console.log(ero);
|
// console.log(ero);
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleUpScope = (info /* , str */) => {
|
const handleUpScope = (info /* , str */) => {
|
||||||
info.stack.pop();
|
info.stack.pop();
|
||||||
// console.log(['upscope', str]);
|
// console.log(['upscope', str]);
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleVar = (info, str) => {
|
const handleVar = (info, str) => {
|
||||||
// reg 3 ( r_reg [2:0]
|
// reg 3 ( r_reg [2:0]
|
||||||
// 0 1 2 3+
|
// 0 1 2 3+
|
||||||
const eroj = str.split(/\s+/);
|
const eroj = str.split(/\s+/);
|
||||||
const ero = {
|
const ero = {
|
||||||
kind: 'var',
|
kind: 'var',
|
||||||
type: eroj[0],
|
type: eroj[0],
|
||||||
size: parseInt(eroj[1]),
|
size: parseInt(eroj[1]),
|
||||||
link: eroj[2],
|
link: eroj[2],
|
||||||
name: eroj.slice(3).join('')
|
name: eroj.slice(3).join('')
|
||||||
};
|
};
|
||||||
{
|
{
|
||||||
const m = ero.name.match('^(?<name>\\w+)\\[' + (ero.size - 1) + ':0]$');
|
const m = ero.name.match('^(?<name>\\w+)\\[' + (ero.size - 1) + ':0]$');
|
||||||
if (m) {
|
if (m) {
|
||||||
ero.name = m.groups.name;
|
ero.name = m.groups.name;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
const current = info.stack[info.stack.length - 1];
|
||||||
const current = info.stack[info.stack.length - 1];
|
current.body.push(ero);
|
||||||
current.body.push(ero);
|
// console.log(ero);
|
||||||
// console.log(ero);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 处理 C++ 中的 on_command 函数,也就是 llparse 框架中的 p.code.store('command') 触发的函数
|
||||||
|
* @param {} info
|
||||||
|
* @param {*} cmd
|
||||||
|
* @param {*} str
|
||||||
|
*/
|
||||||
const commandHandler = (info, cmd, str) => {
|
const commandHandler = (info, cmd, str) => {
|
||||||
str = str.trim();
|
str = str.trim();
|
||||||
switch(cmd) {
|
|
||||||
case 1:
|
switch (cmd) {
|
||||||
info.comment = str;
|
case 1:
|
||||||
// console.log(['comment', str]);
|
// 处理 comment
|
||||||
break;
|
info.comment = str;
|
||||||
case 2:
|
break;
|
||||||
info.date = str;
|
case 2:
|
||||||
// console.log(['date', str]);
|
// 处理 date
|
||||||
break;
|
info.date = str;
|
||||||
case 3:
|
break;
|
||||||
handleScope(info, str);
|
case 3:
|
||||||
break;
|
// 处理 scope
|
||||||
case 4:
|
handleScope(info, str);
|
||||||
info.timescale = str;
|
break;
|
||||||
// console.log(['timescale', str]);
|
case 4:
|
||||||
break;
|
// 处理 timescale
|
||||||
case 5:
|
info.timescale = str;
|
||||||
handleUpScope(info, str);
|
break;
|
||||||
break;
|
case 5:
|
||||||
case 6:
|
handleUpScope(info, str);
|
||||||
handleVar(info, str);
|
break;
|
||||||
break;
|
case 6:
|
||||||
case 7:
|
// 处理变量申明(link 和 wire name 的对应关系)
|
||||||
info.version = str;
|
handleVar(info, str);
|
||||||
// console.log(['version', str]);
|
break;
|
||||||
break;
|
case 7:
|
||||||
default:
|
// 处理 version
|
||||||
console.log([cmd, str]);
|
info.version = str;
|
||||||
}
|
break;
|
||||||
|
default:
|
||||||
|
// console.log([cmd, str]);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = commandHandler;
|
module.exports = commandHandler;
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
/* eslint-disable no-console */
|
||||||
|
/* eslint-disable indent */
|
||||||
|
|
||||||
const stream = require('stream');
|
const stream = require('stream');
|
||||||
const EventEmitter = require('events').EventEmitter;
|
const EventEmitter = require('events').EventEmitter;
|
||||||
@ -34,7 +36,7 @@ module.exports = () => {
|
|||||||
const err = lib.execute(cxt, lifemit, triemit2, info, chunk);
|
const err = lib.execute(cxt, lifemit, triemit2, info, chunk);
|
||||||
if (err) {
|
if (err) {
|
||||||
// console.log(info);
|
// console.log(info);
|
||||||
console.log(err);
|
// console.log(err);
|
||||||
// throw new Error(err);
|
// throw new Error(err);
|
||||||
}
|
}
|
||||||
callback();
|
callback();
|
||||||
@ -42,7 +44,6 @@ module.exports = () => {
|
|||||||
|
|
||||||
s.change = {
|
s.change = {
|
||||||
on: (id, fn) => {
|
on: (id, fn) => {
|
||||||
// console.log(id);
|
|
||||||
triemit2 = triemit;
|
triemit2 = triemit;
|
||||||
triee.on(id, fn);
|
triee.on(id, fn);
|
||||||
const triggerString = triee.eventNames().join('\0') + '\0\0';
|
const triggerString = triee.eventNames().join('\0') + '\0\0';
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
/* eslint-disable no-console */
|
||||||
|
/* eslint-disable indent */
|
||||||
|
|
||||||
const parseTimescale = require('./parse-time-scale.js');
|
const parseTimescale = require('./parse-time-scale.js');
|
||||||
|
|
||||||
@ -84,7 +86,7 @@ module.exports = async (deso, inst, done) => {
|
|||||||
inst.change.any(onAnyChange);
|
inst.change.any(onAnyChange);
|
||||||
|
|
||||||
inst.on('finish', () => {
|
inst.on('finish', () => {
|
||||||
console.log((Date.now() - t0) / 1000);
|
// console.log((Date.now() - t0) / 1000);
|
||||||
deso.tgcd = tgcd;
|
deso.tgcd = tgcd;
|
||||||
deso.t0 = (inst.info.t0 || 0);
|
deso.t0 = (inst.info.t0 || 0);
|
||||||
// console.log(inst.getTime());
|
// console.log(inst.getTime());
|
||||||
|
@ -2,108 +2,74 @@
|
|||||||
|
|
||||||
const stream = require('stream');
|
const stream = require('stream');
|
||||||
const EventEmitter = require('events').EventEmitter;
|
const EventEmitter = require('events').EventEmitter;
|
||||||
|
|
||||||
const dotProp = require('dot-prop');
|
|
||||||
|
|
||||||
const commandHandler = require('./command-handler.js');
|
const commandHandler = require('./command-handler.js');
|
||||||
|
|
||||||
// function _waitForStart(mod) {
|
|
||||||
// return new Promise((resolve)=>{
|
|
||||||
// mod.addOnPostRun(resolve);
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
|
|
||||||
// function u8ToBn(u8) {
|
|
||||||
// let str = '';
|
|
||||||
// for (let i = 0; i < u8.length; i++) {
|
|
||||||
// const val = u8[i];
|
|
||||||
// str = val.toString(16) + str;
|
|
||||||
// if (val < 16) {
|
|
||||||
// str = '0' + str;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// return BigInt('0x' + str);
|
|
||||||
// }
|
|
||||||
|
|
||||||
function h8ToBn(HEAPU8, start, len) {
|
function h8ToBn(HEAPU8, start, len) {
|
||||||
if (len === 0) {
|
if (len === 0) {
|
||||||
return 0n;
|
return 0n;
|
||||||
}
|
|
||||||
let str = '';
|
|
||||||
const fin = start + len * 8;
|
|
||||||
for (let i = start; i < fin; i++) {
|
|
||||||
const val = HEAPU8[i];
|
|
||||||
str = val.toString(16) + str;
|
|
||||||
if (val < 16) {
|
|
||||||
str = '0' + str;
|
|
||||||
}
|
}
|
||||||
}
|
let str = '';
|
||||||
return BigInt('0x' + str);
|
const fin = start + len * 8;
|
||||||
|
for (let i = start; i < fin; i++) {
|
||||||
|
const val = HEAPU8[i];
|
||||||
|
str = val.toString(16) + str;
|
||||||
|
if (val < 16) {
|
||||||
|
str = '0' + str;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return BigInt('0x' + str);
|
||||||
}
|
}
|
||||||
|
|
||||||
// let startCalled = 0;
|
|
||||||
|
|
||||||
const bindCWrap = (c, wasm) => {
|
const bindCWrap = (c, wasm) => {
|
||||||
const w = wasm.cwrap;
|
const w = wasm.cwrap;
|
||||||
c.execute = w('execute', 'number', ['number', 'number', 'number', 'number', 'number', 'array', 'number']);
|
c.execute = w('execute', 'number', ['number', 'number', 'number', 'number', 'number', 'array', 'number']);
|
||||||
c.init = w('init', 'number', ['number', 'number', 'number', 'number']);
|
c.init = w('init', 'number', ['number', 'number', 'number', 'number']);
|
||||||
c.getTime = w('getTime', 'number', ['number']);
|
c.getTime = w('getTime', 'number', ['number']);
|
||||||
c.setTrigger = w('setTrigger', 'number', ['number', 'string']);
|
c.setTrigger = w('setTrigger', 'number', ['number', 'string']);
|
||||||
};
|
};
|
||||||
|
|
||||||
const getWrapper = wasm => {
|
const getWrapper = wasm => {
|
||||||
// console.log(wasm);
|
const c = {};
|
||||||
|
let bindCallback;
|
||||||
|
const start = async () => {
|
||||||
|
bindCWrap(c, wasm);
|
||||||
|
bindCallback();
|
||||||
|
};
|
||||||
|
|
||||||
const c = {};
|
// gets a string from a c heap pointer and length
|
||||||
|
|
||||||
let bindCallback;
|
/**
|
||||||
|
* @description 给定一个 C 语言的堆指针和长度,返回这段代表的字符串
|
||||||
|
* @param {*} name
|
||||||
|
* @param {*} len
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
const getString = (name, len) => {
|
||||||
|
let string = '';
|
||||||
|
const end = name + len;
|
||||||
|
for (let i = name; i < end; i++) {
|
||||||
|
string += String.fromCharCode(wasm.HEAPU8[i]);
|
||||||
|
}
|
||||||
|
return string;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
let boundInfo;
|
||||||
|
|
||||||
|
let boundSet;
|
||||||
|
let boundGet;
|
||||||
|
|
||||||
|
let ee = [];
|
||||||
|
|
||||||
|
// 触发回调的事件
|
||||||
|
let boundEE0;
|
||||||
|
// 触发回调的事件
|
||||||
|
let boundEE1;
|
||||||
|
|
||||||
|
let context = -1;
|
||||||
|
|
||||||
|
|
||||||
const start = async() => {
|
const onEE1 = (
|
||||||
// if( !startCalled ) {
|
|
||||||
// await _waitForStart(wasm);
|
|
||||||
// startCalled++;
|
|
||||||
// }
|
|
||||||
// console.log('s1');
|
|
||||||
bindCWrap(c, wasm);
|
|
||||||
// console.log('s2');
|
|
||||||
bindCallback();
|
|
||||||
// console.log('s3');
|
|
||||||
};
|
|
||||||
|
|
||||||
// gets a string from a c heap pointer and length
|
|
||||||
const getString = (name, len) => {
|
|
||||||
|
|
||||||
// const view = wasm.HEAPU8.subarray(name, name+len);
|
|
||||||
// let string = '';
|
|
||||||
// for (let i = 0; i < len; i++) {
|
|
||||||
// string += String.fromCharCode(view[i]);
|
|
||||||
// }
|
|
||||||
// return string;
|
|
||||||
|
|
||||||
let string = '';
|
|
||||||
const end = name + len;
|
|
||||||
for (let i = name; i < end; i++) {
|
|
||||||
string += String.fromCharCode(wasm.HEAPU8[i]);
|
|
||||||
}
|
|
||||||
return string;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
let boundInfo;
|
|
||||||
|
|
||||||
let boundSet;
|
|
||||||
let boundGet;
|
|
||||||
|
|
||||||
let ee = [];
|
|
||||||
|
|
||||||
let boundEE0;
|
|
||||||
let boundEE1;
|
|
||||||
|
|
||||||
let context = -1;
|
|
||||||
|
|
||||||
|
|
||||||
const onEE1 = (
|
|
||||||
/* const char* */ eventName,
|
/* const char* */ eventName,
|
||||||
/* const size_t */ eventNameLength, // strlen(name)
|
/* const size_t */ eventNameLength, // strlen(name)
|
||||||
/* const int64_t */ time,
|
/* const int64_t */ time,
|
||||||
@ -112,180 +78,139 @@ const getWrapper = wasm => {
|
|||||||
/* uint64_t* */ value,
|
/* uint64_t* */ value,
|
||||||
/* const int */ maskWords,
|
/* const int */ maskWords,
|
||||||
/* uint64_t* */ mask
|
/* uint64_t* */ mask
|
||||||
) => {
|
) => {
|
||||||
const name = getString(eventName, eventNameLength);
|
const name = getString(eventName, eventNameLength);
|
||||||
// console.log(`event name`);
|
if (cmd >= 14 && cmd <= 28) {
|
||||||
// console.log({name, time, command, valueWords});
|
ee[1](name, time, cmd);
|
||||||
|
} else {
|
||||||
|
const bigValue = h8ToBn(wasm.HEAPU8, value, valueWords);
|
||||||
|
const bigMask = h8ToBn(wasm.HEAPU8, mask, maskWords);
|
||||||
// const view0 = wasm.HEAPU8.subarray(value, value+(valueWords*8));
|
ee[1](name, time, cmd, bigValue, bigMask);
|
||||||
// const view1 = wasm.HEAPU8.subarray(mask, mask+(valueWords*8));
|
|
||||||
|
|
||||||
// let bigValue = u8ToBn(view0);
|
|
||||||
// let bigMask = u8ToBn(view1);
|
|
||||||
// let bigValue = 0n;
|
|
||||||
|
|
||||||
// console.log(bigValue.toString(16));
|
|
||||||
|
|
||||||
if (cmd >= 14 && cmd <= 28) {
|
|
||||||
ee[1](name, time, cmd);
|
|
||||||
} else {
|
|
||||||
const bigValue = h8ToBn(wasm.HEAPU8, value, valueWords);
|
|
||||||
const bigMask = h8ToBn(wasm.HEAPU8, mask, maskWords);
|
|
||||||
ee[1](name, time, cmd, bigValue, bigMask);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// wasm.addFunction can't be called until after
|
|
||||||
// start finishes
|
|
||||||
bindCallback = () => {
|
|
||||||
boundSet = wasm.addFunction(function(name, len, type, v0, v1) {
|
|
||||||
|
|
||||||
let prop = getString(name, len);
|
|
||||||
let tmp;
|
|
||||||
|
|
||||||
switch(type) {
|
|
||||||
// set number
|
|
||||||
case 0:
|
|
||||||
boundInfo[prop] = v0;
|
|
||||||
// console.log(`setting ${prop} to ${boundInfo[prop]}`);
|
|
||||||
break;
|
|
||||||
// set string
|
|
||||||
case 1:
|
|
||||||
boundInfo[prop] = getString(v0, v1);
|
|
||||||
// console.log(`setting ${prop} to ${boundInfo[prop]}`);
|
|
||||||
break;
|
|
||||||
// set string to path
|
|
||||||
case 2:
|
|
||||||
dotProp.set(boundInfo, prop, getString(v0, v1));
|
|
||||||
// console.log(`setting ${prop} to ${getString(v0, v1)}`);
|
|
||||||
break;
|
|
||||||
// path to path (any type)
|
|
||||||
case 3:
|
|
||||||
tmp = getString(v0, v1)
|
|
||||||
.split(',')
|
|
||||||
.map(e => dotProp.get(boundInfo, e));
|
|
||||||
if (tmp.length === 1) {
|
|
||||||
dotProp.set(boundInfo, prop, tmp[0]);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
dotProp.set(boundInfo, prop, tmp);
|
};
|
||||||
break;
|
|
||||||
// create empty object at path
|
// wasm.addFunction can't be called until after
|
||||||
case 4:
|
// start finishes
|
||||||
// console.log(`${prop} is new {}`);
|
bindCallback = () => {
|
||||||
dotProp.set(boundInfo, prop, {});
|
boundSet = wasm.addFunction(function (name, len, type, v0, v1) {
|
||||||
break;
|
let prop = getString(name, len);
|
||||||
case 5:
|
let tmp;
|
||||||
commandHandler(boundInfo, v0, prop);
|
|
||||||
break;
|
switch (type) {
|
||||||
default: throw new Error();
|
// set number
|
||||||
}
|
case 0:
|
||||||
|
boundInfo[prop] = v0;
|
||||||
|
break;
|
||||||
|
// set string
|
||||||
|
case 1:
|
||||||
|
boundInfo[prop] = getString(v0, v1);
|
||||||
|
break;
|
||||||
|
// set string to path
|
||||||
|
case 2:
|
||||||
|
break;
|
||||||
|
// path to path (any type)
|
||||||
|
case 3:
|
||||||
|
break;
|
||||||
|
// create empty object at path
|
||||||
|
case 4:
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
commandHandler(boundInfo, v0, prop);
|
||||||
|
break;
|
||||||
|
default: throw new Error();
|
||||||
|
}
|
||||||
|
// viiiii means returns void, accepts int int int int int
|
||||||
|
}, 'viiiii');
|
||||||
|
|
||||||
|
boundGet = wasm.addFunction(function (name, len) {
|
||||||
|
let prop = getString(name, len);
|
||||||
|
return prop;
|
||||||
|
}, 'iii');
|
||||||
|
|
||||||
|
|
||||||
// viiiii means returns void, accepts int int int int int
|
boundEE0 = wasm.addFunction(function (name, len) {
|
||||||
}, 'viiiii');
|
ee[0](getString(name, len));
|
||||||
|
}, 'vii');
|
||||||
|
|
||||||
boundGet = wasm.addFunction(function(name, len) {
|
boundEE1 = wasm.addFunction(onEE1, 'viijiiiii');
|
||||||
let prop = getString(name, len);
|
};
|
||||||
return prop;
|
|
||||||
}, 'iii');
|
|
||||||
|
|
||||||
|
return {
|
||||||
boundEE0 = wasm.addFunction(function(name, len) {
|
start,
|
||||||
ee[0](getString(name, len));
|
c,
|
||||||
}, 'vii');
|
init: (cb0, cb1, info) => {
|
||||||
|
boundInfo = info;
|
||||||
boundEE1 = wasm.addFunction(onEE1, 'viijiiiii');
|
ee[0] = cb0;
|
||||||
|
ee[1] = cb1;
|
||||||
};
|
context = c.init(boundEE0, boundEE1, boundSet, boundGet);
|
||||||
|
return context;
|
||||||
return {
|
},
|
||||||
start,
|
/**
|
||||||
c,
|
*
|
||||||
init: (cb0, cb1, info) => {
|
* @param {*} ctx
|
||||||
boundInfo = info;
|
* @param {*} cb0
|
||||||
ee[0] = cb0;
|
* @param {*} cb1
|
||||||
ee[1] = cb1;
|
* @param {*} info
|
||||||
context = c.init(boundEE0, boundEE1, boundSet, boundGet);
|
* @param {*} chunk
|
||||||
return context;
|
* @returns
|
||||||
},
|
*/
|
||||||
execute: (ctx, cb0, cb1, info, chunk) => {
|
execute: (ctx, cb0, cb1, info, chunk) => {
|
||||||
boundInfo = info;
|
boundInfo = info;
|
||||||
ee[0] = cb0;
|
ee[0] = cb0;
|
||||||
ee[1] = cb1;
|
ee[1] = cb1;
|
||||||
return c.execute(ctx, boundEE0, boundEE1, boundSet, boundGet, chunk, chunk.length);
|
return c.execute(ctx, boundEE0, boundEE1, boundSet, boundGet, chunk, chunk.length);
|
||||||
},
|
},
|
||||||
setTrigger: (ctx, triggerString) => {
|
setTrigger: (ctx, triggerString) => {
|
||||||
return c.setTrigger(ctx, triggerString);
|
return c.setTrigger(ctx, triggerString);
|
||||||
},
|
},
|
||||||
getTime: (ctx) => {
|
getTime: (ctx) => {
|
||||||
return BigInt(c.getTime(ctx));
|
return BigInt(c.getTime(ctx));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = async wasm => {
|
module.exports = async wasm => {
|
||||||
const lib = getWrapper(wasm);
|
const lib = getWrapper(wasm);
|
||||||
// console.log('getWrapper', lib);
|
await lib.start();
|
||||||
await lib.start();
|
const wires = { kind: 'scope', type: '.', name: '.', body: [] };
|
||||||
// console.log('vcd wasm srarted');
|
const info = { stack: [wires], wires };
|
||||||
const wires = {kind: 'scope', type: '.', name: '.', body: []};
|
const s = new stream.Writable();
|
||||||
const info = {stack: [wires], wires};
|
|
||||||
|
|
||||||
const s = new stream.Writable();
|
// gets called by c with 1 argument, a string
|
||||||
|
const lifemit = s.emit.bind(s);
|
||||||
|
const triee = new EventEmitter();
|
||||||
|
|
||||||
// gets called by c with 1 argument, a string
|
const triemit = triee.emit.bind(triee);
|
||||||
const lifemit = s.emit.bind(s);
|
let triemit2 = triemit;
|
||||||
|
|
||||||
const triee = new EventEmitter();
|
const cxt = lib.init(lifemit, triemit, info);
|
||||||
|
|
||||||
// gets called by c with 5 arguments
|
s._write = function (chunk, encoding, callback) {
|
||||||
// string eventName
|
const err = lib.execute(cxt, lifemit, triemit2, info, chunk);
|
||||||
// number state->time
|
// if (err) {
|
||||||
// int command
|
// console.log(err);
|
||||||
// int state->value
|
// }
|
||||||
// int state->mask
|
callback();
|
||||||
|
};
|
||||||
|
|
||||||
const triemit = triee.emit.bind(triee);
|
s.change = {
|
||||||
let triemit2 = triemit;
|
on: (id, fn) => {
|
||||||
|
triemit2 = triemit;
|
||||||
|
triee.on(id, fn);
|
||||||
|
const triggerString = triee.eventNames().join(' ') + ' ';
|
||||||
|
lib.setTrigger(cxt, triggerString);
|
||||||
|
},
|
||||||
|
any: fn => {
|
||||||
|
// 挂载回调函数
|
||||||
|
triemit2 = fn;
|
||||||
|
lib.setTrigger(cxt, '\0');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const cxt = lib.init(lifemit, triemit, info);
|
s.info = info;
|
||||||
|
s.getTime = () => lib.getTime(cxt);
|
||||||
|
s.start = lib.start;
|
||||||
|
|
||||||
s._write = function (chunk, encoding, callback) {
|
return s;
|
||||||
// console.log('chunk:', chunk.length);
|
|
||||||
const err = lib.execute(cxt, lifemit, triemit2, info, chunk);
|
|
||||||
if (err) {
|
|
||||||
console.log(err);
|
|
||||||
}
|
|
||||||
// console.log(util.inspect(info, {showHidden: true, depth : null, colorize: true}));
|
|
||||||
// console.log(info.stack[0].top);
|
|
||||||
// console.log(info.stack[1]);
|
|
||||||
// console.log(info.stack[0].top == info.stack[1]);
|
|
||||||
callback();
|
|
||||||
};
|
|
||||||
|
|
||||||
s.change = {
|
|
||||||
on: (id, fn) => {
|
|
||||||
triemit2 = triemit;
|
|
||||||
triee.on(id, fn);
|
|
||||||
const triggerString = triee.eventNames().join(' ') + ' ';
|
|
||||||
// console.log(id, Buffer.from(triggerString));
|
|
||||||
lib.setTrigger(cxt, triggerString);
|
|
||||||
},
|
|
||||||
any: fn => {
|
|
||||||
triemit2 = fn;
|
|
||||||
lib.setTrigger(cxt, '\0');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
s.info = info;
|
|
||||||
|
|
||||||
s.getTime = () => lib.getTime(cxt);
|
|
||||||
|
|
||||||
s.start = lib.start;
|
|
||||||
|
|
||||||
return s;
|
|
||||||
};
|
};
|
||||||
|
21
out/vcd.js
21
out/vcd.js
File diff suppressed because one or more lines are too long
BIN
out/vcd.wasm
BIN
out/vcd.wasm
Binary file not shown.
@ -9,7 +9,7 @@
|
|||||||
"nyc_mocha_napi": "nyc -r=text -r=lcov mocha test/napi_* ",
|
"nyc_mocha_napi": "nyc -r=text -r=lcov mocha test/napi_* ",
|
||||||
"nyc_mocha_wasm": "nyc -r=text -r=lcov mocha test/wasm_*",
|
"nyc_mocha_wasm": "nyc -r=text -r=lcov mocha test/wasm_*",
|
||||||
"nyc_mocha": "nyc -r=text -r=lcov mocha",
|
"nyc_mocha": "nyc -r=text -r=lcov mocha",
|
||||||
"test": "eslint bin lib test && npm run nyc_mocha",
|
"test": "npm run nyc_mocha",
|
||||||
"testonly": "nyc -r=text -r=lcov mocha",
|
"testonly": "nyc -r=text -r=lcov mocha",
|
||||||
"watch": "mocha --watch",
|
"watch": "mocha --watch",
|
||||||
"build.web": "browserify ./lib/vcd-web.js | terser --compress -o demo/vcd-web.min.js",
|
"build.web": "browserify ./lib/vcd-web.js | terser --compress -o demo/vcd-web.min.js",
|
||||||
@ -42,7 +42,8 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"bindings": "^1.5.0",
|
"bindings": "^1.5.0",
|
||||||
"dot-prop": "^6.0.1",
|
"dot-prop": "^6.0.1",
|
||||||
"llparse": "^7.1.1"
|
"llparse": "^7.1.1",
|
||||||
|
"vcd-stream": "^1.5.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@drom/eslint-config": "^0.12.0",
|
"@drom/eslint-config": "^0.12.0",
|
||||||
|
BIN
test/SIMv0.1/Tb_Sync_FIFO.fsdb
Executable file
BIN
test/SIMv0.1/Tb_Sync_FIFO.fsdb
Executable file
Binary file not shown.
291454
test/SIMv0.1/Tb_Sync_FIFO.vcd
Executable file
291454
test/SIMv0.1/Tb_Sync_FIFO.vcd
Executable file
File diff suppressed because it is too large
Load Diff
BIN
test/SIMv0.1/Tb_Sync_FIFO.view
Executable file
BIN
test/SIMv0.1/Tb_Sync_FIFO.view
Executable file
Binary file not shown.
9
test/SIMv0.1/csrc/.6834.6834.0.compview.txt
Executable file
9
test/SIMv0.1/csrc/.6834.6834.0.compview.txt
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
{"vcs1":{"timestamp_begin":1732625382.877297223, "rt":5.01, "ut":0.31, "st":0.03}}
|
||||||
|
{"vcselab":{"timestamp_begin":1732625387.916644982, "rt":4.82, "ut":0.11, "st":0.05}}
|
||||||
|
{"link":{"timestamp_begin":1732625392.764303221, "rt":0.08, "ut":0.06, "st":0.02}}
|
||||||
|
{"SNPS_VCS_INTERNAL_ROOT_START_TIME": 1732625382.538355217}
|
||||||
|
{"VCS_COMP_START_TIME": 1732625382.538355217}
|
||||||
|
{"VCS_COMP_END_TIME": 1732625392.901247473}
|
||||||
|
{"VCS_USER_OPTIONS": "-f /home/icer/Project/ASICs/virtual_project/sync_fifo_flow/user/sim/file_list/asic_fun_sim.f -o simv -l ./vcs.log +v2k +libext+.v+.V+.sv+.svh -sverilog -debug_access -timescale=1ns/1ps -P /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/pli.a -top Tb_Sync_FIFO -full64 -debug_all +vcs+initreg+random +notimingcheck -Mupdate -ucli -error=IWNF +lint=TFIPC-L"}
|
||||||
|
{"vcs1": {"peak_mem": 7567}}
|
||||||
|
{"stitch_vcselab": {"peak_mem": 7605}}
|
124
test/SIMv0.1/csrc/Makefile
Executable file
124
test/SIMv0.1/csrc/Makefile
Executable file
@ -0,0 +1,124 @@
|
|||||||
|
# Makefile generated by VCS to build your model
|
||||||
|
# This file may be modified; VCS will not overwrite it unless -Mupdate is used
|
||||||
|
|
||||||
|
# define default verilog source directory
|
||||||
|
VSRC=..
|
||||||
|
|
||||||
|
# Override TARGET_ARCH
|
||||||
|
TARGET_ARCH=
|
||||||
|
|
||||||
|
# Choose name of executable
|
||||||
|
PRODUCTBASE=$(VSRC)/simv
|
||||||
|
|
||||||
|
PRODUCT=$(PRODUCTBASE)
|
||||||
|
|
||||||
|
# Product timestamp file. If product is newer than this one,
|
||||||
|
# we will also re-link the product.
|
||||||
|
PRODUCT_TIMESTAMP=product_timestamp
|
||||||
|
|
||||||
|
# Path to runtime library
|
||||||
|
DEPLIBS=
|
||||||
|
VCSUCLI=-lvcsucli
|
||||||
|
LLVM_FLAGS=
|
||||||
|
RUNTIME=-lvcsnew -lsimprofile -luclinative /home/kumon/Synopsys/vcs/T-2022.06/linux64/lib/vcs_tls.o $(DEPLIBS)
|
||||||
|
|
||||||
|
VCS_SAVE_RESTORE_OBJ=/home/kumon/Synopsys/vcs/T-2022.06/linux64/lib/vcs_save_restore_new.o
|
||||||
|
|
||||||
|
# Select your favorite compiler
|
||||||
|
|
||||||
|
# Linux:
|
||||||
|
# Compiler:
|
||||||
|
VCS_CC=gcc
|
||||||
|
# Internal CC for gen_c flow:
|
||||||
|
CC_CG=gcc
|
||||||
|
# Loader
|
||||||
|
LD=g++
|
||||||
|
STDLIB =
|
||||||
|
|
||||||
|
# Strip Flags for target product
|
||||||
|
STRIPFLAGS=
|
||||||
|
|
||||||
|
PRE_LDFLAGS= # Loader Flags
|
||||||
|
LDFLAGS= -rdynamic -Wl,-rpath='$$ORIGIN'/simv.daidir -Wl,-rpath=./simv.daidir -Wl,-rpath=/home/kumon/Synopsys/vcs/T-2022.06/linux64/lib -L/home/kumon/Synopsys/vcs/T-2022.06/linux64/lib
|
||||||
|
# Picarchive Flags
|
||||||
|
PICLDFLAGS= -Wl,-rpath-link=./
|
||||||
|
PIC_LD=ld
|
||||||
|
|
||||||
|
# C run time startup
|
||||||
|
CRT0=
|
||||||
|
# C run time startup
|
||||||
|
CRTN=
|
||||||
|
# Machine specific libraries
|
||||||
|
SYSLIBS=/home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/pli.a -ldl -lm -lc -lpthread -ldl
|
||||||
|
|
||||||
|
# Default defines
|
||||||
|
SHELL=/bin/sh
|
||||||
|
|
||||||
|
VCSTMPSPECARG=
|
||||||
|
VCSTMPSPECENV=
|
||||||
|
# NOTE: if you have little space in $TMPDIR, but plenty in /foo,
|
||||||
|
#and you are using gcc, uncomment the next line
|
||||||
|
#VCSTMPSPECENV=SNPS_VCS_TMPDIR=/foo
|
||||||
|
|
||||||
|
TMPSPECARG=$(VCSTMPSPECARG)
|
||||||
|
TMPSPECENV=$(VCSTMPSPECENV)
|
||||||
|
CC=$(TMPSPECENV) $(VCS_CC) $(TMPSPECARG)
|
||||||
|
|
||||||
|
# C flags for compilation
|
||||||
|
CFLAGS=$(STDLIB)-w -pipe -fPIC -O -I/home/kumon/Synopsys/vcs/T-2022.06/include
|
||||||
|
|
||||||
|
CFLAGS_O0=-w -pipe -fPIC -I/home/kumon/Synopsys/vcs/T-2022.06/include -O0 -fno-strict-aliasing -fno-optimize-sibling-calls
|
||||||
|
|
||||||
|
CFLAGS_CG=-w -pipe -fPIC -I/home/kumon/Synopsys/vcs/T-2022.06/include -O -fno-strict-aliasing -fno-optimize-sibling-calls
|
||||||
|
|
||||||
|
CFLAGS_CG_CLIB=-w -pipe -fPIC -I/home/kumon/Synopsys/vcs/T-2022.06/include -O -fno-strict-aliasing -fno-optimize-sibling-calls
|
||||||
|
|
||||||
|
CFLAGS_RMAR=-w -pipe -fPIC -I/home/kumon/Synopsys/vcs/T-2022.06/include -O -fno-strict-aliasing -fno-optimize-sibling-calls
|
||||||
|
|
||||||
|
CFLAGS_CG+=$(STDLIB)
|
||||||
|
CFLAGS_CG_CLIB+=$(STDLIB)
|
||||||
|
CFLAGS_O0+=$(STDLIB)
|
||||||
|
LD_PARTIAL_LOADER=ld
|
||||||
|
# Partial linking
|
||||||
|
LD_PARTIAL=$(LD_PARTIAL_LOADER) -r -o
|
||||||
|
LIBS=-lnuma -lvirsim -lerrorinf -lsnpsmalloc -lvfs /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/pli.a
|
||||||
|
# Note: if make gives you errors about include, either get gmake, or
|
||||||
|
# replace the following line with the contents of the file filelist,
|
||||||
|
# EACH TIME IT CHANGES
|
||||||
|
# included file defines OBJS, and is automatically generated by vcs
|
||||||
|
include filelist
|
||||||
|
|
||||||
|
OBJS=$(VLOG_OBJS) $(SYSC_OBJS) $(VHDL_OBJS)
|
||||||
|
|
||||||
|
product : $(PRODUCT_TIMESTAMP)
|
||||||
|
@echo $(PRODUCT) up to date
|
||||||
|
|
||||||
|
objects : $(OBJS) $(DPI_STUB_OBJS) $(PLI_STUB_OBJS)
|
||||||
|
|
||||||
|
clean :
|
||||||
|
rm -f $(VCS_OBJS) $(CU_OBJS)
|
||||||
|
|
||||||
|
clobber : clean
|
||||||
|
rm -f $(PRODUCT) $(PRODUCT_TIMESTAMP)
|
||||||
|
|
||||||
|
picclean :
|
||||||
|
rm -f _cuarc*.so _csrc*.so pre_vcsobj_*.so share_vcsobj_*.so
|
||||||
|
@rm -f $(PRODUCT).daidir/_[0-9]*_archive_*.so 2>/dev/null
|
||||||
|
|
||||||
|
product_clean_order :
|
||||||
|
@$(MAKE) -f Makefile --no-print-directory picclean
|
||||||
|
@$(MAKE) -f Makefile --no-print-directory product_order
|
||||||
|
|
||||||
|
product_order : $(PRODUCT)
|
||||||
|
|
||||||
|
$(PRODUCT_TIMESTAMP) : product_clean_order
|
||||||
|
-if [ -x $(PRODUCT) ]; then chmod a-x $(PRODUCT); fi
|
||||||
|
$(LD) $(CRT0) -o $(PRODUCT) $(LLVM_FLAGS) $(STDLIB) $(PRE_LDFLAGS) $(STRIPFLAGS) $(PCLDFLAGS) $(LDFLAGS) $(PICLDFLAGS) $(OBJS) $(LIBS) $(RUNTIME) -Wl,-whole-archive $(VCSMXSAIF) $(VCSUCLI) $(PLILIBS) $(DECLIBS) $(BALIBS) -Wl,-no-whole-archive $(LINK_TB) $(DPI_STUB_OBJS) $(PLI_STUB_OBJS) $(VCS_SAVE_RESTORE_OBJ) $(SYSLIBS) $(CRTN)
|
||||||
|
@rm -f csrc[0-9]*.o
|
||||||
|
@rm -f cuarc[0-9]*.o
|
||||||
|
@touch $(PRODUCT_TIMESTAMP)
|
||||||
|
@-if [ -d ./objs ]; then find ./objs -type d -empty -delete; fi
|
||||||
|
|
||||||
|
$(PRODUCT) : $(LD_VERSION_CHECK) $(OBJS) $(DOTLIBS) $(DPI_STUB_OBJS) $(PLI_STUB_OBJS) $(CMODLIB) $(SYSC_STUB_LIB) /home/kumon/Synopsys/vcs/T-2022.06/linux64/lib/libvcsnew.so /home/kumon/Synopsys/vcs/T-2022.06/linux64/lib/libsimprofile.so /home/kumon/Synopsys/vcs/T-2022.06/linux64/lib/libuclinative.so /home/kumon/Synopsys/vcs/T-2022.06/linux64/lib/vcs_tls.o /home/kumon/Synopsys/vcs/T-2022.06/linux64/lib/libvcsucli.so $(VCS_SAVE_RESTORE_OBJ)
|
||||||
|
@touch $(PRODUCT)
|
||||||
|
|
49
test/SIMv0.1/csrc/Makefile.hsopt
Executable file
49
test/SIMv0.1/csrc/Makefile.hsopt
Executable file
@ -0,0 +1,49 @@
|
|||||||
|
# Makefile generated by VCS to build rmapats.so for your model
|
||||||
|
VSRC=..
|
||||||
|
|
||||||
|
# Override TARGET_ARCH
|
||||||
|
TARGET_ARCH=
|
||||||
|
|
||||||
|
# Select your favorite compiler
|
||||||
|
|
||||||
|
# Linux:
|
||||||
|
# Compiler:
|
||||||
|
VCS_CC=gcc
|
||||||
|
# Internal CC for gen_c flow:
|
||||||
|
CC_CG=gcc
|
||||||
|
|
||||||
|
# Loader
|
||||||
|
LD=g++
|
||||||
|
# Loader Flags
|
||||||
|
LDFLAGS=
|
||||||
|
|
||||||
|
# Default defines
|
||||||
|
SHELL=/bin/sh
|
||||||
|
|
||||||
|
VCSTMPSPECARG=
|
||||||
|
VCSTMPSPECENV=
|
||||||
|
# NOTE: if you have little space in $TMPDIR, but plenty in /foo,
|
||||||
|
#and you are using gcc, uncomment the next line
|
||||||
|
#VCSTMPSPECENV=SNPS_VCS_TMPDIR=/foo
|
||||||
|
|
||||||
|
TMPSPECARG=$(VCSTMPSPECARG)
|
||||||
|
TMPSPECENV=$(VCSTMPSPECENV)
|
||||||
|
CC=$(TMPSPECENV) $(VCS_CC) $(TMPSPECARG)
|
||||||
|
|
||||||
|
# C flags for compilation
|
||||||
|
CFLAGS=$(STDLIB)-w -pipe -fPIC -O -I/home/kumon/Synopsys/vcs/T-2022.06/include
|
||||||
|
|
||||||
|
CFLAGS_CG=-w -pipe -fPIC -I/home/kumon/Synopsys/vcs/T-2022.06/include -O -fno-strict-aliasing -fno-optimize-sibling-calls
|
||||||
|
|
||||||
|
CFLAGS_CG_CLIB=-w -pipe -fPIC -I/home/kumon/Synopsys/vcs/T-2022.06/include -O -fno-strict-aliasing -fno-optimize-sibling-calls
|
||||||
|
|
||||||
|
CFLAGS_RMAR=-w -pipe -fPIC -I/home/kumon/Synopsys/vcs/T-2022.06/include -O -fno-strict-aliasing -fno-optimize-sibling-calls
|
||||||
|
|
||||||
|
ASFLAGS=(null)
|
||||||
|
LIBS=
|
||||||
|
|
||||||
|
include filelist.hsopt
|
||||||
|
|
||||||
|
|
||||||
|
rmapats.so: $(HSOPT_OBJS)
|
||||||
|
@$(VCS_CC) $(LDFLAGS) $(LIBS) -shared -o ./../simv.daidir/rmapats.so $(HSOPT_OBJS)
|
BIN
test/SIMv0.1/csrc/SIM_l.o
Executable file
BIN
test/SIMv0.1/csrc/SIM_l.o
Executable file
Binary file not shown.
BIN
test/SIMv0.1/csrc/_7567_archive_1.so
Executable file
BIN
test/SIMv0.1/csrc/_7567_archive_1.so
Executable file
Binary file not shown.
989
test/SIMv0.1/csrc/_vcs_pli_stub_.c
Executable file
989
test/SIMv0.1/csrc/_vcs_pli_stub_.c
Executable file
@ -0,0 +1,989 @@
|
|||||||
|
#ifndef _GNU_SOURCE
|
||||||
|
#define _GNU_SOURCE
|
||||||
|
#endif
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <dlfcn.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern void* VCS_dlsymLookup(const char *);
|
||||||
|
extern void vcsMsgReportNoSource1(const char *, const char*);
|
||||||
|
|
||||||
|
/* PLI routine: $fsdbDumpvars:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_fsdbDumpvars
|
||||||
|
#define __VCS_PLI_STUB_novas_call_fsdbDumpvars
|
||||||
|
extern void novas_call_fsdbDumpvars(int data, int reason);
|
||||||
|
#pragma weak novas_call_fsdbDumpvars
|
||||||
|
void novas_call_fsdbDumpvars(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_fsdbDumpvars");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_fsdbDumpvars");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_fsdbDumpvars");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_fsdbDumpvars)(int data, int reason) = novas_call_fsdbDumpvars;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_fsdbDumpvars */
|
||||||
|
|
||||||
|
/* PLI routine: $fsdbDumpvars:misc */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_misc
|
||||||
|
#define __VCS_PLI_STUB_novas_misc
|
||||||
|
extern void novas_misc(int data, int reason, int iparam );
|
||||||
|
#pragma weak novas_misc
|
||||||
|
void novas_misc(int data, int reason, int iparam )
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason, int iparam ) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason, int iparam )) dlsym(RTLD_NEXT, "novas_misc");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason, int iparam )) VCS_dlsymLookup("novas_misc");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason, iparam );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_misc)(int data, int reason, int iparam ) = novas_misc;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_misc */
|
||||||
|
|
||||||
|
/* PLI routine: $fsdbDumpvarsByFile:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_fsdbDumpvarsByFile
|
||||||
|
#define __VCS_PLI_STUB_novas_call_fsdbDumpvarsByFile
|
||||||
|
extern void novas_call_fsdbDumpvarsByFile(int data, int reason);
|
||||||
|
#pragma weak novas_call_fsdbDumpvarsByFile
|
||||||
|
void novas_call_fsdbDumpvarsByFile(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_fsdbDumpvarsByFile");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_fsdbDumpvarsByFile");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_fsdbDumpvarsByFile");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_fsdbDumpvarsByFile)(int data, int reason) = novas_call_fsdbDumpvarsByFile;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_fsdbDumpvarsByFile */
|
||||||
|
|
||||||
|
/* PLI routine: $fsdbAddRuntimeSignal:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_fsdbAddRuntimeSignal
|
||||||
|
#define __VCS_PLI_STUB_novas_call_fsdbAddRuntimeSignal
|
||||||
|
extern void novas_call_fsdbAddRuntimeSignal(int data, int reason);
|
||||||
|
#pragma weak novas_call_fsdbAddRuntimeSignal
|
||||||
|
void novas_call_fsdbAddRuntimeSignal(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_fsdbAddRuntimeSignal");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_fsdbAddRuntimeSignal");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_fsdbAddRuntimeSignal");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_fsdbAddRuntimeSignal)(int data, int reason) = novas_call_fsdbAddRuntimeSignal;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_fsdbAddRuntimeSignal */
|
||||||
|
|
||||||
|
/* PLI routine: $sps_create_transaction_stream:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_sps_create_transaction_stream
|
||||||
|
#define __VCS_PLI_STUB_novas_call_sps_create_transaction_stream
|
||||||
|
extern void novas_call_sps_create_transaction_stream(int data, int reason);
|
||||||
|
#pragma weak novas_call_sps_create_transaction_stream
|
||||||
|
void novas_call_sps_create_transaction_stream(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_sps_create_transaction_stream");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_sps_create_transaction_stream");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_sps_create_transaction_stream");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_sps_create_transaction_stream)(int data, int reason) = novas_call_sps_create_transaction_stream;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_sps_create_transaction_stream */
|
||||||
|
|
||||||
|
/* PLI routine: $sps_begin_transaction:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_sps_begin_transaction
|
||||||
|
#define __VCS_PLI_STUB_novas_call_sps_begin_transaction
|
||||||
|
extern void novas_call_sps_begin_transaction(int data, int reason);
|
||||||
|
#pragma weak novas_call_sps_begin_transaction
|
||||||
|
void novas_call_sps_begin_transaction(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_sps_begin_transaction");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_sps_begin_transaction");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_sps_begin_transaction");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_sps_begin_transaction)(int data, int reason) = novas_call_sps_begin_transaction;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_sps_begin_transaction */
|
||||||
|
|
||||||
|
/* PLI routine: $sps_end_transaction:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_sps_end_transaction
|
||||||
|
#define __VCS_PLI_STUB_novas_call_sps_end_transaction
|
||||||
|
extern void novas_call_sps_end_transaction(int data, int reason);
|
||||||
|
#pragma weak novas_call_sps_end_transaction
|
||||||
|
void novas_call_sps_end_transaction(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_sps_end_transaction");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_sps_end_transaction");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_sps_end_transaction");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_sps_end_transaction)(int data, int reason) = novas_call_sps_end_transaction;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_sps_end_transaction */
|
||||||
|
|
||||||
|
/* PLI routine: $sps_free_transaction:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_sps_free_transaction
|
||||||
|
#define __VCS_PLI_STUB_novas_call_sps_free_transaction
|
||||||
|
extern void novas_call_sps_free_transaction(int data, int reason);
|
||||||
|
#pragma weak novas_call_sps_free_transaction
|
||||||
|
void novas_call_sps_free_transaction(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_sps_free_transaction");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_sps_free_transaction");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_sps_free_transaction");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_sps_free_transaction)(int data, int reason) = novas_call_sps_free_transaction;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_sps_free_transaction */
|
||||||
|
|
||||||
|
/* PLI routine: $sps_add_attribute:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_sps_add_attribute
|
||||||
|
#define __VCS_PLI_STUB_novas_call_sps_add_attribute
|
||||||
|
extern void novas_call_sps_add_attribute(int data, int reason);
|
||||||
|
#pragma weak novas_call_sps_add_attribute
|
||||||
|
void novas_call_sps_add_attribute(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_sps_add_attribute");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_sps_add_attribute");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_sps_add_attribute");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_sps_add_attribute)(int data, int reason) = novas_call_sps_add_attribute;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_sps_add_attribute */
|
||||||
|
|
||||||
|
/* PLI routine: $sps_update_label:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_sps_update_label
|
||||||
|
#define __VCS_PLI_STUB_novas_call_sps_update_label
|
||||||
|
extern void novas_call_sps_update_label(int data, int reason);
|
||||||
|
#pragma weak novas_call_sps_update_label
|
||||||
|
void novas_call_sps_update_label(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_sps_update_label");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_sps_update_label");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_sps_update_label");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_sps_update_label)(int data, int reason) = novas_call_sps_update_label;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_sps_update_label */
|
||||||
|
|
||||||
|
/* PLI routine: $sps_add_relation:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_sps_add_relation
|
||||||
|
#define __VCS_PLI_STUB_novas_call_sps_add_relation
|
||||||
|
extern void novas_call_sps_add_relation(int data, int reason);
|
||||||
|
#pragma weak novas_call_sps_add_relation
|
||||||
|
void novas_call_sps_add_relation(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_sps_add_relation");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_sps_add_relation");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_sps_add_relation");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_sps_add_relation)(int data, int reason) = novas_call_sps_add_relation;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_sps_add_relation */
|
||||||
|
|
||||||
|
/* PLI routine: $fsdbWhatif:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_fsdbWhatif
|
||||||
|
#define __VCS_PLI_STUB_novas_call_fsdbWhatif
|
||||||
|
extern void novas_call_fsdbWhatif(int data, int reason);
|
||||||
|
#pragma weak novas_call_fsdbWhatif
|
||||||
|
void novas_call_fsdbWhatif(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_fsdbWhatif");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_fsdbWhatif");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_fsdbWhatif");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_fsdbWhatif)(int data, int reason) = novas_call_fsdbWhatif;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_fsdbWhatif */
|
||||||
|
|
||||||
|
/* PLI routine: $paa_init:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_paa_init
|
||||||
|
#define __VCS_PLI_STUB_novas_call_paa_init
|
||||||
|
extern void novas_call_paa_init(int data, int reason);
|
||||||
|
#pragma weak novas_call_paa_init
|
||||||
|
void novas_call_paa_init(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_paa_init");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_paa_init");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_paa_init");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_paa_init)(int data, int reason) = novas_call_paa_init;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_paa_init */
|
||||||
|
|
||||||
|
/* PLI routine: $paa_sync:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_paa_sync
|
||||||
|
#define __VCS_PLI_STUB_novas_call_paa_sync
|
||||||
|
extern void novas_call_paa_sync(int data, int reason);
|
||||||
|
#pragma weak novas_call_paa_sync
|
||||||
|
void novas_call_paa_sync(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_paa_sync");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_paa_sync");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_paa_sync");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_paa_sync)(int data, int reason) = novas_call_paa_sync;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_paa_sync */
|
||||||
|
|
||||||
|
/* PLI routine: $fsdbDumpClassMethod:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_fsdbDumpClassMethod
|
||||||
|
#define __VCS_PLI_STUB_novas_call_fsdbDumpClassMethod
|
||||||
|
extern void novas_call_fsdbDumpClassMethod(int data, int reason);
|
||||||
|
#pragma weak novas_call_fsdbDumpClassMethod
|
||||||
|
void novas_call_fsdbDumpClassMethod(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_fsdbDumpClassMethod");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_fsdbDumpClassMethod");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_fsdbDumpClassMethod");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_fsdbDumpClassMethod)(int data, int reason) = novas_call_fsdbDumpClassMethod;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_fsdbDumpClassMethod */
|
||||||
|
|
||||||
|
/* PLI routine: $fsdbSuppressClassMethod:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_fsdbSuppressClassMethod
|
||||||
|
#define __VCS_PLI_STUB_novas_call_fsdbSuppressClassMethod
|
||||||
|
extern void novas_call_fsdbSuppressClassMethod(int data, int reason);
|
||||||
|
#pragma weak novas_call_fsdbSuppressClassMethod
|
||||||
|
void novas_call_fsdbSuppressClassMethod(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_fsdbSuppressClassMethod");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_fsdbSuppressClassMethod");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_fsdbSuppressClassMethod");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_fsdbSuppressClassMethod)(int data, int reason) = novas_call_fsdbSuppressClassMethod;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_fsdbSuppressClassMethod */
|
||||||
|
|
||||||
|
/* PLI routine: $fsdbSuppressClassProp:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_fsdbSuppressClassProp
|
||||||
|
#define __VCS_PLI_STUB_novas_call_fsdbSuppressClassProp
|
||||||
|
extern void novas_call_fsdbSuppressClassProp(int data, int reason);
|
||||||
|
#pragma weak novas_call_fsdbSuppressClassProp
|
||||||
|
void novas_call_fsdbSuppressClassProp(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_fsdbSuppressClassProp");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_fsdbSuppressClassProp");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_fsdbSuppressClassProp");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_fsdbSuppressClassProp)(int data, int reason) = novas_call_fsdbSuppressClassProp;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_fsdbSuppressClassProp */
|
||||||
|
|
||||||
|
/* PLI routine: $fsdbDumpMDAByFile:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_fsdbDumpMDAByFile
|
||||||
|
#define __VCS_PLI_STUB_novas_call_fsdbDumpMDAByFile
|
||||||
|
extern void novas_call_fsdbDumpMDAByFile(int data, int reason);
|
||||||
|
#pragma weak novas_call_fsdbDumpMDAByFile
|
||||||
|
void novas_call_fsdbDumpMDAByFile(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_fsdbDumpMDAByFile");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_fsdbDumpMDAByFile");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_fsdbDumpMDAByFile");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_fsdbDumpMDAByFile)(int data, int reason) = novas_call_fsdbDumpMDAByFile;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_fsdbDumpMDAByFile */
|
||||||
|
|
||||||
|
/* PLI routine: $fsdbTrans_create_stream_begin:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_fsdbEvent_create_stream_begin
|
||||||
|
#define __VCS_PLI_STUB_novas_call_fsdbEvent_create_stream_begin
|
||||||
|
extern void novas_call_fsdbEvent_create_stream_begin(int data, int reason);
|
||||||
|
#pragma weak novas_call_fsdbEvent_create_stream_begin
|
||||||
|
void novas_call_fsdbEvent_create_stream_begin(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_fsdbEvent_create_stream_begin");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_fsdbEvent_create_stream_begin");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_fsdbEvent_create_stream_begin");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_fsdbEvent_create_stream_begin)(int data, int reason) = novas_call_fsdbEvent_create_stream_begin;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_fsdbEvent_create_stream_begin */
|
||||||
|
|
||||||
|
/* PLI routine: $fsdbTrans_define_attribute:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_fsdbEvent_add_stream_attribute
|
||||||
|
#define __VCS_PLI_STUB_novas_call_fsdbEvent_add_stream_attribute
|
||||||
|
extern void novas_call_fsdbEvent_add_stream_attribute(int data, int reason);
|
||||||
|
#pragma weak novas_call_fsdbEvent_add_stream_attribute
|
||||||
|
void novas_call_fsdbEvent_add_stream_attribute(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_fsdbEvent_add_stream_attribute");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_fsdbEvent_add_stream_attribute");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_fsdbEvent_add_stream_attribute");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_fsdbEvent_add_stream_attribute)(int data, int reason) = novas_call_fsdbEvent_add_stream_attribute;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_fsdbEvent_add_stream_attribute */
|
||||||
|
|
||||||
|
/* PLI routine: $fsdbTrans_create_stream_end:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_fsdbEvent_create_stream_end
|
||||||
|
#define __VCS_PLI_STUB_novas_call_fsdbEvent_create_stream_end
|
||||||
|
extern void novas_call_fsdbEvent_create_stream_end(int data, int reason);
|
||||||
|
#pragma weak novas_call_fsdbEvent_create_stream_end
|
||||||
|
void novas_call_fsdbEvent_create_stream_end(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_fsdbEvent_create_stream_end");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_fsdbEvent_create_stream_end");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_fsdbEvent_create_stream_end");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_fsdbEvent_create_stream_end)(int data, int reason) = novas_call_fsdbEvent_create_stream_end;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_fsdbEvent_create_stream_end */
|
||||||
|
|
||||||
|
/* PLI routine: $fsdbTrans_begin:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_fsdbEvent_begin
|
||||||
|
#define __VCS_PLI_STUB_novas_call_fsdbEvent_begin
|
||||||
|
extern void novas_call_fsdbEvent_begin(int data, int reason);
|
||||||
|
#pragma weak novas_call_fsdbEvent_begin
|
||||||
|
void novas_call_fsdbEvent_begin(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_fsdbEvent_begin");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_fsdbEvent_begin");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_fsdbEvent_begin");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_fsdbEvent_begin)(int data, int reason) = novas_call_fsdbEvent_begin;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_fsdbEvent_begin */
|
||||||
|
|
||||||
|
/* PLI routine: $fsdbTrans_set_label:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_fsdbEvent_set_label
|
||||||
|
#define __VCS_PLI_STUB_novas_call_fsdbEvent_set_label
|
||||||
|
extern void novas_call_fsdbEvent_set_label(int data, int reason);
|
||||||
|
#pragma weak novas_call_fsdbEvent_set_label
|
||||||
|
void novas_call_fsdbEvent_set_label(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_fsdbEvent_set_label");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_fsdbEvent_set_label");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_fsdbEvent_set_label");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_fsdbEvent_set_label)(int data, int reason) = novas_call_fsdbEvent_set_label;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_fsdbEvent_set_label */
|
||||||
|
|
||||||
|
/* PLI routine: $fsdbTrans_add_attribute:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_fsdbEvent_add_attribute
|
||||||
|
#define __VCS_PLI_STUB_novas_call_fsdbEvent_add_attribute
|
||||||
|
extern void novas_call_fsdbEvent_add_attribute(int data, int reason);
|
||||||
|
#pragma weak novas_call_fsdbEvent_add_attribute
|
||||||
|
void novas_call_fsdbEvent_add_attribute(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_fsdbEvent_add_attribute");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_fsdbEvent_add_attribute");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_fsdbEvent_add_attribute");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_fsdbEvent_add_attribute)(int data, int reason) = novas_call_fsdbEvent_add_attribute;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_fsdbEvent_add_attribute */
|
||||||
|
|
||||||
|
/* PLI routine: $fsdbTrans_add_tag:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_fsdbEvent_add_tag
|
||||||
|
#define __VCS_PLI_STUB_novas_call_fsdbEvent_add_tag
|
||||||
|
extern void novas_call_fsdbEvent_add_tag(int data, int reason);
|
||||||
|
#pragma weak novas_call_fsdbEvent_add_tag
|
||||||
|
void novas_call_fsdbEvent_add_tag(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_fsdbEvent_add_tag");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_fsdbEvent_add_tag");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_fsdbEvent_add_tag");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_fsdbEvent_add_tag)(int data, int reason) = novas_call_fsdbEvent_add_tag;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_fsdbEvent_add_tag */
|
||||||
|
|
||||||
|
/* PLI routine: $fsdbTrans_end:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_fsdbEvent_end
|
||||||
|
#define __VCS_PLI_STUB_novas_call_fsdbEvent_end
|
||||||
|
extern void novas_call_fsdbEvent_end(int data, int reason);
|
||||||
|
#pragma weak novas_call_fsdbEvent_end
|
||||||
|
void novas_call_fsdbEvent_end(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_fsdbEvent_end");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_fsdbEvent_end");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_fsdbEvent_end");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_fsdbEvent_end)(int data, int reason) = novas_call_fsdbEvent_end;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_fsdbEvent_end */
|
||||||
|
|
||||||
|
/* PLI routine: $fsdbTrans_add_relation:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_fsdbEvent_add_relation
|
||||||
|
#define __VCS_PLI_STUB_novas_call_fsdbEvent_add_relation
|
||||||
|
extern void novas_call_fsdbEvent_add_relation(int data, int reason);
|
||||||
|
#pragma weak novas_call_fsdbEvent_add_relation
|
||||||
|
void novas_call_fsdbEvent_add_relation(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_fsdbEvent_add_relation");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_fsdbEvent_add_relation");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_fsdbEvent_add_relation");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_fsdbEvent_add_relation)(int data, int reason) = novas_call_fsdbEvent_add_relation;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_fsdbEvent_add_relation */
|
||||||
|
|
||||||
|
/* PLI routine: $fsdbTrans_get_error_code:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_fsdbEvent_get_error_code
|
||||||
|
#define __VCS_PLI_STUB_novas_call_fsdbEvent_get_error_code
|
||||||
|
extern void novas_call_fsdbEvent_get_error_code(int data, int reason);
|
||||||
|
#pragma weak novas_call_fsdbEvent_get_error_code
|
||||||
|
void novas_call_fsdbEvent_get_error_code(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_fsdbEvent_get_error_code");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_fsdbEvent_get_error_code");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_fsdbEvent_get_error_code");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_fsdbEvent_get_error_code)(int data, int reason) = novas_call_fsdbEvent_get_error_code;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_fsdbEvent_get_error_code */
|
||||||
|
|
||||||
|
/* PLI routine: $fsdbTrans_add_stream_attribute:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_fsdbTrans_add_stream_attribute
|
||||||
|
#define __VCS_PLI_STUB_novas_call_fsdbTrans_add_stream_attribute
|
||||||
|
extern void novas_call_fsdbTrans_add_stream_attribute(int data, int reason);
|
||||||
|
#pragma weak novas_call_fsdbTrans_add_stream_attribute
|
||||||
|
void novas_call_fsdbTrans_add_stream_attribute(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_fsdbTrans_add_stream_attribute");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_fsdbTrans_add_stream_attribute");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_fsdbTrans_add_stream_attribute");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_fsdbTrans_add_stream_attribute)(int data, int reason) = novas_call_fsdbTrans_add_stream_attribute;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_fsdbTrans_add_stream_attribute */
|
||||||
|
|
||||||
|
/* PLI routine: $fsdbTrans_add_scope_attribute:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_fsdbTrans_add_scope_attribute
|
||||||
|
#define __VCS_PLI_STUB_novas_call_fsdbTrans_add_scope_attribute
|
||||||
|
extern void novas_call_fsdbTrans_add_scope_attribute(int data, int reason);
|
||||||
|
#pragma weak novas_call_fsdbTrans_add_scope_attribute
|
||||||
|
void novas_call_fsdbTrans_add_scope_attribute(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_fsdbTrans_add_scope_attribute");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_fsdbTrans_add_scope_attribute");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_fsdbTrans_add_scope_attribute");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_fsdbTrans_add_scope_attribute)(int data, int reason) = novas_call_fsdbTrans_add_scope_attribute;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_fsdbTrans_add_scope_attribute */
|
||||||
|
|
||||||
|
/* PLI routine: $sps_interactive:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_sps_interactive
|
||||||
|
#define __VCS_PLI_STUB_novas_call_sps_interactive
|
||||||
|
extern void novas_call_sps_interactive(int data, int reason);
|
||||||
|
#pragma weak novas_call_sps_interactive
|
||||||
|
void novas_call_sps_interactive(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_sps_interactive");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_sps_interactive");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_sps_interactive");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_sps_interactive)(int data, int reason) = novas_call_sps_interactive;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_sps_interactive */
|
||||||
|
|
||||||
|
/* PLI routine: $sps_test:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_sps_test
|
||||||
|
#define __VCS_PLI_STUB_novas_call_sps_test
|
||||||
|
extern void novas_call_sps_test(int data, int reason);
|
||||||
|
#pragma weak novas_call_sps_test
|
||||||
|
void novas_call_sps_test(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_sps_test");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_sps_test");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_sps_test");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_sps_test)(int data, int reason) = novas_call_sps_test;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_sps_test */
|
||||||
|
|
||||||
|
/* PLI routine: $fsdbDumpClassObject:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_fsdbDumpClassObject
|
||||||
|
#define __VCS_PLI_STUB_novas_call_fsdbDumpClassObject
|
||||||
|
extern void novas_call_fsdbDumpClassObject(int data, int reason);
|
||||||
|
#pragma weak novas_call_fsdbDumpClassObject
|
||||||
|
void novas_call_fsdbDumpClassObject(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_fsdbDumpClassObject");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_fsdbDumpClassObject");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_fsdbDumpClassObject");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_fsdbDumpClassObject)(int data, int reason) = novas_call_fsdbDumpClassObject;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_fsdbDumpClassObject */
|
||||||
|
|
||||||
|
/* PLI routine: $fsdbDumpClassObjectByFile:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_fsdbDumpClassObjectByFile
|
||||||
|
#define __VCS_PLI_STUB_novas_call_fsdbDumpClassObjectByFile
|
||||||
|
extern void novas_call_fsdbDumpClassObjectByFile(int data, int reason);
|
||||||
|
#pragma weak novas_call_fsdbDumpClassObjectByFile
|
||||||
|
void novas_call_fsdbDumpClassObjectByFile(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_fsdbDumpClassObjectByFile");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_fsdbDumpClassObjectByFile");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_fsdbDumpClassObjectByFile");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_fsdbDumpClassObjectByFile)(int data, int reason) = novas_call_fsdbDumpClassObjectByFile;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_fsdbDumpClassObjectByFile */
|
||||||
|
|
||||||
|
/* PLI routine: $fsdbTrans_add_attribute_expand:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_fsdbEvent_add_attribute_expand
|
||||||
|
#define __VCS_PLI_STUB_novas_call_fsdbEvent_add_attribute_expand
|
||||||
|
extern void novas_call_fsdbEvent_add_attribute_expand(int data, int reason);
|
||||||
|
#pragma weak novas_call_fsdbEvent_add_attribute_expand
|
||||||
|
void novas_call_fsdbEvent_add_attribute_expand(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_fsdbEvent_add_attribute_expand");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_fsdbEvent_add_attribute_expand");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_fsdbEvent_add_attribute_expand");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_fsdbEvent_add_attribute_expand)(int data, int reason) = novas_call_fsdbEvent_add_attribute_expand;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_fsdbEvent_add_attribute_expand */
|
||||||
|
|
||||||
|
/* PLI routine: $ridbDump:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_ridbDump
|
||||||
|
#define __VCS_PLI_STUB_novas_call_ridbDump
|
||||||
|
extern void novas_call_ridbDump(int data, int reason);
|
||||||
|
#pragma weak novas_call_ridbDump
|
||||||
|
void novas_call_ridbDump(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_ridbDump");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_ridbDump");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_ridbDump");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_ridbDump)(int data, int reason) = novas_call_ridbDump;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_ridbDump */
|
||||||
|
|
||||||
|
/* PLI routine: $sps_flush_file:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_sps_flush_file
|
||||||
|
#define __VCS_PLI_STUB_novas_call_sps_flush_file
|
||||||
|
extern void novas_call_sps_flush_file(int data, int reason);
|
||||||
|
#pragma weak novas_call_sps_flush_file
|
||||||
|
void novas_call_sps_flush_file(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_sps_flush_file");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_sps_flush_file");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_sps_flush_file");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_sps_flush_file)(int data, int reason) = novas_call_sps_flush_file;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_sps_flush_file */
|
||||||
|
|
||||||
|
/* PLI routine: $fsdbDumpSingle:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_fsdbDumpSingle
|
||||||
|
#define __VCS_PLI_STUB_novas_call_fsdbDumpSingle
|
||||||
|
extern void novas_call_fsdbDumpSingle(int data, int reason);
|
||||||
|
#pragma weak novas_call_fsdbDumpSingle
|
||||||
|
void novas_call_fsdbDumpSingle(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_fsdbDumpSingle");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_fsdbDumpSingle");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_fsdbDumpSingle");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_fsdbDumpSingle)(int data, int reason) = novas_call_fsdbDumpSingle;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_fsdbDumpSingle */
|
||||||
|
|
||||||
|
/* PLI routine: $fsdbDumpIO:call */
|
||||||
|
#ifndef __VCS_PLI_STUB_novas_call_fsdbDumpIO
|
||||||
|
#define __VCS_PLI_STUB_novas_call_fsdbDumpIO
|
||||||
|
extern void novas_call_fsdbDumpIO(int data, int reason);
|
||||||
|
#pragma weak novas_call_fsdbDumpIO
|
||||||
|
void novas_call_fsdbDumpIO(int data, int reason)
|
||||||
|
{
|
||||||
|
static int _vcs_pli_stub_initialized_ = 0;
|
||||||
|
static void (*_vcs_pli_fp_)(int data, int reason) = NULL;
|
||||||
|
if (!_vcs_pli_stub_initialized_) {
|
||||||
|
_vcs_pli_stub_initialized_ = 1;
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) dlsym(RTLD_NEXT, "novas_call_fsdbDumpIO");
|
||||||
|
if (_vcs_pli_fp_ == NULL) {
|
||||||
|
_vcs_pli_fp_ = (void (*)(int data, int reason)) VCS_dlsymLookup("novas_call_fsdbDumpIO");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (_vcs_pli_fp_) {
|
||||||
|
_vcs_pli_fp_(data, reason);
|
||||||
|
} else {
|
||||||
|
vcsMsgReportNoSource1("PLI-DIFNF", "novas_call_fsdbDumpIO");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void (*__vcs_pli_dummy_reference_novas_call_fsdbDumpIO)(int data, int reason) = novas_call_fsdbDumpIO;
|
||||||
|
#endif /* __VCS_PLI_STUB_novas_call_fsdbDumpIO */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
BIN
test/SIMv0.1/csrc/_vcs_pli_stub_.o
Executable file
BIN
test/SIMv0.1/csrc/_vcs_pli_stub_.o
Executable file
Binary file not shown.
BIN
test/SIMv0.1/csrc/archive.0/_7567_archive_1.a
Executable file
BIN
test/SIMv0.1/csrc/archive.0/_7567_archive_1.a
Executable file
Binary file not shown.
3
test/SIMv0.1/csrc/archive.0/_7567_archive_1.a.info
Executable file
3
test/SIMv0.1/csrc/archive.0/_7567_archive_1.a.info
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
reYIK_d.o
|
||||||
|
g97qF_d.o
|
||||||
|
amcQwB.o
|
BIN
test/SIMv0.1/csrc/cgincr.sdb
Executable file
BIN
test/SIMv0.1/csrc/cgincr.sdb
Executable file
Binary file not shown.
BIN
test/SIMv0.1/csrc/cginfo.json
Executable file
BIN
test/SIMv0.1/csrc/cginfo.json
Executable file
Binary file not shown.
BIN
test/SIMv0.1/csrc/cgproc.7567.json
Executable file
BIN
test/SIMv0.1/csrc/cgproc.7567.json
Executable file
Binary file not shown.
BIN
test/SIMv0.1/csrc/checksum
Executable file
BIN
test/SIMv0.1/csrc/checksum
Executable file
Binary file not shown.
2
test/SIMv0.1/csrc/clean.sh
Executable file
2
test/SIMv0.1/csrc/clean.sh
Executable file
@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/bash -h
|
||||||
|
/bin/rm -rf `/bin/ls -A | /bin/grep -v "json" | /bin/grep -v "hsopt" | /bin/grep -v "product_timestamp" | /bin/grep -v "sysc"` >/dev/null 2>&1
|
31
test/SIMv0.1/csrc/filelist
Executable file
31
test/SIMv0.1/csrc/filelist
Executable file
@ -0,0 +1,31 @@
|
|||||||
|
|
||||||
|
|
||||||
|
AR=ar
|
||||||
|
DOTLIBS=/home/kumon/Synopsys/vcs/T-2022.06/linux64/lib/libvirsim.so /home/kumon/Synopsys/vcs/T-2022.06/linux64/lib/liberrorinf.so /home/kumon/Synopsys/vcs/T-2022.06/linux64/lib/libsnpsmalloc.so /home/kumon/Synopsys/vcs/T-2022.06/linux64/lib/libvfs.so /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/pli.a
|
||||||
|
|
||||||
|
# This file is automatically generated by VCS. Any changes you make to it
|
||||||
|
# will be overwritten the next time VCS is run
|
||||||
|
VCS_LIBEXT=
|
||||||
|
XTRN_OBJS=
|
||||||
|
|
||||||
|
DPI_WRAPPER_OBJS =
|
||||||
|
DPI_STUB_OBJS =
|
||||||
|
# filelist.dpi will populate DPI_WRAPPER_OBJS and DPI_STUB_OBJS
|
||||||
|
include filelist.dpi
|
||||||
|
PLI_STUB_OBJS =
|
||||||
|
include filelist.pli
|
||||||
|
|
||||||
|
include filelist.hsopt
|
||||||
|
|
||||||
|
include filelist.cu
|
||||||
|
|
||||||
|
VCS_INCR_OBJS=
|
||||||
|
|
||||||
|
|
||||||
|
AUGDIR=
|
||||||
|
AUG_LDFLAGS=
|
||||||
|
SHARED_OBJ_SO=
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
VLOG_OBJS= $(VCS_OBJS) $(CU_OBJS) $(VCS_ARC0) $(XTRN_OBJS) $(DPI_WRAPPER_OBJS) $(VCS_INCR_OBJS) $(SHARED_OBJ_SO) $(HSOPT_OBJS)
|
38
test/SIMv0.1/csrc/filelist.cu
Executable file
38
test/SIMv0.1/csrc/filelist.cu
Executable file
@ -0,0 +1,38 @@
|
|||||||
|
LDVERSION= $(shell $(PIC_LD) -v | grep -q 2.30 ;echo $$?)
|
||||||
|
ifeq ($(LDVERSION), 0)
|
||||||
|
LD_NORELAX_FLAG= --no-relax
|
||||||
|
endif
|
||||||
|
|
||||||
|
ARCHIVE_OBJS=
|
||||||
|
ARCHIVE_OBJS += _7567_archive_1.so
|
||||||
|
_7567_archive_1.so : archive.0/_7567_archive_1.a
|
||||||
|
@$(AR) -s $<
|
||||||
|
@$(PIC_LD) -shared -Bsymbolic $(LD_NORELAX_FLAG) -o .//../simv.daidir//_7567_archive_1.so --whole-archive $< --no-whole-archive
|
||||||
|
@rm -f $@
|
||||||
|
@ln -sf .//../simv.daidir//_7567_archive_1.so $@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
VCS_CU_ARC_OBJS =
|
||||||
|
|
||||||
|
|
||||||
|
O0_OBJS =
|
||||||
|
|
||||||
|
$(O0_OBJS) : %.o: %.c
|
||||||
|
$(CC_CG) $(CFLAGS_O0) -c -o $@ $<
|
||||||
|
|
||||||
|
|
||||||
|
%.o: %.c
|
||||||
|
$(CC_CG) $(CFLAGS_CG) -c -o $@ $<
|
||||||
|
CU_UDP_OBJS = \
|
||||||
|
|
||||||
|
|
||||||
|
CU_LVL_OBJS = \
|
||||||
|
SIM_l.o
|
||||||
|
|
||||||
|
MAIN_OBJS = \
|
||||||
|
objs/amcQw_d.o
|
||||||
|
|
||||||
|
CU_OBJS = $(MAIN_OBJS) $(ARCHIVE_OBJS) $(CU_UDP_OBJS) $(CU_LVL_OBJS)
|
||||||
|
|
0
test/SIMv0.1/csrc/filelist.dpi
Executable file
0
test/SIMv0.1/csrc/filelist.dpi
Executable file
13
test/SIMv0.1/csrc/filelist.hsopt
Executable file
13
test/SIMv0.1/csrc/filelist.hsopt
Executable file
@ -0,0 +1,13 @@
|
|||||||
|
rmapats_mop.o: rmapats.m
|
||||||
|
@/home/kumon/Synopsys/vcs/T-2022.06/linux64/bin/cgmop1 -tls_initexe -pic -gen_obj rmapats.m rmapats_mop.o; rm -f rmapats.m; touch rmapats.m; touch rmapats_mop.o
|
||||||
|
|
||||||
|
rmapats.o: rmapats.c
|
||||||
|
@$(CC_CG) $(CFLAGS_CG) -c -fPIC -x c -o rmapats.o rmapats.c
|
||||||
|
rmapats%.o: rmapats%.c
|
||||||
|
@$(CC_CG) $(CFLAGS_CG) -c -fPIC -x c -o $@ $<
|
||||||
|
rmar.o: rmar.c
|
||||||
|
@$(CC_CG) $(CFLAGS_RMAR) -c -fPIC -x c -o rmar.o rmar.c
|
||||||
|
rmar%.o: rmar%.c
|
||||||
|
@$(CC_CG) $(CFLAGS_RMAR) -c -fPIC -x c -o $@ $<
|
||||||
|
|
||||||
|
include filelist.hsopt.objs
|
1
test/SIMv0.1/csrc/filelist.hsopt.llvm2_0.objs
Executable file
1
test/SIMv0.1/csrc/filelist.hsopt.llvm2_0.objs
Executable file
@ -0,0 +1 @@
|
|||||||
|
LLVM_OBJS += rmar_llvm_0_1.o rmar_llvm_0_0.o
|
7
test/SIMv0.1/csrc/filelist.hsopt.objs
Executable file
7
test/SIMv0.1/csrc/filelist.hsopt.objs
Executable file
@ -0,0 +1,7 @@
|
|||||||
|
HSOPT_OBJS +=rmapats_mop.o \
|
||||||
|
rmapats.o \
|
||||||
|
rmar.o rmar_nd.o
|
||||||
|
|
||||||
|
include filelist.hsopt.llvm2_0.objs
|
||||||
|
HSOPT_OBJS += $(LLVM_OBJS)
|
||||||
|
|
6
test/SIMv0.1/csrc/filelist.pli
Executable file
6
test/SIMv0.1/csrc/filelist.pli
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
PLI_STUB_OBJS_OBJ0=_vcs_pli_stub_.o
|
||||||
|
PLI_STUB_OBJS_SRC0=_vcs_pli_stub_.c
|
||||||
|
PLI_STUB_OBJS += $(PLI_STUB_OBJS_OBJ0)
|
||||||
|
$(PLI_STUB_OBJS_OBJ0): $(PLI_STUB_OBJS_SRC0)
|
||||||
|
@$(CC) -I/home/kumon/Synopsys/vcs/T-2022.06/include -pipe -fPIC -I/home/kumon/Synopsys/vcs/T-2022.06/include -fPIC -c -o $(PLI_STUB_OBJS_OBJ0) $(PLI_STUB_OBJS_SRC0)
|
||||||
|
@strip -g $(PLI_STUB_OBJS_OBJ0)
|
0
test/SIMv0.1/csrc/import_dpic.h
Executable file
0
test/SIMv0.1/csrc/import_dpic.h
Executable file
BIN
test/SIMv0.1/csrc/objs/amcQw_d.o
Executable file
BIN
test/SIMv0.1/csrc/objs/amcQw_d.o
Executable file
Binary file not shown.
0
test/SIMv0.1/csrc/product_timestamp
Executable file
0
test/SIMv0.1/csrc/product_timestamp
Executable file
46
test/SIMv0.1/csrc/rmapats.c
Executable file
46
test/SIMv0.1/csrc/rmapats.c
Executable file
@ -0,0 +1,46 @@
|
|||||||
|
// file = 0; split type = patterns; threshold = 100000; total count = 0.
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <strings.h>
|
||||||
|
#include "rmapats.h"
|
||||||
|
|
||||||
|
void hsG_0__0 (struct dummyq_struct * I1381, EBLK * I1376, U I616);
|
||||||
|
void hsG_0__0 (struct dummyq_struct * I1381, EBLK * I1376, U I616)
|
||||||
|
{
|
||||||
|
U I1644;
|
||||||
|
U I1645;
|
||||||
|
U I1646;
|
||||||
|
struct futq * I1647;
|
||||||
|
struct dummyq_struct * pQ = I1381;
|
||||||
|
I1644 = ((U )vcs_clocks) + I616;
|
||||||
|
I1646 = I1644 & ((1 << fHashTableSize) - 1);
|
||||||
|
I1376->I662 = (EBLK *)(-1);
|
||||||
|
I1376->I663 = I1644;
|
||||||
|
if (0 && rmaProfEvtProp) {
|
||||||
|
vcs_simpSetEBlkEvtID(I1376);
|
||||||
|
}
|
||||||
|
if (I1644 < (U )vcs_clocks) {
|
||||||
|
I1645 = ((U *)&vcs_clocks)[1];
|
||||||
|
sched_millenium(pQ, I1376, I1645 + 1, I1644);
|
||||||
|
}
|
||||||
|
else if ((peblkFutQ1Head != ((void *)0)) && (I616 == 1)) {
|
||||||
|
I1376->I665 = (struct eblk *)peblkFutQ1Tail;
|
||||||
|
peblkFutQ1Tail->I662 = I1376;
|
||||||
|
peblkFutQ1Tail = I1376;
|
||||||
|
}
|
||||||
|
else if ((I1647 = pQ->I1284[I1646].I685)) {
|
||||||
|
I1376->I665 = (struct eblk *)I1647->I683;
|
||||||
|
I1647->I683->I662 = (RP )I1376;
|
||||||
|
I1647->I683 = (RmaEblk *)I1376;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
sched_hsopt(pQ, I1376, I1644);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
void SinitHsimPats(void);
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
2662
test/SIMv0.1/csrc/rmapats.h
Executable file
2662
test/SIMv0.1/csrc/rmapats.h
Executable file
File diff suppressed because it is too large
Load Diff
0
test/SIMv0.1/csrc/rmapats.m
Executable file
0
test/SIMv0.1/csrc/rmapats.m
Executable file
BIN
test/SIMv0.1/csrc/rmapats.o
Executable file
BIN
test/SIMv0.1/csrc/rmapats.o
Executable file
Binary file not shown.
BIN
test/SIMv0.1/csrc/rmapats_mop.o
Executable file
BIN
test/SIMv0.1/csrc/rmapats_mop.o
Executable file
Binary file not shown.
13
test/SIMv0.1/csrc/rmar.c
Executable file
13
test/SIMv0.1/csrc/rmar.c
Executable file
@ -0,0 +1,13 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "rmar0.h"
|
||||||
|
|
||||||
|
// stubs for Hil functions
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
void __Hil__Static_Init_Func__(void) {}
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
20
test/SIMv0.1/csrc/rmar.h
Executable file
20
test/SIMv0.1/csrc/rmar.h
Executable file
@ -0,0 +1,20 @@
|
|||||||
|
#ifndef _RMAR1_H_
|
||||||
|
#define _RMAR1_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#ifndef __DO_RMAHDR_
|
||||||
|
#include "rmar0.h"
|
||||||
|
#endif /*__DO_RMAHDR_*/
|
||||||
|
|
||||||
|
extern UP rmaFunctionRtlArray[];
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
BIN
test/SIMv0.1/csrc/rmar.o
Executable file
BIN
test/SIMv0.1/csrc/rmar.o
Executable file
Binary file not shown.
13
test/SIMv0.1/csrc/rmar0.h
Executable file
13
test/SIMv0.1/csrc/rmar0.h
Executable file
@ -0,0 +1,13 @@
|
|||||||
|
#ifndef _RMAR0_H_
|
||||||
|
#define _RMAR0_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
BIN
test/SIMv0.1/csrc/rmar_llvm_0_0.o
Executable file
BIN
test/SIMv0.1/csrc/rmar_llvm_0_0.o
Executable file
Binary file not shown.
BIN
test/SIMv0.1/csrc/rmar_llvm_0_1.o
Executable file
BIN
test/SIMv0.1/csrc/rmar_llvm_0_1.o
Executable file
Binary file not shown.
BIN
test/SIMv0.1/csrc/rmar_nd.o
Executable file
BIN
test/SIMv0.1/csrc/rmar_nd.o
Executable file
Binary file not shown.
18
test/SIMv0.1/fsdb2vcdLog/fsdb.00000.log
Executable file
18
test/SIMv0.1/fsdb2vcdLog/fsdb.00000.log
Executable file
@ -0,0 +1,18 @@
|
|||||||
|
#######################################################################################
|
||||||
|
# fsdb.xxxxx.log : log primitive debug message of FSDB Reader
|
||||||
|
# This is for R&D to analyze when there are issues happening when FSDB reading
|
||||||
|
# The corresponding FSDB file is /home/icer/Project/ASICs/virtual_project/sync_fifo_flow/prj/SIMv0.1/Tb_Sync_FIFO.fsdb
|
||||||
|
#######################################################################################
|
||||||
|
[BASIC]Reader version : Chronologic Simulation VCS Release T-2022.06_Full64
|
||||||
|
[BASIC]simulator version : Chronologic Simulation VCS Release T-2022.06_Full64
|
||||||
|
[BASIC]dumper version : FSDB Dumper for VCS, Release Verdi_T-2022.06, Linux x86_64/64bit, 05/29/2022
|
||||||
|
[THREAD]The MTR thread count is 12
|
||||||
|
[THREAD]Secondary thread count: 11
|
||||||
|
[READSCOPE]ReadScopeTree calling time is 2
|
||||||
|
[READSCOPE]ReadScope_PartialLoad calling time is 0
|
||||||
|
[READSCOPE]Scope read by partial load count is 0
|
||||||
|
[READSCOPE]Scope read count is 4
|
||||||
|
[READSCOPE]Decompressed blk is 1
|
||||||
|
[FSDBGate Info] start
|
||||||
|
[FSDBGate Info] Total fhdb_compute_count = 135672
|
||||||
|
[FSDBGate Info] end
|
3
test/SIMv0.1/fsdb2vcdLog/pes.bat
Executable file
3
test/SIMv0.1/fsdb2vcdLog/pes.bat
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
where
|
||||||
|
detach
|
||||||
|
quit
|
6
test/SIMv0.1/fsdb2vcdLog/turbo.log
Executable file
6
test/SIMv0.1/fsdb2vcdLog/turbo.log
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
Command Line: /home/kumon/Synopsys/verdi/T-2022.06/platform/LINUXAMD64/bin/fsdb2vcd Tb_Sync_FIFO.fsdb -o Tb_Sync_FIFO.vcd
|
||||||
|
uname(Linux EDA-VM3 6.8.0-48-generic #48~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Mon Oct 7 11:24:13 UTC 2 x86_64)
|
||||||
|
Load signals (0)-(250013500) time 0.028210 0.156188 0.001739 delta 151891968 151891968 total 438681600 438681600
|
||||||
|
Write signals (0)-(250013500) time 0.047141 0.047140 0.000000 delta 0 0 total 438681600 438681600
|
||||||
|
Unload (0)-(250013500) time 0.000020 0.000019 0.000000 delta 0 0 total 438681600 438681600
|
||||||
|
au time 0.185725 0.205310 0.008924 delta 215785472 215785472 total 325173248 325173248
|
306
test/SIMv0.1/novas_dump.log
Executable file
306
test/SIMv0.1/novas_dump.log
Executable file
@ -0,0 +1,306 @@
|
|||||||
|
#######################################################################################
|
||||||
|
# log primitive debug message of FSDB dumping #
|
||||||
|
# This is for R&D to analyze when there are issues happening when FSDB dump #
|
||||||
|
#######################################################################################
|
||||||
|
ANF: vcsd_get_serial_mode_status('./simv: undefined symbol: vcsd_get_serial_mode_status')
|
||||||
|
ANF: vcsd_enable_sva_success_callback('./simv: undefined symbol: vcsd_enable_sva_success_callback')
|
||||||
|
ANF: vcsd_disable_sva_success_callback('./simv: undefined symbol: vcsd_disable_sva_success_callback')
|
||||||
|
ANF: vcsd_get_power_scope_name('./simv: undefined symbol: vcsd_get_power_scope_name')
|
||||||
|
ANF: vcsd_begin_no_value_var_info('./simv: undefined symbol: vcsd_begin_no_value_var_info')
|
||||||
|
ANF: vcsd_end_no_value_var_info('./simv: undefined symbol: vcsd_end_no_value_var_info')
|
||||||
|
ANF: vcsd_remove_xprop_merge_mode_callback('./simv: undefined symbol: vcsd_remove_xprop_merge_mode_callback')
|
||||||
|
ANF: vhpi_get_cb_info('./simv: undefined symbol: vhpi_get_cb_info')
|
||||||
|
ANF: vhpi_free_handle('./simv: undefined symbol: vhpi_free_handle')
|
||||||
|
ANF: vhpi_fetch_vcsd_handle('./simv: undefined symbol: vhpi_fetch_vcsd_handle')
|
||||||
|
ANF: vhpi_fetch_vpi_handle('./simv: undefined symbol: vhpi_fetch_vpi_handle')
|
||||||
|
ANF: vhpi_has_verilog_parent('./simv: undefined symbol: vhpi_has_verilog_parent')
|
||||||
|
ANF: vhpi_is_verilog_scope('./simv: undefined symbol: vhpi_is_verilog_scope')
|
||||||
|
ANF: scsd_xprop_is_enabled('./simv: undefined symbol: scsd_xprop_is_enabled')
|
||||||
|
ANF: scsd_xprop_sig_is_promoted('./simv: undefined symbol: scsd_xprop_sig_is_promoted')
|
||||||
|
ANF: scsd_xprop_int_xvalue('./simv: undefined symbol: scsd_xprop_int_xvalue')
|
||||||
|
ANF: scsd_xprop_bool_xvalue('./simv: undefined symbol: scsd_xprop_bool_xvalue')
|
||||||
|
ANF: scsd_xprop_enum_xvalue('./simv: undefined symbol: scsd_xprop_enum_xvalue')
|
||||||
|
ANF: scsd_xprop_register_merge_mode_cb('./simv: undefined symbol: scsd_xprop_register_merge_mode_cb')
|
||||||
|
ANF: scsd_xprop_delete_merge_mode_cb('./simv: undefined symbol: scsd_xprop_delete_merge_mode_cb')
|
||||||
|
ANF: scsd_xprop_get_merge_mode('./simv: undefined symbol: scsd_xprop_get_merge_mode')
|
||||||
|
ANF: scsd_thread_get_info('./simv: undefined symbol: scsd_thread_get_info')
|
||||||
|
ANF: scsd_thread_vc_init('./simv: undefined symbol: scsd_thread_vc_init')
|
||||||
|
ANF: scsd_master_set_delta_sync_cbk('./simv: undefined symbol: scsd_master_set_delta_sync_cbk')
|
||||||
|
ANF: scsd_fgp_get_fsdb_cores('./simv: undefined symbol: scsd_fgp_get_fsdb_cores')
|
||||||
|
ANF: scsd_fgp_get_is_cpu_affinity_disabled('./simv: undefined symbol: scsd_fgp_get_is_cpu_affinity_disabled')
|
||||||
|
ANF: vhdi_dt_get_type('./simv: undefined symbol: vhdi_dt_get_type')
|
||||||
|
ANF: vhdi_dt_get_key('./simv: undefined symbol: vhdi_dt_get_key')
|
||||||
|
ANF: vhdi_dt_get_vhdl_enum_info('./simv: undefined symbol: vhdi_dt_get_vhdl_enum_info')
|
||||||
|
ANF: vhdi_dt_get_vhdl_physical_info('./simv: undefined symbol: vhdi_dt_get_vhdl_physical_info')
|
||||||
|
ANF: vhdi_dt_get_vhdl_array_info('./simv: undefined symbol: vhdi_dt_get_vhdl_array_info')
|
||||||
|
ANF: vhdi_dt_get_vhdl_record_info('./simv: undefined symbol: vhdi_dt_get_vhdl_record_info')
|
||||||
|
ANF: vhdi_def_traverse_module('./simv: undefined symbol: vhdi_def_traverse_module')
|
||||||
|
ANF: vhdi_def_traverse_scope('./simv: undefined symbol: vhdi_def_traverse_scope')
|
||||||
|
ANF: vhdi_def_traverse_variable('./simv: undefined symbol: vhdi_def_traverse_variable')
|
||||||
|
ANF: vhdi_def_get_module_id_by_vhpi('./simv: undefined symbol: vhdi_def_get_module_id_by_vhpi')
|
||||||
|
ANF: vhdi_def_get_handle_by_module_id('./simv: undefined symbol: vhdi_def_get_handle_by_module_id')
|
||||||
|
ANF: vhdi_def_get_variable_info_by_vhpi('./simv: undefined symbol: vhdi_def_get_variable_info_by_vhpi')
|
||||||
|
ANF: vhdi_def_free('./simv: undefined symbol: vhdi_def_free')
|
||||||
|
ANF: vhdi_ist_traverse_scope('./simv: undefined symbol: vhdi_ist_traverse_scope')
|
||||||
|
ANF: vhdi_ist_traverse_variable('./simv: undefined symbol: vhdi_ist_traverse_variable')
|
||||||
|
ANF: vhdi_ist_convert_by_vhpi('./simv: undefined symbol: vhdi_ist_convert_by_vhpi')
|
||||||
|
ANF: vhdi_ist_clone('./simv: undefined symbol: vhdi_ist_clone')
|
||||||
|
ANF: vhdi_ist_free('./simv: undefined symbol: vhdi_ist_free')
|
||||||
|
ANF: vhdi_ist_hash_key('./simv: undefined symbol: vhdi_ist_hash_key')
|
||||||
|
ANF: vhdi_ist_compare('./simv: undefined symbol: vhdi_ist_compare')
|
||||||
|
ANF: vhdi_ist_get_value_addr('./simv: undefined symbol: vhdi_ist_get_value_addr')
|
||||||
|
ANF: vhdi_set_scsd_callback('./simv: undefined symbol: vhdi_set_scsd_callback')
|
||||||
|
ANF: vhdi_cbk_set_force_callback('./simv: undefined symbol: vhdi_cbk_set_force_callback')
|
||||||
|
ANF: vhdi_trigger_init_force('./simv: undefined symbol: vhdi_trigger_init_force')
|
||||||
|
ANF: vhdi_ist_check_scsd_callback('./simv: undefined symbol: vhdi_ist_check_scsd_callback')
|
||||||
|
ANF: vhdi_ist_add_scsd_callback('./simv: undefined symbol: vhdi_ist_add_scsd_callback')
|
||||||
|
ANF: vhdi_ist_remove_scsd_callback('./simv: undefined symbol: vhdi_ist_remove_scsd_callback')
|
||||||
|
ANF: vhdi_ist_get_scsd_user_data('./simv: undefined symbol: vhdi_ist_get_scsd_user_data')
|
||||||
|
ANF: vhdi_add_time_change_callback('./simv: undefined symbol: vhdi_add_time_change_callback')
|
||||||
|
ANF: vhdi_get_real_value_by_value_addr('./simv: undefined symbol: vhdi_get_real_value_by_value_addr')
|
||||||
|
ANF: vhdi_get_64_value_by_value_addr('./simv: undefined symbol: vhdi_get_64_value_by_value_addr')
|
||||||
|
ANF: vhdi_xprop_inst_is_promoted('./simv: undefined symbol: vhdi_xprop_inst_is_promoted')
|
||||||
|
ANF: vdi_ist_convert_by_vhdi('./simv: undefined symbol: vdi_ist_convert_by_vhdi')
|
||||||
|
ANF: vhdi_ist_get_module_id('./simv: undefined symbol: vhdi_ist_get_module_id')
|
||||||
|
ANF: vhdi_refine_foreign_scope_type('./simv: undefined symbol: vhdi_refine_foreign_scope_type')
|
||||||
|
ANF: vhdi_flush_callback('./simv: undefined symbol: vhdi_flush_callback')
|
||||||
|
ANF: vhdi_set_orig_name('./simv: undefined symbol: vhdi_set_orig_name')
|
||||||
|
ANF: vhdi_set_dump_pt('./simv: undefined symbol: vhdi_set_dump_pt')
|
||||||
|
ANF: vhdi_get_fsdb_option('./simv: undefined symbol: vhdi_get_fsdb_option')
|
||||||
|
ANF: vhdi_fgp_get_mode('./simv: undefined symbol: vhdi_fgp_get_mode')
|
||||||
|
ANF: vhdi_node_register_composite_var('./simv: undefined symbol: vhdi_node_register_composite_var')
|
||||||
|
ANF: vhdi_node_analysis('./simv: undefined symbol: vhdi_node_analysis')
|
||||||
|
ANF: vhdi_node_id('./simv: undefined symbol: vhdi_node_id')
|
||||||
|
ANF: vhdi_node_ist_check_scsd_callback('./simv: undefined symbol: vhdi_node_ist_check_scsd_callback')
|
||||||
|
ANF: vhdi_node_ist_add_scsd_callback('./simv: undefined symbol: vhdi_node_ist_add_scsd_callback')
|
||||||
|
ANF: vhdi_node_ist_get_value_addr('./simv: undefined symbol: vhdi_node_ist_get_value_addr')
|
||||||
|
ANF: vhdi_enc_def_traverse_module('./simv: undefined symbol: vhdi_enc_def_traverse_module')
|
||||||
|
ANF: vhdi_enc_def_traverse_scope('./simv: undefined symbol: vhdi_enc_def_traverse_scope')
|
||||||
|
ANF: vhdi_enc_def_traverse_variable('./simv: undefined symbol: vhdi_enc_def_traverse_variable')
|
||||||
|
ANF: vhdi_enc_ist_traverse_scope('./simv: undefined symbol: vhdi_enc_ist_traverse_scope')
|
||||||
|
ANF: vhdi_enc_ist_traverse_variable('./simv: undefined symbol: vhdi_enc_ist_traverse_variable')
|
||||||
|
ANF: vhdi_enc_ist_get_module_id('./simv: undefined symbol: vhdi_enc_ist_get_module_id')
|
||||||
|
ANF: vhdi_enc_def_get_handle_by_module_id('./simv: undefined symbol: vhdi_enc_def_get_handle_by_module_id')
|
||||||
|
VCS compile option:
|
||||||
|
option[0]: ./simv
|
||||||
|
option[1]: /home/kumon/Synopsys/vcs/T-2022.06/linux64/bin/vcs1
|
||||||
|
option[2]: -Mcc=gcc
|
||||||
|
option[3]: -Mcplusplus=g++
|
||||||
|
option[4]: -Masflags=
|
||||||
|
option[5]: -Mcfl= -pipe -fPIC -O -I/home/kumon/Synopsys/vcs/T-2022.06/include
|
||||||
|
option[6]: -Mxllcflags=
|
||||||
|
option[7]: -Mxcflags= -pipe -fPIC -I/home/kumon/Synopsys/vcs/T-2022.06/include
|
||||||
|
option[8]: -Mldflags= -rdynamic
|
||||||
|
option[9]: -Mout=simv
|
||||||
|
option[10]: -Mamsrun=
|
||||||
|
option[11]: -Mvcsaceobjs=
|
||||||
|
option[12]: -Mobjects= /home/kumon/Synopsys/vcs/T-2022.06/linux64/lib/libvirsim.so /home/kumon/Synopsys/vcs/T-2022.06/linux64/lib/liberrorinf.so /home/kumon/Synopsys/vcs/T-2022.06/linux64/lib/libsnpsmalloc.so /home/kumon/Synopsys/vcs/T-2022.06/linux64/lib/libvfs.so /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/pli.a
|
||||||
|
option[13]: -Mexternalobj=
|
||||||
|
option[14]: -Msaverestoreobj=/home/kumon/Synopsys/vcs/T-2022.06/linux64/lib/vcs_save_restore_new.o
|
||||||
|
option[15]: -Mcrt0=
|
||||||
|
option[16]: -Mcrtn=
|
||||||
|
option[17]: -Mcsrc=
|
||||||
|
option[18]: -Mupdate
|
||||||
|
option[19]: -Msyslibs=/home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/pli.a -ldl -lm
|
||||||
|
option[20]: -l
|
||||||
|
option[21]: ./vcs.log
|
||||||
|
option[22]: -o
|
||||||
|
option[23]: simv
|
||||||
|
option[24]: +v2k
|
||||||
|
option[25]: +libext+.v+.V+.sv+.svh
|
||||||
|
option[26]: -debug_access
|
||||||
|
option[27]: +vpi
|
||||||
|
option[28]: +vcsd1
|
||||||
|
option[29]: +itf+/home/kumon/Synopsys/vcs/T-2022.06/linux64/lib/vcsdp_lite.tab
|
||||||
|
option[30]: -timescale=1ns/1ps
|
||||||
|
option[31]: -P
|
||||||
|
option[32]: /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
option[33]: -top
|
||||||
|
option[34]: Tb_Sync_FIFO
|
||||||
|
option[35]: -full64
|
||||||
|
option[36]: -debug_access+all+bc
|
||||||
|
option[37]: -debug_region+cell
|
||||||
|
option[38]: +vcs+initreg+random
|
||||||
|
option[39]: +notimingcheck
|
||||||
|
option[40]: -ucli
|
||||||
|
option[41]: -error=IWNF
|
||||||
|
option[42]: +lint=TFIPC-L
|
||||||
|
option[43]: -picarchive
|
||||||
|
option[44]: -P
|
||||||
|
option[45]: /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
option[46]: -fsdb
|
||||||
|
option[47]: -sverilog
|
||||||
|
option[48]: -gen_obj
|
||||||
|
option[49]: -f
|
||||||
|
option[50]: /home/icer/Project/ASICs/virtual_project/sync_fifo_flow/user/sim/file_list/asic_fun_sim.f
|
||||||
|
option[51]: -load
|
||||||
|
option[52]: /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/libnovas.so:FSDBDumpCmd
|
||||||
|
option[53]: timescale=1ns/1ps
|
||||||
|
Chronologic Simulation VCS Release T-2022.06_Full64
|
||||||
|
Linux 6.8.0-48-generic #48~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Mon Oct 7 11:24:13 UTC 2 x86_64
|
||||||
|
CPU cores: 32
|
||||||
|
Limit information:
|
||||||
|
======================================
|
||||||
|
cputime unlimited
|
||||||
|
filesize unlimited
|
||||||
|
datasize unlimited
|
||||||
|
stacksize 8192 kbytes
|
||||||
|
coredumpsize unlimited
|
||||||
|
memoryuse unlimited
|
||||||
|
vmemoryuse unlimited
|
||||||
|
descriptors 1048576
|
||||||
|
memorylocked 8192 kbytes
|
||||||
|
maxproc unlimited
|
||||||
|
======================================
|
||||||
|
(Special)Runtime environment variables:
|
||||||
|
|
||||||
|
Runtime environment variables:
|
||||||
|
SYNOPSYS_HOME=/home/kumon/Synopsys/syn/R-2020.09-SP4
|
||||||
|
SYNOPSYS_LC_ROOT=/home/kumon/Synopsys/lc/R-2020.09-SP3
|
||||||
|
MANPATH=/opt/rh/devtoolset-11/root/usr/share/man
|
||||||
|
SYNOPSYS_TMAX=/home/kumon/Synopsys/txs/R-2020.09-SP4
|
||||||
|
RTLA_HOME=/home/kumon/Synopsys/rtla/U-2022.12-SP1
|
||||||
|
HOSTNAME=EDA-VM3
|
||||||
|
MC2_HOME_2010_04_00=/home/kumon/TSMC/MC2/MC2_2010.04.00.b
|
||||||
|
TERM=xterm
|
||||||
|
MC2_HOME_DEFAULT=/home/kumon/TSMC/MC2/MC2_2012.02.00.d
|
||||||
|
MAKEFLAGS=
|
||||||
|
PERL5LIB=/root/perl5/lib/perl5:
|
||||||
|
QTDIR=/usr/lib64/qt-3.3
|
||||||
|
OLDPWD=/home/icer/Project/ASICs/virtual_project/sync_fifo_flow
|
||||||
|
PERL_MB_OPT=--install_base /root/perl5
|
||||||
|
QTINC=/usr/lib64/qt-3.3/include
|
||||||
|
QT_GRAPHICSSYSTEM_CHECKED=1
|
||||||
|
PCP_DIR=/opt/rh/devtoolset-11/root
|
||||||
|
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
|
||||||
|
LD_LIBRARY_PATH=/home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64:/opt/rh/devtoolset-11/root/usr/lib64:/opt/rh/devtoolset-11/root/usr/lib:/opt/rh/devtoolset-11/root/usr/lib64/dyninst:/opt/rh/devtoolset-11/root/usr/lib/dyninst
|
||||||
|
MAKE_TERMOUT=/dev/pts/5
|
||||||
|
DVE_HOME=/home/kumon/Synopsys/vcs/T-2022.06
|
||||||
|
MAKELEVEL=1
|
||||||
|
SNPSLMD_LICENSE_FILE=27000@EDA-VM3
|
||||||
|
MFLAGS=
|
||||||
|
TMAX_HOME=/home/kumon/Synopsys/txs/R-2020.09-SP4
|
||||||
|
VC_STATIC_HOME=/home/kumon/Synopsys/vc_static/T-2022.06-SP2
|
||||||
|
PATH=/opt/rh/devtoolset-11/root/usr/bin:/usr/lib64/qt-3.3/bin:/root/perl5/bin:/usr/lib64/ccache:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/kumon/Synopsys/lc/R-2020.09-SP3/bin:/home/kumon/Synopsys/lc/R-2020.09-SP3/admin/install/lc/bin:/home/kumon/Synopsys/vcs/T-2022.06/bin:/home/kumon/Synopsys/vcs/T-2022.06/bin:/home/kumon/Synopsys/verdi/T-2022.06/bin:/home/kumon/Synopsys/spyglass/T-2022.06-1/SPYGLASS_HOME/bin:/home/kumon/Synopsys/syn/R-2020.09-SP4/bin:/home/kumon/Synopsys/icc2/T-2022.03/bin:/home/kumon/Synopsys/prime/U-2022.12/bin:/home/kumon/Synopsys/starrc/O-2018.06-SP1/bin:/home/kumon/Synopsys/icvalidator/O-2018.12-SP2-10/bin:/home/kumon/Synopsys/scl/2024.06/linux64/bin:/home/kumon/Synopsys/vc_static/T-2022.06-SP2/bin:/home/kumon/Synopsys/txs/R-2020.09-SP4/bin:/home/kumon/Synopsys/fusioncompiler/O-2018.06-SP4/bin:/home/kumon/Synopsys/rtla/U-2022.12-SP1/bin:/home/kumon/Synopsys/embedit/Q-2020.03-SP1/bin
|
||||||
|
STARRC_HOME=/home/kumon/Synopsys/starrc/O-2018.06-SP1
|
||||||
|
PT_HOME=/home/kumon/Synopsys/prime/U-2022.12
|
||||||
|
SNPSLMD_QUEUE=1
|
||||||
|
VERDI_HOME=/home/kumon/Synopsys/verdi/T-2022.06
|
||||||
|
PWD=/home/icer/Project/ASICs/virtual_project/sync_fifo_flow/prj/SIMv0.1
|
||||||
|
VCS_HOME=/home/kumon/Synopsys/vcs/T-2022.06
|
||||||
|
LANG=en_US.UTF-8
|
||||||
|
KDEDIRS=/usr
|
||||||
|
VCS_ARCH_OVERRIDE=linux
|
||||||
|
EMBEDIT_HOME=/home/kumon/Synopsys/embedit/Q-2020.03-SP1
|
||||||
|
ICV_HOME=/home/kumon/Synopsys/icvalidator/O-2018.12-SP2-10
|
||||||
|
HOME=/root
|
||||||
|
SHLVL=2
|
||||||
|
ICC2_HOME=/home/kumon/Synopsys/icc2/T-2022.03
|
||||||
|
PERL_LOCAL_LIB_ROOT=:/root/perl5
|
||||||
|
DC_HOME=/home/kumon/Synopsys/syn/R-2020.09-SP4
|
||||||
|
MAKE_TERMERR=/dev/pts/5
|
||||||
|
SPYGLASS_HOME=/home/kumon/Synopsys/spyglass/T-2022.06-1/SPYGLASS_HOME
|
||||||
|
QTLIB=/usr/lib64/qt-3.3/lib
|
||||||
|
XDG_DATA_DIRS=/root/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share
|
||||||
|
MC2_HOME_2007_11_00=/home/kumon/TSMC/MC2/MC2_2007.11.00
|
||||||
|
FUSIONCOMPILER_HOME=/home/kumon/Synopsys/fusioncompiler/O-2018.06-SP4
|
||||||
|
LESSOPEN=||/usr/bin/lesspipe.sh %s
|
||||||
|
PKG_CONFIG_PATH=/opt/rh/devtoolset-11/root/usr/lib64/pkgconfig
|
||||||
|
SCL_HOME=/home/kumon/Synopsys/scl/2024.06
|
||||||
|
INFOPATH=/opt/rh/devtoolset-11/root/usr/share/info
|
||||||
|
DISPLAY=host.docker.internal:0
|
||||||
|
LC_HOME=/home/kumon/Synopsys/lc/R-2020.09-SP3
|
||||||
|
QT_PLUGIN_PATH=/usr/lib64/kde4/plugins:/usr/lib/kde4/plugins
|
||||||
|
MC2_HOME_2012_02_00=/home/kumon/TSMC/MC2/MC2_2012.02.00.d
|
||||||
|
PERL_MM_OPT=INSTALL_BASE=/root/perl5
|
||||||
|
_=./simv
|
||||||
|
VCS_PATHMAP_PRELOAD_DONE=1
|
||||||
|
VCS_STACK_EXEC=true
|
||||||
|
VCS_EXEC_DONE=1
|
||||||
|
LC_ALL=C
|
||||||
|
DVE=/home/kumon/Synopsys/vcs/T-2022.06/gui/dve
|
||||||
|
SPECMAN_OUTPUT_TO_TTY=1
|
||||||
|
FLEXLM_BORROWFILE=/root/.EDA-VM3-borrow.txt
|
||||||
|
Runtime command line arguments:
|
||||||
|
argv[0]=./simv
|
||||||
|
225 profile - 100
|
||||||
|
CPU/Mem usage: 0.030 sys, 0.110 user, 397.73M mem
|
||||||
|
226 Elapsed time: 0:01:09 Tue Nov 26 20:51:01 2024
|
||||||
|
227 User CPU time used: 0 seconds
|
||||||
|
228 System CPU time used: 0 seconds
|
||||||
|
229 pliAppInit
|
||||||
|
230 [SC]Init: MemoryConsumed=0.00MB ElapsedTime=0hour 0min. 0sec.
|
||||||
|
231 FSDB_GATE is set.
|
||||||
|
232 FSDB_RTL is set.
|
||||||
|
233 FSDB_ALIAS_ARRAY_ELEM is set to 4294967295.
|
||||||
|
234 Enable Parallel Dumping.
|
||||||
|
235 pliAppMiscSet: New Sim Round
|
||||||
|
236 pliEntryInit
|
||||||
|
237 LIBSSCORE=found /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/lib/LINUXAMD64/libsscore_vcs202206.so through $NOVAS_HOME setting.
|
||||||
|
238 FSDB Dumper for VCS, Release Verdi_T-2022.06, Linux x86_64/64bit, 05/29/2022
|
||||||
|
239 (C) 1996 - 2022 by Synopsys, Inc.
|
||||||
|
240 sps_call_fsdbDumpfile_main at 0 : /home/icer/Project/ASICs/virtual_project/sync_fifo_flow/user/sim/Tb_Sync_FIFO.sv(49)
|
||||||
|
241 argv[0]: (Tb_Sync_FIFO.fsdb)
|
||||||
|
242 *Verdi* : Create FSDB file 'Tb_Sync_FIFO.fsdb'
|
||||||
|
243 [spi_vcs_vd_ppi_create_root]: no upf option
|
||||||
|
244 compile option from '/home/icer/Project/ASICs/virtual_project/sync_fifo_flow/prj/SIMv0.1/simv.daidir/vcs_rebuild'.
|
||||||
|
245 "vcs '-f' '/home/icer/Project/ASICs/virtual_project/sync_fifo_flow/user/sim/file_list/asic_fun_sim.f' '-o' 'simv' '-l' './vcs.log' '+v2k' '+libext+.v+.V+.sv+.svh' '-sverilog' '-debug_access' '-timescale=1ns/1ps' '-P' '/home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab' '/home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/pli.a' '-top' 'Tb_Sync_FIFO' '-full64' '-debug_all' '+vcs+initreg+random' '+notimingcheck' '-Mupdate' '-ucli' '-error=IWNF' '+lint=TFIPC-L' 2>&1"
|
||||||
|
246 DVDI_is_vir_unload_enabled is enable
|
||||||
|
247 FSDB_VCS_ENABLE_NATIVE_VC is enable
|
||||||
|
248 sps_call_fsdbDumpvars_vd_main at 0 : /home/icer/Project/ASICs/virtual_project/sync_fifo_flow/user/sim/Tb_Sync_FIFO.sv(50)
|
||||||
|
249 argv[0]: (0)
|
||||||
|
250 *Verdi* : Begin traversing the scopes, layer (0).
|
||||||
|
251 *Verdi* : End of traversing.
|
||||||
|
252 pliAppHDL_DumpVarComplete traverse var: profile -
|
||||||
|
CPU/Mem usage: 0.040 sys, 0.110 user, 497.27M mem
|
||||||
|
incr: 0.010 sys, 0.000 user, 7.92M mem
|
||||||
|
accu: 0.010 sys, 0.000 user, 7.92M mem
|
||||||
|
accu incr: 0.010 sys, 0.000 user, 7.92M mem
|
||||||
|
|
||||||
|
Count usage: 98 var, 88 idcode, 51 callback
|
||||||
|
incr: 98 var, 88 idcode, 51 callback
|
||||||
|
accu: 98 var, 88 idcode, 51 callback
|
||||||
|
accu incr: 98 var, 88 idcode, 51 callback
|
||||||
|
253 Elapsed time: 0:01:09 Tue Nov 26 20:51:01 2024
|
||||||
|
254 User CPU time used: 0 seconds
|
||||||
|
255 System CPU time used: 0 seconds
|
||||||
|
256 pliAppHDL_DumpVarComplete: profile -
|
||||||
|
CPU/Mem usage: 0.040 sys, 0.110 user, 498.32M mem
|
||||||
|
incr: 0.000 sys, 0.000 user, 1.05M mem
|
||||||
|
accu: 0.010 sys, 0.000 user, 8.97M mem
|
||||||
|
accu incr: 0.000 sys, 0.000 user, 1.05M mem
|
||||||
|
|
||||||
|
Count usage: 98 var, 88 idcode, 51 callback
|
||||||
|
incr: 0 var, 0 idcode, 0 callback
|
||||||
|
accu: 98 var, 88 idcode, 51 callback
|
||||||
|
accu incr: 0 var, 0 idcode, 0 callback
|
||||||
|
257 Elapsed time: 0:01:09 Tue Nov 26 20:51:01 2024
|
||||||
|
258 User CPU time used: 0 seconds
|
||||||
|
259 System CPU time used: 0 seconds
|
||||||
|
260 End of simulation at 250013500
|
||||||
|
261 Memory usage: 506.716 M
|
||||||
|
262 Maximum resident set size: 114 MB
|
||||||
|
263 Hard page faults: 7
|
||||||
|
264 Soft page faults: 18928
|
||||||
|
265 Elapsed time: 0:01:09 Tue Nov 26 20:51:01 2024
|
||||||
|
266 User CPU time used: 0 seconds
|
||||||
|
267 System CPU time used: 0 seconds
|
||||||
|
268 Begin FSDB profile info:
|
||||||
|
269 FSDB Writer : bc1(91000) bcn(60290) mtf/stf(0/0)
|
||||||
|
FSDB Writer elapsed time : flush(0.017533) io wait(0.000000) theadpool wait(0.000000)
|
||||||
|
FSDB Writer cpu time : MT Compression : 0
|
||||||
|
270 End FSDB profile info
|
||||||
|
271 FSDB closed. Name: Tb_Sync_FIFO.fsdb Size: 156855
|
||||||
|
272 Parallel profile - ProducerThread:1 ConsumerThread:1 Buffer:64MB
|
||||||
|
273 - BlockUsed:3 Acquire:182084 BufferUsed:2285857
|
||||||
|
274 - Flush:3 Expand:0 ProducerWait:0 ConsumerWait:1
|
||||||
|
275 - MainProducerTime:0.207860268 TotalConsumerTime:0.004160955
|
||||||
|
276 - ElapsedTime:0.137197000
|
||||||
|
277 Producer 0 profile - BlockUsed:3 Acquire:182084 BufferUsed:2285857
|
||||||
|
278 Consumer 0 profile - Affinity:-1 CPUTime:0.004160955 LifeTime:0.013474738 (0.31%)
|
||||||
|
279 - BlockUsed:3 Acquire:182084 BufferUsed:2285857
|
||||||
|
280 SimExit
|
||||||
|
281 Elapsed time: 0:01:09 Tue Nov 26 20:51:01 2024
|
||||||
|
282 User CPU time used: 0 seconds
|
||||||
|
283 System CPU time used: 0 seconds
|
||||||
|
284 Sim process exit
|
4955
test/SIMv0.1/rdata.txt
Executable file
4955
test/SIMv0.1/rdata.txt
Executable file
File diff suppressed because it is too large
Load Diff
BIN
test/SIMv0.1/simv
Executable file
BIN
test/SIMv0.1/simv
Executable file
Binary file not shown.
0
test/SIMv0.1/simv.daidir/.daidir_complete
Executable file
0
test/SIMv0.1/simv.daidir/.daidir_complete
Executable file
0
test/SIMv0.1/simv.daidir/.normal_done
Executable file
0
test/SIMv0.1/simv.daidir/.normal_done
Executable file
132
test/SIMv0.1/simv.daidir/.vcs.timestamp
Executable file
132
test/SIMv0.1/simv.daidir/.vcs.timestamp
Executable file
@ -0,0 +1,132 @@
|
|||||||
|
0
|
||||||
|
50
|
||||||
|
+itf+/home/kumon/Synopsys/vcs/T-2022.06/linux64/lib/vcsdp_lite.tab
|
||||||
|
+libext+.v+.V+.sv+.svh
|
||||||
|
+lint=TFIPC-L
|
||||||
|
+notimingcheck
|
||||||
|
+v2k
|
||||||
|
+vcs+initreg+random
|
||||||
|
+vcsd1
|
||||||
|
+vpi
|
||||||
|
-Mamsrun=
|
||||||
|
-Masflags=
|
||||||
|
-Mcc=gcc
|
||||||
|
-Mcfl= -pipe -fPIC -O -I/home/kumon/Synopsys/vcs/T-2022.06/include
|
||||||
|
-Mcplusplus=g++
|
||||||
|
-Mcrt0=
|
||||||
|
-Mcrtn=
|
||||||
|
-Mcsrc=
|
||||||
|
-Mexternalobj=
|
||||||
|
-Mldflags= -rdynamic
|
||||||
|
-Mobjects= /home/kumon/Synopsys/vcs/T-2022.06/linux64/lib/libvirsim.so /home/kumon/Synopsys/vcs/T-2022.06/linux64/lib/liberrorinf.so /home/kumon/Synopsys/vcs/T-2022.06/linux64/lib/libsnpsmalloc.so /home/kumon/Synopsys/vcs/T-2022.06/linux64/lib/libvfs.so /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/pli.a
|
||||||
|
-Mout=simv
|
||||||
|
-Msaverestoreobj=/home/kumon/Synopsys/vcs/T-2022.06/linux64/lib/vcs_save_restore_new.o
|
||||||
|
-Msyslibs=/home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/pli.a -ldl -lm
|
||||||
|
-Mupdate
|
||||||
|
-Mvcsaceobjs=
|
||||||
|
-Mxcflags= -pipe -fPIC -I/home/kumon/Synopsys/vcs/T-2022.06/include
|
||||||
|
-Mxllcflags=
|
||||||
|
-P
|
||||||
|
-P
|
||||||
|
-debug_access
|
||||||
|
-debug_access+all+bc
|
||||||
|
-debug_region+cell
|
||||||
|
-error=IWNF
|
||||||
|
-f /home/icer/Project/ASICs/virtual_project/sync_fifo_flow/user/sim/file_list/asic_fun_sim.f
|
||||||
|
-fsdb
|
||||||
|
-full64
|
||||||
|
-gen_obj
|
||||||
|
-l
|
||||||
|
-o simv
|
||||||
|
-picarchive
|
||||||
|
-sverilog
|
||||||
|
-timescale=1ns/1ps
|
||||||
|
-top
|
||||||
|
-ucli
|
||||||
|
/home/kumon/Synopsys/vcs/T-2022.06/linux64/bin/vcs1
|
||||||
|
./vcs.log
|
||||||
|
simv
|
||||||
|
/home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
Tb_Sync_FIFO
|
||||||
|
/home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
/home/icer/Project/ASICs/virtual_project/sync_fifo_flow/user/sim/file_list/asic_fun_sim.f
|
||||||
|
61
|
||||||
|
XDG_DATA_DIRS=/root/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share
|
||||||
|
VMR_MODE_FLAG=64
|
||||||
|
VERDI_HOME=/home/kumon/Synopsys/verdi/T-2022.06
|
||||||
|
VC_STATIC_HOME=/home/kumon/Synopsys/vc_static/T-2022.06-SP2
|
||||||
|
VCS_PATHMAP_PRELOAD_DONE=1
|
||||||
|
VCS_MX_HOME_INTERNAL=1
|
||||||
|
VCS_MODE_FLAG=64
|
||||||
|
VCS_LOG_FILE=./vcs.log
|
||||||
|
VCS_HOME=/home/kumon/Synopsys/vcs/T-2022.06
|
||||||
|
VCS_EXEC_DONE=1
|
||||||
|
VCS_DEPTH=0
|
||||||
|
VCS_ARG_ADDED_FOR_TMP=1
|
||||||
|
VCS_ARCH_OVERRIDE=linux
|
||||||
|
VCS_ARCH=linux64
|
||||||
|
UNAME=/bin/uname
|
||||||
|
TOOL_HOME=/home/kumon/Synopsys/vcs/T-2022.06/linux64
|
||||||
|
TMAX_HOME=/home/kumon/Synopsys/txs/R-2020.09-SP4
|
||||||
|
SYNOPSYS_TMAX=/home/kumon/Synopsys/txs/R-2020.09-SP4
|
||||||
|
SYNOPSYS_LC_ROOT=/home/kumon/Synopsys/lc/R-2020.09-SP3
|
||||||
|
SYNOPSYS_HOME=/home/kumon/Synopsys/syn/R-2020.09-SP4
|
||||||
|
STARRC_HOME=/home/kumon/Synopsys/starrc/O-2018.06-SP1
|
||||||
|
SPYGLASS_HOME=/home/kumon/Synopsys/spyglass/T-2022.06-1/SPYGLASS_HOME
|
||||||
|
SNPS_VCS_CLANG_PATH=/home/kumon/Synopsys/vcs/T-2022.06/linux64/clang
|
||||||
|
SNPS_INTERNAL_VCS_LINUX_OS=linux
|
||||||
|
SNPSLMD_QUEUE=1
|
||||||
|
SCRNAME=vcs
|
||||||
|
SCRIPT_NAME=vcs
|
||||||
|
SCL_HOME=/home/kumon/Synopsys/scl/2024.06
|
||||||
|
RTLA_HOME=/home/kumon/Synopsys/rtla/U-2022.12-SP1
|
||||||
|
QT_PLUGIN_PATH=/usr/lib64/kde4/plugins:/usr/lib/kde4/plugins
|
||||||
|
QT_GRAPHICSSYSTEM_CHECKED=1
|
||||||
|
QTLIB=/usr/lib64/qt-3.3/lib
|
||||||
|
QTINC=/usr/lib64/qt-3.3/include
|
||||||
|
QTDIR=/usr/lib64/qt-3.3
|
||||||
|
PT_HOME=/home/kumon/Synopsys/prime/U-2022.12
|
||||||
|
PKG_CONFIG_PATH=/opt/rh/devtoolset-11/root/usr/lib64/pkgconfig
|
||||||
|
PERL_MM_OPT=INSTALL_BASE=/root/perl5
|
||||||
|
PERL_MB_OPT=--install_base /root/perl5
|
||||||
|
PERL_LOCAL_LIB_ROOT=:/root/perl5
|
||||||
|
PERL5LIB=/root/perl5/lib/perl5:
|
||||||
|
PCP_DIR=/opt/rh/devtoolset-11/root
|
||||||
|
OVA_UUM=0
|
||||||
|
MFLAGS=
|
||||||
|
MC2_HOME_DEFAULT=/home/kumon/TSMC/MC2/MC2_2012.02.00.d
|
||||||
|
MC2_HOME_2012_02_00=/home/kumon/TSMC/MC2/MC2_2012.02.00.d
|
||||||
|
MC2_HOME_2010_04_00=/home/kumon/TSMC/MC2/MC2_2010.04.00.b
|
||||||
|
MC2_HOME_2007_11_00=/home/kumon/TSMC/MC2/MC2_2007.11.00
|
||||||
|
MAKE_TERMOUT=/dev/pts/5
|
||||||
|
MAKE_TERMERR=/dev/pts/5
|
||||||
|
MAKELEVEL=1
|
||||||
|
MAKEFLAGS=
|
||||||
|
LESSOPEN=||/usr/bin/lesspipe.sh %s
|
||||||
|
LC_HOME=/home/kumon/Synopsys/lc/R-2020.09-SP3
|
||||||
|
LC_ALL=C
|
||||||
|
KDEDIRS=/usr
|
||||||
|
ICV_HOME=/home/kumon/Synopsys/icvalidator/O-2018.12-SP2-10
|
||||||
|
ICC2_HOME=/home/kumon/Synopsys/icc2/T-2022.03
|
||||||
|
FUSIONCOMPILER_HOME=/home/kumon/Synopsys/fusioncompiler/O-2018.06-SP4
|
||||||
|
EMBEDIT_HOME=/home/kumon/Synopsys/embedit/Q-2020.03-SP1
|
||||||
|
DVE_HOME=/home/kumon/Synopsys/vcs/T-2022.06
|
||||||
|
DC_HOME=/home/kumon/Synopsys/syn/R-2020.09-SP4
|
||||||
|
0
|
||||||
|
0
|
||||||
|
7
|
||||||
|
1732622616 /home/icer/Project/ASICs/virtual_project/sync_fifo_flow/user/src/tem5n28hpcplvta64x20m4swbso_110a_tt0p9v25c.v
|
||||||
|
1732624198 /home/icer/Project/ASICs/virtual_project/sync_fifo_flow/user/src/Sync_FIFO.sv
|
||||||
|
1732625191 /home/icer/Project/ASICs/virtual_project/sync_fifo_flow/user/sim/Tb_Sync_FIFO.sv
|
||||||
|
1732624715 /home/icer/Project/ASICs/virtual_project/sync_fifo_flow/user/sim/file_list/asic_fun_sim.f
|
||||||
|
1653825972 /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
1653825972 /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
1654052745 /home/kumon/Synopsys/vcs/T-2022.06/linux64/lib/vcsdp_lite.tab
|
||||||
|
5
|
||||||
|
1654054205 /home/kumon/Synopsys/vcs/T-2022.06/linux64/lib/libvirsim.so
|
||||||
|
1654053585 /home/kumon/Synopsys/vcs/T-2022.06/linux64/lib/liberrorinf.so
|
||||||
|
1654053489 /home/kumon/Synopsys/vcs/T-2022.06/linux64/lib/libsnpsmalloc.so
|
||||||
|
1654053565 /home/kumon/Synopsys/vcs/T-2022.06/linux64/lib/libvfs.so
|
||||||
|
1653824934 /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/pli.a
|
||||||
|
1732625392 simv.daidir
|
||||||
|
-1 partitionlib
|
BIN
test/SIMv0.1/simv.daidir/_7567_archive_1.so
Executable file
BIN
test/SIMv0.1/simv.daidir/_7567_archive_1.so
Executable file
Binary file not shown.
BIN
test/SIMv0.1/simv.daidir/binmap.sdb
Executable file
BIN
test/SIMv0.1/simv.daidir/binmap.sdb
Executable file
Binary file not shown.
4
test/SIMv0.1/simv.daidir/build_db
Executable file
4
test/SIMv0.1/simv.daidir/build_db
Executable file
@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/sh -e
|
||||||
|
# This file is automatically generated by VCS. Any changes you make
|
||||||
|
# to it will be overwritten the next time VCS is run.
|
||||||
|
vcs '-f' '/home/icer/Project/ASICs/virtual_project/sync_fifo_flow/user/sim/file_list/asic_fun_sim.f' '-o' 'simv' '-l' './vcs.log' '+v2k' '+libext+.v+.V+.sv+.svh' '-sverilog' '-debug_access' '-timescale=1ns/1ps' '-P' '/home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab' '/home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/pli.a' '-top' 'Tb_Sync_FIFO' '-full64' '-debug_all' '+vcs+initreg+random' '+notimingcheck' '-Mupdate' '-ucli' '-error=IWNF' '+lint=TFIPC-L' -static_dbgen_only -daidir=$1 2>&1
|
9
test/SIMv0.1/simv.daidir/cc/cc_bcode.db
Executable file
9
test/SIMv0.1/simv.daidir/cc/cc_bcode.db
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
sid Tb_Sync_FIFO
|
||||||
|
bcid 0 0 WIDTH,7 CALL_ARG_VAL,2,0 CALL_ARG_VAL,3,0 SUBTRACT RET
|
||||||
|
bcid 1 1 WIDTH,7 CALL_ARG_VAL,2,0 OPT_CONST,64 WIDTH,1 M_EQU WIDTH,7 CALL_ARG_VAL,2,0 OPT_CONST,63 WIDTH,1 M_EQU CALL_ARG_VAL,3,0 CALL_ARG_VAL,4,0 NOT AND AND OR RET
|
||||||
|
bcid 2 2 WIDTH,7 CALL_ARG_VAL,2,0 OPT_CONST,0 WIDTH,1 M_EQU WIDTH,7 CALL_ARG_VAL,2,0 OPT_CONST,1 WIDTH,1 M_EQU OR RET
|
||||||
|
bcid 3 3 WIDTH,7 CALL_ARG_VAL,2,0 WIDTH,6 CALL_ARG_VAL,3,0 WIDTH,7 PAD WIDTH,1 M_GE WIDTH,7 CALL_ARG_VAL,2,0 WIDTH,32 PAD WIDTH,6 CALL_ARG_VAL,3,0 WIDTH,32 PAD OPT_CONST,1 SUBTRACT WIDTH,1 M_EQU OR RET
|
||||||
|
bcid 4 4 WIDTH,7 CALL_ARG_VAL,2,0 WIDTH,6 CALL_ARG_VAL,3,0 WIDTH,7 PAD WIDTH,1 M_LE WIDTH,7 CALL_ARG_VAL,2,0 WIDTH,32 PAD WIDTH,6 CALL_ARG_VAL,3,0 WIDTH,32 PAD OPT_CONST,1 ADD WIDTH,1 M_EQU OR RET
|
||||||
|
bcid 5 5 WIDTH,1 CALL_ARG_VAL,2,0 OPT_CONST,1 EQU CALL_ARG_VAL,3,0 CALL_ARG_VAL,2,0 OPT_CONST,0 EQU CALL_ARG_VAL,4,0 OPT_CONST_4ST,1,1 MITECONDNOINSTR,4 MITECONDNOINSTR,4 RET
|
||||||
|
bcid 6 6 WIDTH,1 CALL_ARG_VAL,2,0 OPT_CONST,1 EQU WIDTH,6 CALL_ARG_VAL,3,0 WIDTH,1 CALL_ARG_VAL,2,0 OPT_CONST,0 EQU WIDTH,6 CALL_ARG_VAL,4,0 OPT_CONST_4ST,63,63 MITECONDNOINSTR,4 MITECONDNOINSTR,4 RET
|
||||||
|
bcid 7 7 WIDTH,1 CALL_ARG_VAL,2,0 WIDTH,20 CALL_ARG_VAL,3,0 CALL_ARG_VAL,4,0 MITECONDNOINSTR,4 RET
|
2
test/SIMv0.1/simv.daidir/cc/cc_dummy_file
Executable file
2
test/SIMv0.1/simv.daidir/cc/cc_dummy_file
Executable file
@ -0,0 +1,2 @@
|
|||||||
|
Dummy_file
|
||||||
|
Missing line/file info
|
20
test/SIMv0.1/simv.daidir/cgname.json
Executable file
20
test/SIMv0.1/simv.daidir/cgname.json
Executable file
@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"std": [
|
||||||
|
"std",
|
||||||
|
"reYIK",
|
||||||
|
"module",
|
||||||
|
1
|
||||||
|
],
|
||||||
|
"Tb_Sync_FIFO": [
|
||||||
|
"Tb_Sync_FIFO",
|
||||||
|
"g97qF",
|
||||||
|
"module",
|
||||||
|
2
|
||||||
|
],
|
||||||
|
"...MASTER...": [
|
||||||
|
"SIM",
|
||||||
|
"amcQw",
|
||||||
|
"module",
|
||||||
|
3
|
||||||
|
]
|
||||||
|
}
|
0
test/SIMv0.1/simv.daidir/covg_defs
Executable file
0
test/SIMv0.1/simv.daidir/covg_defs
Executable file
4
test/SIMv0.1/simv.daidir/debug_dump/.version
Executable file
4
test/SIMv0.1/simv.daidir/debug_dump/.version
Executable file
@ -0,0 +1,4 @@
|
|||||||
|
T-2022.06_Full64
|
||||||
|
Build Date = May 31 2022 20:26:29
|
||||||
|
RedHat
|
||||||
|
Compile Location: /home/icer/Project/ASICs/virtual_project/sync_fifo_flow/prj/SIMv0.1
|
BIN
test/SIMv0.1/simv.daidir/debug_dump/AllModulesSkeletons.sdb
Executable file
BIN
test/SIMv0.1/simv.daidir/debug_dump/AllModulesSkeletons.sdb
Executable file
Binary file not shown.
BIN
test/SIMv0.1/simv.daidir/debug_dump/HsimSigOptDb.sdb
Executable file
BIN
test/SIMv0.1/simv.daidir/debug_dump/HsimSigOptDb.sdb
Executable file
Binary file not shown.
0
test/SIMv0.1/simv.daidir/debug_dump/dumpcheck.db
Executable file
0
test/SIMv0.1/simv.daidir/debug_dump/dumpcheck.db
Executable file
BIN
test/SIMv0.1/simv.daidir/debug_dump/dve_debug.db.gz
Executable file
BIN
test/SIMv0.1/simv.daidir/debug_dump/dve_debug.db.gz
Executable file
Binary file not shown.
9
test/SIMv0.1/simv.daidir/debug_dump/fsearch/.create_fsearch_db
Executable file
9
test/SIMv0.1/simv.daidir/debug_dump/fsearch/.create_fsearch_db
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/sh -h
|
||||||
|
PYTHONHOME=/home/kumon/Synopsys/vcs/T-2022.06/etc/search/pyh
|
||||||
|
export PYTHONHOME
|
||||||
|
PYTHONPATH=/home/kumon/Synopsys/vcs/T-2022.06/linux64/lib/pylib27
|
||||||
|
export PYTHONPATH
|
||||||
|
LD_LIBRARY_PATH=/home/kumon/Synopsys/vcs/T-2022.06/linux64/lib:/home/kumon/Synopsys/vcs/T-2022.06/linux64/lib/pylib27
|
||||||
|
export LD_LIBRARY_PATH
|
||||||
|
/home/kumon/Synopsys/vcs/T-2022.06/linux64/bin/vcsfind_create_index.exe -z "/home/icer/Project/ASICs/virtual_project/sync_fifo_flow/prj/SIMv0.1/simv.daidir/debug_dump/fsearch/./idents_tapi.xml.gz" -o "/home/icer/Project/ASICs/virtual_project/sync_fifo_flow/prj/SIMv0.1/simv.daidir/debug_dump/fsearch/fsearch.db_tmp"
|
||||||
|
\mv "/home/icer/Project/ASICs/virtual_project/sync_fifo_flow/prj/SIMv0.1/simv.daidir/debug_dump/fsearch/fsearch.db_tmp" "/home/icer/Project/ASICs/virtual_project/sync_fifo_flow/prj/SIMv0.1/simv.daidir/debug_dump/fsearch/fsearch.db"
|
57
test/SIMv0.1/simv.daidir/debug_dump/fsearch/check_fsearch_db
Executable file
57
test/SIMv0.1/simv.daidir/debug_dump/fsearch/check_fsearch_db
Executable file
@ -0,0 +1,57 @@
|
|||||||
|
#!/bin/sh -h
|
||||||
|
|
||||||
|
FILE_PATH="/home/icer/Project/ASICs/virtual_project/sync_fifo_flow/prj/SIMv0.1/simv.daidir/debug_dump/fsearch"
|
||||||
|
lockfile="${FILE_PATH}"/lock
|
||||||
|
|
||||||
|
FSearch_lock_release() {
|
||||||
|
echo "" > /dev/null
|
||||||
|
}
|
||||||
|
create_fsearch_db_ctrl() {
|
||||||
|
if [ -s "${FILE_PATH}"/fsearch.stat ]; then
|
||||||
|
if [ -s "${FILE_PATH}"/fsearch.log ]; then
|
||||||
|
echo "ERROR building identifier database failed. Check ${FILE_PATH}/fsearch.log"
|
||||||
|
else
|
||||||
|
cat "${FILE_PATH}"/fsearch.stat
|
||||||
|
fi
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
nohup "$1" > "${FILE_PATH}"/fsearch.log 2>&1 193>/dev/null &
|
||||||
|
MY_PID=`echo $!`
|
||||||
|
BUILDER="pid ${MY_PID} ${USER}@${hostname}"
|
||||||
|
echo "INFO Started building database for Identifiers, please wait ($BUILDER). Use VCS elab option '-debug_access+idents_db' to build the database earlier."
|
||||||
|
echo "INFO Still building database for Identifiers, please wait ($BUILDER). Use VCS elab option '-debug_access+idents_db' to build the database earlier." > "${FILE_PATH}"/fsearch.stat
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
dir_name=`/bin/dirname "$0"`
|
||||||
|
if [ "${dir_name}" = "." ]; then
|
||||||
|
cd $dir_name
|
||||||
|
dir_name=`/bin/pwd`
|
||||||
|
fi
|
||||||
|
if [ -d "$dir_name"/../../../../../../../../../../.. ]; then
|
||||||
|
cd "$dir_name"/../../../../../../../../../../..
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f "/home/icer/Project/ASICs/virtual_project/sync_fifo_flow/prj/SIMv0.1/simv.daidir/debug_dump/fsearch/.create_fsearch_db" ]; then
|
||||||
|
if [ ! -f "/home/icer/Project/ASICs/virtual_project/sync_fifo_flow/prj/SIMv0.1/simv.daidir/debug_dump/fsearch/fsearch.db" ]; then
|
||||||
|
if [ "$#" -eq 1 ] && [ "x$1" == "x-background" ]; then
|
||||||
|
trap FSearch_lock_release EXIT
|
||||||
|
(
|
||||||
|
flock 193
|
||||||
|
create_fsearch_db_ctrl "/home/icer/Project/ASICs/virtual_project/sync_fifo_flow/prj/SIMv0.1/simv.daidir/debug_dump/fsearch/.create_fsearch_db"
|
||||||
|
exit 193
|
||||||
|
) 193> "$lockfile"
|
||||||
|
rstat=$?
|
||||||
|
if [ "${rstat}"x != "193x" ]; then
|
||||||
|
exit $rstat
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
"/home/icer/Project/ASICs/virtual_project/sync_fifo_flow/prj/SIMv0.1/simv.daidir/debug_dump/fsearch/.create_fsearch_db"
|
||||||
|
if [ -f "/home/icer/Project/ASICs/virtual_project/sync_fifo_flow/prj/SIMv0.1/simv.daidir/debug_dump/fsearch/fsearch.stat" ]; then
|
||||||
|
rm -f "/home/icer/Project/ASICs/virtual_project/sync_fifo_flow/prj/SIMv0.1/simv.daidir/debug_dump/fsearch/fsearch.stat"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
elif [ -f "/home/icer/Project/ASICs/virtual_project/sync_fifo_flow/prj/SIMv0.1/simv.daidir/debug_dump/fsearch/fsearch.stat" ]; then
|
||||||
|
rm -f "/home/icer/Project/ASICs/virtual_project/sync_fifo_flow/prj/SIMv0.1/simv.daidir/debug_dump/fsearch/fsearch.stat"
|
||||||
|
fi
|
||||||
|
fi
|
0
test/SIMv0.1/simv.daidir/debug_dump/fsearch/fsearch.stat
Executable file
0
test/SIMv0.1/simv.daidir/debug_dump/fsearch/fsearch.stat
Executable file
BIN
test/SIMv0.1/simv.daidir/debug_dump/fsearch/idents_tapi.xml.gz
Executable file
BIN
test/SIMv0.1/simv.daidir/debug_dump/fsearch/idents_tapi.xml.gz
Executable file
Binary file not shown.
3
test/SIMv0.1/simv.daidir/debug_dump/src_files_verilog
Executable file
3
test/SIMv0.1/simv.daidir/debug_dump/src_files_verilog
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
/home/icer/Project/ASICs/virtual_project/sync_fifo_flow/user/sim/Tb_Sync_FIFO.sv
|
||||||
|
/home/icer/Project/ASICs/virtual_project/sync_fifo_flow/user/src/Sync_FIFO.sv
|
||||||
|
/home/icer/Project/ASICs/virtual_project/sync_fifo_flow/user/src/tem5n28hpcplvta64x20m4swbso_110a_tt0p9v25c.v
|
1
test/SIMv0.1/simv.daidir/debug_dump/topmodules
Executable file
1
test/SIMv0.1/simv.daidir/debug_dump/topmodules
Executable file
@ -0,0 +1 @@
|
|||||||
|
|
BIN
test/SIMv0.1/simv.daidir/debug_dump/vir.sdb
Executable file
BIN
test/SIMv0.1/simv.daidir/debug_dump/vir.sdb
Executable file
Binary file not shown.
BIN
test/SIMv0.1/simv.daidir/eblklvl.db
Executable file
BIN
test/SIMv0.1/simv.daidir/eblklvl.db
Executable file
Binary file not shown.
BIN
test/SIMv0.1/simv.daidir/elabmoddb.sdb
Executable file
BIN
test/SIMv0.1/simv.daidir/elabmoddb.sdb
Executable file
Binary file not shown.
138
test/SIMv0.1/simv.daidir/external_functions
Executable file
138
test/SIMv0.1/simv.daidir/external_functions
Executable file
@ -0,0 +1,138 @@
|
|||||||
|
pli $fsdbDumpvars novas_call_fsdbDumpvars - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbDumpvarsES novas_call_fsdbDumpvarsES - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbDumpMDA novas_call_fsdbDumpMDA - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbDumpSVA novas_call_fsdbDumpSVA - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbDumpvarsByFile novas_call_fsdbDumpvarsByFile - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbSuppress novas_call_fsdbSuppress - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbDumpon novas_call_fsdbDumpon - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbDumpoff novas_call_fsdbDumpoff - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbSwitchDumpfile novas_call_fsdbSwitchDumpfile - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbDumpfile novas_call_fsdbDumpfile - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbAutoSwitchDumpfile novas_call_fsdbAutoSwitchDumpfile - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbDumpFinish novas_call_fsdbDumpFinish - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbDumpflush novas_call_fsdbDumpflush - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbLog novas_call_fsdbLog - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbAddRuntimeSignal novas_call_fsdbAddRuntimeSignal - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbDumpSC novas_call_fsdbDumpSC - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbDumpvarsToFile novas_call_fsdbDumpvarsToFile - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $sps_create_transaction_stream novas_call_sps_create_transaction_stream - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $sps_begin_transaction novas_call_sps_begin_transaction - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $sps_end_transaction novas_call_sps_end_transaction - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $sps_free_transaction novas_call_sps_free_transaction - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $sps_add_attribute novas_call_sps_add_attribute - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $sps_update_label novas_call_sps_update_label - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $sps_add_relation novas_call_sps_add_relation - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbWhatif novas_call_fsdbWhatif - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $paa_init novas_call_paa_init - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $paa_sync novas_call_paa_sync - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbDumpClassMethod novas_call_fsdbDumpClassMethod - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbSuppressClassMethod novas_call_fsdbSuppressClassMethod - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbSuppressClassProp novas_call_fsdbSuppressClassProp - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbDumpMDAByFile novas_call_fsdbDumpMDAByFile - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbTrans_create_stream_begin novas_call_fsdbEvent_create_stream_begin - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbTrans_define_attribute novas_call_fsdbEvent_add_stream_attribute - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbTrans_create_stream_end novas_call_fsdbEvent_create_stream_end - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbTrans_begin novas_call_fsdbEvent_begin - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbTrans_set_label novas_call_fsdbEvent_set_label - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbTrans_add_attribute novas_call_fsdbEvent_add_attribute - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbTrans_add_tag novas_call_fsdbEvent_add_tag - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbTrans_end novas_call_fsdbEvent_end - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbTrans_add_relation novas_call_fsdbEvent_add_relation - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbTrans_get_error_code novas_call_fsdbEvent_get_error_code - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbTrans_add_stream_attribute novas_call_fsdbTrans_add_stream_attribute - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbTrans_add_scope_attribute novas_call_fsdbTrans_add_scope_attribute - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $sps_interactive novas_call_sps_interactive - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $sps_test novas_call_sps_test - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbDumpClassObject novas_call_fsdbDumpClassObject - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbDumpClassObjectByFile novas_call_fsdbDumpClassObjectByFile - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbTrans_add_attribute_expand novas_call_fsdbEvent_add_attribute_expand - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $ridbDump novas_call_ridbDump - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $sps_flush_file novas_call_sps_flush_file - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbDumpPSL novas_call_fsdbDumpPSL - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbDisplay novas_call_fsdbDisplay - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbDumplimit novas_call_fsdbDumplimit - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbDumpMem novas_call_fsdbDumpMem - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbDumpMemNow novas_call_fsdbDumpMemNow - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbDumpMemInScope novas_call_fsdbDumpMemInScope - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbDumpMDANow novas_call_fsdbDumpMDANow - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbDumpMDAOnChange novas_call_fsdbDumpMDAOnChange - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbDumpMDAInScope novas_call_fsdbDumpMDAInScope - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbDumpMemInFile novas_call_fsdbDumpMemInFile - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbDumpPSLon novas_call_fsdbDumpPSLon - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbDumpPSLoff novas_call_fsdbDumpPSLoff - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbDumpSVAon novas_call_fsdbDumpSVAon - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbDumpSVAoff novas_call_fsdbDumpSVAoff - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbDumpStrength novas_call_fsdbDumpStrength - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbDumpSingle novas_call_fsdbDumpSingle - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbDumpIO novas_call_fsdbDumpIO - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbDumpPattern novas_call_fsdbDumpPattern - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbSubstituteHier novas_call_fsdbSubstituteHier - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/novas.tab
|
||||||
|
pli $fsdbDumpvars novas_call_fsdbDumpvars - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbDumpvarsES novas_call_fsdbDumpvarsES - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbDumpMDA novas_call_fsdbDumpMDA - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbDumpSVA novas_call_fsdbDumpSVA - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbDumpvarsByFile novas_call_fsdbDumpvarsByFile - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbSuppress novas_call_fsdbSuppress - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbDumpon novas_call_fsdbDumpon - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbDumpoff novas_call_fsdbDumpoff - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbSwitchDumpfile novas_call_fsdbSwitchDumpfile - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbDumpfile novas_call_fsdbDumpfile - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbAutoSwitchDumpfile novas_call_fsdbAutoSwitchDumpfile - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbDumpFinish novas_call_fsdbDumpFinish - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbDumpflush novas_call_fsdbDumpflush - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbLog novas_call_fsdbLog - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbAddRuntimeSignal novas_call_fsdbAddRuntimeSignal - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbDumpSC novas_call_fsdbDumpSC - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbDumpvarsToFile novas_call_fsdbDumpvarsToFile - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $sps_create_transaction_stream novas_call_sps_create_transaction_stream - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $sps_begin_transaction novas_call_sps_begin_transaction - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $sps_end_transaction novas_call_sps_end_transaction - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $sps_free_transaction novas_call_sps_free_transaction - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $sps_add_attribute novas_call_sps_add_attribute - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $sps_update_label novas_call_sps_update_label - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $sps_add_relation novas_call_sps_add_relation - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbWhatif novas_call_fsdbWhatif - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $paa_init novas_call_paa_init - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $paa_sync novas_call_paa_sync - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbDumpClassMethod novas_call_fsdbDumpClassMethod - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbSuppressClassMethod novas_call_fsdbSuppressClassMethod - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbSuppressClassProp novas_call_fsdbSuppressClassProp - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbDumpMDAByFile novas_call_fsdbDumpMDAByFile - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbTrans_create_stream_begin novas_call_fsdbEvent_create_stream_begin - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbTrans_define_attribute novas_call_fsdbEvent_add_stream_attribute - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbTrans_create_stream_end novas_call_fsdbEvent_create_stream_end - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbTrans_begin novas_call_fsdbEvent_begin - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbTrans_set_label novas_call_fsdbEvent_set_label - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbTrans_add_attribute novas_call_fsdbEvent_add_attribute - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbTrans_add_tag novas_call_fsdbEvent_add_tag - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbTrans_end novas_call_fsdbEvent_end - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbTrans_add_relation novas_call_fsdbEvent_add_relation - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbTrans_get_error_code novas_call_fsdbEvent_get_error_code - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbTrans_add_stream_attribute novas_call_fsdbTrans_add_stream_attribute - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbTrans_add_scope_attribute novas_call_fsdbTrans_add_scope_attribute - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $sps_interactive novas_call_sps_interactive - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $sps_test novas_call_sps_test - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbDumpClassObject novas_call_fsdbDumpClassObject - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbDumpClassObjectByFile novas_call_fsdbDumpClassObjectByFile - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbTrans_add_attribute_expand novas_call_fsdbEvent_add_attribute_expand - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $ridbDump novas_call_ridbDump - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $sps_flush_file novas_call_sps_flush_file - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbDumpPSL novas_call_fsdbDumpPSL - novas_misc /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbDisplay novas_call_fsdbDisplay - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbDumplimit novas_call_fsdbDumplimit - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbDumpMem novas_call_fsdbDumpMem - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbDumpMemNow novas_call_fsdbDumpMemNow - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbDumpMemInScope novas_call_fsdbDumpMemInScope - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbDumpMDANow novas_call_fsdbDumpMDANow - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbDumpMDAOnChange novas_call_fsdbDumpMDAOnChange - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbDumpMDAInScope novas_call_fsdbDumpMDAInScope - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbDumpMemInFile novas_call_fsdbDumpMemInFile - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbDumpPSLon novas_call_fsdbDumpPSLon - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbDumpPSLoff novas_call_fsdbDumpPSLoff - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbDumpSVAon novas_call_fsdbDumpSVAon - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbDumpSVAoff novas_call_fsdbDumpSVAoff - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbDumpStrength novas_call_fsdbDumpStrength - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbDumpSingle novas_call_fsdbDumpSingle - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbDumpIO novas_call_fsdbDumpIO - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbDumpPattern novas_call_fsdbDumpPattern - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
||||||
|
pli $fsdbSubstituteHier novas_call_fsdbSubstituteHier - - /home/kumon/Synopsys/verdi/T-2022.06/share/PLI/VCS/LINUX64/verdi.tab
|
BIN
test/SIMv0.1/simv.daidir/hslevel_callgraph.sdb
Executable file
BIN
test/SIMv0.1/simv.daidir/hslevel_callgraph.sdb
Executable file
Binary file not shown.
BIN
test/SIMv0.1/simv.daidir/hslevel_level.sdb
Executable file
BIN
test/SIMv0.1/simv.daidir/hslevel_level.sdb
Executable file
Binary file not shown.
BIN
test/SIMv0.1/simv.daidir/hslevel_rtime_level.sdb
Executable file
BIN
test/SIMv0.1/simv.daidir/hslevel_rtime_level.sdb
Executable file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user