[modelsim]

modelsim仿真跨时钟域仿真 出现的问题

[复制链接]
1260|7
手机看帖
扫描二维码
随时随地手机跟帖
XLDZZ|  楼主 | 2014-2-12 22:46 | 显示全部楼层
没人回答我的问题吗

使用特权

评论回复
XLDZZ|  楼主 | 2014-2-13 14:00 | 显示全部楼层
在quartus下是可以出仿真波形的 怪了

quartus

quartus

使用特权

评论回复
XLDZZ|  楼主 | 2014-2-13 15:21 | 显示全部楼层
这个是代码 不知道哪里有问题

module brg(
             SYSCLK,
                         RST_B,
                         ENA,
                         IOW,
                         IOR,
                         ADD,
                         WR,
                         ADDR
                        );
//====================================================================
//           IO定义
//====================================================================
input        SYSCLK;
input        RST_B;
input        ENA;
input        IOW;
input        IOR;
input[8:0]   ADD;
output[1:0]  WR;
output[8:0]  ADDR;
//=====================================================================
//           IO类型定义
//=====================================================================
wire         SYSCLK;
wire         RST_B;
wire         ENA;
wire         IOW;
wire         IOR;
wire[8:0]    ADD;
reg[1:0]     WR;
reg[8:0]     ADDR;
//======================================================================
//          逻辑描述
//======================================================================
parameter IDLE=  2'b00;
parameter READ=  2'b01;
parameter WRITE=  2'b10;

always@(negedge ENA or negedge RST_B)
begin
  if(!RST_B)
   ADDR<=0;
  else
   ADDR<=ADD;
end
reg[4:0] CNT;                 //ENA信号时间滤波
reg[4:0]CNT_N;
reg EN_FLAG;                 //ENA有效信号
reg EN_FLAG_N;
always@(posedge SYSCLK or negedge RST_B)
begin
  if(!RST_B)
   CNT<=0;
  else
   CNT<=CNT_N;
end

always@(*)
begin
  if(CNT=='d10)
   CNT_N<=0;
  else if(!ENA)
   CNT_N<=CNT+1'b1;
  else if(ENA)
   CNT_N<=0;
  else
   CNT_N<=CNT;
end

always@(posedge SYSCLK or negedge RST_B)
begin
  if(!RST_B)
   EN_FLAG<=0;
  else
   EN_FLAG<=EN_FLAG_N;
end

always@(*)
begin
  if(ENA)
   EN_FLAG_N<=0;
  else if(CNT=='d10)
   EN_FLAG_N<=1'b1;
  else
   EN_FLAG_N<=EN_FLAG;
end

always@(posedge SYSCLK or negedge RST_B)
begin
  if(!RST_B)
   WR<=IDLE;
  else if((!IOW)&(IOR)&(EN_FLAG))
   WR<=WRITE;
  else if((IOW)&(!IOR)&(EN_FLAG))
   WR<=READ;
  else
   WR<=IDLE;
end   

endmodule

使用特权

评论回复
mhanchen| | 2014-2-13 20:03 | 显示全部楼层
modelsim是没办法进行跨时钟域仿真的,它不支持触发器从亚稳态恢复的那个状态,所以你用它进行跨时钟域的仿真一点儿意义都没有

使用特权

评论回复
GoldSunMonkey| | 2014-2-17 21:18 | 显示全部楼层
有X不一定是跨时钟域的问题,也可能是输入的激励本身有问题

使用特权

评论回复
GoldSunMonkey| | 2014-2-17 21:18 | 显示全部楼层
慢慢查找原因

使用特权

评论回复
XLDZZ|  楼主 | 2014-2-28 16:04 | 显示全部楼层
谢了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

64

主题

182

帖子

0

粉丝