2007301686 发表于 2010-6-4 19:44:40

整数(1~255)模值占空比50%分频VHDL

代码内有详细注释

deepautumn 发表于 2010-6-9 18:54:00

学习中!support !

2007301686 发表于 2010-7-3 21:06:50

终于有人回帖了,O(∩_∩)O哈哈~

2007301686 发表于 2010-7-7 22:06:23

代码有点小问题,更改版为:
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
--整数分频器
entity DIVN is
        port(
                Clk,Rst        :instd_logic;--输入时钟和复位信号
                Data        :instd_logic_vector(7 downto 0);--分频倍数输入
                ClkOut        :out std_logic--分频时钟输出
                );
end DIVN;

architecture Behavior of DIVN is
        signal Mid        : std_logic_vector(7 downto 0);--分频倍数的一半,即偶数为N/2,奇数为(N-1)/2
        signal ClkUp,ClkDown : std_logic;--上升沿和下降沿分频信号
begin
        Mid<= '0'&Data(7 downto 1);--分频倍数的一半,相当于除2
        process(Clk,Rst)--上升沿分频进程
                variable Cnt1 : std_logic_vector(7 downto 0);--内部计数变量
        begin
                if(Rst='1')then--复位
                        Cnt1:=(others=>'0');
                        ClkUp<='0';
                elsif(Clk'event and Clk='1')then--上升沿
                        if(Cnt1<Mid)then--前半个分频周期
                                ClkUp<='1';
                        else
                                ClkUp<='0';--后半个
                        end if;

                        if(Cnt1=conv_integer(Data)-1)then
                                Cnt1:=(others=>'0');--计满清0
                        else
                                Cnt1:=Cnt1+1;--未计满加1
                        end if;
                end if;
        end process;
       
        process(Clk,Rst)--下降沿分频进程
                variable Cnt2 : std_logic_vector(7 downto 0);--内部计数变量
        begin
                if(Rst='1')then--复位
                        Cnt2:=(others=>'0');
                        ClkDown<='0';
                elsif(Clk'event and Clk='0')then--下降沿
                        if(Cnt2<Mid)then--前半个分频周期
                                ClkDown<='1';
                        else
                                ClkDown<='0';--后半个
                        end if;

                        if(Cnt2=conv_integer(Data)-1)then
                                Cnt2:=(others=>'0');--计满清0
                        else
                                Cnt2:=Cnt2+1;--未计满加1
                        end if;
                end if;
        end process;
       
        ClkOut <= ClkUp when Data(0)='0' else--偶数时直接输出上升沿分频信号
                          clk        when Data=1               else--分频系数为1时直接输出时钟信号
                          ClkUp or ClkDown;--计数分频时为保证50%占空比需上升下降沿分频信号进行或运算
end Behavior;

zhangyukun 发表于 2019-11-27 09:55:14

整数(1~255)模值占空比50%分频VHDL

fpga_feixiang 发表于 2019-12-1 22:28:20

~~~~~~~~~~~~~~~~~~~~~~~~~~

嘿哈嘿哈哈 发表于 2022-11-30 13:34:19

整数(1~255)模值占空比50%分频VHDL

雷1314521景 发表于 2022-11-30 22:58:14

整数(1~255)模值占空比50%分频VHDL
http://www.fpgaw.com/forum.php?mod=viewthread&tid=2279&fromuid=59831
(出处: fpga论坛|fpga设计论坛)

508482294 发表于 2022-12-5 15:24:32

整数(1~255)模值占空比50%分频VHDL
页: [1]
查看完整版本: 整数(1~255)模值占空比50%分频VHDL