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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

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

[求助] 用VCS对同一模块电路仿真时,时序图不一致的问题

[复制链接]
发表于 2021-1-20 16:59:37 | 显示全部楼层 |阅读模式

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

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

x
    我写了一个含有16个数据位宽为32的寄存器组的模块。下图是对该模块直接仿真的仿真图。
R.png

1

   上图1的仿真图,是在VCS中直接对该的模块进行仿真的图,其中WE信号是读写使能信号,当WE为高电平时,写使能有效;RW信号是写地址信号线,W信号是写数据信号线。下面的mem[15:0][31:0]是16个32位的寄存器组。在图1中,当读写使能信号位高电平(即写使能有效时),W信号(写数据信号线)上的数据在时钟的上升沿被写入了对应的RW信号(写地址信号线)指定的寄存器中了。
   下图2的仿真图,是把寄存器组模块作为子模块电路后,在VCS中对该子模块的仿真图,同样的,其中WE信号是读写使能信号,当WE为高电平时,写使能有效;RW信号是写地址信号线,W信号是写数据信号线。下面的mem[15:0][31:0]是16个32位的寄存器组。在图2中,寄存器组中写入数据的时序和图1相比,写入效果是:数据比地址慢了一拍有效的情况。
p.png

2

   上面的仿真时序图让我很疑惑,同样控制信号下,为什么数据写入情况不一样了呢?



 楼主| 发表于 2021-1-20 17:01:29 | 显示全部楼层
模块源码如下:
module Register_Bank #
(
  parameter DATA_WIDTH=32,
  parameter ADDRESS_WIDTH=4,
  parameter PIPE_DEPTH=16
)
(
  input CLK,
  input Reset,
  input [DATA_WIDTH-1:0]W,
  input [ADDRESS_WIDTH-1:0]RA,
  input [ADDRESS_WIDTH-1:0]RB,
  input [ADDRESS_WIDTH-1:0]RW,
  input WE,
  output [DATA_WIDTH-1:0]A,
  output [DATA_WIDTH-1:0]B
);

reg [DATA_WIDTH-1:0]mem[PIPE_DEPTH-1:0];
reg [DATA_WIDTH-1:0]A_reg;
reg [DATA_WIDTH-1:0]B_reg;


//RA port read
always@(posedge CLK or negedge Reset)
begin
  if(~Reset)
  begin
    A_reg<=0;
  end
  else
  begin
    if(~WE)
    begin
      A_reg<=mem[RA];
    end
  end
end

assign A=A_reg;

//RB port read
always@(posedge CLK or negedge Reset)
begin
  if(~Reset)
  begin
    B_reg<=0;
  end
  else
  begin
    if(~WE)
    begin
      B_reg<=mem[RB];
    end
  end
end

assign B=B_reg;

//Write port
always@(posedge CLK)
begin
  if(WE)
  begin
    mem[RW]<=W;
  end
end


endmodule
 楼主| 发表于 2021-1-20 21:26:24 | 显示全部楼层
解决了,是仿真激励信号不要在时钟沿跳变,相对时钟沿需要些许的延迟
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-12-26 13:53 , Processed in 0.133204 second(s), 8 queries , Gzip On, Redis On.

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