MCS51单片机反向解剖以及正向设计的研究 第16页
输出的操作代码为触发条件,采用硬件描述语言VHDL对ALU的具体操作做了
描述。当仿真验证通过之后,再对源程序进行综合。正向设计时将ALU、译码
电路、暂存器TMPI和TMPZ做为芯片主要模块cpucore的三大部分,即做为
三个主要的元件component,并利用构造体的结构描述方式在cpucore模块中
调用。
元件描述形式:
COMPONENTalu
PORT();
ENDCOMPONENT;
FORALL:aluUSEENTITYwork.alu;
4.2.6时钟模块的设计
MCS一51系列单片机可以使用片上振荡器做为CPU的时钟源,也可以从片
外输入时钟信号。使用片上振荡器,实际上是将片内的倒相器做为反馈元件,与
外部晶振结合在一起构成一个自激振荡器。
Xl,八工2
i过Clk
e终le_蛇吐es
图4一4时钟模块框图
时钟模块框图如图4一4所示,引脚XTALI定义为倒相器的输入端,引脚
XTALZ则定义为其输出端。cyde_states表示单片机的机器周期状态。每个
XTALI信号的上升沿,cyd之states状态发生变化。VHDL源程序为:
PROCESS(int--rst,xtall)
BEGIN
IF(int--rst=’1’)THEN
stat几reg<=”0000”;
ELSE
IF(xtall’eventandxtall=’1’andstate_reg=unsigned(s6PZ))THEN
stat之reg<=unsigned(5lpl);
6O
第四章MCS一51单片机的正向设计
ELSIF(xtall’eventandxtall=’1’)THEN
stat几reg<=stat几reg+1;
ELSE
stat几reg<=stat几reg;
ENDIF;
ENDIF;
eyel之states<==std_logic-veetor(state--re目;
ENDPROCESS;
4.3McS一51单片机总体框图与总体功能的正向设计
MCS一51系列单片机片内结构的总体框图如图4一5所示,结合2.2节中图
2一2所给出的较为详细的结构框图,以及反向解剖芯片时得到的实际经验,本芯
片的顶层设计分为具体的16个功能模块。芯片进行工作时,指令从程序存贮器
(ROM)中取出,再由程序控制模块将当前的执行指令传送到指令译码模块,由译
码电路模块负责对其进行指令译码。指令译码后生成的控制信号来控制数据的传
送和处理,最终实现指令功能。ALU负责对数据进行算术逻辑运算,其操作数
可以来自立即数、数据存储器、累加器等,其操作结果存入专用寄存器或者数据
存储器中。设计中将译码、运算单元做为可以调用的底层元件,共同来构成一个
高层次的设计模块1331。
444KKKKKKKKKKKKKKK
RRROMMMMM128字节节
RRRRRRR八MMM
CCCPUUU
CCCOREEE
OOOSCCCCC4个I刃口口口口口口串串串串串串串串串串串串串串口口
计数
输入
地址徽据
图4一5MCS一51单片机总体框图
第四章MCS一51单片机的正向设计
整个芯片的设计中包括时钟模块、程序控制模块、指令译码模块等用于产
生时序,生成各种控制信号的功能模块;还包括程序存贮器、数据存贮器、端口
和专用寄存器等形成数据通道的功能模块。指令和被处理的数据都要在各个数据
通道组元中流动,在控制部分的作用下,可以完成数据的输入、输出、处理、存
储等操作。
MCS一51系列单片机的专用寄存器中除了PC寄存器在物理上是独立的,其
余的都属于内部数据存贮器的SFR块(80H一FFH)【34}。因此,设计各个专用寄
存器一定要注意合理分配地址,如表4一2所示:
表4一2SFR块中专用寄存器的地址
标标识符符地址址标识符符地址址标识符符地址址
PPPOOO80HHHSBUFFF99HHHIPPPBSHHH
TTTCONNN88HHHP222AOHHHPSWWWDOHHH
PPPI‘葱葱gOHHHIEEEASHHHACCCCEOHHH
SSSCON
-
-
-
98HHHP333BOHHHBBBFOHHH
4.4Mcs一51单片机软核的仿真
4.4.1RTL级的仿真流程
完成了源代码程序的编写之后,首先要进行RTL(RegisterTransferLevel)
级的仿真,即寄存器传输级的仿真验证。RTL级仿真是对正向设计芯片纯粹的
功能仿真,用于保证逻辑功能实现的正确性。仿真的对象仅仅是抽象逻辑,不包
含任何的延时信息。
HHHDL设计模块块
和和测试程序输入入
HHHDL代码编译译
仿仿真真
波波形输出出
观观察输出波形形
图4一6RTL级仿真流程图
第四章MCS一51单片机的正向设计
RTL级仿真的基本流程如图4一6所示,先将HDL语言描述的设计模块和测
试程序输入仿真器;然后利用仿真器对HDL源代码和测试程序进行编译,
·
编译
正确后将元件实体调入编译器中运行;选择加入需要观察的信号,并且观察输出
的波形,确认设计是正确无误的。如果输出的波形不完全满足设计要求,就修改
程序并再次仿真,直到结果符合要求。
4.4.2RTL级的仿真测试程序
测试程序负责输入测试激励或者说测试向量,仿真结果就是设计模块对测试
激励的反应。设计中采用Mentor公司的EDA软件Modelsim作为RTL级仿
真的平台【351,启动Modelsim后建立Proieet、Souree,然后输入、编译VHDL
设计的代码。Modelsim软件不但可以进行程序的编译,还提供了波形Wave、
信号Signals、结构Strueture、数据流Dataflow、进程Proeess等多种窗口,
简化了仿真工作。
通过建立仿真测试平台,可以对设计输入一系列的测试激励,检查输出波形
并验证设计的正确性。在仿真测试文件中描述测试激励通常有两种方法:直接描
述和测试矢量调入。直接描述的方法一般用于带延时的赋值语句,例如时钟信号
的描述:
CONSTANTelkeeeyele:TIME:=80NS;
PROCESS
BEGIN
test--elk<=’1’;
WAITFORelk--eylee/2;
tes仁elk<==‘0’;
WAITFORelk--eylee/2;
ENDPROCESS;
对于测试矢量调入则是指从测试矢量库中读取测试激励,例如数据、地址以及一
些可配置信息等信号的描述:
FILEinveetor:TEXT15IN“filename.in,,;
READ(11,datal);
READ(11,dataZ);
<< 上一页 [11] [12] [13] [14] [15] [16] [17] [18] [19] 下一页