首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >厌倦了sv/uvm?来看看用python写验证环境

厌倦了sv/uvm?来看看用python写验证环境

作者头像
ExASIC
发布于 2022-06-21 07:56:42
发布于 2022-06-21 07:56:42
2.3K01
代码可运行
举报
文章被收录于专栏:ExASICExASIC
运行总次数:1
代码可运行

本文介绍了cocotb的安装、python tb文件的写法、用xrun仿真cocotb的脚本等,我们来看看体验如何。

一、准备

  • centos7
  • python3.6+
  • yum install python3-devel
  • pip3 install --upgrade cocotb

二、写RTL

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// top.sv
module top
  (
   input wire       clk,
   input wire       rst_n,
   input wire [7:0] din,
   output reg [7:0] dout
   );

  initial begin
    $fsdbDumpfile("top.fsdb");
    $fsdbDumpvars(0, top);
  end
 
  always@(posedge clk, negedge rst_n)
    if(!rst_n)
      dout <= 'd0;
    else
      dout <= din;
  
endmodule // top

三、写tb

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# tb.py

import cocotb
from cocotb.triggers import Timer, FallingEdge

async def gen_clk(dut):
    for cycle in range(100):
        dut.clk.value = 0
        await Timer(10, units="ns")
        dut.clk.value = 1
        await Timer(10, units="ns")

async def gen_rst(dut):
    dut.rst_n.value = 0
    await Timer(22, units="ns")
    dut.rst_n.value = 1
    print("Reset Done")

@cocotb.test()
async def tb(dut):

    await cocotb.start(gen_clk(dut))
    await cocotb.start(gen_rst(dut))

    test_data_list = range(0,50, 5)
    for test_data in test_data_list:
        await FallingEdge(dut.clk)
        dut.din.value = test_data
    
    await Timer(100, units="ns")

6~11行:定义了一个时钟,50MHz,100个周期。

13~17行:定义了一个复位信号,低电平有效。复位拉高打印“Reset Done”,方便看log。

19行:用@cocotb.test()装饰器指定了tb的顶层主函数。

22行:异步启动gen_clk

23行:异步启动gen_rst

25~28行:产生了一些测试数据,在时钟下降沿后驱动dut的din。

30行:等待100ns结束仿真

四、写仿真脚本Makefile

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SIM ?= xcelium
TOPLEVEL_LANG ?= verilog

VERILOG_SOURCES += ./top.sv
TOPLEVEL = top

MODULE = tb

include $(shell cocotb-config --makefiles)/Makefile.sim

设置默认仿真器为cadence xcellium,RTL语言选verilog,指定RTL顶层模块名字(就是dut的名字),testbench的名字为tb,最后include一个cocotb共用的makefile。

五、仿真和看波形

把top.sv、tb.py、Makefile放同一个目录下,敲linux命令:make。不出意外的话,仿真可以正确编译和仿真,如下图:

由于我们在RTL顶层加入了dump fsdb波形的代码,所以在log里可以看到有波形产生。280ns仿真结束,并显示“tb passed”,并打印出汇总信息。可见log还是很友好的。

用verdi打开fsdb,与预期一致:

用spinal生成了一个计数器

