理工大学学士学位论文
3. 指令寄存器模块波形仿真
图3.11 指令寄存器功能仿真
波形分析:当IIR=0时,输入操作码,并对其进行判断,当操作码为某个指令时,该指令输出。当执行一条指令时,先把它从主存储器中取到数据寄存器中,然后在传送
27
理工大学学士学位论文
到指令寄存器。如果IR中储存的是操作码LD00111110,ADD11100110,HALT01110110,译码器就将操作码译成相应的操作指令LD,ADD,HALT。在此仿真图中为了清晰其功能把DATA_IN设置成00111110,11100110,01110110,循环,仿真结果如图3.11所示ADD,LD,HALT依次使能,证明此功能模块设计成功。 3.5.6 时钟产生器
说明:用来产生固定频率的方波脉冲。
1.逻辑框图
开始Counter=25000000YCounter归零N时钟发生且上升沿NYCounter=counter+1结束
图3.12 时钟产生器模块程序流程图
说明:用于产生固定频率的方波,时钟周期为0.2s,设置counter值从0到25000000依次按clk周期顺次加一得以实现,如此循环。
28
理工大学学士学位论文
2.VHDL源程序 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY CLK_SOURCE IS PORT(CLK_50M:IN STD_LOGIC; CLK:OUT STD_LOGIC); END ENTITY;
ARCHITECTURE A OF CLK_SOURCE IS SIGNAL CLK_TEMP:STD_LOGIC; BEGIN
CLK<=CLK_TEMP;
PROCESS(CLK_50M,CLK_TEMP)
VARIABLE COUNTER:INTEGER RANGE 0 TO 25000000; BEGIN
IF(COUNTER=25000000)THEN COUNTER:=0;
CLK_TEMP<=NOT CLK_TEMP;
ELSIF(CLK_50M’EVENT AND CLK_50M=’1’)THEN COUNTER:=COUNTER+1; END IF; END PROCESS;
END A;
3.时钟产生器模块仿真波形
29
理工大学学士学位论文
图3.13 时钟产生器功能仿真
波形分析:输入信号CLK_50M时钟频率为50MHZ即周期为20ns,在每个时钟上升沿是counter值自动加1,在达到25000000时归零重计,如此循环产生0.2s的固定周期,显示波形如图3.13所示。 3.5.7 程序计数器模块
说明:用于确定下一条指令的地址。
1.逻辑框图
30
理工大学学士学位论文
开始YCLR=0输出000NCLK=1YIPC=1NYNPC+1输出pc值结束
图3.14 程序计数器模块程序流程图
说明:程序计数器的作用是确定下一条指令的地址。由于模型计算机只有5个字节的机器码,所以程序计数器PC的输出只使用3位,当IPC=0时,计数器保持原状态;IPC=1时,计数器处于计数状态,当时钟信号CLK上升沿到来时,做加1运算。
2.VHDL源程序 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;
31