ALU_OPC_ADD ALU_OPC_SUB ALU_OPC_MUL ALU_OPC_DIV ALU_OPC_DA 0001 0010 0011 0100 0101 表 4 运算代码所对应的操作
加法 减法 乘法 除法 BCD码调整 表4表示的是各个预算代码的对应的操作。本次设计我主要解决算术运算,不尝试逻辑运算。
假设scr_1=10(00001010B),scr_2=5(00000101B),由仿真图形可以看出,当op code=0001时,即做加法运算,得des 1=15(00001111B):当op code=0010时,即做减法运算,得des_1=5(00000101B);当op-code=0011时,即做乘法运算,得des_l=50(00110010B);当op_code=0100时,即做除法运算,得des_l=2(00000010B)。
图 6 加法及减法的仿真波形
图 7乘法及除法的仿真波形
图8减法及除法运算的仿真波形
五、存储器模块设计
本设计共为8051单片机设计了3种存储器,片内ROM、RAM和片外XRM。本设计中的片内ROM用来存储已经编写好的程序控制代码,只能读出数据不能写入数据。
①片内ROM
片内ROM的信号一片内ROM的信号如图9所示。其中:RST:复位标志,低有效,输入信号;CLK:时钟信号,输入信号;ADDRo~ADDRII:地址总线,11位,输入信号;RD:读控制位,高有效,输入信号;Do-D7:数据总线,8位,输入/输出信号。
RSTCLKADDR0ADDR11RD~片内ROM图 9 片内ROM的信号图
D0~D7
片内ROM主要VHDL语言描述: begin
if(rst=?1)then data<=CD_8;
elsif(clk’event and clk=‘1’、then if(rd=?1)then
data<=PROGRAM(conv_integer(addr)); else
data<2CD一8; end if;
end if;
当RST=1时,数据线成高阻态;当RST=0时,如果RD信号为1,则将ROM中对应与地址线输入信号的内存单元中的数据送入数据线。否则数据线呈高阻态。片内ROM仿真波形如图10所示。
图10片内ROM中的数据读取关系仿真波形
②片内RAM
本设计中的片内RAM的存储空间只有128字节,地址从00H~7FH。同时,设计
了21个特殊功能寄存器,并且定义好了它们的空间地址,详见表3.3。这里需要说明的是,MCS一51系列单片机原有的片内RAM的存储空间是256字节,地址从00H~FFH,这里为了简化设计,只设计了其一半的空间,但原有的特殊功能寄存器在本设计中完全保留。就是说,当地址线的最高位为0时,对片内RAM的对应地址进行读/写操作:当地址线的最高位为l时,如果该地址是某个特殊功能寄存器的地址,则进行其相应的操作,否则按地址线最高位为0时的操作。片内RAM的信号如图11所示,仿真图如图12所示。
SRTCLKADDR0~ADDR11RDWRFULLD0~D7P0.0~P0.7片内RAM图 11 片内RAM的信号图
P1.0~P1.7P2.0~P2.7P3.0~P3.7
其中:
RST:复位标志,低有效,输入信号: CLK:时钟信号,输入信号;
ADDR0~ADDR7:地址总线,8位,输入信号; RD:读控制位,高有效,输入信号: WR:写控制位,高有效,输入信号;
FULL:地址使能信号,判断地址线是否可以使用,低有效,输入信号; Do-D7:数据总线,8位,输入腧出信号;
P0.O~PO.7:并行接口,8位,输入/输出信号: P1.O~P1.7:并行接口,8位,输入/输出信号; P2.O~P2.7:并行接口,8位,输入/输出信号: P3.O~P3.7:并行接口,8位,输入/输出信号。
图12片内RAM中临时数据的传递的仿真波形
③片外XRM
本设计中的片外XRM的存储空间为2K字节,地址从000H~7FFH。它可以对其中的地址单元进行读/写操作,完成对数据的存/取功能。片外XRM的信号如图13所示,仿真图如图14
其中:
RST:复位标志,低有效,输入信号 CLK:时钟信号,输入信号;
ADDR0~ADDR1 5:地址总线,16位输入信号; RD:读控制位,高有效,输入信号: WR:写控制位,高有效,输入信号; D0-D7:数据总线,8位,输入/输出信号。
RSTCLKADDR0ADDRtsRDWR图13片外RAM的信号图
~片外RAXD0~D7
片外XRM的主要VHDL语言描述: architecthur BHV of i8051_xrm is type XRM_TYPE is array(0 to storage_size-1)of unsigned(7 down to 0); signal xrm:XRM_TYPE; begin
process(rst,clk) begin
if(rst=’1’)then
for i in 0 to storage_size-1 loop xrm(i)<=CD_8; end loop;
out data<=CD_8;
else if(clk event and clk=’1’)then
if(rd=’1’and conv_integer(addr) else if(wr=’1’andconv_integer(addr) Mm(conv.integer(addr)<=in data; end if; end if; end process; end BHV; 其中,storage_size=2048,即XRM的存储空间为2KB。 图14片外XRM的仿真波形