From 8faabbe243fe903f9a3963a263affcb1860191a6 Mon Sep 17 00:00:00 2001 From: Kirigaya <1193466151@qq.com> Date: Fri, 18 Aug 2023 01:36:50 +0800 Subject: [PATCH] finish document --- .vscodeignore | 1 - README.md | 581 ++++++++++++++++++- package.json | 2 +- src/function/lsp/linter/vlog.ts | 4 +- src/function/sim/instance.ts | 2 +- src/monitor/event.ts | 3 +- src/test/tcl/timing.xdc | 9 + src/test/user/Hardware/src/Cordic.v | 3 + src/test/user/Hardware/src/hello.v | 8 +- src/test/vlog/dependence_test/parent.v | 18 +- src/test/vlog/dependence_test/pdf/parent.pdf | Bin 0 -> 95015 bytes syntaxes/verilog.tmLanguage.json | 72 +++ 12 files changed, 671 insertions(+), 32 deletions(-) create mode 100644 src/test/tcl/timing.xdc create mode 100644 src/test/vlog/dependence_test/pdf/parent.pdf diff --git a/.vscodeignore b/.vscodeignore index 503c866..3a191d2 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -13,5 +13,4 @@ script resources/**/*.js resources/**/*.d.ts resources/**/*.wasm -vsixmake.js tsconfig.json \ No newline at end of file diff --git a/README.md b/README.md index 6e67ab3..94817ae 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,4 @@ +#! https://zhuanlan.zhihu.com/p/365805011 # Digital IDE - version 0.3.0 ![](https://img.shields.io/badge/version-0.3.0-blue) @@ -6,30 +7,584 @@ ![](https://img.shields.io/badge/VHDL-building-black) ![](https://img.shields.io/badge/SystemVerilog-building-black) -
- -
+## Preface -> ASIC & FPGA develop Platform on VS code (IDE for development of verilog, vhdl and system verilog) +- Installation address[Installation address](https://marketplace.visualstudio.com/items?itemName=sterben.fpga-support)。 +- If you have any questions, please leave a message on the [issues](https://github.com/Bestduan/Digital-IDE/issues)上发表。 +- If you like it, click on the[star](https://github.com/Bestduan/Digital-IDE)吧。 +- email: sterben.nitcloud@gmail.com | zhelonghuang@mail.ustc.edu.cn -- If you have any questions, please post them under [issues](https://github.com/Bestduan/Digital-IDE/issues). -- If you like it, please [star](https://github.com/Bestduan/Digital-IDE). +- QQ group No.: 932987873 + +Any problems you have met during the use, you can contact us in QQ group, and we will reply when I see it. + +## About Feedback + +First of all, thank you for your use and feedback. Any better ideas about this plugin can be published under both Zhihu and github, if it is the use of the problem please move to [github](https://github.com/Bestduan/Digital-IDE/issues) instead of Zhihu. Thank you for your cooperation. + +In addition, when posting an issue, please provide a detailed description of the problem you are experiencing, focusing on the following sections +- Operating environment +- Version used +- Error message (source: vscode itself and Toggle Developer Tool) +- The specific problem and the reason for it +- Please paste the source code if it is a special case (to better reproduce the problem) + +- Please show as many screenshots as possible + +--- + +## TODO LIST + +- [ ] Embedded VCD waveform display +- [ ] Optimized Yosys integrated interface +- [ ] More friendly finite state machine interface +- [ ] More comprehensive syntax checking +- [ ] Port checking + +- [ ] Embedded cross-platform iverilog simulator + +--- + +# Get Started Quickly + +Search for “Digital IDE” in the Vscode plugin store and click download. + +> Note: The plug-in itself has been optimized to a size of 11MB. The plugin is download-to-use, and no environment is required unless other third-party tools (such as: vivado, iverilog, etc.) are needed, which need to be installed by yourself. -[English](https://bestduan.github.io/Digital-IDE-doc/#/) +
+
+ +
+
-[中文教程](https://digital-eda.github.io/DIDE-doc-Cn/#/) -You are free to use it. Finally, if you like this extension and have some great idea, please connact with me. I am look foward to your joining. +## Project Configuration +This plugin defines the project configuration file as `property.json`, which is only placed in the `.vscode` folder. -- Email: sterben.661214@gmail.com. -- QQ群: 932987873 +### Project Configuration File Generation +Use * TOOL: generate property file * to generate the initial ` property. json ` template file. The generated file will be placed directly in the .vscode folder. +If you have your own template, you can customize the template file using * TOOL: Overwrite the InitPropertyParam *. --------------------------------------------------------------------------------------------- +> After version 0.3.0, the plugin will automatically ask users whether to create property.json every time it starts. -## Thanks +
+
+ +
+
+ +###Description Of the Project Configuration File +> New configuration properties will be used after version 0.3.0 +```json +// porperty.json All attributes explained +{ + // Third-party tool chains currently in use + "toolChain": "xilinx", + + // Project naming + // PL : Programming logic design part is FPGA before + // PL : Processing system design part is the previous SOC + "prjName": { + "PL": "template", + "PS": "template" + }, + + // Custom project structure, without this attribute it is considered as a standard file structure (see below for details) + // Project path, hardware and software design path + // All properties support ${workspace}, ${plname}, ${psname}, relative paths + // ${workspace} : path to the current workspace + // ${plname}、${psname} :the name of the PL or PS project + "arch" : { + "prjPath": "", + "hardware" : { + "src" : "", // Place the design source file, note: src is one level below IP&bd + "sim" : "", // Place the simulation file, which will be directly reflected in the tree structure + "data" : "" // Place constraints and data files, constraints will be automatically added to the vivado project + }, + "software" : { + "src" : "", + "data" : "" + } + }, + + // Code library management, support for remote and local two kinds of call (see the following library management for details) + // Use UI to configure, not recommended for users to change directly + "library" : { + "state": "", // local | remote + "hardware" : { + "common": [], // Common libraries provided by the plugin + "custom": [] // User's own design library + } + }, + + // Xilinx IP repository can be add directly to the IP repo of vivado + // Only IP repositories of ADI and ARM are supported currently(adi | arm) + "IP_REPO" : [], + + // When the design uses PL + PS that is SOC development + // Mixed development when the core is not none + "soc": { + "core": "none", + "bd": "", + "os": "", + "app": "" + }, + + // Whether the information is output at the terminal when the project is realized synthetically + "enableShowLog": false, + + // 设备类型 可以是如下几种: + // "none", + // "xc7z020clg400-2", + // "xc7a35tftg256-1", + // "xc7a35tcsg324-1", + // "xc7z035ffg676-2", + // "xc7z020clg484-1" + "device": "none" +} +``` + +One of the most important attributes is the `ARCH` attribute, which is considered a user-defined project structure when configured. For user-defined structures, all file changes are managed by the user. When the `ARCH` attribute is not configured, it is considered to use the standard file structure recommended by the plugin. The description of the standard file structure is as follows. +``` +.vscode + └── property.json -- Project configuration file user-defined (or stored in the root of the workspace) +prj -- Store project files + ├── simulation -- Store intermediate files for third-party simulation tool runtime + ├── intel -- Store intel project files + └── xilinx -- Store xilinx project files +user -- Store user-designed source files which are user-defined + ├── ip -- Store project ip code (managed by vendor tools, but moved to the same level of src by the plugin) + ├── bd -- Store the source code of project block designer(managed by vendor tools, but moved to the same level of src by the plugin) + ├── data -- mainly for data files and constraint files + ├── sim -- Store user's simulation code + └── src -- Store user's design source code + └─ lib -- Store user's hardware library source code +``` + +When the `SOC.core` in the `property.json` file is not set to "none" and the configuration file is saved, the file structure will be automatically changed to a hybrid PS+PL design structure. Under this structure the user folder will change to the following structure: +``` +user -- Store user-designed source files, user-defined + Hardware -- mainly for hardware logic design + ├── ip -- Store project ip code (managed by vendor tools, but moved by the plugin to the same level directory as src) + ├── bd -- Store project block designer source code (managed by vendor tools, but moved to src sibling directory by plugins) + ├── data -- mainly for data files and constraint files + ├── sim -- Store user's simulation code + └── src -- Store user's design source code + └─ lib -- Store user's hardware library source code + Software -- Store software-driven designs + ├── data -- mainly for data files and constraint files + └── src -- Store user's project source code +``` +`[Note]`: When the value of `SOC.core` is changed from non-none to none, the Software folder is not needed by default and will be deleted (the plugin will also give a prompt accordingly), so please make a backup. Also, *IP and bd design will be placed to the directory above src, so it is better not to set src as the root path of the workspace*. + +In addition, if the path configured by the user under ARCH is wrong or invalid, the plugin will directly change to the structure path under standard. *When the user does not configure the `property.json` file, the file structure will default to the path of the workspace, and this behavior may cause a lot of performance consumption, please pay attention to it*. + +--- + +# Function Introduction + +## Language Services +Provide the basic language services required for front-end code design + + +### Language Highlight + +
+
+ +
+
+ +The following languages are now supported for highlighting +1. HDL + - verilog + - systemverilog + - VHDL +2. TCL + - xdc + - sdc + - fdc (including xdc、sdc、fdc) + +### Syntax Diagnosis + +
+
+ +
+
+ + +After version 0.3.0, the plugin will support a built-in syntax diagnostic tool that does not require downloading any third-party tools. The supported syntax includes: +- verilog +- vhdl (bugs remain) +- systemverilog (developing) + +### Outline + +The outline of the current HDL code can be seen on the left side of the workspace to quickly locate the module or variable you need to see. +
+
+ +
+
+ + + +### Hover Tips + +When you move the mouse over a variable, macro, example module, etc. that you want to view, the declaration definition of the current variable is displayed. + +> If it is a module, information such as the number of ports of each type for the module is also displayed. + +
+
+ +
+
+ +The prompts are as follows: +1. `mark corresponding comment` + `mark corresponding content` +2. binary, hexadecimal -> decimal + +where contents of the comment corresponding to the marker are +1. line comments after the line where the marker is defined +2. line comments and block comments (stopping when a non-commented part is encountered) before the marker is defined + +> Hover tips use the built-in vlog and vhdl parser, which currently only support simple hover tips + +### Auto-complete + +
+
+ +
+
+ + +
+
+ +
+
+ + +The auto-completion provided by the plugin is divided into two parts: +1. snippet file provided by the auto-complete, support for user-added +2. keyword triggered auto-completion + 1. `. `. Keyword triggers the completion of the port or parameter name of the exemplified module. + 2. `\`` Keyword triggers the completion of macro definition identifiers. + 3. `/` key triggers path completion in include. + +> Currently, auto-completion is only supported in verilog and systemverilog for port parameter routines. + +A description of the parameters that can be set for auto-completion: + +1. `function.lsp.completion.vlog.autoAddInclude` + - Whether or not to automatically add an include to the beginning of a file when instantiating a module, default is true. +2. `function.lsp.completion.vlog.completeWholeInstante` + - Whether or not to complete all parameters and ports needed for the whole instantiation, default is true. +3. `function.instantiation.addComment` + - Whether to add some comments after the instantiation, default is true. +4. `function.instantiation.autoNetOutputDeclaration` + - Whether to automatically complete the definition of all output ports after instantiation, default is true. + + + +### Definition Jumps + +
+
+ +
+
+ +If the hover tip support is valid, then it can support the definition jump. +However, there are some times when the definition jump cannot be done because the interpreter does not interpret the code correctly, so you can set `linter` to `default` and use the interpreter to check the correctness of the code syntax. + +### Auto-formatting + +
+
+ +
+
+ + +You can format the document with selected characters or full text. Vscode comes with shortcuts to open:`shift + alt + f`. Related setting description: +- verilog and systemverilog +1. `function.lsp.formatter.vlog.default.style` + - verilog and systemverilog formatting types, supporting three types `kr`, `ansi`, `gun` +2. `function.lsp.formatter.vlog.default.args` + - Other parameter inputs and vlog formatting use istyle's webassembly, so please refer to istyle for the parameters to be entered. + > This function is based on istyle to achieve, so the full-text formatting is still not perfect, it is recommended to check the always statement block to format, and later will continue to fix related problems. + +- vhdl +1. `function.lsp.formatter.vhdl.default.align-comments` + - whether need to align comments +2. `function.lsp.formatter.vhdl.default.indentation` + - the number of spaces corresponding to the tab + +### Vhdl to Verilog Translation + +
+
+ +
+
+ +Currently only vhdl to Verilog translation is supported. +If there is no output, it means that the syntax of vhdl is wrong, or there is a syntax that the plugin cannot parse. + +--- +## Project Management +Project management mainly needs to realize the following operations: +1. Project construction + 1. project Manager (PS & PL) + 2. lib Manager (IP & bd) +2. Simulation construction + 1. generate instance & tb file + 2. fast simulate +3. Design support + 1. [x]tree Structure + 2. [x]netlist preview + 3. [x]Code to doc + 4. [x]fsm preview + 5. []fsm designer + 6. []waveform preview + +### Project Building +The purpose of project building is to help users quickly build their own third-party projects, especially `project Manager` is related to third-party tool chain. Currently, the only compatible third-party tool is xilinx's vivado (other third-parties will continue to be supported in the future). However, `lib Manager` is to avoid repeatedly build a wheel and provide a function to facilitate the user to use some common HDL libraries provided by plugin, but also support the user to accumulate their own library. + +#### Project Manager +Main purposes of the `project manager` are as follows: +1. abstract out the function to reduce the learning cost of other three-party tools +2. erase version differences, allowing more focus on the source code design + - Because as long as you have the configuration file and design source, you can restore the project under any vivado version. + +`[Note]`: `project Manager` is strongly dependent on the property configuration file `property.json`, if missing, it will directly use the default (template) configuration. + +For project management on the PL side, I have abstracted the following functions: +1. launch ------ to start the whole project, or create it if there is no project, or open it directly if there is +2. refresh ----- to refresh the whole project and update the design of the whole project +3. simulate ---- to simulate the whole project, without opening the GUI interface by default *`(using the simulator in TOOL_CHAIN)* + 1. simGUI ----- open the GUI interface after successful simulation + 2. simCLI ----- does not open the GUI interface after successful simulation +4. build ------- to build the whole project and finally output the bit stream file + 1. synth ------ to synthesize the project + 2. impl ------- to implement the project + 3. bit -------- to export the project's bitstream file +5. program ----- download the bitstream file to the FPGA/zynq board *`(download and burn, but not solidify)`* +6. gui --------- open the GUI interface of the tool chain + 1. After opening the GUI, the terminal named *`HardWare`* is not recommended to close by itself. + - The whole GUI interface will be closed automatically after direct closure, and if not saved then the design may be lost. + - The plugin will not move your `IP and bd design` to the same level of `Hardware.src` after closing directly. +7. exit -------- Closing the project is only valid under the CLI, after opening the GUI, terminal control is taken over by the GUI. + 1. After clicking `exit` the plugin will move your `IP and bd design` to the same level of `Hardware.src`. + 2. If you close the terminal named *`HardWare`* directly, the move of `IP and bd designs` will not take place. + 3. Note: You can also move your `IP and bd designs` to the same level of `Hardware.src` when *Clean* is in the function bar *TOOL*. + +In addition to the above explicit functions, there are two implicit functions each in the `architecture` column, which are +1. `Set as Top` -------------- sets this file as the top-level design module of the current project +2. `Set as Testbench Top` ---- sets the file as the top-level module of the simulation for the current project + +Specially, *`Zynq`* devices support mixed PS+PL development. To cope with the mixed development, the plugin gives the `SOC` configuration as follows: +```json +"SOC": { + "core": "ps7_cortexa9_0", + "bd" : "zynq_default" +} +``` +Using the configuration plugin as above will automatically build a bd project containing the zynq design to help users quickly build the platform. + +Finally, about device selection, it can be configured in the `property.json` file under the *Device* property. +The following are currently available: +- xc7z020clg400-2 +- xc7a35tftg256-1 +- xc7a35tcsg324-1 +- xc7z035ffg676-2 +- xc7z020clg484-1 + +But the supported devices are not limited to these, theoretically all the devices that vivado can support can be supported. You can write your device directly to the *Device* attribute, which will give you a warning if the device is not in the database, but will not prevent you from running. To remove the warning you need to add your device to the database with the *FPGA:Add devices to the database* command. Unneeded devices can also be removed from the database with *FPGA:Remove the device from the database*. + +**Related setting** +`TOOL.vivado.install.path` --- Installation path of vivado +When vivado is installed, you can configure the installation path of vivado directly inside the plugin, or you can add vivado to the environment variables (recommended). If the path is not found by mistake, it is already added to the environment variables by default. +*e.g. : D:/APP/vivado_18_3/Vivado/2018.3/bin/* +`[Note]`: Use `/` to separate the paths and configure them to the bin directory. + +`PRJ.xilinx.IP.repo.path` ---- User-designed IP libraries from xilinx +After configuring this property, the plugin will automatically add the path to the IP repo of vivado. +*e.g. : D:/project/FPGA/.Lib/xIP* + +#### lib Manager +The plugin comes with HDL function library linking function. +The `property.json` file is configured as follows: +```json +"library" : { + "state": "", // local | remote(default) + "Hardware" : { + "common": [], + "custom": [] + } +}, + +"IP_REPO": [ + "arm", // including ip CM3DbgAXI & DAPLink_to_Arty_shield + "adi" // containing all device ip's under the adi company, with the included absolute paths removed Taken from adi2019_r1 +], +``` + +It is not recommended that users configure the library properties in the `property.json` file by themselves. It is recommended to use the *import library* command, or the icon activation command in the following figure to do so. + +The *state* represents whether the library file is loaded into the local workspace, or linked as a remote. +- `remote` represents virtual inclusion from a remote (anything not under the workspace is considered remote, not remote on the network). + - remote library files can be opened and changed *(`Note: `If the next import after the change is the code after the change)* . +- `local` means import the remote file into the project locally + 1. placed in the lib under `ARCH.Hardware.src`, the changes will not affect the code in the remote library. + 2. *`[Note]`: When changing from local back to remote the lib folder will be deleted (plugin will remind), please note*. + +The property *common* represents the HDL function library that comes with the plugin, *the code of this library is less mature and is for reference only*. +The lib paths that have been simulated and tested so far are as follows +- Soc +- Math/Cordic.v +- Math/Sort3.v +- Math/Sqrt.v +- Malloc/RAM/Shift_RAM +- Apply/DSP/Advance/Communicate/Modulate +- Apply/DSP/Base/DDS +- Apply/Image (need to include Sort3, Sqrt, Shift_RAM) + +`[Note]`: When the input is a folder then it contains all the files under that folder. In addition, it is not recommended to change the code in this library directly, otherwise it will be overwritten again after the next plugin update, please be careful. + +The property *custom* represents a user-defined HDL function library. +The use of this property requires the root directory of the user-defined library to be configured for *PRJ.custom.Lib.repo.path* under *setting*, and the absolute path of the file (folder) with the configuration under the *custom* property. The representation is as follows: +*`PRJ.customer.Lib.repo.path`*`/`*`${custom}`* + +`[Note]`: When the input is a folder then it contains all the files under that folder. + +Finally, for the `IP_REPO` property, this is the two official xilinx IP repo provided by the plugin to users, choose the one you want to configure, and the plugin will automatically add it to the IP repo of Vivado, which is convenient for users to develop directly without having to compile and import it by themselves. + +### Simulation Building +The purpose of simulation building is to help users to build their own simulation framework quickly and get simulation results quickly. + +#### generate instance & tb file +![自动例化.gif](https://i.loli.net/2021/05/01/gCxJud91GhIWAmL.gif) +The plugin supports cross instantiation between different languages, such as instantiating verilog and vhdl modules in a verilog file, or Verilog and vhdl modules in a vhdl file. + +The steps are as follows: +1. Place the cursor where the text needs to be instantiated. +2. Start the command box by `F1`, type *Instance*, and select `TOOL:Instance`. + 1. or use the shortcut `Alt + I` + 2. or right-click on the module to be instantiated and select `Instance` +3. Enter the keyword of the module to be instantiated (the plugin will automatically match it). +4. Select the module you want to instantiate. + +`[Note]`: When using shortcut keys, you need to check if there is a shortcut key conflict. + +In addition to automatic instantiation, the plugin also provides a simulation template for verilog, which is used as follows: +1. Start the command box by `F1`, type *Testbench*, and select `TOOL:Testbench`. + 1. or right-click under the file to be generated and instantiated and select `Testbench`. +2. Select the type of simulation file and the location where you want to store it, and replace it directly if it exists. + +If you want to change the template of testbench, proceed as follows: +Use the shortcut `F1` to start the command box, then select TOOL:Overwrite the template of testbench to choose the type of simulation file you want to change. This will open the initialization file of the testbench file, what you need to do is saving the changes based on this. In addition, please keep the `//Instance` flag, which is used to identify the location to be instantiated. + +The intelligent connection between the tb file and the instantiated module will be considered later. + +#### Fast Simulate +The purpose of this feature is to enable fast simulation of a single module, or a small project consisting of several modules. +Currently the only supported simulation tool is iverilog, which will be continuously updated to add new support. + +**Iverilog Fast Simulation** +
+
+ +
+
+ + + +### Design Assistance + +#### Tree Structure +
+
+ +
+
+ +Display the project structure of the current workspace in terms of modules, show the containment and inclusion relationship between HDL files in terms of hierarchy, and click to open the corresponding file. + +> Note: The treeView only displays the HDL files in the user-specified or default workspace folder in property.json, the modules in other files will not be displayed in the treeView. + +#### netlist preview +
+
+ +
+
+ +The plugin uses `yosys 0.21` kernel (open source yosysjs 0.5 version) to synthesize the specified project (can run on all platforms), display the synthesized network diagram and support `include` and multi-file projects. + +How to use +1. Click the icon in the upper right corner to create the panel +2. Or select the module you want to display in the project structure, or right click in the file and select `show netlist`. + +> The current version of the netlist front-end is not perfect, future versions will optimize the front-end UI. + +#### Code to doc +
+
+ +
+
+ +Auto-documentation currently only supports verilog and wavedrom visualization, and also supports the following three export formats: + +- markdown +- html +- pdf + +If you need to export pdf, please fill the startup path of your local Google Chrome or Edge browser into the parameter **markdown-pdf executable path**. As most pdf readers do not support color changing background, please export your pdf in light color theme: + + +
+
+ +
+
+ + +#### fsm preview + + +
+
+ +
+
+ +This feature visualizes the finite state machine in a project and allows you to click on the shapes in the diagram to jump around. + +> The front-end is currently quite minimal and the front-end UI of the FSM feature will be optimized in the future. + +--- + +# Developers (Github Account) + +- Nitcloud: Product Optimization and Requirements Engineering. +- Kylin: HDL Syntax Parser and Wasm Construction. + +- LSTM-Kirigaya: Digital-IDE kernel implementation and UI design. + + +--- + +# Acknowledgements * [VHDL](https://github.com/puorc/awesome-vhdl) +* [yosys](http://www.clifford.at/yosys) * [TerosHDL](https://github.com/TerosTechnology/vscode-terosHDL) * [TCL Language Support](https://github.com/go2sh/tcl-language-support) * [Verilog HDL/SystemVerilog](https://github.com/mshr-h/vscode-verilog-hdl-support) diff --git a/package.json b/package.json index afae3a6..33e39d8 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "digital-ide", + "name": "fpga-support", "displayName": "Digital IDE", "description": "all in one vscode plugin for Verilog/VHDL development", "publisher": "sterben", diff --git a/src/function/lsp/linter/vlog.ts b/src/function/lsp/linter/vlog.ts index 7e76e33..592387e 100644 --- a/src/function/lsp/linter/vlog.ts +++ b/src/function/lsp/linter/vlog.ts @@ -66,8 +66,8 @@ class VlogLinter { } } - async remove(document: vscode.TextDocument) { - this.diagnostic.delete(document.uri); + async remove(uri: vscode.Uri) { + this.diagnostic.delete(uri); } public async initialise() { diff --git a/src/function/sim/instance.ts b/src/function/sim/instance.ts index 72b15d1..c9495aa 100644 --- a/src/function/sim/instance.ts +++ b/src/function/sim/instance.ts @@ -86,7 +86,7 @@ function makeNetOutputDeclaration(ports: HdlModulePort[], prefix: string, needCo if (port.type === HdlModulePortType.Output) { haveOutput = true; let portWidth = port.width ? port.width : ''; - if (portWidth === 'Unknown') { + if (portWidth === 'Unknown' || portWidth === '1') { portWidth = ''; } portWidth += ' '.repeat(maxWidthLength - portWidth.length + 1); diff --git a/src/monitor/event.ts b/src/monitor/event.ts index f9b06aa..6ffbf20 100644 --- a/src/monitor/event.ts +++ b/src/monitor/event.ts @@ -98,8 +98,7 @@ class HdlAction extends BaseAction { } const uri = vscode.Uri.file(path); - const document = await vscode.workspace.openTextDocument(uri); - vlogLinter.remove(document); + vlogLinter.remove(uri); } async unlinkDir(path: string, m: HdlMonitor): Promise { diff --git a/src/test/tcl/timing.xdc b/src/test/tcl/timing.xdc new file mode 100644 index 0000000..3128e9f --- /dev/null +++ b/src/test/tcl/timing.xdc @@ -0,0 +1,9 @@ +create_debug_core u_ila_0 ila +set_property ALL_PROBE_SAME_MU true +set_property C_ADV_TRIGGER true +set_property C_EN_STRG_QUAL true +set_property C_INPUT_PIPE_STAGES true +set_property C_TRIGIN_EN false +set_property C_TRIGOUT_EN false +set_property port_width +connect_debug_port u_ila_0/clk \ No newline at end of file diff --git a/src/test/user/Hardware/src/Cordic.v b/src/test/user/Hardware/src/Cordic.v index 1285922..20b354c 100644 --- a/src/test/user/Hardware/src/Cordic.v +++ b/src/test/user/Hardware/src/Cordic.v @@ -1,5 +1,8 @@ `timescale 1ns / 1ps + +`include "mult_module.v" + module Cordic #( parameter XY_BITS = 12, parameter PH_BITS = 32, diff --git a/src/test/user/Hardware/src/hello.v b/src/test/user/Hardware/src/hello.v index 3d0226c..c96ec27 100644 --- a/src/test/user/Hardware/src/hello.v +++ b/src/test/user/Hardware/src/hello.v @@ -4,11 +4,13 @@ module mux2to1( input wire a, input wire b, input wire sel, - output wire outp, - output wire test_port + output wire outp ); - + + + + assign outp = sel == 1'b0 ? a : b; endmodule diff --git a/src/test/vlog/dependence_test/parent.v b/src/test/vlog/dependence_test/parent.v index b0b197e..7170374 100644 --- a/src/test/vlog/dependence_test/parent.v +++ b/src/test/vlog/dependence_test/parent.v @@ -55,15 +55,15 @@ endmodule /* @wavedrom this is wavedrom demo2 { signal: [ - { name: "pclk", wave: 'p.......' }, - { name: "Pclk", wave: 'P.......' }, - { name: "nclk", wave: 'n.......' }, - { name: "Nclk", wave: 'N.......' }, + { name: "pclk", wave: "p......." }, + { name: "Pclk", wave: "P......." }, + { name: "nclk", wave: "n......." }, + { name: "Nclk", wave: "N......." }, {}, - { name: 'clk0', wave: 'phnlPHNL' }, - { name: 'clk1', wave: 'xhlhLHl.' }, - { name: 'clk2', wave: 'hpHplnLn' }, - { name: 'clk3', wave: 'nhNhplPl' }, - { name: 'clk4', wave: 'xlh.L.Hx' }, + { name: "clk0", wave: "phnlPHNL" }, + { name: "clk1", wave: "xhlhLHl." }, + { name: "clk2", wave: "hpHplnLn" }, + { name: "clk3", wave: "nhNhplPl" }, + { name: "clk4", wave: "xlh.L.Hx" }, ]} */ \ No newline at end of file diff --git a/src/test/vlog/dependence_test/pdf/parent.pdf b/src/test/vlog/dependence_test/pdf/parent.pdf new file mode 100644 index 0000000000000000000000000000000000000000..356b431d084d3030bd8d956873172a1cf4e90f5c GIT binary patch literal 95015 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

XN2Iz0s9C+mm1jR?Il>#`lK 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 LOOs}ws_tOl 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