为什么功能仿真能实现的到了时序仿真波形就出错了呢?
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity test2 is
port(x,clk:in std_logic;
sign,absval: out std_logic
);
end test2;
architecture behave of test2 is
signal b:std_logic:='1';
signal a:std_logic:='1';
begin
process(clk)
begin
if clk'event and clk='1' then
b<=x;
end if;
end process;
process(clk)
begin
if clk'event and clk='0'then
absval<=(a xor x);
sign<=(b xor x);
a<=x;
end if;
end process;
上面是我写的一个超前滞后异或门鉴相器,为什么功能仿真时sign,absval的波形是对的,而到了时序仿真时波形就出错了呢?请大家帮帮忙,给解答一下
为什么功能仿真能实现的到了时序仿真波形就出错了呢?
时序仿真时都是有时延的
为什么功能仿真能实现的到了时序仿真波形就出错了呢?
很有可能是没有初始值所以产生不定态的问题。
signal b:std_logic:='1';
signal a:std_logic:='1';
两句在后仿真时赋初值是被忽略的。
为什么功能仿真能实现的到了时序仿真波形就出错了呢?
我对照了一下波形,前两个sign和absval的波形是对的,可是以后的波形就是有对有错的,是不是和初值就没关系了呢?怎么能解决这个时延问题呢?
为什么功能仿真能实现的到了时序仿真波形就出错了呢?
你引入的时钟是多少M的?
用的什么器件?
为什么功能仿真能实现的到了时序仿真波形就出错了呢?
器件APEX20K,时钟是16兆的
为什么功能仿真能实现的到了时序仿真波形就出错了呢?
应该加复位初试化电路
为什么功能仿真能实现的到了时序仿真波形就出错了呢?
加一个reset给a,b赋初值?
为什么功能仿真能实现的到了时序仿真波形就出错了呢?
一般时序仿真时波形有延迟时如何处理呢?
为什么功能仿真能实现的到了时序仿真波形就出错了呢?
你这个电路时钟上下沿都用了,加约束的时候要体现出来,要不就干脆当成32M来约束。
其实要实现的功能就是时钟下降沿时的datain和前一个上升沿的datain做异或得sign,和前一个时钟下降沿做异或得absval信号,怎么改才能时序仿真时能实现呢
为什么功能仿真能实现的到了时序仿真波形就出错了呢?
感觉你的程序应该没有问题,看样子是布线引起的,所以要你加点约束条件,让时钟在32M或更高的时候能工作。
为什么功能仿真能实现的到了时序仿真波形就出错了呢?
为了仿真的目的,最好设计中的每个FF都设有复位端。
另外,你可以用ModelSim的DataFlow来查找一下到底在哪个中间信号处出现了问题,然后再想办法。
为什么功能仿真能实现的到了时序仿真波形就出错了呢?
怎么加约束条件呢,不是很懂的说
为什么功能仿真能实现的到了时序仿真波形就出错了呢?
我仔细看了下各个信号的波形,感觉是由于时钟的上升沿和下降沿都用了以后,在沿上触发的信号有时就要延后一个沿才变,到时信号不稳,怎么解决呢?
为什么功能仿真能实现的到了时序仿真波形就出错了呢?
像是延时问题引起的,altera的QII我不太熟悉,你可以问问atuhappy看看怎么加约束。
为什么功能仿真能实现的到了时序仿真波形就出错了呢?
先看一下a、b信号的波形
为什么功能仿真能实现的到了时序仿真波形就出错了呢?
鉴相器?
那应该是x与clk异或吧
为什么功能仿真能实现的到了时序仿真波形就出错了呢?
我也是在网上看到的这个鉴相器,要实现的目的就是当时钟下降沿到时的datain和上个时钟上升沿的datain做异或给sign信号,和上个时钟下降沿的datain做异或给absval信号,怎么写程序能实现这个功能呢?
为什么功能仿真能实现的到了时序仿真波形就出错了呢?
"下降沿到时的datain"在哪里
你把x先经过一个下降沿触发器
这似乎不是鉴相器,好像是判断超前滞后的
为什么功能仿真能实现的到了时序仿真波形就出错了呢?
这个就是超前滞后鉴相器