SystemVerilog 语言部分(二)
接口interface:
既可以设计,也可以用来验证。
验证环境:interface使得连接变得简单不容易出错。
interface可以定义端口,单双向信号,内控部使用initial always task function
interface 可以在硬件环境和软件环境中传递。也可以作为软件方法的形式参数
可以把interface看做“插排”。
testbench<--->interface<----->arbiter
通过interface name+ . +logic
通过$finish在testbench结束仿真。
在interface的端口列表之中只需要定义:时钟,复位等公共信号,或者不定义任何端口信号,转而在变量列表中定义哥哥需要跟DUT和TB连接的logic的变量。为了简单易用,推荐使用logic的定义变量。
interface也可以进行参数化
习题:
答案:ABCD
module中可以例化module,interface
interface可以例化interface,但是不能例化module。
2.采样和数据驱动
RTL的竞争解决方法:
1.使用非阻塞赋值语句
2.信号进行延迟来解决同步的问题
阻塞赋值,在上例中 a 被设计为4个寄存器,但是 b = a 在同一拍子中b被设计成导线的形式,不是寄存器的形式。
在进行仿真时候为了避免时序电路中时钟和驱动信号的时序竞争问题,我们需要给出尽量明确的驱动时序和采样时序。
默认情况下时钟对于组合电路的 驱动会添加一个无限小的delta-cycle,而且该延迟无法用绝对实践单位衡量,它要比最小的时间单位精度还小。
一个时间片:time-slot 可以发生很多事
在仿真时候run0,让仿真器跑一个delta-cycle的时间。
竞争的问题:
timescale 1ns/1ns
module race1;
bit clk1,clk2;
bit rstn;
logic[7:0] d1;
initial begin//generate clk1
forever #5 clk1< = ~clk1;
end
//clk2 generate
always@(clk1)
clk2<=clk1;//即使clk2与1完全同步,但是也有delt-delay
initial begin
#10 rstn <=0;
#20 rstn<=1;
end
//mini counter
always@(posedge clk1,negedge rstn)begin
if(!rstn)
d1<=0;
else
d1<=d1+1;
end
//clk1,2POSedge print data d1
always@(posedge clk1)
$display("%0t ns d1 value is 0x%0x",$time,d1);
always@(posedge clk2)
$display("%0t ns d1 value is 0x%0x",$time ,d1);
endmodule
NB的题,这里应该是A.2
使用打印的数据比用仿真观察波形得到的数据要准确。
如何避免采样的竞争问题?
(1)在驱动时,添加相应的人为延迟。模拟真实的延迟
同时加大clk与变量之间的延迟,提高DUT使用信号时的准确度和TB
采样信号时的可靠性。
(2)在采样时间前的某时段中进行采样。
SystemVerilog 语言部分(二)的更多相关文章
- SystemVerilog语言简介(二)
6. 用户定义的类型 Verilog不允许用户定义新的数据类型.SystemVerilog通过使用typedef提供了一种方法来定义新的数据类型,这一点与C语言类似.用户定义的类型可以与其它数据类型一 ...
- 使用C语言实现二维,三维绘图算法(1)-透视投影
使用C语言实现二维,三维绘图算法(1)-透视投影 ---- 引言---- 每次使用OpenGL或DirectX写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其实想想 ...
- 使用C语言实现二维,三维绘图算法(3)-简单的二维分形
使用C语言实现二维,三维绘图算法(3)-简单的二维分形 ---- 引言---- 每次使用OpenGL或DirectX写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其 ...
- 使用C语言实现二维,三维绘图算法(2)-解析曲面的显示
使用C语言实现二维,三维绘图算法(2)-解析曲面的显示 ---- 引言---- 每次使用OpenGL或DirectX写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其 ...
- Swift语言指南(二)--语言基础之注释和分号
原文:Swift语言指南(二)--语言基础之注释和分号 注释 通过注释向自己的代码中注入不可执行的文本,作为你自己的笔记或提示.Swift编译器运行时会忽略注释. Swift的注释与C语言极其相似,单 ...
- #r语言(二)笔记
#r语言(二)笔记 #早复习 #概述:R是用于统计分析.绘图的语言和操作环境 #对象: #数据类型--统称为对象 #向量(vector):用于存储数值型.字符型或逻辑型数据的一维数组. #定义向量: ...
- iOS开发之SQLite-C语言接口规范(二) —— Prepared Your SQL Statements
在<SQLite的C语言接口规范(一)>中介绍了如何去连接打开数据库,本篇博客就介绍如何操作数据库,本篇主要给出了如何执行数据库查询语句(Select), 然后遍历结果集.本篇博客就直接使 ...
- 遗传算法的C语言实现(二)-----以求解TSP问题为例
上一次我们使用遗传算法求解了一个较为复杂的多元非线性函数的极值问题,也基本了解了遗传算法的实现基本步骤.这一次,我再以经典的TSP问题为例,更加深入地说明遗传算法中选择.交叉.变异等核心步骤的实现.而 ...
- C语言 预处理二(宏定义--#define)
//#define 宏定义(宏定义一般大写) //知识点一-->#define的作用域:从#define开始,从上往下,如果遇到#undef就到#undef处结束,如果没有就是作用于当前整个文件 ...
随机推荐
- 《MySQL必知必会》学习笔记整理
简介 此笔记只包含<MySQL必知必会>中部分章节的整理笔记.这部分章节主要是一些在<SQL必知必会>中并未讲解的独属于 MySQL 数据库的一些特性,如正则表达式.全文本搜索 ...
- Day09_41_集合_Set
Set集合 Set集合 - Set集合的特点是无序不可重复.Set集合类似于一个罐子,程序可以依次把多个对象"丢进"Set集合,而Set集合通常不能记住元素的添加顺序. - Set ...
- 1.1.09- 序列赋值 is , is not运算符
两个变量的交换算法 代码如下: a = 10000 b = 20000 temp = a a = b b = temp print(a) print(b) 序列赋值: a,b = b,aprint(a ...
- 01- Sublime的工具安装以及使用
一 sublime安装与使用 sublime介绍: sublime是一个代码编辑器,可以编写HTML,PHP,js,css等文件. Sublime有哪些优点: 1.跨平台 2.扩展性强 3.提交小,运 ...
- Linux 服务管理的两种方式service和systemctl
service命令 service命令其实是去/etc/init.d目录下,去执行相关程序 ``` # service命令启动redis脚本 service redis start # 直接启动red ...
- 如何使用Vue中的slot
之前看官方文档,由于自己理解的偏差,不知道slot是干嘛的,看到小标题,使用Slot分发内容,就以为 是要往下派发内容.然后就没有理解插槽的概念.其实说白了,使用slot就是先圈一块地,将来可能种花种 ...
- hdu4403暴力搜索
题意: 给你一个数字串,让你在里面添加一个=和若干个+,使等式成立. 思路: lmax最大是15,直接暴搜,无压力,关键是判重,要在答案的时候判重,一开始在进队列之前判的,各种wa ...
- LNMP环境搭建Wordpress博客
目录 LNMP架构工作原理 yum源安装 网站源包安装 LNMP是Linux Nginx MySQL/MariaDB Php/perl/python 的简称,是近些年才逐渐发展起来的构架,发展非常迅 ...
- Sublime 快捷生成HTML 插件安装
更多精彩关注公众号 1 安装 Package Control1.1 ctrl + ` 呼出控制台1.2 复制(不要带最外层的双引号,该代码仅适用于sublime text 3)"import ...
- .Net Core——用代码写代码?
想要用代码写代码,肯定是绕不开反射的.反射的概念相比都不陌生,只是应用多少就因人而异,今天分享一个代码生成器的思路,仅供参考,不要过分依赖哦. 思路分析 众所周知,利用反射可以在程序运行时获取到任一对 ...