学习随记——ISP

modport定义

接口中的信号并未规定方向,对于不同的模块来说,接口中的信号方向会有不同。modport就定义了从不同的模块角度来看接口中信号的方向。

学习随记——ISP_第1张图片

 可以看出,modport中只需要定义信号对于不同模块的方向,而类型和位宽在接口中声明即可。


SV中import和include的区别_Andy_ICer的博客-CSDN博客https://blog.csdn.net/Andy_ICer/article/details/115679314?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168653781516800222846773%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=168653781516800222846773&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-115679314-null-null.142%5Ev88%5Econtrol,239%5Ev2%5Einsert_chatgpt&utm_term=include%20%E5%92%8C%20import&spm=1018.2226.3001.4187

  • 类的名称不仅包括简单名称A和B,还包括其他名称。名称还包括定义的声明范围。
  • 学习随记——ISP_第2张图片
  • 当你在package中声明一个类时,package名称将成为该类名称的前缀:
  • 上图中有A类的两个定义,一个定义为P::A,另一个定义为Q::A。而且变量P::a1和Q::a1是类型不兼容的,引用了两个不同的A类。
  • 学习随记——ISP_第3张图片
  • 使用包含文件重写以上示例将导致相同的情况,如上图,即还是两个不兼容的类定义。
  • 在将A类包含在每个package中之后,将得到A类的两个定义。
  • 因为使用include只是在文件中剪切和粘贴文本的快捷方式,所以结果毫无疑问与上上图一样。

  • 学习随记——ISP_第4张图片
  • 从包中导入名称不会重复文本。这样就可以从另一个软件包中看到该名称,而无需复制定义。
  • 类A在package P中声明,并且仅在package P中声明。变量R::a1和S::a1是类型兼容的,因为它们都是P::A类型。
  • SystemVerilog中的package提供了保存和共享数据、参数和方法的机制,可以在多个module、class、program和interface中重用。package中声明的内容都属于这个package作用域(scope)。在使用这些内容时,需要先import这个package,然后通过package引用。
     

`include将文件中所有文本原样插入包含的文件中。这是一个预处理语句,`include在import之前执行。他的主要作用就是在package中平铺其他文件,从而在编译时能够将多个文件中定义的类置于这个包中,形成一种逻辑上的包含关系

import不会复制文本内容。但是import可将package中的内容引入到import语句所在的作用域中,以帮助编译器能够识别被引用的类,并共享数据。

在我们的TB中,include通常分为以下几类:

1)package的include文件:在package内,前面是import library,比如“import uvm_pkg::*”,紧接着是 include文件,通常会把本目录下相关的文件都include进来,比如virtual sequence文件,testcase文件。

2)package的include文件:这种用法在我们现在的环境中使用不多,目前最常用的是include interface文件,比如,在xxx_env_pkg文件的最开头,include "xxx_if.sv"

3)为了文件管理方法,将部分code写到一个单独的文件中,然后在主文件中直接include进来,相当于将多个文件合并成一个文件。比如,一个subsys要用到很多API,而这些API共有A, B,C三类,分别由3个人完成,则可以写成api_a.sv, api_b.sv, api_c.sv,在l0_basic_vseq.sv中,将这三个文件include进来。


————————————————

一般new [ ]也是用来开辟内存并初始化,但是它主要用于设置动态数组的大小

与new()不同点:

1, 调用new函数是用于将对象实例化,而new[ ]则是创建了一个含有多个元素的数组

2, new()函数可以利用参数来改变对象中变量的值,而new[ ]的参数仅仅被用作设置动态数组的大小。


YUV

yuv422,yuv420,yuv444的区别_rjszcb的博客-CSDN博客https://blog.csdn.net/rjszcb/article/details/118728264?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168665689716800185820275%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=168665689716800185820275&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-118728264-null-null.142%5Ev88%5Econtrol,239%5Ev2%5Einsert_chatgpt&utm_term=yuv422%E8%BD%ACyuv444&spm=1018.2226.3001.4187YUV420转YUV444_yuv422转yuv444_岳麓吹雪的博客-CSDN博客https://blog.csdn.net/lin453701006/article/details/53053185?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168665689716800185820275%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=168665689716800185820275&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-53053185-null-null.142%5Ev88%5Econtrol,239%5Ev2%5Einsert_chatgpt&utm_term=yuv422%E8%BD%ACyuv444&spm=1018.2226.3001.4187YUV444、YUV422、YUV420、YUV420P、YUV420SP、YV12、YU12、NV12、NV21_yuv444转yuv420sp_android_cai_niao的博客-CSDN博客https://blog.csdn.net/android_cai_niao/article/details/120859839?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168665721716800184170353%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=168665721716800184170353&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-120859839-null-null.142%5Ev88%5Econtrol,239%5Ev2%5Einsert_chatgpt&utm_term=yuv444%E8%BD%ACyuv422%20verilog%E4%BB%A3%E7%A0%81&spm=1018.2226.3001.4187

第一行,每4个Y就会有2个U和0个V。
第二行,每4个Y就会有2个V和0个U。

这或许就是YUV420的由来,我也没找到官网说明,反正这也算是一个合理的解释吧!

学习随记——ISP_第5张图片

你可能感兴趣的:(学习)