微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 模拟人员请教verilog代码编译错误mem....

模拟人员请教verilog代码编译错误mem....

时间:10-02 整理:3721RD 点击:
大家好,我是做模拟的,我做混合仿真的过程中,数字设计人员给我的代码中有一段是关于RAM的代码。数字设计人员使用ncverilog编译仿真的,能够通过。因为混合仿真中好像cadence自动调用的verilogXL来进行编译和语法检查。而这段代码使用verilogXL编译,有两行始终无法通过。请高手指教原因和解决方法。通不过的代码为下面代码中的红色两行。
      以前混合仿真时数字仿真器用的ldv,当时也遇到相同的问题,一直以为是版本太老不支持一些写法。这次用的数字仿真器为IUS92,按理说不应该存在版本问题了。另外,ncverilog与verilog来自同一个软件平台IUS92,应该使用同一个编译内核,为什么会出现这种差异呢?
报的错误为:
    Error!   syntax error                                            [Van]         
         "/***/functional/verilog.v", 7434:                     
         mem[A] [<-

module RAM8x13(
    Q,CLK,CEN,WEN,A,D,DBin,
    //wr_tosu,
    wr_tosh,wr_tosl
    );
input CLK;  //stkptr access clock
input CEN;  //stkptr access chip enable
input WEN;  //stkptr access write enable
input [2:0]A;   //stkptr address
input [`PA_PC:0]D;  //stkptr data
input [7:0] DBin;   //data bus
//input wr_tosu;//write TOS [20:16] signal
input wr_itosh;  //write TOS [15:8] signal
input wr_tosl;  //write TOS [7:0] signal
output [`PA_PC:0]Q; //stkptr data out
wire [`PA_PC:0]Q;
reg [`PA_PC:0]mem[7:0];
wire wr;
/*
wire rd;
assign rd = !CEN && WEN;
always @(posedge CLK)
begin
    if(rd)  //read data
        Q <= mem[A];
    else if(!CEN)
        Q <= D;
end
*/
assign wr = !CEN && !WEN;
always @(posedge CLK)
   if(wr) //write data
       mem[A] <= D;
   //else if(wr_tosu)
   //     mem[A] [20:16] <= DBin[4:0];
   else if(wr_tosh)
        mem[A] [13:8] <= DBin[5:0];
   else if(wr_tosl)
        mem[A] [7:0] <= DBin;   
assign  Q = mem[A];
endmodule

改成这样试下:
   else begin
                   if(wr_tosh)  mem[A] [13:8] <= DBin[5:0];
                    if(wr_tosl)  mem[A] [7:0] <= DBin;   
            end

在verilog95中只能对MEM[`PA_PC:0]整体访问,不能部分、单独访问某几个、某个bit的,部分、单独访问是verilog2001增加的语法。VerilogXL好像默认是不支持verilog2001语法的。你查查看能不能加什么参数让它支持。

-sv ...........

谢谢朋友们的回答。
     语法本身没有问题,我将上面两句注释掉,后面foundry提供的IP中也出现问题,问题出在语法支持上,orlye朋友说的对的。我提问后也去找了下,也看到了verilogXL的语法支持的问题。看来cadence是推着我们使用新的AMS designer,逐渐不修改老版本的spectreverilog了。
谢谢另外一位朋友的提醒,我去加-sv试一试。



    简单的-sv参数好像不行的哦,-s为交互性,-v为lib file。
看来只能去用ams了。ams的数字仿真器使用的是nc-verilog。
后面的朋友有知道解决办法的请回一个,对spectre-verilog还是蛮有感情的呀。不过目前的spectre-verilog除了本贴讨论的这个问题外,还有一个缺点,就是不支持多核。

谁让你拆开理解的................., -sv是按 systemverilog文件编译, 总之ius92支持

查了下,-sv  表示systemverilog好像不是verilogXL的参数(我实际运行了下,也是不行的),而是ncvlog的参数。是我最前面描述不准确,我们说的混合仿真好像不一样,我说的混合仿真是模拟和数字混合仿真,仿真器在ADE中用的spectreverilog,仿真的时候,模拟仿真器自动去调用spectre,数字仿真器自动去调用verilogXL,两个仿真器通过IPC交换数据。
bluray2005理解的混合仿真好像是verilog与VHDL两种语言的混合仿真。对否?


    我根本不管你什么混合仿真的。我只看你说那两行红的无法编译。 -sv 是 ncverilog的参数, 如果你用verilogXL我就不知道了

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

网站地图

Top