本帖最后由 青城山下 于 2016-4-15 09:18 编辑
用modelsim仿真的时候输出正常,ISE编译也很正常,但是在综合布线的时候出现error; ERROR:HDLCompiler:76- "E:\fpga_ad\ad\l.vhd" Line 716: statementis not synthesizable since it does not hold its value under NOT(clock-edge)condition。 这个错误主要是由于一个process不可以有两个时钟触发,产生竞争冒险,综合时会报错。 因此,这就要求我们在写程序之前,要把所有的信号都拼尽全力的用不多于一个时钟来驱动,当然不用时钟也是可以的。同时也引申出一点,就是一个进程的敏感表表示的是进程间的驱动关系,这个需要极其认真地考虑,要弄清楚进程间究竟是用什么通信的,尤其牵扯到时钟的时候,到搞懂究竟是哪个时钟触发了信号。切不可随意添加信号,在仿真时可能问题不大,但是综合的时候可能会有大问题。 这个从物理上也好理解,一个又边沿触发的信号物理上就是用一个D触发器实现的,无论这个触发信号是变化很长时间还是只变化一次,只要是牵扯到检测边沿,就需要一个D触发器。而一个信号只能对应一个D触发器,一个D触发器只能由一个时钟驱动,所以以上语句是无法综合的。也就是说,两个时钟同时触发的D触发器现阶段无法实现。 处理方法:根据Xilinx论坛上的建议,最好的方法就是采用增加分频器的方法来取代触发边沿信号。或者尽可能的列举情况,采用case语句来处理。
|