微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在接口内实例化 nmos (UVM)

如何解决在接口内实例化 nmos (UVM)

我的 UVM 测试台中有一个接口,它由多个 nmos 实例组成。模拟器(modelsim)对此表示抱怨,因为它违反了 LRM(在接口内部不能有接口以外的任何东西的实例化)。我需要将实例移到界面之外。

我该怎么做?可以通过 modport 或任务完成吗?这是我没有编写的遗留代码

interface model_interface(input wire mac_clk,input reset);
    
    wire  [31:0] modelio_vi;
     
    wire  [31:0] modelio_data_in;
    wire  [31:0] modelio_data_out;
    wire  [31:0] modelio_data_oen;
    logic [4:0]                  modelio_mode_if [32];
    logic [4:0]                  ulp_modelio_mode_if [32];
    logic                        sample_if [32];  

    bit                          ulp_modelio_mux_en;
    bit                          host_disable;

    genvar loop;
    //The below block is the issue
    generate
        for(loop=0; loop<32; loop=loop+1)
        begin:asgn
           nmos inst_1(modelio_vi[loop],modelio_data_in[loop],(~modelio_data_oen[loop]));//TB to DUT Buffer
           nmos inst_2(modelio_data_out[loop],modelio_vi[loop],( modelio_data_oen[loop]));//DUT to TB Buffer
        end
    endgenerate
endinterface

解决方法

nmos 必须在模块内实例化,因为它是一个 Verilog 开关原语。

nmos (out,in,ctrl); 在功能上与 assign out = ctrl ? in : 'z; 相同,因此您可以切换到使用 assign 语句来最小化代码更改。否则,您必须将 nmos 移动到一个单独的模块中并分配连接共享信号。

generate
    for(loop=0; loop<32; loop=loop+1)
    begin:asgn
       assign modelio_vi[loop] =  !modelio_data_oen[loop] ? modelio_data_in[loop] : 'z;//TB to DUT Buffer
       assign modelio_data_out[loop] = modelio_data_oen[loop] ? modelio_vi[loop] : 'z;//DUT to TB Buffer
    end
endgenerate

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。