我正在重新学习VHDL。遇到一些问题后,我又回到了闹钟等小事。我猜想在Java等多年之后,我有一个基本的误解和错误的方法,而不是硬件。请告诉我关于我的一般问题的正确方向(通常指的是微不足道的情况,我使用的是Xilinx ISE和Spartan3,但我的问题与实际硬件无关)。
由于位切换,计数器在硬件(模拟)中产生毛刺。这是可以预料的。如何弥补设计中的缺陷? 例如过程中的一部分将是:
if rising_edge(clk_base) then if(set_time='1') if (sec_enable= '1') then sec1 <= sec1+1; if(sec1 = 59) then sec1<=0; end if; end if; ....
的处理之后,我写output_seconds < = SEC1;显然,在这个过程之外的非顺序(?)语句中,我总是直接在输出端口获得毛刺。有没有办法抑制这一点?某种通用的同步设置的所有端口?
创建日期时,day_enable来自时钟组件的时钟使能,就像sec_enable来自时钟分频器一样,我会有一个过程来计算日期和第30天(或31或.. 。取决于月份和闰年)的月份是< =月份+ 1,依此类推。我最初检查了if day_enable ='1'部分的天数,但仿真表明,如果我的时钟在闰年的2月28日开始,它仍然采用默认值(is_leap ='0'),因为结果的检查“if(year1 mod 4 = 0)”只适用于下一个周期。反之亦然30/31选择。如果在“如果rising_edge(clk_base)then”之后检查这个权限,那么它可以工作,但是如果天(以及因此几个月)很少改变,那么每检查一次X ns似乎就会过度。我的思想在哪里走了?
在我的脑海里,不知何故级联,整个事情就解决问题1和问题2,但我不知道,如果它实际上是这样做的方式,如果是这样,如何。避免刚刚描述的问题的标准做法是什么?我相信答案是相当微不足道的,但请在这里帮助我。
这实在是两个问题。你应该单独发布它们。 –
如果您的FPGA/IC输出它们,毛刺是个坏消息。毛刺会导致输出单元中的大晶体管迅速导通和关断,从而吸收过量电流并引起干扰。触发器的输出是_coherent_。也就是说,它不会产生小故障。因此,您应该始终直接从触发器驱动任何FPGA/IC的输出,而不是通过组合逻辑。 –
在你的例子中,你似乎直接从触发器驱动FPGA的输出。 'sec'将合成为触发器,因为在钟控过程中分配的任何信号都将合成为触发器_。如果执行_unconically_(即不是从其他条件语句内部执行),那么'output_seconds <= sec1;'行不会添加任何逻辑。 –