modport定义
接口中的信号并未规定方向,对于不同的模块来说,接口中的信号方向会有不同。modport就定义了从不同的模块角度来看接口中信号的方向。
可以看出,modport中只需要定义信号对于不同模块的方向,而类型和位宽在接口中声明即可。
- 类的名称不仅包括简单名称A和B,还包括其他名称。名称还包括定义的声明范围。
- 当你在package中声明一个类时,package名称将成为该类名称的前缀:
- 上图中有A类的两个定义,一个定义为P::A,另一个定义为Q::A。而且变量P::a1和Q::a1是类型不兼容的,引用了两个不同的A类。
- 使用包含文件重写以上示例将导致相同的情况,如上图,即还是两个不兼容的类定义。
- 在将A类包含在每个package中之后,将得到A类的两个定义。
- 因为使用include只是在文件中剪切和粘贴文本的快捷方式,所以结果毫无疑问与上上图一样。
- 从包中导入名称不会重复文本。这样就可以从另一个软件包中看到该名称,而无需复制定义。
- 类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的由来,我也没找到官网说明,反正这也算是一个合理的解释吧!