模型功能

  • 实现代码的注释的方法
  • 基于vscode的文档自动生成

模型框图

`timescale 1ns / 1ps

/*

*/
// *******************************************************************************
// Company: Fpga Publish
// Engineer: FP
//
// Create Date: 2024/03/24 12:39:43
// Design Name:
// Module Name: verilog_demo
// Project Name:
// Target Devices: ZYNQ7010 | XCZU2CG | Kintex7
// Tool Versions: 2021.1 || 2022.2
// Description:
// *
// Dependencies:
// *
// Revision: 0.01
// Revision 0.01 - File Created
// Additional Comments:
//
// *******************************************************************************
module verilog_demo #(
//mode
parameter MD_SIM_ABLE = 0,
//number //width
parameter WD_ERR_INFO = 4
)(
//! system signals
input i_sys_clk ,
input i_sys_resetn,
//! @virtualbus uart_interface @dir out
output m_uart_0_mtx, //! uart master tx
input m_uart_0_mrx, //! uart master rx
//! @end
//! error info feedback
output [WD_ERR_INFO-1:0] m_err_verilog_info1
);
//========================================================
//function to math and logic //========================================================
//localparam to converation and calculate //========================================================
//register and wire to time sequence and combine
// ----------------------------------------------------------
//
//========================================================
//always and assign to drive logic and connect //========================================================
//module and task to build part of system //========================================================
//expand and plug-in part with version //========================================================
//ila and vio to debug and monitor endmodule /* end verilog

*/

实现步骤

  1. verilog的注释语法和C语言一样
  2. 文件头注释模型源自vivado自动生成的模板
  3. 端口列表的注释语法源自vscode的插件terosHDL
  4. 为了统一和适应verilog描述的特点,将注释分为两层:
  • 结构层: // ================
  • 内容层: // ----------------
  1. 结构层负责划分verilog的语法区域,使得语法的调用顺序满足要求
  • 常数声明 》 变量声明 》 逻辑赋值 》 模块调用 》 任务调度 》 插入逻辑 》 在线调试
  • 虽然大部分的编辑器都支持赋值先于声明,但是modelsim不支持,为了兼容,还是要求设计结构保持最规范的顺序
  1. 内容层则是负责将各个独立的内容在某个结构中的分布区分出来
  • 大部分的情况下,一个内容会分布在多个结构中
  • 为了方便查找,可以对相同的内容进行编号,方便查找
  • 当然,也可以简单的作为分割逻辑功能的分割线
  1. markdown的拓展
  • 如源码所示,利用双语法注释,可以实现markdown的注释
  • 目前主要是用于插入一些复杂的计算公式和需要成表格的注释
  • 当然,也可以进行状态机的插入,但是terosHDL可以自动识别,所以该功能就没有很大的必要
  1. terosHDL的拓展
  • 需要归入文档的注释需要在//后面增加!符号,常规注释直接使用//

    • 一般来说,除了逻辑实现方法这类需要和代码一起阅读的注释,其他的注释都需要加入文档
    • 这个更多取决于文档的要求,可以根据个人的代码规范进行区分
    • 笔者更喜欢使用vscode将所有非判断注释都加入文档
  • 插入时序图
    • 这个语法可以在插件的帮助文档中获取
    • 当然,如果用过wavedrom这个基于json的时序图绘制软件,那就会简单很多
    • 具体的例子如下:
//! { signal: [
//! { name: "clk", wave: "P......" },
//! { name: "bus", wave: "x.==.=x", data: ["head", "body", "tail", "data"] },
//! { name: "wire", wave: "0.1..0." }
//! ],
//! head:{
//! text:'WaveDrom example',
//! tick:0,
//! every:2
//! }}
  • 插入状态机

    • terosHDL支持自动识别状态机并插入到对应的位置
    • 同时会显示状态机的跳转条件,可以用于快速地分析模块的逻辑
    • 具体的效果如下:
/* @begin state machine */
//state name
localparam IDLE = 0;
localparam START = 1; //state variable
reg [3:0] cstate = IDLE; //state logic
always @(posedge i_sys_clk)
if(!i_sys_resetn)
begin
cstate <= IDLE;
end
else
begin
case(cstate)
IDLE : if(1) //whether goto next state
begin
if(1) //which state to go
begin
cstate <= START;
end
end
default: cstate <= IDLE;
endcase
end
/* @end state machine */
![](https://img2024.cnblogs.com/blog/2030044/202403/2030044-20240324132201588-982651260.png)
  • 除了文档外,还有一些原理图查看、仿真模板生成等功能

    • 这些功能笔者一般在vivado完成,就没有进行过多的探索,这个可能需要java的支持,感兴趣可以自行按照教程添加

最终效果

terosHDL导出的html效果文件

调用接口

  • 无调用模型库

verilog注释及vscode插件terosHDL的更多相关文章

  1. VSCODE 插件初探

    写在前面 分享一个vscode插件background(用于改变背景).点击直接跳到vscode插件开发步骤 做vscode的插件,很久就有这个想法了,但是一直因为这样,那样的事情耽误,放弃了N次.不 ...

  2. 精选!15 个必备的 VSCode 插件(前端类)

      精选!15 个必备的 VSCode 插件(前端类)   就像大多数 IDE 一样,VSCode 也有一个扩展和主题市场,包含了数以千计质量不同的插件.为了帮助大家挑选出值得下载的插件,我们针对性的 ...

  3. 个人向 - vscode插件记录

    现在用的编译器的是vscode,本身这个编译器很小,很多功能都没有,需要自己下载一些插件来完善功能,不知不觉下载的插件也有三十多个了,感觉需要记录一下. tips:1. vscode插件的安装位置:’ ...

  4. 2019.1.7 Mac的Vscode插件总结

    Vscode插件 通用插件 Chinese 配置中文界面 HTML Snippets H5代码片段以及提示 HTML CSS Support 让 html 标签上写class 智能提示当前项目所支持的 ...

  5. 玩转VSCode插件之Remote-SSH

    前言 每当更换电脑就要从新搭建一遍开发环境... 每当拉完最新代码程序在本地跑不起来的时候就要检查服务器和开发电脑的环境... 每当服务器上出Bug的时候就想如果可以能够调试服务器代码多好啊.. 你是 ...

  6. 用VSCode插件来一键填满Github的绿色格子吧-AutoCommit

    autoCommit 一个用于Git自动commit的VSCode插件,它可以用来补充之前忘记提交commit,帮助你把首页的绿色格子填满. 使用效果 使用本插件来控制commit次数. 如下图,你甚 ...

  7. 干货:用好这13款VSCode插件,工作效率提升10倍

    文章每周持续更新,原创不易,「三连」让更多人看到是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) 大家好我是lemon, 马上进入我们今天的主题吧. 又 ...

  8. 全栈工程师-史上最强VSCODE插件-提高开发效率

    当你点进来的时候 ,你可能是被标题吸引进来的,也有可能是 偶然间,看到的,首先恭喜你,已经准备好向全栈开发工程师靠近 ,那我们不说废话,直接开始,咱们先从安装步骤开始讲起 ,因为有些人连插件在哪都不知 ...

  9. 30 个极大提高开发效率超级实用的 VSCode 插件

    Visual Studio Code 的插件对于在提升编程效率和加快工作速度非常重要.这里有 30 个最受欢迎的 VSCode 插件,它们将使你成为更高效的搬砖摸鱼大师.这些插件主要适用于前端开发人员 ...

  10. 知乎vscode插件修改和重新编译

    需求来源 vscode插件修改代码要怎样重新编译并安装到vscode中? 起源于我使用一个vscode插件,它可以在vscode中发布文章到知乎上,然后我修改了插件的部分源代码,希望在vscode中安 ...

随机推荐

  1. Git 分支与合并

    1.  Git 对象 Git 的核心部分是一个简单的键值对数据库.可以向 Git 仓库中插入任意类型的内容,它会返回一个唯一的键,通过该键可以在任意时刻再次取回该内容. 所有内容均以树对象和数据对象的 ...

  2. Spring的接口集合注入功能

    Spring的接口集合注入功能 对于Spring中已经注入的bean, 可以使用Autowired, 通过Map<String, BeanInterface>或List<BeanIn ...

  3. 【Android】MediaCodec详解

    1 前言 ​ MediaCodec 主要用于视频解码和编码操作,可以实现视频倍速播放.全关键帧转换.视频倒放等功能. ​ MediaCodec 的工作原理图如下: ​ MediaCodec 的主要接口 ...

  4. nginx实战笔记

    1.添加一个虚拟机 /usr/local/nginx/sbin ./nginx -t nginx: [warn] conflicting server name "localhost&quo ...

  5. Java Socket设置timeout几种常用方式总结

    原文链接:https://my.oschina.net/shipley/blog/715196 最近碰到读取第三方提供socket接口需要设置超时时间问题,特此记录一下.原文中有几处拼写错误顺便改掉了 ...

  6. centos7 安装vmware tool 遇到遇到 kernel-headers 问题修复

    安装 vmware tool 步骤 1. cp VMwareTools-10.3.25-20206839.tar.gz 到 用户目录下 2. tar zxf VMwareTools-10.3.25-2 ...

  7. 【算法day1】复杂度和简单排序算法(1)

    复杂度和简单排序算法 时间复杂度 以一个排序(选择排序)操作举例 假设我有一个数组,我要找出其中的最小值放到0的位置上 那么 第一次我会遍历数组中N个数(在0位置处),找出最小的数交换到0位置[看了( ...

  8. Netty笔记(3) - 核心组件

    各组件关系示意图: Bootstrap 和 ServerBootstrap 说明: Bootstrap 意思是引导,一个 Netty 应用通常由一个 Bootstrap 开始,主要作用是配置整个 Ne ...

  9. Android---TextView基础属性 + 跑马灯的三种方式

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:layout_wid ...

  10. AutoNumber VsCode插件开发

    AutoNumber VsCode插件开发 ::: details 目录 目录 AutoNumber VsCode插件开发 Step. 2: 安装脚手架 Step. 3: 创建空项目 Step. 4: ...