在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4291|回复: 8

[求助] 模拟人员请教verilog代码编译错误mem[A]....

[复制链接]
发表于 2012-4-5 09:55:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
大家好,我是做模拟的,我做混合仿真的过程中,数字设计人员给我的代码中有一段是关于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
发表于 2012-4-5 10:31:02 | 显示全部楼层
改成这样试下:
   else begin
                   if(wr_tosh)  mem[A] [13:8] <= DBin[5:0];
                    if(wr_tosl)  mem[A] [7:0] <= DBin;   
            end
发表于 2012-4-5 21:59:33 | 显示全部楼层
在verilog95中只能对MEM[`PA_PC:0]整体访问,不能部分、单独访问某几个、某个bit的,部分、单独访问是verilog2001增加的语法。VerilogXL好像默认是不支持verilog2001语法的。你查查看能不能加什么参数让它支持。
发表于 2012-4-5 22:52:40 | 显示全部楼层
-sv ...........
 楼主| 发表于 2012-4-6 09:41:34 | 显示全部楼层
本帖最后由 hongmy 于 2012-4-6 09:43 编辑

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


 楼主| 发表于 2012-4-6 11:05:56 | 显示全部楼层
回复 4# bluray2005


    简单的-sv参数好像不行的哦,-s为交互性,-v为lib file。
看来只能去用ams了。ams的数字仿真器使用的是nc-verilog。

后面的朋友有知道解决办法的请回一个,对spectre-verilog还是蛮有感情的呀。不过目前的spectre-verilog除了本贴讨论的这个问题外,还有一个缺点,就是不支持多核。
发表于 2012-4-6 20:33:12 | 显示全部楼层
本帖最后由 bluray2005 于 2012-4-6 20:34 编辑


回复  bluray2005


    简单的-sv参数好像不行的哦,-s为交互性,-v为lib file。
看来只能去用ams了。 ...
hongmy 发表于 2012-4-6 11:05



谁让你拆开理解的................., -sv是按 systemverilog文件编译, 总之ius92支持
 楼主| 发表于 2012-4-7 11:23:44 | 显示全部楼层
查了下,-sv  表示systemverilog好像不是verilogXL的参数(我实际运行了下,也是不行的),而是ncvlog的参数。是我最前面描述不准确,我们说的混合仿真好像不一样,我说的混合仿真是模拟和数字混合仿真,仿真器在ADE中用的spectreverilog,仿真的时候,模拟仿真器自动去调用spectre,数字仿真器自动去调用verilogXL,两个仿真器通过IPC交换数据。

bluray2005理解的混合仿真好像是verilog与VHDL两种语言的混合仿真。对否?







谁让你拆开理解的................., -sv是按 systemverilog文件编译, 总之ius92支持
bluray2005 发表于 2012-4-6 20:33

发表于 2012-4-8 16:02:07 | 显示全部楼层


查了下,-sv  表示systemverilog好像不是verilogXL的参数(我实际运行了下,也是不行的),而是ncvlog的参数 ...
hongmy 发表于 2012-4-7 11:23




    我根本不管你什么混合仿真的。。。。。我只看你说那两行红的无法编译。。。。 -sv 是 ncverilog的参数, 如果你用verilogXL我就不知道了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-25 19:20 , Processed in 0.019963 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表