微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > Modelsim中的编译和quartus中的编译有什么不同

Modelsim中的编译和quartus中的编译有什么不同

时间:10-02 整理:3721RD 点击:
再quartus中编译完全成功,但是再modelsim中编译却出错:Error: D:/1Myproject/Counter4/RTL/Counter4.v(41): Undefined variable: WIDTH.
** Error: D:/1Myproject/Counter4/RTL/Counter4.v(50): 'WIDTH' already declared in this scope.
** Error: D:/1Myproject/Counter4/RTL/Counter4.v(30): Identifier must be declared with a port mode: dout.

我定义了width的,modelsim中的编译和quartus中编译有什么不同点啊,谢谢
源代码如下
module Counter4(
//input
sys_clk,
sys_rst_n,
ena,

    //output
dout,
cout
                    );
//input ports
input                    sys_clk;      //system clock;
input                    sys_rst_n;    //system reset, low is active;
input                    ena;          //
//output ports
output [WIDTH-1:0]             dout;
output                         cout;
//reg define
reg    [WIDTH-1:0]             counter;
//wire define

//parameter define
parameter WIDTH = 4;
/*******************************************************************************************************
**                              Main Program   
**  
********************************************************************************************************/
always @(posedge sys_clk or negedge sys_rst_n) begin
        if (sys_rst_n ==1'b0) begin
            counter <= 1'b0;
        end
        else if (ena == 1'b1) begin
            counter <= counter + 1'b1;
        end
end
assign cout = &counter;
assign dout = counter;
endmodule
//end of RTL code

每一个编译器其对于语法的理解都不太一样,所以特别在编译的时候,有的规则宽松,有的严格。modelsim就属于比较严格的。modelsim要求一个变量在使用之前一定要经过声明,你这里parameter WIDTH的声明,在使用之后,你在前面的output [WIDTH-1:0]里面已经用过width这个变量了。

先用WIDTH后面才定义,怎么行呢

modelsim在RTL编译时,语法检查比较严格。
一个变量在使用前就要定义和声明,这样就都能编译过了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top