yxm433 发表于 2009-8-30 14:50:59

输出为什么比输入 滞后 好几个脉冲?

问个问题: 为什么 q的输出比address 出现要滞后 好几个脉冲呢?
2.这个是我仿真“锯齿波”的仿真数据,但不知道为什么
会出现 q 跟address 不相等的情况,不知道是什么原因,下面是我的代码,(其中仿真时sig=3,)
http://cache.amobbs.com/bbs_upload782111/files_17/ourdev_476182.jpg
(原文件名:DDS.jpg)


源码:
module wave_data(address_data,sig_data,clk_data,sin_data,q_data);

input address_data;
inputsig_data;
input clk_data;
input sin_data;
output   reg q_data;
reg address,q;

//select different data to the q_data;
always @ (posedge clk_data)
begin
address <= address_data;
case (sig_data)
0: //SIN wave
q_data <= sin_data;
1: //TRI wave



if( !(address) )
begin
      q <= (address<<1) + {20'd0,12'd2048};
end
else if ( address ^ address )
begin
          q <= {19'd0,13'd6144}-(address<<1);
   end
   else
   begin
   q <= (address<<1)-{19'd0,13'd6144} ;
   end
   


2: //SQU wave

if (!address) q<={20'd0,12'd4095} ;
else q<=20'd0;

3: //SAW wave
q <= address;

4: //ANY wave
;
default: ;
endcase
q_data <= q;
end
endmodule

yxm433 发表于 2009-8-30 14:55:14

不仅有滞后,这是不是门电路的传输延迟啊?

但是不仅仅延迟,还有address 是连续递增的,但是 输出q 却是 0 ,1,2,7,4,5,6,……
为什么呢?

yxm433 发表于 2009-8-30 17:01:45

有没人知道啊?

yxm433 发表于 2009-8-31 13:02:30

得到别人的一些帮助,解答大概是:
1.延迟是由于使用了寄存器
2.出现那些Q!=address是由于仿真的时候 CLk太快了,用了10ns,后来改用25ns,就完全正确了。
我想可能是器件不支持那么快的频率吧

yxm433 发表于 2009-8-31 13:03:00

不知道这样解释是否正确

都变成自问自答了,呵呵

xu2006 发表于 2009-8-31 17:32:47

用功能仿真就不会有延时了!
门电路实现肯定有延时啦。看数电去。。
页: [1]
查看完整版本: 输出为什么比输入 滞后 好几个脉冲?