基于Verilog HDL到SystemC编译中头文件嵌套关系的研究
- 格式:pdf
- 大小:297.11 KB
- 文档页数:4
第37卷 第9期2004年9月天 津 大 学 学 报Journal of Tianjin U niversityVol.37 No.9Sep.2004V erilog H DL与SystemC的语法等效性Ξ张雅绮,王 琨,崔志刚(天津大学电子信息工程学院,天津300072)摘 要:针对电子系统设计中使用不同语言制约设计效率的问题,研究了SystemC2.0与Verilog HDL的语法在基本语法结构、时间模型、等待和事件模型、调度模型等方面的等效性,得出如下结论:对于门级以上级别的描述,所有的Verilog HDL的描述总可以在SystemC中找到对应描述;开发EDA设计工具,实现从Verilog HDL描述的知识产权自动转换到SystemC描述是可行的.关键词:系统级描述语言;Verilog HDL;SystemC;语法等效性中图分类号:TN492 文献标志码:A 文章编号:049322137(2004)0920842205Syntax Equivalence of V erilog H DL and SystemCZHAN G Ya2qi,WAN G Kun,CU I Zhi2gang(School of Electronic Information Engineering,Tianjin University,Tianjin300072,China)Abstract:The syntax equivalence of Verilog HDL and SystemC2.0is discussed in detail regard to basic syntax structure,timing model,wait and event module and scheduler module.It is concluded that for gate or upper abstract level of Verilog HDL description,there always exists corresponding SystemC description,and it is fea2 sible to develop an EDA design tool to automatically convert Verilog2based IP to SystemC2based IP.K eyw ords:system level description language;Verilog HDL;SystemC;syntax equivalence 随着片上系统(SoC)[1]设计的复杂程度增加,传统的设计方法已经不能够满足电子系统设计的要求,原因在于系统设计、硬件设计和软件设计使用不同语言,无法进行软硬件协同验证,系统验证成为制约设计效率的主要因素.因而迫切需要一种通用语言,能够完成由软件到硬件、系统到门级各个层次的设计描述和验证,这就是先进的系统设计语言(system level de2 scription language,SLDL). 当前系统设计语言的发展方向为:一是扩展传统的硬件描述语言V HDL和Verilog HDL[2],使其支持抽象数据类型,并具有系统描述能力,这方面最突出的研究成果有Co2Design Automation公司所倡导的Su2 perlog,该语言的创始人之一是Verilog HDL的创建者和黄金仿真器Verilog2XL的设计者Phil Moorby;二是扩展传统的软件语言C和C++,使其支持硬件描述,这方面工作最突出的是SystemC[3].近年来,SystemC 在Synopsys等大公司的支持下得到了很大的发展,并推出了SystemC Compiler,支持SystemC的综合. 由于SystemC具有开放性,可完成软硬件在不同精度级别上的协同设计,这种系统设计语言已经受到各国电子工程师的重视,出现了一些有关V HDL与SystemC[4,5]以及Verilog HDL与SystemC[6,7]的对比与转换的研究.随着SystemC的发展,将有越来越多的硬件设计者希望学习和掌握SystemC,并将Sys2 temC与传统硬件描述语言如V HDL或者Verilog HDL进行对比.更为重要的是希望能够设计出传统硬件描述语言与SystemC之间的自动转换工具,将现有的Verilog HDL或者V HDL完成的设计自动地转换成SystemC模型,使设计事半功倍. SystemC2.0增强了SystemC的系统级描述功能,主要体现在系统可包含软件、硬件以及两者的混合结构,支持用特定的设计方法以及软核来创建模型库并进行模拟,但它仍然不能完成如同Verilog HDL的开关级模拟.因此,有必要深入研究SystemC2.0与Ver2Ξ收稿日期:2003206204;修回日期:2004203211. 作者简介:张雅绮(1945— ),女,教授.ilog HDL的等效性,开发自动转换工具,实现已有的HDLs设计转换.本文探讨了SystemC2.0与Verilog HDL的语法在基本语法结构、时间模型、等待和事件模型、调度模型等方面的等效性,提出了设计和研究Verilog HDL描述的知识产权(IP)自动转换到Sys2 temC描述的可行性.1 基本结构的等效性 Verilog HDL的基本组成结构是模块module,对应的SystemC描述是sc-module.与模块之间相联系的是端口信号的定义.Verilog HDL的输出信号也可以作为输入,而SystemC的断口定义了数据转移的方向,所以对于同样作为输入的Verilog HDL输出信号output,在SystemC中必须定义为inout.Verilog HDL 不支持浮点型的输出,而SystemC则支持,这在Ver2 ilog HDL到SystemC转换的时候不会产生问题,反之则不可以.对于Verilog HDL中的连续赋值语句assign 和always语句,都对应于SystemC的进程process. SytemC的进程有3种:方法进程、线程和钟控线程.方法进程用来进行组合逻辑模拟,线程可用来模拟测试平台,而钟控线程用来模拟同步有限状态机.后两种都是行为模型,至少需要行为级综合工具才能综合.由于方法进程可以用来描述寄存器传输级电路,一般将Verilog HDL中的assign和always语句翻译成方法进程.在always中,可能同时存在对多个寄存器(reg)型变量的阻塞或者非阻塞赋值,但可综合的代码只允许对同一寄存器变量进行非阻塞赋值或者阻塞赋值.对于一个always语句中的所有阻塞赋值语句,应该映射到一个SystemC进程中.对于不同变量的非阻塞赋值,应该映射为不同的SystemC进程. Verilog HDL的initial语句等效于SystemC进程的构造函数;parameter可以用SystemC的类模板实现;文献[6]中建议使用C++的宏来实现门级电路,还提出了一种“信号处理器引擎”方法用以在SystemC中选择支持Ver2 ilog HDL的范围.对于子模块的例化,Verilog HDL和Sys2 temC都支持端口对应和位置映射.2 时间模型的等效性 Verilog HDL与SystemC在定时时间和时钟定义方面差异较大,但都能完成硬件描述中的时序描述. 首先是时钟.在Verilog HDL中没有专门的时钟,用户需要定义一个reg信号来模拟时钟,而SystemC 中则直接定义了结构sc-clock用于定义时钟,例如下述代码1.代码1 V erilog H DL与SystemC时钟定义的等效性Code1 Equivalence of V erilog H DL and SystemCon clock def inition//Verilog HDL//SystemCmodule(clk);//define a20MHz clocksc-clock clk(“clk”,50,0.5,5, false);initial clk=#50;always#25 clk=~clk;endmodule 在Verilog HDL中,用timescale定义缺省的时间单位,在SystemC中使用了sc-set-time-resolution()和sc-set-default-time-unit(),这在功能上与timescale等效.若将时间单位设置为1ns,分辨率为1ps,则代码2描述了时间单位的等效性.代码2 V erilog H DL与SystemC时间单位和时间分辨率定义的等效性Code2 Equivalence of V erilog H DL and SystemCon unit and resolution of time//Verilog HDL//SystemC‘timescale1ns/1pssc-set-time-resolution(1, SC-PS)sc-set-default-time-unit(1, SC-NS)3 等待(w ait)与事件(event)的等效性 为了支持行为级动态建模,Verilog HDL与Sys2 temC都定义了wait函数和事件,当它被执行时将产生时间,触发等待在该事件上的进程继续执行.在Sys2 temC中,wait()只能在线程或者钟控线程内使用,在方法进程内须用与wait()等效的函数next-trigger()描述延迟,如下述的代码3,它描述的是一个延迟器件.值得注意的是,在代码3中,左边的Verilog HDL 代码实际上描述的是传输延迟,右边SystemC描述的是惯性延迟.惯性延迟可能造成极短脉冲的消失,而传输延迟则不会. 在使用next-trigger()描述时序逻辑延迟时,需要将输入信号(代码3中的din)延迟一个时钟周期,仿真结果才会是预期的,但由此会造成综合结果不正确,所・348・ 2004年9月 张雅绮等:Verilog HDL与SystemC的语法等效性以不建议在时序逻辑中使用next-trigger(),这是使用高级语言描述硬件的缺点,SystemC尚不能够描述惯性延迟.代码3 V erilog H DL与SystemC延迟描述的等效性Code3 Equivalence of V erilog H DL and SystemCon delay description//Verilog HDL//SystemC‘define DL Y2#define DL Y2module dff(clk,din,dout);#include“systemc.h”input clk,din;SC-MODUL E(delayer){output dout;sc-in<bool>din;assign sc-out<bool>dout; dout<=#‘DL Y din; endmodule void do it(){next-trigger(DL Y, SC-NS);dout=din;};SC-CTOR(dff){SC-METHOD(do it); sensitiveνdin;}}; 在SystemC中,Event定义一种事件对象,能够激活因遇到wait()或者wait-until()而等待的线程或者钟控线程,wait()函数只在线程或者钟控线程内使用,通常与event对象搭配,如代码4所示.代码4 V erilog H DL的event对象与SystemC的sc-event的等效性(准代码)Code4 Equivalence of event object in V erilog H DLand sc-event in SystemC//Verilog HDL//SystemCmodule tb();#include“systemc.h”event reseted;SC-MODUL E(tb){initial begin sc-event reseted;//code for reset void tb-do-others(){//some reseted; codeend wait(reseted);initial begin//code for after reset disposal};//some code……void tb-rst(){//codes for reset@(reseted);reseted.notify();}//code for after reset SC-STOR(tb);//disposal……{SC-THREAD(tb-do-others);end//sensitivity list……endmodule SC-THREAD(tb-rst);//sensitivity list……}}; 由代码4可以看出,Verilog的动态事件event可以映射到SystemC的对应事件sc-event,SystemC的wait函数支持多种不同的重载参数,如代码5所示.代码5 V erilog H DL和SystemC的w ait()函数Code5 w ait()functions in V erilogH DL and SystemC//Verilog HDL wait-statement//SystemC wait-functionwait(expression)等待条件表达式为真wait();等待敏感表中的事件发生wait(e1);等待事件e1发生wait(e1|e2|e3);等待事件发生wait(e1&e2&e3);等待事件 e1,e2,e3之一发生wait(200,SC-NS);等待事件 e1,e2,e3同时发生wait(200,SC-NS,e1);等待事 件e1发生,直到200nswait(SC-ZERO-TIME);等待 一个Δ周期 代码5列出了部分SystemC的wait()函数支持的重载参数类型.Verilog HDL的wait()函数比较简单,进程执行到wait语句时进入等待状态,直至条件表达式为真时,重新开始启动进程.可以看出,SystemC的wait()函数功能比Verilog HDL更强大.4 仿真调度模型的等效性 仿真调度模型(Scheduler)涉及到代码如何执行,理解它对于Verilog HDL到SystemC的代码转换有重要意义.为了支持寄存器传输级的并行描述,SystemC 采用了与Verilog HDL基本相同的调度模型———基于Δ(delta)延迟.一个Δ周期包括求值和更新两个阶段,在一个时间点上,这样的Δ周期会持续出现,直到在求值前后的结果不再发生变化,而在宏观上,时间并没有前进.代码6中的Verilog HDL程序段在VCS和Verilog2XL不同仿真器环境下,可能得到不一致的仿真结果. 代码6中有可能先执行赋值,也有可能先执行$display.在默认选项下,在Verilog2XL显示的addr 值为x(仿真命令为verilog example.v),VCS中的结果为1(仿真命令为vcs2o example.out example.v,然后执行example.out).仿真结果不同的原因是Verilog2 XL执行完整个initial语句后才对addr赋值,而VCS・448・天 津 大 学 学 报 第37卷 第9期 是在last-addr被赋值后中断initial语句,在执行完对addr赋值后返回initial.如果将代码6中第三和第四行合并为wire addr=last-addr+1,则仿真结果相同.然而依Verilog HDL21995标准,这两种赋值并没有区别,标准中并没有定义initial和assign执行的先后顺序.由于SystemC基于C++,构造函数先于其他成员函数执行,所以不会产生问题.对于SystemC2.0调度模型,在初始化阶段(notify()),所有进程包括方法进程和线程都将被执行一次,这与Verilog HDL和V HDL的调度模型一致.代码6 一段在V CS和V erilog2X L仿真结果不一样的代码Code6 A procedure of having different simulation results using V CS and V erilog2X L tools//Verilog HDL-file:Example.vmodule example integer last-addr; wire[31:0]addr;assign addr=last-addr+1; initial begin last-addr=0;$display(“at time:”,$time,“;the addr changed to:%d”,addr);endendmodule 5 等效性举例 根据上述等效性讨论可知,SystemC继承了C+ +类的语法结构,Verilog HDL则是结构化的硬件描述语言.下面举一个简单的例子,来说明用两种语言对同一逻辑电路进行描述的雷同与差异.一个具有逻辑与、或、或非和取反功能的算术逻辑单元(AL U)的原理如图1所示,两种描述代码示于代码7中.从中可以清楚地看出SystemC与Verilog HDL描述的等效性.图1 一个简单的算术逻辑单元Fig.1 Schematic of a simple A L U代码7 简单的算术逻辑单元代码Code7 Example of descriptions to a simple A L U using V erilog H DL and SystemC//Verilog Code for a simple ALU//SystemC Code for a simple ALUmodule alu-complete(dout,din-a,din-b,enable,opcode)void alu::operate() input[3:0]din-a,din-b;{ input[2:0]opcode;sc-mv<radix-k,width-n>res;//res与操作数宽度相同 input enable;switch(din-sel.read to Int())//读din-sel并转换成整数 output dout;{ reg[3:0]alu-reg;//寄存器数据类型case0://或操作 assign dout=(enable==1)?alu-reg:4’b0;res=din-a.read()|din-b.read();break; always@(opcode or din-a or din-b)case1://异或操作 case(opcode)res=din-a.read()^din-b.read();break; 3’b001:alu-reg=din-a|din-b;//或操作case2://与操作 3’b001:alu-reg=din-a^din-b;//异或操作res=din-a.read()&din-b.read();break; 3’b001:alu-reg=din-a&din-b;//与操作case3://取反操作 3’b001:alu-reg=~din-b;//取反操作res=~din-b.read();break; default:alu-reg=4’b0;//opcode为其他值} end case dout-res.write(res);//写输出结果endmodule}6 结 语 为了开发从传统硬件描述语言描述的知识产权(IP)到新一代描述语言SystemC的代码转换,必须首先研究其等效性.本文研究了Verilog HDL与Sys2 temC2.0从门级描述到系统级描述的语法等效性,并通过一个简单的例子说明了这种等效性.综合上面的・548・ 2004年9月 张雅绮等:Verilog HDL与SystemC的语法等效性讨论和前人的工作可以看出,对于门级以上级别的Verilog HDL 描述,在SystemC 中几乎有所有的对应描述,因此可以设计开发出一种能完成Verilog HDL描述的IP 到SystemC 描述的转换工具.参考文献:[1] Michael K eating ,Pierre Bricaud.Reuse Methodology M an 2ual f or S ystem 2on 2a 2chip Designs.[M ].2nd ed.Boston :K luwer Academic Publishers ,1999.[2] IEEE Standard Hardware Description Language Based onthe Verilog Hardware Description Language[S].IEEE Std 1364—1995,http :∥/reading/ieee/std/dasc/1364—1995.pdf ,2003..[3] Stuart Swan.An Introduction to System 2Level Modeling inSystemC 2.0,http :///white papers/Systemc-wp20.pdf ,2001207.[4] Agliada N ,Fin A ,Fummi F ,et al.On the Reuse of VHDLModules into SystemC Designs ,http :/eda.sci.univr.it/pub 2lications/sdl01.pdf ,2001.[5] Bollano G ,G arino P ,Turolla M ,et al.S ystemC ’s Impacton the Development of IP Libraries ,.pdf/Ipooe.pdf ,2000.[6] Leila Mahmoudi ,Ayough Ali.Verilog2SC :A Methodologyfor Converting Verilog HDL to SystemC[EB/OL ],http :///projects/sitedocs/document/Verilog2SC -tech/en/1.pdf ,2003201225.[7] Synopsys Inc.Describing Synthesizable RTL in SystemC ,http :///products /sld/rtl-systemc.pdf ,2003201215.《纳米技术与精密工程》征稿启事 经国家新闻出版署批准,《纳米技术与精密工程》已于2003年12月成功创刊.目前,该刊已被美国《化学文摘》、《中国核心期刊(遴选)数据库》、《中文科技期刊数据库》、《中国学术期刊(光盘版)数据库》、《中国生物学文摘》等国内外的著名数据库收录. 《纳米技术与精密工程》是纳米技术与精密工程领域专业性学术期刊,主要刊登纳米技术、微机电系统、精密加工和精密测量方面用中、英文撰写的具有创新性的科学研究论文、研究报告以及重要学术问题的讨论等,旨在反映国内外该领域及相关领域的重要科学研究成果,促进学术交流和科学技术发展. 本刊主要栏目为:纳米技术;微机电系统;精密加工;精密测量.欢迎国内外专家、学者踊跃投稿. 来稿请寄(300072)天津市天津大学出版社内《纳米技术与精密工程》编辑部.E 2mail :namijishu @. 诚挚地欢迎您提出宝贵建议,与我们共建一流期刊.・648・天 津 大 学 学 报 第37卷 第9期 。
vhdl和systemverilog混合编译摘要:I.引言- 介绍VHDL 和SystemVerilog- 阐述混合编译的背景和需求II.VHDL 和SystemVerilog 的概述- VHDL 的特点和优势- SystemVerilog 的特点和优势- 两者之间的区别和联系III.混合编译的原理和方法- 混合编译的定义和作用- 混合编译的具体实现步骤- 混合编译过程中可能遇到的问题和解决方案IV.混合编译的优缺点分析- 优点:提高设计效率、优化设计质量、拓宽设计领域等- 缺点:兼容性问题、编译器限制、学习成本等V.混合编译在实际工程中的应用- 实际案例介绍- 应用效果和价值VI.结论- 总结混合编译的重要性和应用前景- 对未来混合编译技术发展的展望正文:I.引言随着电子技术的飞速发展,硬件描述语言(HDL)在数字电路设计领域中发挥着越来越重要的作用。
VHDL 和SystemVerilog 是两种最常用的硬件描述语言,分别具有各自的特点和优势。
然而,在实际工程设计中,单独使用一种语言往往不能满足所有设计需求。
因此,混合编译技术应运而生,旨在充分利用VHDL 和SystemVerilog 的优势,实现高效、高质量的硬件设计。
II.VHDL 和SystemVerilog 的概述VHDL 是一种基于面向对象编程思想的硬件描述语言,具有较强的模块化、结构化特点,适用于复杂数字电路设计。
VHDL 具有丰富的库函数和包,支持多态、继承、重载等特性,有利于模块复用和设计优化。
SystemVerilog 是Verilog 的扩展,具有更强大的功能和更高的性能。
SystemVerilog 支持面向对象编程和函数式编程,拥有丰富的内置函数和类,适用于高层次的模块设计和验证。
此外,SystemVerilog 具有强大的仿真和测试功能,可以提高验证效率。
尽管VHDL 和SystemVerilog 在某些方面存在差异,但两者在实际应用中可以相互补充。
基于SystemC语言实现UHF RFID系统自顶向下设计戚皖青,卜冈李姝萱(南京航空航天大学电子信息工程学院,江苏南京211106)摘要:为了满足对于集成电路的复杂设计需求,继承了C++扩展库的SystemC的开发与设计应运而生。
SytemC可以满足对于软硬件协同设计的要求,在设计的过程中,可以进行快速仿真和验证遥针对于通信协议(ISO/IEC18000-6C)进行较高层次的建模设计,采用函数调用的方式实现询问机和标签之间的协议通信。
针对于UHF RFID(Ultra High Frequency Radio Frequency Identification)通信协议,从系统级设计到行为级设计,实现该协议的自顶向下的设计,完成了标签识别层和基带通信链路层的设计。
最后采用Vivado HLS综合软件将SystemC源代码转化成Verilog等硬件描述语言,软件描述的系统级综合成RTL级代码遥针对标签基带链路ENCODE_T模块,在Microsoft Visual C++ 6.0中对数据“1001001001011001”进行fm0\miller编码仿真之后,在Modelsim中完成了波形验证,并通过Vivado HLS综合软件将其转化为RTL级电路遥关键词:软硬件;协同设计;高层次;协议通信;自顶向下中图分类号:TN402文献标识码:A DOI:10.16157/j.issn.0258-7998.201117中文引用格式:戚皖青袁卜刚,李姝萱.基于SystemC语言实现UHF RFID系统自顶向下设计[J].电子技术应用,2021,47(5):45-49.英文引用格式:Qi Wanqing,Bu Gang,Li Shuxuan.Top down design of UHF RFID tag based on SystemC[J].Application of Electronic Technique,2021,47(5):45-49.Top down design of UHF RFID tag based on SystemCQi Wanqing,Bu Gang,Li Shuxuan(School of Electronic Information Engineering,Nanjing University of Aeronautics and Astronautics,Nanjing211106,China)Abstract:With the development of science and technology,the design of integrated circuit becomes more and more complex.In the design process,the division of hardware and software also produces more choices.In order to meet the complex design requirements for integrated circuits,the development and design of SystemC,which inherits the C++extension library,came into being. SytemC can meet the requirements of hardware and software codesign,and can be quickly simulated and verified in the design process.In this paper,the communication protocol(ISO/IEC18000-6C)is modeled and designed at a higher level.The protocol communication between interrogator and tag is realized by function call.For UHF RFID(Ultra High Frequency Radio Frequency Identification)communication protocol,from system level design to behavior level design,the top-down design of the protocol is realized, and the design of tag identification layer and baseband communication link layer is completed.Finally,the source code of this sys-temc is transformed into Verilog and other hardware description languages by using Vivado HLS synthesis software,and the software description of system level is synthesized into RTL code.This paper focuses on label baseband link encode_T module,after FM0/ Miller coding simulation of data"1001001001011001"in Microsoft Visual C++ 6.0,the waveform verification is completed in Modelsim,and it is transformed into RTL level circuit by Vivado HLS integrated software.Key words:software and hardware;collaborative design;high level;protocol communication;top-down0引言随着科技的发展,集成电路的规模变得庞大和复杂,电子系统设计(Electronic System Level,ESL)流程是目前最先进片上系统设计流程方法。
System Verilog 是一种硬件设计语言,它提供了丰富的特性来描述硬件行为和结构。
在 System Verilog 中,可以使用文件 I/O 操作来读取外部文件并将其内容加载到仿真环境中。
1. System Verilog 中的文件 I/O在 System Verilog 中,可以使用 $fopen、$fclose、$fscanf 等内置函数来进行文件 I/O 操作。
其中,$fopen 用于打开一个文件,$fclose 用于关闭一个文件,$fscanf 用于从文件中读取数据。
2. 读取文件的基本步骤要在 System Verilog 中读取文件,通常需要经过以下几个基本步骤:(1) 使用 $fopen 打开一个文件,并将返回的文件句柄保存到一个变量中。
(2) 使用 $fscanf 从文件中读取数据,并将读取的数据保存到变量中。
(3) 使用 $fclose 关闭文件。
3. 读取文件的示例代码下面是一个使用 System Verilog 读取文件的简单示例代码:```verilogmodule read_file;initial begin// 打开文件int file_h;file_h = $fopen("input.txt", "r");// 读取数据int data;$fscanf(file_h, "d", data);// 关闭文件$fclose(file_h);endendmodule```在这个示例中,首先使用 $fopen 打开一个名为 "input.txt" 的文件,并将返回的文件句柄保存到变量 file_h 中。
然后使用 $fscanf 从文件中读取一个整数,并将读取的整数保存到变量 data 中。
最后使用$fclose 关闭文件。
4. 读取文件的注意事项在使用 System Verilog 读取文件时,有一些需要注意的事项:(1) 需要确保所读取的文件存在,否则 $fopen 会返回一个无效的文件句柄。
基于SystemC和SystemVerilog的联合仿真平台设计卢艳君【摘要】采用SystemC建模高抽象级模型、SystemVerilog进行验证工作,是解决验证工作量随着SoC复杂度提高而增加问题的有效手段.为了实现两种语言的联合仿真,提出了一种基于SystemC和SystemVerilog的联合仿真平台的实现,平台采用UVM验证方法学,采用标准化的组件结构与TLM通信方案,采用官方的UVMC库解决了SystemC与SystemVerilog之间的数据通讯问题,能够产生定向或约束性的随机激励.实际在UVM验证平台中完成对于AHB主设备接口的验证,结果显示,所设计的平台可以行之有效地实现联合仿真.【期刊名称】《黑龙江科技信息》【年(卷),期】2017(000)027【总页数】3页(P16-18)【关键词】SystemVerilog;SystemC;UVMC;联合仿真【作者】卢艳君【作者单位】广州民航职业技术学院,广东广州 510403【正文语种】中文随着SoC技术的不断发展,设计的复杂程度不断提高,并且新型的IP核设计流程、软件件协同仿真等机制的出现,使得IC的验证复杂度大大增加,验证已经占用整个IC开发流程的70%左右[1]。
针对IC行业发展的问题,新型的硬件描述与验证语言得以应用,使用SystemC语言进行硬件建模,同时基于SystemVerilog进行验证工作的方案越来越流行,其中SystemC可以提供事务级、高抽象度的建模方法,而应用SystemVerilog可以利用灵活的机制以及强大的进行规范而全面的验证,各自具有其独有的特点,两种语言二者结合起来,可以提高效率,缩短开发时间、增强验证效果。
然而,两种语言之间存在数据以及控制通信的障碍,因此如何解决二者的适配问题至关重要。
针对这一问题,本文提出了一种基于UVMC的联合仿真平台实现,能够很好的解决两者的适配问题。
SystemVerilog与SystemC之间适配的实现,其根本是缘于硬件描述语言(HDL,Hardware Description Language)与软/硬件协同设计语言(S/HCD,Software/Hardware Co-Design)之间的语法等效性。
中国电子学会嵌入式系统工程师专业技术资格认证考试一、选择题(本大题共 15 个小题,每小题 1 分,共 15 分)1、基于 FPGA 的嵌入式系统,下面说法正确的是( D )A.只有运行 NiosII 软核的 FPGA 系统才是嵌入式系统 B.基于FPGA 的嵌入式系统是在 FPGA 中运行可配置的软核 C.基于 FPGA 的嵌入式系统主要特点是运行速度比其他嵌入式系统要快 D.基于 FPGA 的嵌入式系统是 FPGA 最主要的应用方向2、下列不属于 FPGA 应用范围的是( D )A.信号处理 B.智能应用 C.手持 PDA D.超大屏幕显示3、下列关于软核处理器的说法,正确的是( B )A.软核处理器执行 VHDL 编写的程序B.软核处理器是集成在 FPGA 中的模块C.NiosII、Microblaze、PowerPC、MIPS 都属于软核处理器的范畴D.NiosII 软核可以修改它的指令和外设4、下列说法正确的是( A )A.IP 核可以挂载到不同的总线上 B.系统中的 IP 核不支持 Ver iog HDL 和 VHDL 混合编写 C.同一个 IP 核在不同的 FPGA 中具有相同的性能 D.嵌入式软核处理器并不属于 IP 核的范畴*5、关于 SOPC 的说法,错误的是( B )A.SOPC 的系统中至少包含一个 NiosII 软核 B.SOPC 技术包含了嵌入式设计的全部,除了硬件 PCB 外,还包括处理器和实时多任务操作系统(RTOS) C.SOPC 可以体现软硬件协同设计技术 D.如果 FP GA 中集成了硬核处理器,无论是否使用,系统都属于 SOPC 系统6、下列不属于 FPGA 片内资源的是( A )A.高速串行收发器 B.PLL(数字锁相环)C.RAM D.FIFO(先进先出)7、下面哪项不属于 NiosII 软核的可定制性( D )A.可以修改基于 NiosII 的 IP 核 C.增加或取消 MMU(内存管理单元) B.提高或降低工作频率 D.自定义 NiosII 指令8、关于 FPGA 的配置问题下列说法的正确的是( A )A.EPCS16 的容量是 16Mb B.FPGA 仅支持 EPCS 配置 C.FPGA 的配置优先级最高的是 EPCS D.EPCS 配置 FPGA 属于 PS(被动)方式9、关于 NiosII 软核启动过程,下列说法错误的是( D )A.NiosII 软核的启动过程主要分为 FPGA 器件的配置和 NiosII 程序的加载B.CFI Flash 可以保存 FPGA 的配置文件、NiosII 程序和其他文件数据C.FPGA 配置文件(.sof)和 NiosII 程序(.elf)都可以保存在 EPCS 中D.使用 CFI Flash 做为 NiosII 启动的器件时,FPGA 把配置数据从 CFI Flash 读出并加载,然后执行 Bootloader 把保存的 NiosII 程序复制 SDRAM 执行10、下列可以在 FPGA 中稳定运行的是( B)A.在设计中同时存在大量同步和异步设计 B.状态机编码采用二进制码和独热码混合形式 C.使用很多已经验证好的 IP 核,但没有做整体的仿真 D.有的模块采用时钟上升沿,有的模块采用时钟下降沿11、uC/OS-II 的任务调度策略是( A )A.哪个任务的优先级高就先执行哪个任务 B.高优先级的任务会被低优先级的任务抢占 C.各自轮流执行一段时间再让出 CPU D.如果某个任务一直得不到 CPU 资源,就会进入等待状态12、在 FPGA 设计中不属于软件硬件协同设计的是( C )A.C2H(C to Hardware)硬件加速编译器 B.难于用软件实现的部分功能用硬件实现 C.在 C 程序中使用自定义外设的函数D.根据顶层设计要求,合理划分软硬件结构13、在 uC/OS-II 系统中不属于信号量用途的是( D)A.共享资源的控制 C.实现两个任务之间信息的传递)B.用来表示一个事件的发生 D.实现两个任务的同步14、关于 SystemC 和 SystemVerilog 的说法正确的是( C)A.SystemC 适合顶层建模,SystemVerilog 适合验证 B.System Verilog 适合顶层建模,SystemC 适合验证 C.SystemVerilog 是 Ver ilog 的升级版本 D.SystemC 可以直接转换为 RTL 代码15、下列关于 uClinux 的说法正确的是( D )A.uClinux 是在 linux 的基础上裁剪了内核和应用程序库。
C++中头文件相互包含的几点问题[转载](2012-05-16 14:38:37)转载▼标签:it标签:it分类:转载文章一、类嵌套的疑问C++头文件重复包含实在是一个令人头痛的问题,前一段时间在做一个简单的数据结构演示程序的时候,不只一次的遇到这种问题。
假设我们有两个类A和B,分别定义在各自的有文件A.h和B.h中,但是在A中要用到B,B中也要用到A,但是这样的写法当然是错误的:class B;class A{public:B b;};class B{public:A a;};因为在A对象中要开辟一块属于B的空间,而B中又有A的空间,是一个逻辑错误,无法实现的。
在这里我们只需要把其中的一个A类中的B类型成员改成指针形式就可以避免这个无限延伸的怪圈了。
为什么要更改A而不是B?因为就算你在B中做了类似的动作,也仍然会编译错误,表面上这仅仅上一个先后顺序的问题。
为什么会这样呢?因为C++编译器自上而下编译源文件的时候,对每一个数据的定义,总是需要知道定义的数据的类型的大小。
在预先声明语句class B;之后,编译器已经知道B是一个类,但是其中的数据却是未知的,因此B类型的大小也不知道。
这样就造成了编译失败,VC++6.0下会得到如下编译错误:error C2079: 'b' uses undefined class 'B'将A中的b更改为B指针类型之后,由于在特定的平台上,指针所占的空间是一定的(在Win32平台上是4字节),这样可以通过编译。
二、不同头文件中的类的嵌套在实际编程中,不同的类一般是放在不同的相互独立的头文件中的,这样两个类在相互引用时又会有不一样的问题。
重复编译是问题出现的根本原因。
为了保证头文件仅被编译一次,在C++中常用的办法是使用条件编译命令。
在头文件中我们常常会看到以下语句段(以VC++6.0自动生成的头文件为例):#if !defined(AFX_STACK_H__1F725F28_AF9E_4BEB_8560_67813900AE6B__INCLUDED_)#define AFX_STACK_H__1F725F28_AF9E_4BEB_8560_67813900AE6B__INCLUDED_//很多语句……#endif其中首句#if !defined也经常做#ifndef,作用相同。
vivado中systemverilog混合编译在Vivado中,SystemVerilog混合编译是指将SystemVerilog代码与Verilog代码一起编译和仿真。
Vivado支持这种混合编译,以便您可以在同一个项目中使用两种语言。
以下是混合编译的一般步骤:1. 创建项目:首先,创建一个新的Vivado项目。
这可以通过打开Vivado软件并创建一个新的项目文件来实现。
2. 添加文件:在项目中添加所需的Verilog和SystemVerilog文件。
您可以将文件直接拖放到项目浏览器中,或者通过菜单栏中的“File”>“Add”>“File”来添加。
3. 编写代码:在Verilog和SystemVerilog文件中编写代码。
请注意,混合编译的代码应该遵循一定的规范,以便Vivado可以正确地识别和处理两种语言。
4. 编译和仿真:在Vivado中编译项目。
可以通过菜单栏中的“Run”>“Compile”来执行编译操作。
编译完成后,您可以使用Vivado提供的仿真工具进行仿真。
5. 分析结果:在仿真过程中,您可以查看波形、报告和其它输出文件,以分析设计的性能和正确性。
以下是一些建议,以确保混合编译的顺利进行:-避免在同一个模块中混合使用Verilog和SystemVerilog代码。
尽量将Verilog代码和SystemVerilog代码分别放在不同的模块中。
-使用Vivado提供的预处理器指令来区分Verilog和SystemVerilog代码。
例如,使用``来声明一个模块为SystemVerilog模块。
-确保SystemVerilog模块中的异常处理和监控功能正确实现,以避免编译错误。
-熟悉Vivado的编译器和仿真器,以便在混合编译环境中正确地使用它们。
总之,在Vivado中进行SystemVerilog混合编译需要遵循一定的规范和技巧。
通过遵循这些规范和技巧,您可以充分利用Verilog和SystemVerilog的优势,提高设计开发效率。