|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
1.Interface 可以理解为一捆打包的线,在不同的模块之间连接。
2.interface 和 module是一样的, 都是静态的变量, 也就是在程序开始时, 内存中就有了其实例.但是在class里使用virtual interface时之前有两部必须提前完成:
定义是将接口作为一个类进行定义。
实例化:在RTL级的顶层中对接口进行实例化。
接口的定义,例如
interface mem_ports
331 (
332 input wire clock,
333 output logic [7:0] address,
334 output logic chip_en,
335 output logic read_write,
336 output logic [7:0] data_in,
337 input logic [7:0] data_out
338 );
339 endinterface
接口的实例化,例如:
mem_ports ports(
290 .clock (clk),
291 .address (address),
292 .chip_en (chip_en),
293 .read_write (read_write),
294 .data_in (data_in),
295 .data_out (data_out)
296 );
定义一个interface,且实例化多个后,如果没有定义virtual,则在任何一个实例中修改了某个信号值,在其他实例中都会受到影响。如果定义了virtual,则每个实例独立。如果该interface只有一个实例,可用可不用virtual,有多个实例,需要virtual。更好的办法是,都加上virtual。virtual interface只是申明一个handle, 就好像一个指针一样, 可以再程序进行中进行construct, 所以class里必须是virtual interface.
我的理解:
接口interface作为一个类,方便了不同的模块直接的连接(使模块直接的连接看起来更为简洁,修改也更为方便。)但是不同模块直接调用(多出实例化),可能某一个值改变而改变了所有使用此接口处的值(相当于于物理连接)。而不同模块使用virtual interface以后,就类似一个指针用来指向此接口。Virtual interface作为一个句柄,此时在该class中调用时,专属这一个接口对实际的静态interface并无影响。
类似virtual interface还有virtual task 、virtual function 、virtual class等。其应该主要体现出OOP的思想,可以根据自己的需要快速的搭建验证环境。 |
|