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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1536|回复: 2

[求助] 紧急求助,Modelsim仿真时候遇到的奇怪问题,现象简单,但是没法解释

[复制链接]
发表于 2013-10-31 15:42:06 | 显示全部楼层 |阅读模式

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

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

x

本人在仿真Vhdl代码时,遇到了问题,希望高手解答啊!!!谢谢

以下时在仿真时候遇到的问题和现象,请耐心看完,如果您没有耐心,可以直接跳到最后的一段话和附图。

1. 粉色框所示,Wr_rd_cnt应该在Ddr_dline_cnt拉高一个cycle后才会+1,结果如图所示,在拉高的同时就已经+1了。这段程序如下:

Process(Rst,Clk)

begin


if Rst = '1' then


Wr_rd_cnt <= (Others=>'0');


elsif rising_edge(Clk) then


if State_start = '1' then


Wr_rd_cnt <= (Others=>'0');


elsif
Ddr_dline_we = '1' or Ddr_dline_rd = '1' then

        
Wr_rd_cnt <= Wr_rd_cnt + 1;


end if;


end if;

end Process;

同样的在Ddr_dline_rd的驱动下,Wr_rd_cnt是没有问题的(见第二个小图)。


right.bmp

2. 蓝色框所示,Ddr_dline_data[ 63:0]应该在一个cycle以后赋给Ping_0_din_a,结果同样是没有延迟。代码如下,

Process(Rst,Clk)

begin


if Rst = '1' then


Ping_0_din_a <= (Others=>'0');


Ping_1_din_a <= (Others=>'0');


Ping_2_din_a <= (Others=>'0');


Ping_3_din_a <= (Others=>'0');


Pang_0_din_a <= (Others=>'0');


Pang_1_din_a <= (Others=>'0');


Pang_2_din_a <= (Others=>'0');


Pang_3_din_a <= (Others=>'0');


elsif rising_edge(Clk) then


if Ping_ram_en = '1' then

         Ping_0_din_a <= Ddr_dline_wdata(63 downto 0);


Ping_1_din_a <= Ddr_dline_wdata(127 downto 64);


Ping_2_din_a <= Ddr_dline_wdata(191 downto 128);


Ping_3_din_a <= Ddr_dline_wdata(255 downto 192);


elsif Pang_ram_en = '1' then


Pang_0_din_a <= Ddr_dline_wdata(63 downto 0);


Pang_1_din_a <= Ddr_dline_wdata(127 downto 64);


Pang_2_din_a <= Ddr_dline_wdata(191 downto 128);


Pang_3_din_a <= Ddr_dline_wdata(255 downto 192);


else


Ping_0_din_a <= (Others=>'0');


Ping_1_din_a <= (Others=>'0');


Ping_2_din_a <= (Others=>'0');


Ping_3_din_a <= (Others=>'0');



Pang_0_din_a <= (Others=>'0');


Pang_1_din_a <= (Others=>'0');


Pang_2_din_a <= (Others=>'0');


Pang_3_din_a <= (Others=>'0');


end if;


end if;

end Process;


3. 而另一个信号Ping_1_we_a可以正确传递,比Ddr_dline_we延迟一个始终周期,如上图绿色框所示。代码如下。

Dpram_we
<= "0001" when (Ddr_dline_we = '1' and Range_write = '1' and Wr_rd_cnt(6 downto 5) = "00") else


"0010" when (Ddr_dline_we = '1' and Range_write = '1' and Wr_rd_cnt(6 downto 5) = "01") else


"0100" when (Ddr_dline_we = '1' and Range_write = '1' and Wr_rd_cnt(6 downto 5) = "10") else


"1000" when (Ddr_dline_we = '1' and Range_write = '1' and Wr_rd_cnt(6 downto 5) = "11") else


"1111" when (Ddr_dline_we = '1' and Azimuth_write = '1') else


"0000";

Process(Rst,Clk)

begin


if Rst = '1' then


Ping_0_we_a_i <= "0";


Ping_1_we_a_i <= "0";


Ping_2_we_a_i <= "0";


Ping_3_we_a_i <= "0";



Pang_0_we_a_i <= "0";


Pang_1_we_a_i <= "0";


Pang_2_we_a_i <= "0";


Pang_3_we_a_i <= "0";


elsif rising_edge(Clk) then


if Ping_ram_en = '1' then

         Ping_0_we_a_i <= Dpram_we(0 downto 0);


Ping_1_we_a_i <= Dpram_we(1 downto 1);


Ping_2_we_a_i <= Dpram_we(2 downto 2);


Ping_3_we_a_i <= Dpram_we(3 downto 3);


elsif Pang_ram_en = '1' then


Pang_0_we_a_i <= Dpram_we(0 downto 0);


Pang_1_we_a_i <= Dpram_we(1 downto 1);



Pang_2_we_a_i <= Dpram_we(2 downto 2);


Pang_3_we_a_i <= Dpram_we(3 downto 3);


else


Ping_0_we_a_i <= "0";


Ping_1_we_a_i <= "0";


Ping_2_we_a_i <= "0";


Ping_3_we_a_i <= "0";



Pang_0_we_a_i <= "0";


Pang_1_we_a_i <= "0";


Pang_2_we_a_i <= "0";


Pang_3_we_a_i <= "0";


end if;


end if;

end Process;

Ping_0_we_a <= Ping_0_we_a_i;

4. 其中的Ddr_dline_weDdr_dline_data[ 255:0]为模块端口输入,信号由另一个模块中通过读fifo的数据产生。

具体程序见附件RAM_CTRL_PORT_A.vhdRD_DDR.vhd。两个模块各自仿真时没有错误,夹杂别的模块一起仿真时候就会产生错误,并且每次都是这个位置。驱动时钟也是同一个。

5. 我在RAM_CTRL_PORT_A.vhd中将输入信号Ddr_dline_we和Ddr_dline_wdata用时钟打了一拍,仿真出来结果却没有相应的延迟一个Cycle,Ddr_dline_we和Ddr_dline_we_d完全一致,Ddr_dline_wdata和Ddr_dline_wdata_d也完全一致。


delay无效.bmp

error.bmp
发表于 2013-11-1 14:21:40 | 显示全部楼层
本帖最后由 gmm.dl.cn 于 2013-11-1 14:26 编辑

回应第一个问题:“Wr_rd_cnt应该在Ddr_dline_we拉高一个cycle后才会+1“  你这个认识好像不对吧。在Ddr_dline_we拉高后的第一个时钟上升沿,Wr_rd_cnt+1,而不一定是一个cycle。由图可见,你的Ddr_dline_we和Wr_rd_cnt应该不是同一个时钟域。建议你把信号Ddr_dline_we用这个时钟打一拍,然后再用同一个时钟域的信号。
发表于 2014-1-2 15:40:33 | 显示全部楼层
没有看懂,呵呵。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-6-1 23:31 , Processed in 0.032578 second(s), 13 queries , Gzip On, Redis On.

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