占空比50%的5分频 记事续 20110920
今天早上一起床就觉得昨天自己关于的分频器下的结论很不妥,原因是如果同时用到上升沿和下降沿那么可不可能决绝这个问题呢?于是试了一下用同时用两个触发沿,但是简单的让一个寄存器同时上升沿和下降沿触发,综合无法通过,实际中应该没有这种触发器,钟师兄提议试一下用门电路做延时,比如用两个非门之类的,试了一下,结果非门都被综合器优化掉了,很纠结啊,然而后来还是放弃了这种想法,因为这种延时不可靠,不是最好的方法。
然后张同学早上到实验室说了他的想法,就是用上升沿和下降沿各做一个2:3的分频器,再把两者或以下即可,这时大家豁然开朗。的确要想做到50%的占空比两个沿都得用,下面简单列了一下代码。
LIBRARY IEEE;
USE ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity sig1 is
port(
clk :IN STD_LOGIC;
rst :IN STD_LOGIC;
y :OUT STD_LOGIC
);
end sig1;
ARCHITECTURE fpga OF sig1 IS
SIGNAL sum,sum2 : STD_LOGIC_VECTOR(2 DOWNTO 0);
BEGIN
PROCESS(rst, clk)
BEGIN
IF (rst = '1') THEN
sum <= "000";
ELSIF(clk'event and clk = '1') THEN
IF (sum ="100") THEN
sum <="000";
ELSE
sum <= sum + 1;
END IF;
END IF;
END PROCESS;
PROCESS(rst, clk)
BEGIN
IF (rst = '1') THEN
sum2 <= "000";
ELSIF(clk'event and clk = '0') THEN
IF (sum2 ="100") THEN
sum2 <="000";
ELSE
sum2 <= sum2 + 1;
END IF;
END IF;
END PROCESS;
y <= sum(1) or (sum2(1));
END fpga ;
再后来,上网搜索了一下,发现了一篇不错的文章《用verilog语言写的任意整数的分频器》, 来着cnblog。这篇文章对分频器的解释就更清楚了,拜读之。
http://www.cnblogs.com/fpga-study/archive/2010/10/18/1854642.html