MyHDL,体验一下“用python设计电路”

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ExASIC 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Struts2漏洞复现合集
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5TlQx5IR-1626014278332)(C:/Users/zcc/AppData/Roaming/Typora/typora-user-images/image-20210708164156162.png)]
全栈程序员站长
2022/09/09
1.3K0
Struts2漏洞复现合集
S2-057远程代码执行漏洞复现过程
https://github.com/vulhub/vulhub/tree/master/struts2/s2-048
伍尚国
2018/09/11
1.8K0
S2-057远程代码执行漏洞复现过程
java struts2 漏洞_Struts2漏洞利用「建议收藏」
${(#_memberAccess[“allowStaticMethodAccess”]=true,#a=@java.lang.Runtime@getRuntime().exec(‘id’).getInputStream(),#b=new java.io.InputStreamReader(#a),#c=new java.io.BufferedReader(#b),#d=new char[50000],#c.read(#d),#out=@org.apache.struts2.ServletActionContext@getResponse().getWriter(),#out.println(#d),#out.close())}
全栈程序员站长
2022/09/09
9800
java struts2 漏洞_Struts2漏洞利用「建议收藏」
CVE-2013-2251 S2-016 远程代码执行漏洞
访问http://192.168.146.158:8016/index.action
用户8478947
2022/12/22
8690
S2-001 远程代码执行漏洞
访问http://192.168.146.158:8101/login.action
用户8478947
2022/12/22
4330
Struct2系列漏洞
这里摘自互联网上的一段解释:Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。很多年前Struts2 + Spring + Hibernate 三大框架一起组成了 “SSH”,但现在正在被Spring + Spring MVC/ Spring Boot + MyBatis新三剑客“SSM”所代替,具体原因出来性能方面的提高,还要就是struct2的漏洞实在是太多,像国内BAT都被坑了一波,更别说ZF机关。所有struct2被大家抛弃也是情理之中的事情。
Tommonkey
2023/03/20
1.5K0
Struct2系列漏洞
网站apache环境漏洞如何修复
S2-057漏洞,于2018年8月22日被曝出,该Struts2 057漏洞存在远程执行系统的命令,尤其使用linux系统,apache环境,影响范围较大,危害性较高,如果被攻击者利用直接提权到服务器管理员权限,网站数据被篡改,数据库被盗取都会发生。
技术分享达人
2018/12/12
2.7K0
CVE-2016-3081 S2-032 远程代码执行漏洞
访问http://192.168.146.158:8032/category.action
用户8478947
2022/12/22
1K0
Struts2 漏洞集合
总结了一部分 Strtus2 漏洞,虽然现在这部分的漏洞很少了,但也是学习的一部分,收集的并不全面,后续会做补充。
全栈程序员站长
2022/09/09
7490
Struts2 漏洞集合
CVE-2012-0391 S2-008 远程代码执行漏洞
访问http://192.168.146.158:8008/devmode.action
用户8478947
2022/12/22
9760
从零开始学java web - struts2 RCE分析
最近在研究一些Java相关的问题时候,虽然有能力读java的代码,但是从没深入了解过Java的我不免总是在各种只有Java上才有的特性上栽坑,于是忽然觉得可能需要了解一些java的漏洞,本篇文章没有太多干货,主要是自己在研究过程中的一些记录吧。
LoRexxar
2023/02/21
4230
从零开始学java web - struts2 RCE分析
CVE-2013-2134 S2-015 远程代码执行漏洞
1 漏洞信息漏洞名称远程代码执行漏洞漏洞编号CVE-2013-2134危害等级高危漏洞类型中间件漏洞漏洞厂商Apache漏洞组件Struts2受影响版本2.0.0 <= Struts2 <= 2.3.15漏洞概述Apache Struts 2是用于开发JavaEE Web应用程序的开源Web应用框架。Apache Struts 2.0.0至2.3.14.2版本中存在远程命令执行漏洞。远程攻击者可借助带有‘${}’和‘%{}’序列值(可导致判断OGNL代码两次)的请求,利用该漏洞执行任意OGNL代码。2 环境
用户8478947
2022/12/22
1K0
struts 2 漏洞学习总结
看到网上关于struts2利用的文章非常多,但是对于漏洞触发跟踪分析的文档比较少,闲来无事跟踪了一
全栈程序员站长
2022/09/09
9120
S2-009远程代码执行复现
Struts2对S2-003的修复方法是禁止#号,于是s2-005通过使用编码\u0023或\43来绕过;后来Struts2对S2-005的修复方法是禁止\等特殊符号,使用户不能提交反斜线。
LuckySec
2022/11/02
5220
S2-009远程代码执行复现
java struts2 漏洞_Struts2漏洞简述
S2-005是由于官方在修补S2-003不全面导致绕过补丁造成的。我们都知道访问Ognl的上下文对象必须要使用#符号,S2-003对#号进行过滤,但是没有考虑到unicode编码情况,导致\u0023或者8进制\43绕过。
全栈程序员站长
2022/09/09
1.2K0
CVE-2018-11776 S2-057 远程代码执行漏洞
根据vulhub官网的poc,查看是否存在该漏洞。发现成功执行了333*3的语句,说明存在该漏洞。
用户8478947
2022/12/08
4150
CVE-2010-1870 S2-005 远程代码执行漏洞
访问http://192.168.146.158:8105/example/HelloWorld.action
用户8478947
2022/12/22
1.4K0
CVE-2017-9791 S2-048 远程代码执行漏洞
访问http://192.168.146.158:8048/integration/editGangster.action
用户8478947
2022/12/22
5080
CVE-2019-0230 S2-059 远程代码执行漏洞
工具vulhub官网的poc,输入id参数查看是否存在该漏洞。发现成功执行了333*3的语句,说明存在该漏洞。
用户8478947
2022/12/07
5780
CVE-2011-3923 S2-009 远程代码执行漏洞
1 漏洞信息漏洞名称远程代码执行漏洞漏洞编号CVE-2011-3923危害等级高危漏洞类型中间件漏洞漏洞厂商Apache漏洞组件Struts2受影响版本2.0.0 <= Struts2 <= 2.3.1.1漏洞概述OGNL还提供广泛的表达评估功能。该漏洞使恶意用户可以绕过内置在ParametersInterceptor中的所有保护(正则表达式模式,拒绝方法调用),从而能够在任何公开的字符串变量中注入恶意表达式以进行进一步评估。2 环境搭建2.1 环境概述Linux操作系统2.2 搭建过程拉取镜像 cd vu
用户8478947
2022/12/22
6320
相关推荐
Struts2漏洞复现合集
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验