CLK 100K的方波。 BUFY1 STD_logic_VECTOR(13 DOWNTO 0);
OUT 为脉冲输出口,BUFY1减两次,输出一个脉冲。REST为输入口。
不停的记数,当BUFY1为空,REST为高,停止记数。但是,我频繁的停止记数,OUT输出口的脉冲数不准。有多有少。 为何????求高人指点,我都快没信心了!!!!
PROCESS(CLK,BUFY1)
BEGIN
IF BUFY1="00000000000000" THEN
IF REST='1' THEN
BUFY1<="00000000000000";
ELSE
BUFY1<="00000011001000"; --200
END IF;
ELSIF CLK' EVENT AND CLK='1' THEN
BUFY1<=BUFY1-1;
XAXA2<=NOT XAXA2;
END IF;
END PROCESS;
PROCESS(CLK,REST)
BEGIN
IF REST='0' THEN
BUFY1<="00000011001000"; --200
XAXA2<='0'
ELSIF CLK' EVENT AND CLK='1' THEN
IF(BUFY1 = "00000000000000")
BUFY1 = "00000000000000";
XAXA2<='0';
ELSE
BUFY1<=BUFY1-1;
XAXA2<=NOT XAXA2;
END IF;
END IF;
END IF;
END PROCESS;
PROCESS(CLK,REST)
BEGIN
IF REST='0' THEN
BUFY1<="00000011001000"; --200
XAXA2<='0'
ELSIF CLK' EVENT AND CLK='1' THEN
IF(BUFY1 = "00000000000000")
BUFY1 = "00000000000000";
XAXA2<='0';
ELSE
BUFY1<=BUFY1-1;
XAXA2<=NOT XAXA2;
END IF;
END IF;
END IF;
END PROCESS;
PROCESS(CLK,BUFY1) --异步??
BEGIN
IF BUFY1="00000000000000" THEN
IF REST='1' THEN
BUFY1<="00000000000000";
ELSE
BUFY1<="00000011001000"; --200
END IF;
ELSIF CLK' EVENT AND CLK='1' THEN
BUFY1<=BUFY1-1;
XAXA2<=NOT XAXA2;
END IF;
END PROCESS;
OUT<=XAXA2;
PROCESS(CLK,BUFY1) --同步??
BEGIN
IF CLK' EVENT AND CLK='1' THEN
IF BUFY1="00000000000000" THEN
IF REST='1' THEN
BUFY1<="00000000000000";
ELSE
BUFY1<="00000011001000"; --200
END IF;
ELSE
BUFY1<=BUFY1-1;
XAXA2<=NOT XAXA2;
END IF;
END IF;
END PROCESS;
PROCESS(CLK) --同步??
BEGIN
IF CLK' EVENT AND CLK='1' THEN
IF BUFY1="00000000000000" THEN
IF REST='1' THEN
BUFY1<="00000000000000";
ELSE
BUFY1<="00000011001000"; --200
XAXA2<=‘0’;
END IF;
ELSE
BUFY1<=BUFY1-1;
XAXA2<=NOT XAXA2;
END IF;
END IF;
END PROCESS;
OUT<=XAXA2;
在时钟信号CLK的上升沿,假如BUFY1=0 AND REST=‘1’ 停止记数;
假如BUFY1=0 AND REST=‘0’ 计数器输入初值200;
假如BUFY1/=0 计数器减一;
在时钟信号CLK的上升沿,假如BUFY1/=0,REST不论为高还是低,都不应该影响 BUFY1的记数。但是我如果频繁的改变REST,计数器输出的值就不对。这如何解释???
PROCESS(CLK,REST)
BEGIN
IF REST='0' THEN
BUFY1<="00000011001000"; --200
XAXA2<='0'
ELSIF CLK' EVENT AND CLK='1' THEN
IF BUFY1 /= "00000000000000" THEN
BUFY1<=BUFY1-1;
XAXA2<=NOT XAXA2;
END IF;
END IF;
END IF;
END PROCESS;