modelsim error:module “XXXX“ is not defined

        个人使用modelsim遇到的问题及解决方法。

        下面这个问题针对modelsim已编译完成ise的仿真库,但无法调用库文件的情况进行说明。

        出现的问题如下图所示: 

         由于调用了库文件,会出现在ise可以仿真,但modelsim无法仿真的情况。我们需要在modelsim里面对仿真进行设置。(文末放出代码)

        首先,找到文件所调用的库,仿真完成的ise仿真库进行查看。我们调用的是ODDR2和OBUFDS两个模块。在右上角进行文件搜索。

       这里我们使用的是verilog HDL语言,所以我们选择.V为后缀的文件。右键打开文件的所在位置。查看文件所在的库。可以看到库名称为unisims。

         接下来放回modelsim,对仿真选项进行设置。先创建project项目,添加程序文件和仿真文件,然后编译,通过之后可以点击左下角的library。可以看到界面如下所示。

 点击上面的Simulate——State Simulation...进入设置画面。按照以下步骤选择文件,abc为仿真文件。

 

 进入里面选择第二个,点击ok,返回对Libraries进行设置。

 

这里点击add...,添加前面找到的库文件的位置unisim。然后点击两次ok,就可以生成波形文件。

 

 按照下面步骤进行设置,就可以得到波形图。

 波形图如下所示

 代码

abc.V

