speaker1.vhd

来自「利用VHDL编写的电子琴发生器」· VHDL 代码 · 共 48 行

VHD
48
字号
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY Speaker1 IS
    PORT (  clk1   : IN STD_LOGIC;
             Tone1 : IN INTEGER RANGE 0 TO 16#7FF#;
             SpkS  : OUT STD_LOGIC  );
END;
ARCHITECTURE one OF Speaker1 IS
    SIGNAL   PreCLK , FullSpkS : STD_LOGIC;
    BEGIN
 DivideCLK : PROCESS(clk1)
        VARIABLE Count4 : INTEGER RANGE 0 TO 15;
    BEGIN
        PreCLK <= '0';       -- 将CLK进 11分频,PreCLK为C L 11K 6分频
        IF Count4 > 11  THEN  
            PreCLK <= '1';
            Count4 := 0;
        ELSIF clk1'EVENT AND clk1 = '1' THEN
            Count4 := Count4 + 1;            
        END IF;
    END PROCESS;
    GenSpkS : PROCESS(PreCLK, Tone1)
        VARIABLE Count11 : INTEGER RANGE 0 TO 16#7FF#;
BEGIN            -- 11位可预置计数器
        IF PreCLK'EVENT AND PreCLK = '1' THEN
            IF   Count11 = 16#7FF# THEN
                Count11 := Tone1;
                FullSpkS <= '1';                
            ELSE
                Count11 := Count11 + 1;
                FullSpkS <= '0';                
            END IF;
        END IF;
    END PROCESS;
    DelaySpkS : PROCESS(FullSpkS)
        VARIABLE Count2 : STD_LOGIC;
BEGIN                 -- 将输出再进行2分频,将脉冲展宽,以使扬声器有足够功率发音
        IF FullSpkS'EVENT AND FullSpkS = '1' THEN
            Count2 := NOT Count2;
            IF Count2 = '1' THEN  SpkS <= '1';
            ELSE                  SpkS <= '0';
            END IF;
        END IF;
    END PROCESS;
END;


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?