Specman beginner's questions

时间:2015-06-15 14:48:43

标签: specman

I am new to Specman. I have a couple of questions:

  1. I am trying to use the agent methodology. After writing the env,agent,bfm etc - what is the recommended way to create clock and reset? by writing a tb.v (calling the top verilog module) or is there a better way?

  2. How do I link the specman env file to the tb (or maybe its just enough to link the ports of the different specman files with a signals_map to the verilog files?

  3. Most important how do I run the environment with irun? I was thinking of creating a file listing all the verilog files, e.g. - veri.lst the specman top shall import all the specman files, e.g - spec_top.e

    irun -access +wrc veri.lst spec_top.e

should be ok? should I mention the top level module in the command? Should I put the test name in a special way in the command?

Thanks alot for all the help!!

3 个答案:

答案 0 :(得分:0)

Cadence建议从HDL测试平台内部驱动时钟(在您的情况下用Verilog编写)。这是因为每次模拟器控制Specman执行它都会浪费处理器时间。您希望尽可能减少交换机的数量。

通过将感兴趣的Verilog信号连接到相应的Specman端口(使用hdl_path())来将env链接到TB。

W.r.t。运行它,有两件事要记住。 e代码可以在编译或解释模式下执行。此外,编译的代码更快,但无法调试。你必须告诉irun你想要编译什么以及你想要解释什么:

irun -f veri.lst \
  compiled_top.e \
  -snload interpreted_top.e

您通常编译的是您不希望更改的文件(例如,您从其他项目购买或重用的验证组件)。您加载的其余文件被解释为能够轻松调试。

答案 1 :(得分:0)

添加都铎的好答案 -

首先 - 是的,将e TB连接到DUT是使用hdl_path()完成的,并将端口连接到外部。您通常会为接口指定一个单元,因此配置它将如下所示:

extend signal_map {
    // name of the instance of the verilog module you interface
    keep hdl_path() == "sub_system_a"; 
    keep bind (sig_clock, external);
    // name of the clock signal
    keep sig_clock.hdl_path == "clk";
};

请参阅UVM示例中的IES版本。

他们在 的Specman / UVM / uvm_examples

例如,查看specman / uvm / uvm_examples / xserial / e / xserial_collector_h.e:

答案 2 :(得分:0)

关于时钟 -

将e TB中的时钟连接到设计非常简单。像这样的东西 -

unit synch {
    sig_clock : in simple_port of bit is instance;
    keep  bind(sig_clock, external);
    event clock is rise(sig_clock$) @sim;
    // can define also on fall or change 
};

现在,时钟事件可用作TCM和Temporals的采样事件。这是在TB中使用时钟的简单快捷方式。

使用时钟的另一种方法是“加速就绪”。在这种方法中,您将在verilog中实现时钟代理,它将为TB提供“时钟服务”。根据这种方法,结核病不会有任何“等待周期”。相反 - 它将调用时钟代理任务“wait_cycles()” - 并等待指示所需的时钟周期数。 这是一种相当新的方法,面向加速就绪。

将在下一个IES版本15.1的UVM实例中进行论证。

/埃弗拉特