`timescale 1ns / 1ps

module abc;

	// Inputs
	reg sclk;

	// Outputs
	wire clk_O_p;
	wire clk_O_N;
	wire data_O_p;
	wire data_O_N;

	// Instantiate the Unit Under Test (UUT)
	top_datain uut (
		.sclk(sclk), 
		.clk_O_p(clk_O_p), 
		.clk_O_N(clk_O_N), 
		.data_O_p(data_O_p), 
		.data_O_N(data_O_N)
	);

	
		// Add stimulus here

    parameter clk_period = 10;
    initial begin
        sclk = 0;
        forever
            # (clk_period/2) sclk = ~ sclk;
    end 
    
    
endmodule

top_datain.V

`timescale 1ns / 1ps
//
// Company: Han's Laser
// Engineer:quanylw
// 
// Create Date:    08:58:57 07/12/2016 
// Design Name: 
// Module Name:    top_datain 
// Project Name: 
// Target Devices: 
// Tool versions: 
// Description: 
//
// Dependencies: 
//
// Revision: 
// Revision 0.01 - File Created
// Additional Comments: 
//
//
module top_datain(
          input wire  sclk,//系统时钟
//        input wire  s_rst_n,//复位
//        input wire  DATA_IN_FROM_PINS_P,//输入差分数据信号P
//        input wire  DATA_IN_FROM_PINS_n,//输入差分数据信号N
//        input wire  CLK_IN_P_serdes_i,//输入查分时钟P
//        input wire  CLK_IN_n_serdes_i,//输入查分时钟N
          
          output   wire  clk_O_p,//输出差分时钟P
          output   wire  clk_O_N,//输出差分时钟N
          output   wire  data_O_p,//输出差分数据P
          output   wire  data_O_N//输出差分数据N
          //output wire  test//测试信号 
       );
       

    reg      outputclk_r=1'b0;
    wire     outputclk;
    reg[2:0] ini_start=3'b0;//开始启动发送数据准备发送的计数器
    reg      ini_start_flag=1'b0;//启动发送信号
    reg[2:0] cnt_data;//数据发送位数计数器
    reg[7:0] outputdata_send;//待发送的数据
    reg      outputdata_r;//发送数据的信号线 
    wire     outputdata;
    
    always   @(posedge   sclk)//输出时钟
       outputclk_r <= ~outputclk_r;
       
    always   @(posedge   outputclk_r)//开始启动发送数据准备发送的计数器
       ini_start   <= ini_start+1'b1;
       
    always   @(posedge   outputclk_r)//启动发送信号
       if(ini_start==3'd7)
          ini_start_flag <= 1'b1; 
       else
          ini_start_flag <= ini_start_flag;
          
    always   @(posedge   outputclk_r)//数据发送位数计数器
       if(!ini_start_flag)
          cnt_data <= 3'd0; 
       else if(ini_start_flag)
          cnt_data <= cnt_data+1'b1; 
       else
          cnt_data <= cnt_data;
    
    always   @(posedge   outputclk_r)//待发送的数据
       if(!ini_start_flag)
          outputdata_send   <= 7'd0; 
       else if(cnt_data==3'd7)
          outputdata_send   <= outputdata_send+1'b1;   
       else
          outputdata_send   <= outputdata_send;     
    
    always   @(posedge   outputclk_r)//发送数据的信号线
       if(!ini_start_flag)
          outputdata_r   <= 1'd0; 
       else
          outputdata_r   <= outputdata_send[3'd7-cnt_data];     
    
    
//  //差分时钟输入,差分转单端
//  IBUFGDS #(
//        .DIFF_TERM("FALSE"), // Differential Termination
//        .IOSTANDARD("LVDS_25") // Specifies the I/O standard for this buffer
//     ) 
//     
//  IBUFGDS_inst (
//        .O(inputclk),  // Clock buffer output
//        .I(CLK_IN_P_serdes_i),  // Diff_p clock buffer input
//        .IB(CLK_IN_n_serdes_i) // Diff_n clock buffer input
//     );
//  
//  //差分数据输入,差分转单端
//  IBUFDS #(
//        .DIFF_TERM("FALSE"),   // Differential Termination
//        .IOSTANDARD("LVDS_25") // Specify the input I/O standard
//     ) 
//     
//  IBUFDS_inst (
//        .O(inputdata),  // Buffer output
//        .I(DATA_IN_FROM_PINS_P),  // Diff_p buffer input (connect directly to top-level port)
//        .IB(DATA_IN_FROM_PINS_n) // Diff_n buffer input (connect directly to top-level port)
//     );

    
    /
    差分输出/
    /
    
    //差分时钟输出,单端转差分
    ODDR2 #(
       .DDR_ALIGNMENT("NONE"), // Sets output alignment to "NONE", "C0" or "C1" 
       .INIT(1'b0),    // Sets initial state of the Q output to 1'b0 or 1'b1
       .SRTYPE("SYNC") // Specifies "SYNC" or "ASYNC" set/reset
       ) 
    ODDR2_inst_0(
       .Q(outputclk),   // 1-bit DDR output data
       .C0(outputclk_r),   // 1-bit clock input
       .C1(~outputclk_r),   // 1-bit clock input
       .CE(1'b1), // 1-bit clock enable input
       .D0(1'b1), // 1-bit data input (associated with C0)
       .D1(1'b0), // 1-bit data input (associated with C1)
       .R(1'b0),   // 1-bit reset input
       .S(1'b0)    // 1-bit set input
       );
       
    OBUFDS #(
          .IOSTANDARD("DEFAULT") // Specify the output I/O standard
       ) 
    OBUFDS_inst_0(
          .O(clk_O_p),     // Diff_p output (connect directly to top-level port)
          .OB(clk_O_N),    // Diff_n output (connect directly to top-level port)
          .I(outputclk)    // Buffer input 
       );
    
    //差分数据输出,单端转差分
    ODDR2 #(
       .DDR_ALIGNMENT("NONE"), // Sets output alignment to "NONE", "C0" or "C1" 
       .INIT(1'b0),    // Sets initial state of the Q output to 1'b0 or 1'b1
       .SRTYPE("SYNC") // Specifies "SYNC" or "ASYNC" set/reset
       ) 
    ODDR2_inst_1(
       .Q(outputdata),   // 1-bit DDR output data
       .C0(outputdata_r),   // 1-bit clock input
       .C1(~outputdata_r),  // 1-bit clock input
       .CE(1'b1), // 1-bit clock enable input
       .D0(1'b1), // 1-bit data input (associated with C0)
       .D1(1'b0), // 1-bit data input (associated with C1)
       .R(1'b0),  // 1-bit reset input
       .S(1'b0)   // 1-bit set input
       );
    
    OBUFDS #(
          .IOSTANDARD("DEFAULT") // Specify the output I/O standard
       ) 
    OBUFDS_inst_1(
          .O(data_O_p),     // Diff_p output (connect directly to top-level port)
          .OB(data_O_N),    // Diff_n output (connect directly to top-level port)
          .I(outputdata)    // Buffer input 
       );
    
    //assign test  =  inputdata&inputclk;

endmodule

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
问题的原因是在ModelSim中没有定义模块。这可能是因为在ModelSim工作区的work中没有包含相应的文件。通常情况下,这些文件会自动加载。如果出现这个错误,可能是加载过程出了问题,没有将相应的文件添加到testbench中。另外,还有可能是顶层文件设置有误,或者文件名字写错或地址错误。解决这个问题的步骤是在Quartus II中打开Assignments菜单,选择Settings,然后选择EDA Tool setting,再选择Simulation,接着选择Testbenches,点击new,选择要添加的文件,然后将文件名复制粘贴到testbench name栏中,最后点击Add和ok即可。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [Quartus II联合ModelSim进行仿真出现错误:Module 'key_model' is not defined.](https://blog.csdn.net/weixin_43903101/article/details/104881032)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [modelsim 仿真中出现Modele ~~~ is not defined](https://blog.csdn.net/hhaoanpai/article/details/124673445)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值