理工大学学士学位论文
说明:输入信号位CLR和CLK,当CLR=0时赋初值,否则当CLK上升沿到来时进行环形移位,以实现节拍发生器功能。
2. VHDL源程序 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTUTY COUNTER IS
PORT(CLK,CLR:IN STD_LOGIC;
T0,T1,T2,T3,T4,T5,T6,T7:OUT_LOGIC); END COUNTER;
ARCHITECTURE A OF COUNTER IS
SIGNAL TEMP:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN
T0<=TEMP(0); T1<=TEMP(1); T2<=TEMP(2); T3<=TEMP(3); T4<=TEMP(4); T5<=TEMP(5); T6<=TEMP(6); T7<=TEMP(7); PROCESS(CLKCLR) BEGIN
IF(CLR=’0’)THEN TEMP(0)<=’1’; TEMP(1)<=’0’; TEMP(2)<=’0’; TEMP(3)<=’0’;
22
理工大学学士学位论文
TEMP(4)<=’0’; TEMP(5)<=’0’; TEMP(6)<=’0’; TEMP(7)<=’0’;
ELSIF(CLK’EVENT AND CLK=’1’)THEN
TEMP(0)<=TEMP(7); TEMP(1)<=TEMP(0); TEMP(2)<=TEMP(1); TEMP(3)<=TEMP(2); TEMP(4)<=TEMP(3); TEMP(5)<=TEMP(4); TEMP(6)<=TEMP(5); TEMP(7)<=TEMP(6); END IF; END PROCESS; END A;
3.节拍发生器仿真波形
23
理工大学学士学位论文
图3.9 节拍发生器仿真波形图
波形分析:根据输入的时钟信号以8个时钟周期为一个大周期发生一个节拍脉冲,从T0到T7依次循环发生,结果如图3.9所示,节拍发生器模块功能设计成功。 3.5.5 指令寄存器模块IR和指令译码器
说明:指令寄存器IR用来保存当前正在执行的一条指令,如果是操作码就送到指令译码器进行译码。
1.逻辑框图
24
理工大学学士学位论文
开始CLK=1NYNIIR=0Y输入指令代码REGQ=00111110YN输出LDREGQ=11100110YNY输出ADDREGQ=01110110输出HALTNNULL结束
图3.10 指令寄存器模块程序流程图
说明:当执行一条指令时,先把它从主存储器中取到数据寄存器中,然后在传送到指令寄存器。如果IR中储存的是操作码LD00111110,ADD11100110,HALT01110110,译码器就将操作码译成相应的操作指令LD,ADD,HALT。
25
理工大学学士学位论文
2.VHDL源程序 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY IR IS
PORT(DATA_IN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); IIR:IN STD_LOGIC; CLK:IN STD_LOGIC;
LD,ADD.HALT:OUT STD_LOGIC); END IR;
ARCHITECTURE A OF IR IS
SIGNAL REGQ:STD_LOGIC_VECTOR(7 OWNTO 0); BEGIN
PROCESS(CLK,IIR) BEGIN
IF(CLK’EVENT AND CLK=’1’)THEN IF(IIR=’0’)THEN REGQ<=DATA_IN; END IF; END IF; END PROCESS; PROCESS(CLK,REGQ) BEGIN
CASE REGQ IS
WHEN‖00111110‖=>LD<=’1’;ADD<=’0’;HALT<=’0’; WHEN‖11000110‖=>LD<=’0’;ADD<=’1’;HALT<=’0’; WHEN‖01110110‖=>LD<=’0’;ADD<=’0’;HALT<=’1’; WHEN OTHERS=>NULL; END CASE; END PROCESS; END A;
26