搜索
bottom↓
回复: 5

[分享]自动生成verilog仿真(simulation testbench)的工具

[复制链接]

出0入0汤圆

发表于 2018-12-28 14:35:38 | 显示全部楼层 |阅读模式
本帖最后由 upli 于 2018-12-29 08:15 编辑

本人在编写FPGA工程的仿真(verilog simulation testbench)时,深感port连接与信号初始化的效率低下和乏味无趣。为减轻无谓的体力劳动,遂编写此工具(vlog_sim_tb_gen)用于自动生成TB。

程序特性:      
    支持对任意个模块的任意次例化:相同的模块例化信号后面自动递增序号,不同模块的例化名以uut*_依次递增序号。
    自动生成默认的时钟(i_sys_clk,100MHz)及复位信号(i_sys_rstn)。
    支持端口位宽([n:0])及reg/wire描述。   
    自动对input端口进行reg声明。对output和inout端口进行wire声明,并添加或替换s_前缀。
    支持".../*...*/..."和"...//..."注释。  
    自动对信号进行对齐(以模块为单位),可读性强。
    自动对input信号进行初始化,并初始了1个cnt_tmp及state状态机,便于快速修改输入信号。
    纯命令行界面,支持传入参数或拖动文件作为输入,程序大小仅10K。
    ……
   
使用方法(1):
    本方法适用于对单个模块生成TB。
    直接拖动1个verilog文件(.v)到程序图标上,即可自动在.v文件目录下生成1个sim_*.v文件。
使用方法(2):
    本方法适用于对多个模块生成TB。
    新建1个文本文件,后缀改为.vv。在这个文件中每行描述1个module的例化方法。
    首先是需要例化的个数,然后是要例化module的文件路径,二者以空格分开。
    .vv文件格式示例:
        ----------------------------
       | 1 C:\top_module.v     |
       | 1 .\sub_module.v       |
       | 2 commu_module.v    |
        ----------------------------
    表示:例化1个top_module,例化1个sub_module,例化2个commu_module.
    目前支持最多255个.v文件,每个最多例化255个实例,更多无益。
   
    使用本程序前,请保证.v文件已经通过verilog语法检查。
    本工具仅支持把端口说明(input,...)放在module端口声明语句里。
    推荐的编码风格:
    module name (
        input [1:0] i_sig ,
        output reg  o_vld ,
        inout       io_tri
    );

    程序发布时,vSrc目录下有默认的tb_gen.vv文件及两个.v示例文件,可以直接对工具的使用效果进行评估。
    实际使用时,请依照实际修改.vv文件内容。生成的tb文件位于.vv文件同一目录下。
   
Bug反馈:   
    由于本人刚接触FPGA应用才几个月,及程序编写经验有限,本程序难免有很多需要改进的地方,请各位不吝赐教。
    如果您对本程序有任何意见,请发邮件给到 uplixing@163.com 进行反馈。

vlog_sim_tb_gen usage:
  # Drag and drop a file to generate a simulation test bench.
    *.v : verilog module file.
    *.vv: verilog module instantiation list file.
      The 1st module in *.vv file is top module.
         ----------------------------
       | 1 C:\top_module.v     |
       | 1 .\sub_module.v       |
       | 2 commu_module.v    |
        ----------------------------
      The list file support up to 255 files(each 255 instances).
  # Supported verilog syntax:
      * Make sure your *.v passed syntax check first.
      * Multi statements per line supported(limited).
   +Recommended coding style:
    module name (
        input [1:0] i_sig ,
        output reg  o_vld ,
        inout       io_tri
    );
Bug report:
    uplixing@163.com
   
========================================================================
Ver 0.1.0 (2018-12-28)
    First release.



帖子重编辑于2018-12-29 08:14,原因:针对坛友的疑问增加了部分文字说明。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出615入1076汤圆

发表于 2018-12-28 15:40:13 | 显示全部楼层
沒看懂。
生成默认的时钟及复位信号可以理解,自动对input信号进行初始化是什麼意思?
另外,多個模塊之間的接線不是已經在上一級模塊中連接好了,TB 只用對接單個上層模塊就好了啊,不明白你那個 vv 是做什麼的。

出0入0汤圆

 楼主| 发表于 2018-12-28 15:58:02 | 显示全部楼层
dukelec 发表于 2018-12-28 15:40
沒看懂。
生成默认的时钟及复位信号可以理解,自动对input信号进行初始化是什麼意思?
另外,多個模塊之間 ...

仿真时,input信号都是要自己赋值给的,这个工具自动把它们都设置的reg型,并在always中初始为0。
一般仿真时,是针对1个模块即可。但有这样的需求:比如1个I2C控制器的module,需要外挂2个器件,这样我可以对I2C控制器例化1个,然后对器件模型例化2个。 或者,我要测两个设计之间进行通信,就需要同时例化2个收发的module。

出0入0汤圆

发表于 2018-12-28 19:57:47 | 显示全部楼层
感谢分享~
一直在用Sublime Text作为verilog编辑器,有一个叫Verilog Automatic插件可以自动例化模块。

出0入0汤圆

 楼主| 发表于 2018-12-28 20:23:41 | 显示全部楼层
小LV要加油 发表于 2018-12-28 19:57
感谢分享~
一直在用Sublime Text作为verilog编辑器,有一个叫Verilog Automatic插件可以自动例化模块。 ...

我也来试用下看。这种功能应该早有人做过了,我只是在重新发明轮子

出0入0汤圆

 楼主| 发表于 2019-1-2 08:39:50 | 显示全部楼层
修复了一个当长port名中含有短port名时的去重问题,0.1.0b版本:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 06:51

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表