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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: nono2000

[求助] 请问 Verilog 高手语法与ModelSim 问题?

[复制链接]
 楼主| 发表于 2012-12-20 14:43:22 | 显示全部楼层
本帖最后由 nono2000 于 2012-12-20 15:08 编辑


加入 RST_N 正常,但是如果使用 Quartus II 运行 ModelSim 就会错误?
Error: ModelSim Error: # ** Error: c:/altera/12.1/quartus/eda/sim_lib/cycloneii_atoms.v(5354): $hold( posedge clk &&& sloaddata:252877 ps, sdata:252972 ps, 266 ps );

wave2.jpg
发表于 2012-12-20 16:10:15 | 显示全部楼层
本帖最后由 加油99 于 2012-12-20 17:04 编辑


加入 RST_N 正常,但是如果使用 Quartus II 运行 ModelSim 就会错误?
Error: ModelSim Error: # ** Error ...
nono2000 发表于 2012-12-20 14:43




Quartus,你可以这样试一试:
菜单Settings...->Device(左)->Devive and pin options按钮(右)->General选卡,选择“Enable device-wide reset(DEV_CLRn)”。这样做了,能保证实际电路的时序逻辑有确定的初值。ModelSim的Gate Level仿真可能OK了。RTL仿真,testbench中还是要设初值。不同PLD厂家区别吧。我也学习到了知识。
发表于 2012-12-20 16:50:39 | 显示全部楼层
else 里面包括不定态,所以写if else 会有输出,我觉得还是没有复位的问题,
发表于 2012-12-20 16:57:10 | 显示全部楼层
回复 21# nono2000


   这个是时序上面的问题,保持时间不够
 楼主| 发表于 2012-12-20 20:47:05 | 显示全部楼层


Quartus,你可以这样试一试:
菜单Settings...->Device(左)->Devive and pin options按钮(右)->Gener ...
加油99 发表于 2012-12-20 16:10



谢谢说明
可是 QuartusII 仍然无法使用 ModelSim仿真,我并没有使用 Quartus 任何一个IP元件,不知道是否是 Quartus 12.1有问题.
但是我其他范例有使用 Quartus IP 的范例运行都正常?
 楼主| 发表于 2012-12-20 20:52:25 | 显示全部楼层


else 里面包括不定态,所以写if else 会有输出,我觉得还是没有复位的问题,
yanrenyi 发表于 2012-12-20 16:50


已经实际验证过了,仿真如果没有 RESET_N 初始化无法仿真,但是如果编程进去 FPGA 既使没有 RESET_N 也可以运行正确.
发表于 2012-12-21 03:28:04 | 显示全部楼层
把调用vlog的命令行贴出来看看?
 楼主| 发表于 2012-12-21 09:38:21 | 显示全部楼层
本帖最后由 nono2000 于 2012-12-21 09:42 编辑


把调用vlog的命令行贴出来看看?
tigerjade 发表于 2012-12-21 03:28


使用 Quartus II 运行 ModelSim 就会错误?
"Cyclone II"
DEVICE EP2C70F896C6
Quartus II 12.1

tp_clk_tb.v

module tp_clk_tb;
reg  rst_n;
reg  clk;
wire [2:0] a;
wire       b;
wire       c;
wire       d;
tp_clk   u0 (
   .RST_N(rst_n),
   .CLKIN(clk),
   .a(a),
   .b(b),
   .c(c),
   .d(d)
);
parameter clkper = 100;      
initial begin
   clk   = 1'b0;
end

always begin
   #(clkper / 2) clk = ~clk;  
end
initial begin
rst_n = 1'b0;
#225;
rst_n = 1'b1;
#100;
#100;
#100;
#100;
#100;
end
endmodule
=============================================
tp_clk.v

module tp_clk(                                                                           
              RST_N,
              CLKIN,                                                                     
              a,                                                                        
              b,                                                                        
              c,                                                                        
              d                                                                          
             );                                                                          
                                                                                         
input  RST_N;
input  CLKIN;                                                                           
output [2:0] a;                                                                          
output b;                                                                                
output c;                                                                                
output d;                                                                                
                                                                                         
                                                                                         
reg [2:0] c33;                                                                           
reg c31;                                                                                 
always @(posedge CLKIN or negedge RST_N )
begin                                                                                    
  if (!RST_N)
         c33 <= 3'b000;
  else
     begin
         c33[0]   <= (c33[1:0]==2'b00);                                                         
         c33[2:1] <= c33[1:0];                                                                  
     end
end                                                                                      
                                                                                         
reg c16,c16n;                                                                           
always @(posedge b or negedge RST_N)
begin                                                                                    
  if (!RST_N)
     begin
         c16n <= 1'b0;
         c16  <= 1'b0;
     end
  else
     begin
         c16n <= c33[1];                                                                        
         c16  <= ~c16;                                                                          
     end
end                                                                                      
                                                                                         
always @(negedge CLKIN or negedge RST_N)
       begin
          if (!RST_N)
             c31 <= 1'b0;
          else                    
             c31 <= c33[1];
       end
                                                                                 
assign a = c33;                                                                          
assign b = c33[0] | c31;                                                                 
assign c = c16;                                                                          
assign d = c16n;                                                                        
endmodule
发表于 2012-12-21 12:48:28 | 显示全部楼层


使用 Quartus II 运行 ModelSim 就会错误?
"Cyclone II"
DEVICE EP2C70F896C6
Quartus II 12.1

tp ...
nono2000 发表于 2012-12-21 09:38




    看不出代码有什么大问题,似乎不会出现图中的问题。不过请你这样试一试:在第一个always之前加上三行,
wire  [1:0] c33q;                                                                           
buf   i0buf(c33q[0], c33[0]);                                                                  
buf   i1buf(c33q[1], c33[1]);                                                                  
然后,把第一个always中的c33[0]<= (c33[1:0]==2'b00);改为,
c33[0] <= (c33q[1:0]==2'b00);
这样做的目的是把c33[1:0]在反馈到输入前人为的延时。
 楼主| 发表于 2012-12-21 16:33:32 | 显示全部楼层


看不出代码有什么大问题,似乎不会出现图中的问题。不过请你这样试一试:在第一个always之前加上 ...
加油99 发表于 2012-12-21 12:48



谢谢
试了一下~~~不行..
Quartus II 12.1與 10.1  仍然出现相同的错误ModelSim 无法使用.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2025-1-4 03:16 , Processed in 0.024200 second(s), 8 queries , Gzip On, Redis On.

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