打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
从Verilog到VHDL(下):Verification using SV
userphoto

2010.12.28

关注

 

17

现在开始我们假设要在Cadence的NC工具下,对一个VHDL的设计进行验证,那么就这样按部就班的一步步探索吧。

RTL编译和仿真

对于Cadence的工具来说,为人熟知的几个步骤就是ncvhdl, ncelab和ncsim。

ncvhdl是分析VHDL代码的句法和语义,如果没有错误的话,会生成HDL设计模块的内部表述,并且放置在指定的Library当中;

ncvlog是用于Verilog的编译指令,使用-sv可以编译SystemVerilog 文件。

ncelab则是独立于语言的工具(verilog或者VHDL进经过前一步之后,都被转化成同意的内部表述),它负责整个结构树的生成、连接、初值计算等等。关于前文提到的一些配置和entity的对应也应当是在这一步绑定的。经过这一步,生成的snapshot就被存放在database文件中了。

ncsim则很好理解,利用前面生成的目标文件进行仿真。

对于这几个命令的详细信息,可以参看ius的帮助文档,有非常详尽的说明。

对于我们想要进行的混合仿真来说,实际上思路很清晰,无非是对不同语言的文件用各自的语言编译器来编译,然后用独立于语言的ncelab来elaborate,最后进行仿真。这一点无论是哪一家Vendor都是殊途同归的。当然,要混仿,一般EDA TOOL都会要求编码时,需要满足一定的rules。而利用SystemVerilog构造顶层Testbench来包住VHDL的DUT,进行测试,是我们的目的。

Verification Keys

所谓验证语言的基本问题,在我看来无非就是验证环境如何与RTL代码之间实现互动?包括信号驱动、检测,包括Scope问题。

那么假设我们已经将VHDL的简单模块dut放置在了一个top的SystemVerilog的环境当中,那么如何回答上面的问题?

简单的演示如下:

vhdl的dut代码:(top.vhdl)

1 entity  top_vhdl is
2     port (
3             dut_a: out bit_vector (3 downto 0)
4          );
5 end ;
6 architecture    u_top   of top_vhdl is
7     signal reg_a: bit_vector (3 downto 0);
8 begin
9     test_process: process
10     begin
11         dut_a   <= “1100″;
12         wait for 10 ns;
13         dut_a   <= “1101″;
14         wait for 10 ns;
15         dut_a   <= “0011″;
16         reg_a   <=  not reg_a;
17         –assert false report “END of SIM” severity note;
18         –wait;
19     end process test_process;
20 end u_top;

非常简单,一个随便赋值了两下的模块。

接下来是一个更简单的verilog的dut模块:(top_verilog.sv)

1 module top_verilog;
2     reg verilog_bit;
3     initial begin
4         forever begin
5             verilog_bit = 1′b0;
6             #100
7             verilog_bit = ~verilog_bit;
8         end
9     end
10 endmodule

不停翻转的一个bit。

然后是包裹着着两个dut的testbench:(top.sv)

1 `timescale  1ns/100ps
2 module  top_test;
3    reg  [3:0]   v_bits;
4    top_vhdl u_vhdl(
5                     .dut_a(v_bits)
6                   );
7
8    top_verilog u_verilog();
9
10 always @(v_bits) begin
11     $display(“vhdl’s value is %0x.”, v_bits);
12 end
13 always @(u_verilog.verilog_bit) begin
14     $display(“verilog’s value is %0b.”, u_verilog.verilog_bit);
15 end
16     demo_pro    u_pro();
17 endmodule
18
19 program demo_pro;
20    initial begin
21         $display(“In first initial:”);
22         @(top_test.u_verilog.verilog_bit);
23         $display(“hit one toggle!”);
24         #100
25         $finish();
26    end
27 endprogram

这里我特意区分开了对verilog和VHDL的dut的信号的引用方式,从这里不难看出,Program中的验证代码部分可以按照hierarchy直接访问到Verilog的模块的内部信号,而对于VHDL的这种情况的访问却只能到port为止,就如同Vera时期的情况类似,信号交互都是发生在Port上,所以这在使用上需要注意。

到此为止,一段VHDL的代码已经被正确的import到了SystemVerilog当中,剩下的事情,就和普通的验证流程相仿,无论是要使用OVM/VMM等等,那就同等处理即可,还是相当简单的。

而执行以上步骤的命令行如下:

ncvhdl top.vhdl;
ncvlog top.sv top_verilog.sv;
ncelab worklib.top_test:module;
ncsim worklib.top_test:module;

小结

按照同事的看法,VHDL这种语言必然会死掉,正确与否先不讨论,但是使用起来,针对SV的隔离感还是存在的,希望以后工作中间能够有更多的体会和解决的办法。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
【转】第七篇 SV环境构建篇
数字前端及FPGA设计相关书目泛读及点评
UVM系统验证基础知识1(基于UVM的verilog验证 )
【精品博文】勇敢的芯伴你玩转Altera FPGA连载4:Verilog与VHDL
VHDL TestBench基础
电子工程师面试常被问到的问题
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服