模型功能

  • 实现代码的注释的方法
  • 基于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. Ubuntu下利用MWAN+LFTP解除单mac速度限制

    起因 公司网络限制了单个mac地址的速度, 而日常经常需要从线上环境下载几个G的数据到本地, 通过FileZilla每次需要一个多小时, 非常不方便 解决方案 WAN聚合 本地网口连接OpenWRT路 ...

  2. 【framework】surfaceflinger启动流程

    1 前言 ​ surfaceflinger 的作用是合成来自 WMS 的 Surface 数据,并发送到显示设备. ​ SurfaceFlinger 服务不同于 AMS.WMS.IMP.PMS.DMS ...

  3. 在D2D环境下与GDI结合加载位图

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <Windows.h& ...

  4. 产品分享:Qt鸿图电子智慧白板(适合会议机、电子黑板、电子笔记、电子阅读器等场景),当前版本v1.0.0

    产品   鸿途电子智慧白板.   原理   使用Qt技术为基础,开发的windows/ubuntu/arm电子绘图板,主要为windows,支持触摸鼠标,可以定制跨平台.   适合场景   1.会议机 ...

  5. 多态,__new__魔术方法,单态模式---day22

    1.多态 # ### 多态:不同的子类对象,调用相同的父类方法,产生了不同的执行效果 ''' 关键字:继承 改写 ''' class Soldier(): #攻击 def attack(): pass ...

  6. day04---系统重要文件

    系统重要的文件 /etc的重要文件 1./etc/sysconfig/network-scripts/ifcfg-eth0 [root@localhost ~]# cat /etc/sysconfig ...

  7. 【NLP学习其3.5】词嵌入的特性,为什么词之间会有联系?

    词嵌入的特性 现在你有了一堆嵌入向量,我们可以开始学习他们之间的特性了 前情提要:https://www.cnblogs.com/DAYceng/p/14962528.html 先把各向量重新命名便于 ...

  8. Vue源码学习(十一):计算属性computed初步学习

    好家伙,   1.Computed实现原理 if (opts.computed) { initComputed(vm,opts.computed); } function initComputed(v ...

  9. 【Azure 应用服务】使用Docker Compose创建App Service遇见"Linux Version is too long. It cannot be more than 4000 characters"错误

    问题描述 使用Docker Compose方式合并多个镜像(Images)文件,然后部署到App Service中,结果失败.报错 Linux Version 太长,不能超过4000个字符. 错误消息 ...

  10. SpringCloud 网关组件Gateway

    官网文档: https://docs.spring.io/spring-cloud-gateway/docs/2.2.5.RELEASE/reference/html/ 1. 概述 1.1 什么是网关 ...