输出为什么比输入 滞后 好几个脉冲?
问个问题: 为什么 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 不仅有滞后,这是不是门电路的传输延迟啊?
但是不仅仅延迟,还有address 是连续递增的,但是 输出q 却是 0 ,1,2,7,4,5,6,……
为什么呢? 有没人知道啊? 得到别人的一些帮助,解答大概是:
1.延迟是由于使用了寄存器
2.出现那些Q!=address是由于仿真的时候 CLk太快了,用了10ns,后来改用25ns,就完全正确了。
我想可能是器件不支持那么快的频率吧 不知道这样解释是否正确
都变成自问自答了,呵呵 用功能仿真就不会有延时了!
门电路实现肯定有延时啦。看数电去。。
页:
[1]