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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 9831|回复: 10

[求助] 懂systemverilog的大大请看看这段代码,到底错在什么地方,如何改正!!

[复制链接]
发表于 2011-8-5 18:07:10 | 显示全部楼层 |阅读模式

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

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

x
麻烦哪位懂systemverilog的大大看看这段代码,到底错在什么地方,如何改正!!
小弟刚开始自学systemverilog,这个是书上照着抄下来的源代码,结果老是报错,我用了modelsim还是抱同样的错误!!
########################################
###  源代码
`timescale 1ns/1ns
module dowhile();
int map[string];
map["hello"] = 1;
map["sad"]   = 2;
map["world"] = 3;
string s;
initial begin : initial_a
  s = "hello!";
  if( map.first(s) )
   do
   $display( "%s : %d\n",s,map[s] );
   while( map.next(s) );
end
endmodule
############################################
############################################
   VCS 错误提示
###   
vcs -sverilog dowhile.v
###
   
Parsing design file 'dowhile.v'
Error-[SE] Syntax error
  Following verilog source has syntax error :
  "dowhile.v", 4: token is '['
        map["hello"] = 1;
              ^
1 error
CPU time: 2.668 seconds to compile
#################################################
   modelsim 错误提示
###
-- Compiling module dowhile
** Error: D:/Workplace/Modelsim_projects/sim_dowhile_sv/dowhile.sv(4): near "[": syntax error, unexpected '['
发表于 2011-8-5 19:20:39 | 显示全部楼层
你要把hello,sad,world等几个定义成string类型!!
试试吧!
 楼主| 发表于 2011-8-5 21:24:08 | 显示全部楼层
回复 2# ghost_ic


    `timescale 1ns/1ns
module dowhile();
int map[string];
string hello,sad,world;
map[hello] = 1;
map[sad] = 2;
map[world] = 3;
string s;
initial begin : initial_a
  s = "hello!";
  if( map.first(s) )
   do
   $display( "%s : %d\n",s,map );
   while( map.next(s) );
end
endmodule

你是说这样吗~刚试了还是报同样的错误啊~~~
发表于 2011-8-6 08:12:07 | 显示全部楼层
用的时候还是要写成这样的吧:
map["hello"] = 1;
map["sad"] = 2;
map["world"] = 3;
发表于 2013-5-26 18:20:13 | 显示全部楼层
vcs -sverilog dowhile.sv 试试
发表于 2013-12-30 17:09:43 | 显示全部楼层
map[string]; 的问题我也遇到了 ,有答案么?
 楼主| 发表于 2013-12-30 19:51:30 | 显示全部楼层
回复 6# iyaowu
    好久的帖子了,问题找到了: 原来的代码应该改成这样:
`timescale 1ns/1ns
module dowhile();
//program dowhile;
//reg [31:0] map [string];
int map[string];

string s;

initial begin : initial_a
 map["hello"] = 1;
 map["sad"]   = 2;
 map["world"] = 3;

  s = "hello!";
  if( map.first(s) ) begin
    do
      $display( "%s : %d\n",s,map );
    while( map.next(s) );
  end
end

//endprogram

endmodule

对hash数组的赋值应该放到initial 块里面.这个估计是初学这常犯的错误吧~

顺便给个连接给大家 :
http://blog.csdn.net/edablog/article/details/5939779
发表于 2013-12-31 08:34:32 | 显示全部楼层
原来是赋值语句要在initial这样的语句里面,编译器真是暴弱!
发表于 2013-12-31 08:35:26 | 显示全部楼层
回复 7# lxing_1988


   已经看到你的解答,多谢啦
发表于 2015-1-19 16:23:45 | 显示全部楼层
学习了啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2025-7-20 19:31 , Processed in 0.030156 second(s), 9 queries , Gzip On, Redis On.

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