4. 示例:创建带约束的随机地址生成器(范围0x1000-0xFFFF)
文章目录
- 前言
- 代码示例:
- 运行方法:
- 查看结果:
- 关键功能说明:
- 扩展功能建议:
前言
以下是一个完整的SystemVerilog测试平台示例,包含约束随机地址生成、日志输出和波形生成功能:
代码示例:
// filename: addr_gen_tb.sv
`timescale 1ns/1psmodule addr_gen_tb;// 声明时钟信号logic clk;// 声明随机地址生成类class RandomAddress;rand bit [15:0] addr;// 地址范围约束:0x1000 - 0xFFFFconstraint valid_range {addr inside {[16'h1000:16'hffff]};}endclass// 测试平台变量bit [15:0] current_addr;RandomAddress addr_gen = new();int error_count = 0;// 生成时钟(50MHz)initial beginclk = 0;forever #10 clk = ~clk;end// 波形记录初始化initial begin$dumpfile("waves.fsdb");$dumpvars(0, addr_gen_tb);end// 主测试程序initial begin$display("=== Starting Test ===");repeat (20) begin@(negedge clk);if (!addr_gen.randomize()) begin$error("Randomization failed!");error_count++;endelse begincurrent_addr = addr_gen.addr;$display("[%0t] Generated address: 0x%h", $time, current_addr);// 验证地址范围if (!(current_addr >= 16'h1000 && current_addr <= 16'hffff)) begin$error("Address out of range: 0x%h", current_addr);error_count++;endend#5; // 添加少量延迟用于波形观察end$display("\n=== Test Summary ===");$display("Total errors: %0d", error_count);if (error_count == 0) $display("TEST PASSED");else $display("TEST FAILED");$finish;end
endmodule
运行方法:
- 使用Synopsys VCS:
vcs -sverilog addr_gen_tb.sv
./simv
- 使用Cadence Xcelium:
xrun -sv addr_gen_tb.sv
查看结果:
- 日志输出示例:
=== Starting Test ===Generated address: 0x3a7bGenerated address: 0xf42cGenerated address: 0x8d01
...
=== Test Summary ===
Total errors: 0
TEST PASSED
- 查看波形(以VCS为例):
verdi -wave waves.fsdb &
关键功能说明:
-
随机约束类
RandomAddress:- 使用
rand关键字声明随机变量 inside约束确保地址在0x1000-0xFFFF之间
- 使用
-
测试平台特性:
- 自动生成时钟信号(50MHz)
- 每次生成地址后自动验证范围
- 错误计数和最终测试结果统计
- 详细的时序日志输出(包含时间戳)
-
波形生成:
- 使用
$dumpfile和$dumpvars生成VCD格式波形 - 记录所有层次信号(参数0表示记录所有层次)
- 使用
-
验证机制:
- 自动检查随机化成功状态
- 二次验证地址范围
- 错误计数器自动累加
这个示例可以:
- 生成符合要求的随机地址
- 自动验证地址有效性
- 输出带时间戳的详细日志
- 生成可用于调试的波形文件
- 提供清晰的测试结果总结
扩展功能建议:
添加覆盖率收集:
xcovergroup addr_cg;xcoverpoint gen.addr {xbins low = {[16'h1000:16'h7FFF]};xbins high = {[16'h8000:16'hFFFF]};}
xendgroup
在类中实例化覆盖率对象
多约束组合:
constraint even_addr {addr % 2 == 0; // 生成偶数地址[4](@ref)
}
相关文章:
4. 示例:创建带约束的随机地址生成器(范围0x1000-0xFFFF)
文章目录 前言代码示例:运行方法:查看结果:关键功能说明:扩展功能建议: 前言 以下是一个完整的SystemVerilog测试平台示例,包含约束随机地址生成、日志输出和波形生成功能: 代码示例࿱…...
爱普生SG-8101CE可编程晶振赋能智能手机的精准心脏
在智能手机高速迭代的今天,高性能、低功耗与小型化已成为核心诉求。智能手机作为人们生活中不可或缺的工具,需要在各种复杂场景下稳定运行。爱普生SG-8101CE可编程晶振凭借其卓越性能,成为智能手机中不可或缺的精密时钟源,为通信、…...
指针解剖学:穿透C/C++内存操作的核心密码与避坑指南
一、指针的本质与内存模型 指针是C/C的核心特性,本质是内存地址的变量化表示。每个变量在内存中占据连续的字节空间,地址是内存单元的唯一编号(如0x0028FF40)。指针变量存储的是目标数据的首地址,通过地址间接操作数据…...
Qt关于平滑滚动的使用QScroller及QScrollerProperties类说明
一、触控时代的滚动工具:QScroller类设计介绍 1.1 从机械滚轮到数字惯性 在触控设备普及前,滚动操作如同老式打字机的滚轴,只能通过鼠标滚轮或滚动条进行离散式控制。QScroller的出现如同给数字界面装上了"惯性飞轮",…...
【音视频】编解码相关概念总结
NALU RTP PS流 三者总体关系 NALU在RTP中的应用:视频流的RTP传输通常将NALU作为基本的单元进行传输。每个RTP包携带一个或多个NALU,这些NALU包含了视频编码数据。RTP协议通过其头部信息(如时间戳、序列号等)帮助接收端重新排列和…...
Vue3 + Vite + TS,使用 配置项目别名属性:resolve
使用 resolve 配置全局项目路径别名 1.优化了开发中单页面引用其他模块的路径复杂性 2.妥妥解决了,组件复用当中提高开发效率 // 不使用配置 import { useStore } from ../../../stores // 使用配置 可根据开发者需求任意定义,较多 import { useStore…...
docker创建nginx
docker run -d -p 8080:80 --name my-nginx-container nginx docker:命令 run:命令 -d:在后台运行容器 -p:8080:80:将容器内部的80端口映射到宿主机的8080端口。 --name my-nginx-container:为容器指定一个…...
StableDiffusion打包 项目迁移 项目分发 1
文章目录 SD项目迁移前置知识webui-user.batwebui.batlaunch_utils.py 下一篇开始实践 SD项目迁移 显卡驱动更新:https://www.nvidia.cn/geforce/drivers/ 下载安装三个程序: python3.10.6: https://www.python.org/downloads/release/python-3106/gi…...
【数据结构进阶】哈希表
🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:数据结构 目录 前言 一、哈希表的概念 二、哈希函数的实现方法 1. 直接定址法 2. 除留余数法 三、哈希冲突 1. 开放定址法(闭散列࿰…...
【蓝桥杯嵌入式】各模块学习总结
系列文章目录 留空 文章目录 系列文章目录前言一、LED模块1.1 赛题要求1.2 模块原理图1.3 编写代码1.4 赛题实战 二、LCD模块2.1 赛题要求2.2 模块原理图2.3 编写代码2.4 赛题实战 三、按键模块3.1 赛题要求3.2 模块原理图3.3 编写代码3.4 赛题实战 四、串口模块4.1 赛题要求4…...
Rust学习总结之-枚举
枚举是一个很多语言都有的功能,不过不同语言中其功能各不相同但是要表达的意思是一致的,枚举就是对于一个事物可以穷举出所有可能得值。比如说人的性别就可以用枚举,男人和女人两种。下面我们来学习Rust中的枚举。 一:枚举定义 …...
Linux系统管理(十七)——配置英伟达驱动、Cuda、cudnn、Conda、Pytorch、Pycharm等Python深度学习环境
文章目录 前言安装驱动下载安装Cuda编辑环境变量安装Cudnn安装conda验证安装成功配置conda镜像退出conda环境创建python环境查看当前conda环境激活环境安装python包安装pytorch 安装pycharm安装jupyter notebook 前言 深度学习和大语言模型的部署不免会用到Linux系统ÿ…...
SLAM算法工程师的技术图谱和学习路径
SLAM(Simultaneous Localization and Mapping)算法工程师是负责开发和实现用于机器人、自动驾驶车辆等领域的SLAM算法的专业人士。下面是SLAM算法工程师需要掌握的基础理论知识: 机器人运动学和动力学:理解机器人在空间中的运动方式和控制方法,包括轮式、蜘蛛腿、飞行器等…...
【第三天】零基础学习量化基础代码分析-持续更新
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 记录量化基础代码总览引言基本概念量化投资 伪代码示例:量化投资模型框架总结 每日-往期回看 第一天零基础学量化基础知识点总览-持续更新 第二天零基础…...
深入了解 Python 中的 MRO(方法解析顺序)
文章目录 深入了解 Python 中的 MRO(方法解析顺序)什么是 MRO?如何计算 MRO?C3 算法的合并规则C3 算法的合并步骤示例:合并过程解析 MRO 解析失败的场景使用 mro() 方法查看 MRO示例 1:基本用法 菱形继承与…...
如何防止 Instagram 账号被盗用:安全设置与注意事项
如何防止 Instagram 账号被盗用:安全设置与注意事项 在这个数字化时代,社交媒体平台如 Instagram 已成为我们日常生活的一部分。然而,随着网络犯罪的增加,保护我们的在线账户安全变得尤为重要。以下是一些关键的安全设置和注意事…...
采样算法二:去噪扩散隐式模型(DDIM)采样算法详解教程
参考 https://arxiv.org/pdf/2010.02502 一、背景与动机 去噪扩散隐式模型(DDIM) 是对DDPM的改进,旨在加速采样过程同时保持生成质量。DDPM虽然生成效果优异,但其采样需迭代数百至数千次,效率较低。DDIM通过以下关键…...
各种类型网络安全竞赛有哪些 网络安全大赛的简称
本文是对入门学习的一些概念了解和一些常规场景记录 1.CTF(capture the flag)是夺旗赛的意思。 是网络安全技术人员之间进行攻防的比赛。 起源1996年DEFCON全球黑客大会,替代之前真实攻击的技术比拼。 (DEFCON极客大会诞生1993,…...
包子凑数——蓝桥杯真题Python
包子凑数 输入输出样例 示例 1 输入 2 4 5输出 6样例说明 凑不出的数目包括:1, 2, 3, 6, 7, 11。 示例 2 输入 2 4 6输出 INF样例说明 所有奇数都凑不出来,所以有无限多个 运行限制 最大运行时间:1s最大运行内存: 256M 最大公约数 最大公…...
网络通信/IP网络划分/子网掩码的概念和使用
文章目录 概述子网的考题子网掩码的历史有/无类地址子网划分!子网掩码超网技术/CIDR子网掩码和路由IP子网掩码定义 网络规划网络规划-拆子网网络规划-组超网子网划分案例 区分于其他特殊IP地址IP地址和网络地址子网掩码和网络地址子网掩码和广播地址 子网间的通信其他 概述 本…...
【前端】简单原生实例合集html,css,js
长期补充,建议关注收藏点赞。 目录 分栏input各种类型iframe表单拖拽 分栏 区分fieldset和framesetframeset是把浏览器窗口分成几个区域,每个区域分别放置一个html文档到对应的frame中,而且这个比例可以按住边栏进行调整col指定左右边栏的宽…...
MySQL--》如何在MySQL中打造高效优化索引
目录 初识索引 索引结构 性能分析 索引使用 最左前缀法则 SQL提示使用 覆盖索引使用 前缀索引使用 索引失效情况 初识索引 索引(index):是帮助MySQL高效获取数据的数据结构(有序),在数据之外数据库系统还维护着满足特定查找算法的数据结构&…...
盛京开源社区加入 GitCode,书写东北开源生态新篇章
在数字化转型与开源技术蓬勃发展的浪潮下,开源社区已成为推动技术创新的核心力量。盛京开源社区(SJOSC)作为沈阳地区的开源交流平台,始终致力于连接开发者、企业及高校,构建区域技术生态圈。 现在,盛京开源…...
HTML转义和反转义工具类
HTML转义和反转义工具类 package com.common.utils;import cn.hutool.http.HTMLFilter; import org.apache.commons.lang3.StringUtils;/*** 转义和反转义工具类** author lxx*/ public class EscapeUtil {public static final String RE_HTML_MARK "(<[^<]*?>…...
网络运维学习笔记(DeepSeek优化版)005网工初级(HCIA-Datacom与CCNA-EI)链路层发现协议与VLAN技术
文章目录 一、链路层发现协议1.1 思科CDP协议1.2 华为LLDP协议 二、VLAN(Virtual Local Area Network,虚拟局域网)技术详解2.1 基本概念2.2 技术特性2.3 接口工作原理2.3.1 Access模式2.3.2 Trunk模式 2.4 厂商配置对比思科配置华为配置 2.5 …...
DeepSeek开源周Day4:三连发!突破 AI 训练瓶颈的立体解决方案,并行计算三剑客DualPipe、EPLB与Profile-data
项目地址: https://github.com/deepseek-ai/DualPipehttps://github.com/deepseek-ai/eplbhttps://github.com/deepseek-ai/profile-data 开源日历:2025-02-24起 每日9AM(北京时间)更新,持续五天 (4/5)! 一、背景概述 …...
树莓百度百科更新!宜宾园区业务再添新篇
树莓集团宜宾园区业务不断拓展,主要体现在以下几个方面: 产业布局 -聚焦数字经济核心领域:涵盖软件开发、人工智能、大数据等,吸引众多上下游企业入驻,形成从芯片研发、软件开发到系统集成的完整产业链条。 -推进“双…...
RabbitMQ操作实战
1.RabbitMQ安装 RabbitMQ Windows 安装、配置、使用 - 小白教程-腾讯云开发者社区-腾讯云下载erlang:http://www.erlang.org/downloads/https://cloud.tencent.com/developer/article/2192340 Windows 10安装RabbitMQ及延时消息插件rabbitmq_delayed_message_exch…...
IO 和 NIO 有什么区别?
文章目录 阻塞模式与非阻塞模式数据处理方式通信模型应用场景 阻塞模式与非阻塞模式 IO:是阻塞式的 IO 操作。在传统的 IO 中,当一个线程执行读操作或者写操作时,该线程会被阻塞,直到操作完成。例如,在从文件读取数据…...
OpenWebUI配置异常的外部模型导致页面无法打开
一、使用Ollama关闭OpenAI OpenWebUI自带OpenAI的API设置,且默认是打开的,默认情况下,启动后,会不断的去连https://api.openai.com/v1,但是无法连上,会报错,但是不会影响页面,能正常…...
