快速入门数字芯片设计,UCSD ECE111(十二)Testbench和VHDL(一)

简介: 快速入门数字芯片设计,UCSD ECE111(十二)Testbench和VHDL

这篇文章带来ECE111第十二节课的Slides以及自己的一些补充。

该课程的网站如下:

https://link.zhihu.com/?target=http%3A//cwcserv.ucsd.edu/~billlin/classes/ECE111/index.php

这门课到这里就结束了,不知道这一系列文章有没有给大家提供一些帮助。除了老师上课讲的Slides,最后我再补充一下SHA256 Project的讲解,就正式完结撒花了。希望能对大家入行数字IC做一点微小的贡献。后面我可能会讲解EE290这门课,此外带来一些论文精读,主要集中在特定算法的高效硬件实现(微架构领域),对于IP开发工作而言,这是非常重要的。这也是区别RTL民工和优秀的IC设计工程师重要的一方面。

回归正题,开始讲解最后一节课的Slides。

在实际的验证工作中,基本都是基于UVM的验证方法学。基于单纯的Testbench而言的验证方法,在公司级别的开发中已经没有了,但是对于个人做小项目,掌握基本的Testbench的编写还是非常重要的。

什么是Testbench?它也是一个模块,但是它是用于测试别的模块(你的设计)的模块。Testbench一般是不可综合的,写法相对比较简单。其实本质上就是提供一系列的测试向量,检查输出是否符合预期。

  • 提供输入,检查输出是否符合预期

延迟,一般是用于模拟更真实的情况。让输入到输出之间存在一个时间差。

我们可以看到,在assign的后面直接加上#1。会导致输入和输出之间存在时间差,本质是延迟1个时间单位,再执行assign这条语句。又由于是阻塞赋值,因此如果有数据依赖关系的话,需要进一步的等待。并且需要注意,两条assign语句之间,是并行执行的!

  • 对于{ab,bb,cb}这三个信号而言,在t=0时刻感知到会发生变化,因此会阻塞一个时钟周期,在t=1时刻的时候,获得相应的赋值(此时对应的是t=1时刻的a,b,c取反)
  • 对于n2和n3而言,在t=0时刻感知到会发生变化,因此阻塞两个时钟周期,t=2的时候获得相应的赋值。(t=1的时候bb和cb发生变化),这两个assign语句是察觉不到的,因为已经被#2阻塞住了。
  • 对于n1而言,t=1时刻感知到会发生变化,因此阻塞三个时钟周期,t=3的时候获得相应的赋值
  • 对于y而言,t=3时刻感知到会发生变化(t=2的时候n2,n3会改变,但是不影响y的值,因此不会进入这个assign语句),所以阻塞4个时钟周期,t=7的时候发生变化。符合我们的预期

还有一点需要注意的是,阻塞几个周期以后进行赋值,赋的是现在的值而不是几个周期之前的值!下面的波形对应的语句为assign #4 y=a|b|c。可以看到仿真器在察觉到到a从0变成1,此时y需要发生变化,但是四个周期以后,a|b|c为0。所以y一直为0,而不是“当时算出的1”。

这些其实是一些比较偏的知识点,大家能理解最好,不能理解的话尽量避免这么写即可。(关于这部分如果有不懂的可以跟我进行沟通,我也是经过大量的仿真才理解#的机制),大家还可以参考我之前写的文章:

image.png

最简单的tb如上所示,就是写一些测试向量,然后通过肉眼去看波形。这些测试向量如果有严格的先后顺序,一般是放在initial语句里面,通过时间延迟delay分隔开。

同时我们还可以在tb里面增加检查机制,这样可以方便比对,而不用看波形。

测试向量包括输入和期待的输出。一般测试步骤如下:

  • 产生时钟信号
  • 定义相关的数组
  • 指定输入,预期的输出
  • 比较实际输出和预期的输出是否一致

其实这些测试方法是非常直观的。相信大家也很容易理解

目录
相关文章
|
存储 移动开发 算法
语音识别(ASR)--语音转文字
音识别(Automatic Speech Recognition) 是以语音为研究对象,通过语音信号处理和模式识别让机器自动识别和理解人类口述的语。语音识别技术就是让机器通过识别和理解过程把语音信号转变为相应的文本或命令的高技术。语音识别是一门涉及面很广的交叉学科,它与声学、语音学、语言学、信息理论、模式识别理论以及神经生物学等学科都有非常密切的关系。
4062 0
|
7月前
|
编译器 C语言 C++
【2026最新】mingw下载:mingw官网GCC编译器环境配置全攻略(附安装包+图文步骤)
MinGW是Windows平台轻量级GNU开发工具集,提供GCC编译器,支持C/C++/Fortran等语言,生成原生可执行文件,无需额外运行时。安装简便、资源占用低,广泛用于开源项目移植、教学及嵌入式开发。
7260 0
|
6月前
|
Arthas 监控 数据可视化
深度剖析:Java 并发三大量难题 —— 死锁、活锁、饥饿全解
本文深入剖析Java并发中三大顽疾:死锁(线程永久阻塞)、活锁(线程忙等无效运行)、饥饿(低优先级线程长期得不到资源)。厘清其本质区别、触发条件、实战案例及jstack/Arthas等排查方案,并给出统一锁序、定时锁、公平锁等落地解决策略。
552 1
|
11月前
|
人工智能 监控 安全
AI智能体落地:Agent-Assist vs 全自动化完整决策指南
2025年Agentic AI迅猛发展,但全自主智能体风险难控。Agent-Assist(人机协同)模式兼顾效率与安全,通过人类反馈持续学习,结合RAG构建组织知识库,实现AI越用越聪明。适合高风险、强依赖上下文的场景,是企业智能化升级的更优路径。
820 4
AI智能体落地:Agent-Assist vs 全自动化完整决策指南
|
编解码 算法 计算机视觉
YOLOv11改进策略【Head】| 增加针对 大目标 的检测层 (四个检测头)
YOLOv11改进策略【Head】| 增加针对 大目标 的检测层 (四个检测头)
2873 7
|
人工智能
西门子S7-300的硬件结构,各模块按照什么顺序来组态?
今天我们来介绍一下西门子S7-300的硬件结构,并和大家讲一下S7-300各模块是按照什么顺序来组态的。
西门子S7-300的硬件结构,各模块按照什么顺序来组态?
|
运维 监控 测试技术
|
SQL Java 数据库连接
Spring Boot联手MyBatis,打造开发利器:从入门到精通,实战教程带你飞越编程高峰!
【8月更文挑战第29天】Spring Boot与MyBatis分别是Java快速开发和持久层框架的优秀代表。本文通过整合Spring Boot与MyBatis,展示了如何在项目中添加相关依赖、配置数据源及MyBatis,并通过实战示例介绍了实体类、Mapper接口及Controller的创建过程。通过本文,你将学会如何利用这两款工具提高开发效率,实现数据的增删查改等复杂操作,为实际项目开发提供有力支持。
1560 0
|
C语言 C++
Visual Studio 2019 详细安装教程(图文版)
下载安装包 官网下载安装包 百度网盘下载安装包 安装步骤 运行并创建一个项目 【官网下载安装包步骤有些繁琐,官网反应速度有点慢】 【建议直接从百度网盘继续下载安装包!!!】
10928 25

热门文章

最新文章