串行输出问题请教
时间:10-02
整理:3721RD
点击:
[这个贴子最后由showting在 2005/02/24 04:15pm 第 1 次编辑]
(图片看不清可以点击后再看)
如图:sda 是串行输出,希望在特定的时间输出特定的数据,我的实现方法是很普通的方法,就是用一个计数器couout来计时钟,在couout计数器计数为1,2,3的时候输出为0,计到4,5时输出为1,后面的跟这个一样。但是在图中可以看到波形有很多的尖峰,应该是竞争冒险引起的,我想问一下怎么能避免这样的尖峰呢?
(图片看不清可以点击后再看)
如图:sda 是串行输出,希望在特定的时间输出特定的数据,我的实现方法是很普通的方法,就是用一个计数器couout来计时钟,在couout计数器计数为1,2,3的时候输出为0,计到4,5时输出为1,后面的跟这个一样。但是在图中可以看到波形有很多的尖峰,应该是竞争冒险引起的,我想问一下怎么能避免这样的尖峰呢?
串行输出问题请教
因为你用组合逻辑输出sda,加一个寄存器就行了。
通用法则:模块输出采用寄存器。
串行输出问题请教
你用的逻辑分析仪吧?不准的。
串行输出问题请教
同意arens的说法,不是用的逻辑分析仪
串行输出问题请教
eddsos 是说 嵌入式逻辑分析仪的结果不准吗?
串行输出问题请教
毛刺是combinational电路里不可避免的现象
串行输出问题请教
用寄存器怎么做?
串行输出问题请教
always@(posedge rst_n or posedge clk)
begin
if (!rst_n )sda_out<=1'b0;
elsesda_out<=sda;
end
串行输出问题请教
有点得寸进尺了,不过还是想问一下能用CHDL语言描述一下吗?谢谢了
串行输出问题请教
process(clk,rst)
begin
if rst = '0' then
sda_out <= '0';
elsif clk'event and clk='1';
sda_out <= sda;
end if;
end process;
但是注意这种方法会让你的时序延迟一个时钟。
延迟一个时钟可以接受,刚才仿真过了,效果挺好 谢谢,非常感谢