【转载】System Verilog 上下文context的含义以及设置导入函数的作用域
创始人
2024-05-29 22:57:58
0

放丢失,转载一下,原文:

https://blog.csdn.net/qq_31348733/article/details/101054625

1. 上下文(context)的含义

导入函数的上下文是该函数定义所在的位置,比如$unit 、模块、program或者package作用域(scope),这一点跟普通的sv方法是一样的。如果你把一个函数导入到两个不用的作用域,对应的C代码会依据import语句所在位置的上下文执行。这类似于在SV的两个不同模块中分别定义一个run()任务,每个任务都会明确地访问自己所在模块的内部变量。

下面是C方法根据导入和导出语句的上下文来调用不同SV方法的一个实例:

//top.sv

module top;

import "DPI-C" context

endmodule:top

2. 设置导入函数的作用域

如同SV代码可以在局部作用域调用方法,导入的C方法也可以在它默认的上下文之外调用方法。使用svGetScope方法可以获得当前作用域的句柄,然后就可以对svGetScope的调用中使用该句柄,使得C代码认为它处在另外一个上下文中。

下面是一个实例:

第一个方法save_my_scope()保存它在SV中调用处的作用域

第二个方法c_display()将其作用域设置为已保存的作用域,并打印信息

//c_display.c

#include

#include

extern void sv_display();

svScope my_scope;

void save_my_scope(){

my_scope = svGetScope();

}

void c_display(){

//打印当前作用域

io_printf("C:c_display called from scope %s\n", svGetNameFromScope(svGetScope()));

//设置新的作用域

//io_prinf("scope: %s", svGetNameFromScope(svGetScope()));

svSetScope(my_scope);

io_printf("C:calling %s.sv_display\n", svGetNameFromScope(svGetScope()));

sv_display();

}

上面的C代码调用了svGetNameFromScope(),该函数返回表征当前作用域的一个字符串。返回的作用域被打印了两次,一次是C代码首次被调用时的作用域,另一次是先前保存过的作用域。

下面SV代码代码中,第一个模块block调用了一个C方法来保存上下文信息。当top模块调用c_display()方法时,该方法将作用域设置回block,这样它调用的便是block模块中的sv_display(),而非top模块中的同名方法

//top.sv

`timescale1ns/1ns

moduletop;

//=====================================================================\

// ********** Define Parameter and Internal Signals *************

//=====================================================================/

//======================================================================

// *************** Main Code ****************

//======================================================================

import "DPI-C" context function void c_display();

export "DPI-C" function sv_display;

function void sv_display();

$display("SV:top %m");

endfunction

block b1();

initial begin

#1 c_display();

end

endmodule:top

module block;

import "DPI-C" context function void c_display();

import "DPI-C" context function void save_my_scope();

export "DPI-C" function sv_display;

function void sv_display();

$display("SV:block %m");

endfunction

initial begin

save_my_scope();

c_display();

end

endmodule:block

下面是程序运行结果

# C:c_display called from scope top.b1

# C:calling top.b1.sv_display

# SV:block top.b1.sv_display

# C:c_display called from scope top

# C:calling top.b1.sv_display

# SV:block top.b1.sv_display

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

版权声明:本文为CSDN博主「强迫症高级患者」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_31348733/article/details/101054625

相关内容

热门资讯

规范操作 精细核查 转自:中国国防报吉林省长春市征兵办提升征兵体检工作质效规范操作 精细核查本报讯 王建军、崔明军报道:...
美政府通知通用电气航空航天:可... 据路透社3日报道,一名消息人士透露,美国政府当天向美国通用电气航空航天公司表示,后者可以重启向中国商...
淘宝闪购500亿直补用户与商家...   炒股就看金麒麟分析师研报,权威,专业,及时,全面,助您挖掘潜力主题机会! 经济观察报 记者 钱...
“饱一顿、伤一身”?这5种病,... 经常不知不觉就吃撑了?很享受吃饱的满足感?别不当回事!经常吃多会对身体产生很大影响↓↓↓吃得太饱身体...
闻“汛”而动,党政“一把手”必... 当前全省多个区域连续降雨防汛工作处于关键时期7月3日,省委书记王宁,省委副书记、省长王予波到省防汛抗...
微信重大更新:手机聊天记录可备... 7月4日,腾讯宣布微信重大更新——优化聊天记录备份。优化后,用户可以将手机聊天记录备份至外部存储设备...
四川成都:暴雨致夜晚路灯推迟开... 来源:中国新闻网 中新网成都7月4日电(记者 吕杨)记者7月3日晚从成都市城管委获悉,成都市气象台7...
原正部级李钺锋,被判无期 7月3日,山西省太原市中级人民法院公开宣判第十四届全国人大常委会原委员、监察和司法委员会原副主任委员...
适合的教育才是最好的教育 在黄冈市教育版图上,一所承载百年文脉的学府——黄州中学(高中部)正焕发新生。2022年,黄州中学与黄...
精艺股份2025年7月4日跌停... 2025年7月4日,精艺股份(sz002295)触及跌停,跌停价9.32元,涨幅-10.04%,总市...