一共要设计这九个模块,并将这几个模块例化为元件,并用信号线连接起来就行了,重点是要理解并看懂原理图,原理图是我自己画的,利用RTL也是可以看那个电路图的只是,我是在学校实验室做的电脑上面没有安装相应的软件,有问题问我哈,点个关注呗,最好三连哈哈!
我们这个课老师最后让硬件演奏的是黄版本的歌曲梁祝伴奏。
设计模块说明:
模块一(PLL20):锁相环电路。输出10MHZ频率的信号。利用Quartus内部的向导去设置就行了。
模块二(CNT10T):10进制的计数器。把10Mhz的信号转变为1Mhz的信号。
模块三(CNT2_18T):2的18次方进制的计数器。把1Mhz的信号转变为4hz的信号。
模块四(CNT38T):138进制的计数器。作为音符ROM的地址发生器。
模块五(MUSIC):存放乐谱的ROM。XXX.mif.这种后缀文件可由记事本得到或者Quartus自带的mif编辑器得到。利用Quartus内部的向导去设置就行了。
模块六(F_code):音符译码器。
模块七(SPKER(Quartus是不区分大小写的)):输出音符频率的数控分频器。
模块八(Decl7s):让数码管显示当时具体演奏的是那个音符。
模块九(CNT2T):分频电路·2进制的计数器。
u1: pll1 PORT MAP(inclk0=>CLK_20,c0=>net1); u2:CNT10T PORT MAP( CO1=>net1,Q=>net2); u3:CNT2_18T PORT MAP(CO2=>net2,Q=>net3); u4:CNT138T PORT MAP(CLK=>net3,Q=>net4); u5:music1 PORT MAP(address=>net4,clock =>net3,q=>net5); u6:F_CODE PORT MAP( INX=>net5,TO1=>net6,CODE=>net7 ); u7:spker PORT MAP(clk =>net2,Tn=>net6,SpkS=>net8); u8:Decl7s PORT MAP(A=>net7,LED7s=>LED7S); u9:CNT2T PORT MAP(CO3=>net8,Q=>SPK_KX);
顶层文件代码
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY music IS PORT(CLK_20 :IN STD_LOGIC; SPK_KX:OUT STD_LOGIC; LED7S: OUT STD_LOGIC_VECTOR(0 TO 6)); END music; ARCHITECTURE behav OF music IS COMPONENT CNT138T PORT( CLK:in std_logic; Q:out std_logic_vector(0 to 7)); END COMPONENT; COMPONENT CNT10T PORT( CO1:in std_logic; Q:out std_logic); END COMPONENT; COMPONENT CNT2_18T PORT( CO2:in std_logic; Q:out std_logic); END COMPONENT; COMPONENT CNT2T PORT( CO3:in std_logic; Q:out std_logic); END COMPONENT; COMPONENT F_CODE PORT(INX: IN STD_LOGIC_VECTOR (0 TO 3); CODE: OUT STD_LOGIC_VECTOR(0 TO 3); H:OUT STD_LOGIC; TO1:OUT STD_LOGIC_VECTOR(0 TO 10)); END COMPONENT; COMPONENT spker PORT(clk:IN STD_LOGIC; Tn:IN STD_LOGIC_VECTOR(0 TO 10); SpkS:OUT STD_LOGIC); END COMPONENT; COMPONENT pll1 PORT ( inclk0 : IN STD_LOGIC := '0'; c0 : OUT STD_LOGIC ); END COMPONENT; COMPONENT music1 PORT ( address : IN STD_LOGIC_VECTOR (7 DOWNTO 0); clock : IN STD_LOGIC ; q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) ); END COMPONENT; COMPONENT Decl7s PORT(A:IN STD_LOGIC_VECTOR(3 DOWNTO 0); LED7s:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END COMPONENT; SIGNAL net1:std_logic; SIGNAL net2:std_logic; SIGNAL net3:std_logic; SIGNAL net4:STD_LOGIC_VECTOR (7 DOWNTO 0); SIGNAL net5:STD_LOGIC_VECTOR(0 TO 3); SIGNAL net6: STD_LOGIC_VECTOR(0 TO 10); SIGNAL net7:STD_LOGIC_VECTOR(0 TO 3); SIGNAL net8:std_logic; BEGIN u1: pll1 PORT MAP(inclk0=>CLK_20,c0=>net1); u2:CNT10T PORT MAP( CO1=>net1,Q=>net2); u3:CNT2_18T PORT MAP(CO2=>net2,Q=>net3); u4:CNT138T PORT MAP(CLK=>net3,Q=>net4); u5:music1 PORT MAP(address=>net4,clock =>net3,q=>net5); u6:F_CODE PORT MAP( INX=>net5,TO1=>net6,CODE=>net7 ); u7:spker PORT MAP(clk =>net2,Tn=>net6,SpkS=>net8); u8:Decl7s PORT MAP(A=>net7,LED7s=>LED7S); u9:CNT2T PORT MAP(CO3=>net8,Q=>SPK_KX); END behav;