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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 16859|回复: 12

[求助] modelsim中'xxx' already declared in this scope (yyy). 错误怎么解决?

[复制链接]
发表于 2012-12-20 14:58:58 | 显示全部楼层 |阅读模式

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

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

x
我用xilinx自带的ISIM仿真,可以正常使用。
但是用modelsim仿真时候,出现'xxx' already declared in this scope (yyy).这样的报警,一般要怎么去解决呢?

出现的错误很多,其中一个如下:
Error: D:/today/modelsimtb/ssram1.v(45): 'clk_125m' already declared in this scope (ssram1).

程序如下(testbench文件未有错误,所以未列出程序,下面只是出错的ssram程序):





  1. module ssram1(

  2. // ssram1 interface
  3. output [3:0]ssram1_bw,        // synchronous byte write control
  4. output s1_BWEn,                        // byte write enable
  5. output s1_clk,                                // clk
  6. output s1_OEn,                                // output enable
  7. output s1_ADSCn,                        // address status controller
  8. output s1_CEn,                                // chip select
  9. output [18:0]ssram1_addr,                        // [18:2]acitve address [1:0]synchronous burst address inputs
  10. inout [31:0]ssram1_data,

  11. //ctl interface
  12. input clk_125m,
  13. input rstn,
  14. input rd_en,
  15. input [18:0] rd_addr_in,
  16. output [31:0] rd_data_out,
  17. input wr_en,
  18. input [18:0] wr_addr_in,
  19. input [31:0] wr_data_in,
  20. output [4:0]SSRAM_STATE
  21. );

  22. /*wire clk_125m;
  23. wire rstn;
  24. reg [3:0] ssram1_bw;
  25. reg s1_BWEn;
  26. wire s1_clk;
  27. reg s1_OEn;
  28. reg s1_ADSCn;
  29. reg s1_CEn;
  30. reg [18:0]ssram1_addr;
  31. (*KEEP = "TRUE"*)wire [31:0]ssram1_data;
  32. (*KEEP = "TRUE"*)reg [31:0]rd_data_in;
  33. (*KEEP = "TRUE"*)reg [31:0]rd_data_out;
  34. reg [4:0]SSRAM_STATE;*/

  35. assign ssram1_data = (ssram1_bw == 4'b1111)?(wr_data_in):(32'hFFFF_FFFF);
  36. //assign rd_data_out = (rd_en)?(ssram1_data):(32'hFFFF_FFFF);
  37. localparam RST  = 5'b0_0000,
  38.            RD_1 = 5'b0_0001,
  39.                           RD_2 = 5'b0_0010,
  40.                           RD_3 = 5'b0_0100,
  41.                           WR_1 = 5'b0_1000,
  42.                           WR_2 = 5'b1_0000;
  43.                           
  44. assign s1_clk = clk_125m;

  45. always@(posedge s1_clk or negedge rstn)begin
  46.    if (!rstn) SSRAM_STATE <= RST;
  47.    case(SSRAM_STATE)
  48.         RST:begin
  49.                  ssram1_bw <= 0;
  50.                  s1_BWEn <= 0;
  51.                  s1_OEn <= 0;
  52.                  s1_ADSCn <= 0;
  53.                  s1_CEn <= 0;
  54.                  ssram1_addr <= 0;
  55.                  //ssram1_data<= 32'hFFFF_FFFF;
  56.                  if (rd_en) SSRAM_STATE <= RD_1;
  57.                  else if (wr_en) SSRAM_STATE <= WR_1;
  58.                  else SSRAM_STATE <= RST;
  59.         end
  60.         RD_1:begin
  61.             s1_ADSCn <= 1;
  62.                  s1_BWEn <= 1;
  63.                  s1_OEn <= 0;
  64.                  s1_CEn <= 0;
  65.                  ssram1_bw <= 0;
  66.                  ssram1_addr <= rd_addr_in;
  67.                  SSRAM_STATE <= RD_2;
  68.         end
  69.         RD_2:begin
  70.             SSRAM_STATE <= RD_3;
  71.         end
  72.         RD_3:begin
  73.             rd_data_out <= ssram1_data;
  74.             SSRAM_STATE <= RST;
  75.         end
  76.         WR_1:begin
  77.             s1_CEn <=0;
  78.                  ssram1_addr <= wr_addr_in;
  79.                  SSRAM_STATE <= WR_2;
  80.         end
  81.         WR_2:begin
  82.             s1_ADSCn <= 1;
  83.                  s1_BWEn <= 0;
  84.                  s1_OEn <= 1;
  85.                  ssram1_bw <= 4'b1111;
  86.                  SSRAM_STATE <= RST;
  87.         end
  88.         endcase
  89. end

  90. endmodule


复制代码
发表于 2012-12-20 17:02:45 | 显示全部楼层
加个 wire s1_clk;试下咯
 楼主| 发表于 2012-12-25 10:25:02 | 显示全部楼层
本帖最后由 flyamo 于 2012-12-26 09:19 编辑

有侠客能帮忙解决么啊?谢谢。好疑惑啊,为啥用xilinx自带的ISIM仿真都可以,但是用modelsim仿真会出现这个错误啊?
发表于 2012-12-28 00:14:49 | 显示全部楼层
你编译的代码是不是没更新 看报错的行数和代码不匹配啊
发表于 2012-12-28 08:50:18 | 显示全部楼层
在vlog compile RTL代码的时候把-93 option加上试试。
发表于 2012-12-28 10:33:11 | 显示全部楼层
学习了
 楼主| 发表于 2012-12-29 13:40:18 | 显示全部楼层
发表于 2012-12-29 17:03:05 | 显示全部楼层
本帖最后由 chen.terry 于 2012-12-29 17:08 编辑

ISE自带的仿真工具能仿真,说明你的代码应该没啥问题。
用modelsim仿真可以这样做:
(1)编译好相应的仿真库,Xilinx或者Altera的,ISE和Quartus都带了编译仿真库的软件,编译好后,查看modelsim.ini文件里面是否有那些仿真库。
(2)编写模块文件和模块文件的测试激励,比如counter.v和counter_tb,v
(3)写modelsim的counter_tb.do文件,内容如下:
quit -sim
vlib work

vlog "counter.v"
vlog "counter_tb.v"

# 这个是Xilinx的仿真库里面的核有些用这个文件,在ISE的安装目录。
vlog "glbl.v"

vsim -t 1ps -L simprims_ver  -L unisims_ver -L xilinxcorelib_ver -L work -voptargs="+acc"  counter_tb glbl

# 第一次仿真的时候,这里注释,保存仿真波形格式后放开。
#do {counter_tb_wave.do}

view wave -undock
view signals

run 10us

(4)打开modelsim,将目录切换到你的工程目录,在命令窗口中输入:do counter_tb.do,如果没有错,则会弹出波形查看窗口。

(5)添加你要查看的信号以及信号的格式,然后保存为counter_tb_wave.do,名字是上面注释没有放开的那个名字。

(6)将 #do {counter_tb_wave.do}的注释放开。

(7)仿真,调试。每次只用执行do counter_tb.do即可。

仿真时,EDA软件自动打开modelsim感觉很恶心,还是自己控制仿真器比较好。
发表于 2013-12-29 11:41:16 | 显示全部楼层
回复 7# flyamo


    楼主,这个问题你最后如何解决的?
发表于 2014-4-15 11:07:33 | 显示全部楼层
回复 1# flyamo
加一个reg型的中间变量,先将clk_125m赋值给这个中间变量,再将这个中间变量在48行赋给s1_clk
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-4-18 21:36 , Processed in 0.036828 second(s), 8 queries , Gzip On, Redis On.

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