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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1977|回复: 1

[求助] modelsim仿真异常现象

[复制链接]
发表于 2015-10-14 17:08:49 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 midaier 于 2015-10-15 10:16 编辑

刚做个仿真,出现了一个很奇怪的现象,不知道怎么回事就来求助大家了。
代码如下,功能也就是将输入的I/Q数据进行低通滤波之后对滤波器输出数据进行截位:



  1. ch2lpf12m ch2lpf12m_inst0(
  2.         .clk(clk_122p88),
  3.         .reset_n(fir_reset_n),
  4.         .ast_sink_data(indata_i),
  5.         .ast_sink_valid(1'd1),
  6.         .ast_source_ready(1'd1),
  7.         .ast_sink_error(2'd0),
  8.         .ast_source_data(source_data_i),
  9.         .ast_sink_ready(ast_sink_ready_i),
  10.         .ast_source_valid(source_valid_i),
  11.         .ast_source_error()
  12.         );

  13. ch2lpf12m ch2lpf12m_inst1(
  14.         .clk(clk_122p88),
  15.         .reset_n(fir_reset_n),
  16.         .ast_sink_data(indata_q),
  17.         .ast_sink_valid(1'd1),
  18.         .ast_source_ready(1'd1),
  19.         .ast_sink_error(2'd0),
  20.         .ast_source_data(source_data_q),
  21.         .ast_sink_ready(ast_sink_ready_q),
  22.         .ast_source_valid(source_valid_q),
  23.         .ast_source_error()
  24.         );

  25. assign source_data_i_r0 = (source_data_i[34]==1'b0)?(source_data_i+35'h10000):(source_data_i+35'h0ffff);
  26. assign source_data_q_r0 = (source_data_q[34]==1'b0)?(source_data_q+35'h10000):(source_data_q+35'h0ffff);

  27. //对实部信号、虚部信号进行采样输出

  28. always @(posedge clk_122p88)
  29. begin
  30.         if(source_valid_i == 1'b1)
  31.                 begin
  32.                         source_data_i_r <= {source_data_i_r0[34],source_data_i_r0[31:17]};
  33.                         source_data_q_r <= {source_data_q_r0[34],source_data_q_r0[31:17]};
  34.                 end
  35.         else
  36.                 begin
  37.                         source_data_i_r <= source_data_i_r;
  38.                         source_data_q_r <= source_data_q_r;
  39.                 end
  40. end


复制代码
对应的testbench如下,产生一个122.88M的时钟信号及输入的I/Q数据信号indata_i/q:



  1. parameter cycle = 8138;

  2. initial                                                
  3. begin         
  4.                 clk_122p88 = 1'b0;
  5.                 reset_n = 1'b0;
  6.                 # 20000 reset_n = 1'b1;                                                           
  7. $display("Running testbench");                       
  8. end                                                   

  9. always  #(cycle/2)        clk_122p88 = ~clk_122p88;

  10. initial
  11. begin
  12.         forever
  13.                 begin
  14.                         @(posedge clk_122p88);
  15.                         indata_i = $random;
  16.                         indata_q = $random;
  17.                 end                                             
  18. end


复制代码
仿真结果非常奇怪,输出source_data_i/q_r仍然携带了一些无用的信号,但是明明源代码中使用source_valid_i对滤波器输出数据进行了采样,可是没起到什么作用。并且那些无效的数据也不是在时钟上升沿变化的。

代码中以时钟沿为触发条件对输出source_data_i/q_r信号进行赋值,可仿真图形中显示输出的该信号数据值的变化并不是在时钟上升沿(也不在下降沿),似乎和时钟没什么关系。为此我在testbench中将截位前的数据接出来在testbench中,以时钟上升沿为触发条件进行截位,查看波形一切正常。但是对应的那个always快放在源文件中进行仿真,输出的时序图却出现了异常(不是偶然现象,我试过很多次了,真是见鬼了)

不方便上图,要不然大家可以更清楚些了,不知道我有没有把结果描述清楚。
有图了,如下:

仿真时序

仿真时序
 楼主| 发表于 2015-10-15 16:12:44 | 显示全部楼层
有没有哪位大神给我解释下啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-22 22:43 , Processed in 0.022496 second(s), 12 queries , Gzip On, Redis On.

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