基于微程序设计的嵌入式CISC CPU模型的实现

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

基于微程序设计的嵌入式CISC CPU模型的实现

一、课程设计的题目 

二、嵌入式CISC模型机数据通路框图 

三、微程序控制器(CISC模型机)的逻辑结构框图 

四、模型机的指令系统和指令格式 

五、机器指令的微程序流程图 

六、嵌入式CISC模型机的顶层电路图 

七、汇编语言源程序 

八、机器语言源程序 

九、微命令格式和微指令代码表 

十、仿真波形图及其分析 

十一、故障现象和分析以及心得体会 

十二、软件清单

1.运算器和状态条件寄存器单元

2.通用寄存器单元LS273

3.地址寄存器单元LS273

4.指令寄存器单元LS273

5.1:2分配器FEN2 

6.4选1数据选择器单元MUX4 

7.5选1数据选择器单元MUX5 

8.程序计数器单元PC 

9.主存储器单元ROM 

10.时序产生器单元COUNTER 

11.操作控制单元CROM 

一、课程设计的题目

A类:输入包含10个整数(8位二进制补码表示)的数组M(采用RAM),输出最小的负数。

二、嵌入式CISC模型机数据通路框图

        

三、微程序控制器(CISC模型机)的逻辑结构框图


说明:

    在T4内形成微指令的微地址,并访问控制存储器,在T2的上边沿到来时,将读出的微指令打入微指令寄存器,即图中的微命令寄存器和微地址寄存器。

四、模型机的指令系统和指令格式

(1)I/O指令

输入(IN1)指令采用单字节指令,其格式如下:

7     6     5     4

  3     2

  1      0

        操作码

  ×   ×

     Rd

输出(OUT1)

7     6     5     4

  3     2

  1      0

        操作码

     Rs

  ×     × 

Rs指源寄存器,Rd指目的寄存器。

(2)自增指令

7     6     5     4

  3     2

  1      0

        操作码

  ×    ×

     Rd

(3)转移指令

条件转移指令(JB、JN)和无条件转移指令(JMP)采用单字节指令

7     6     5     4

  3     2

  1      0

        操作码

  ×    ×       ×     ×  

                        地      址

说明:“地址”中的值就是要转移的地址值

(4)比较指令(CMP)和MOV指令

比较指令(CMP)和MOV1采用单字节指令,格式如下:

7     6     5     4

  3     2

  1      0

        操作码

     Rs

    Rd

MOV采用双字节指令,格式如下:

7     6     5     4

  3     2

  1      0

        操作码

 ×    ×    

    Rd  

                        地      址

(5)寄存器间传送指令

MOV3采用单字节指令,格式如下:

7     6     5     4

  3     2

  1      0

        操作码

     Rs

    Rd

MOV采用双字节指令,格式如下:

(6)寄存器间址寻址送指令

MOV1采用单字节指令,格式如下:

7     6     5     4

  3     2

  1      0

        操作码

    [Rs]

    Rd

MOV2采用单字节指令,格式如下:

7     6     5     4

  3     2

  1      0

        操作码

     Rs

    [Rd]

(7)负数测试指令

TEST采用单字节指令,格式如下:

7     6     5     4

  3     2

  1      0

        操作码

  ×    ×

     Rd

由此可见,共有12条基本指令,下表列出了每条指令的格式、汇编符号和指令功能。

助记符号

指令格式

功能

TEST Rd

0 1 0 0

× ×

Rd

测试 Rd 寄存器中的值是否为负数

MOV3 Rs ,Rd

0 1 0 1

Rs

Rd

(Rs)→(Rd)

IN1 Rd

0 1 1 0

× ×

Rd

将数据存到 Rd 寄存器

MOV Rd, data

0 1 1 1

× ×

Rd

data

data→Rd

MOV1 [Rs], Rd

1 0 0 0

Rs

Rd

[Rs]→(Rd)

MOV2 Rs, [Rd]

1 0 0 1

Rs

Rd

(Rs)→[Rd]

CMP Rs, Rd

1 0 1 0

Rs

Rd

(Rs) – (Rd),锁存 CY 和 ZI

JB addr

1 0 11

× ×

× ×

addr

若小于,则 addr→PC

JN addr

1 1 0 0

× ×

× ×

addr

若为负,则 addr→PC

INC Rd

1 1 0 1

× ×

Rd

(Rd) + 1→Rd

JMP addr

1 1 1 0

× ×

× ×

addr

addr→PC

OUT Rs

1 1 1 1

Rs

× ×

(Rs)→LED

说明:

①对Rs和Rd的规定:

Rs或Rd

选定的寄存器

0   0

R0

0   1

R1

1   0

R2

1   1

R3

②模型机规定数据的表示采用定点整数补码表示,单字长为8位,其格式如下:

7

6     5     4     3     2     1     0

符号位

尾数

五、机器指令的微程序流程图

六、嵌入式CISC模型机的顶层电路图

七、汇编语言源程序

         同给出的题目编写汇编语言源程序。算法思想为:R0寄存器初始化为1,R1寄存器初始化为11,R3寄存器存入输入的数据,然后将R3中的数存入以R0寄存器中的数为地址的RAM中,R0寄存器自增一,再和R1寄存器中的数进行比较,如果小于则再输入下一个数,如此循环十次,把输入的十个数存入RAM中。当R0寄存器中数和R1中相等时,则进入负数判定和负数间的比较。

         R0寄存器初始化为1,R1寄存器初始化为11,R2寄存器初始化为FF(即-1)。把RAM中以R0中的数为地址的的数取出来放在R3中,然后R0自增一,为取下一个数做准备,同时判断是否已经取完了十个数。接下来测试R3中的数时候为负数,如果不是则跳到L1处从RAM中取下一个数。如果是负数,则和R2中的数进行比较。如果R3中的数比R2中的数大,则跳到L1处从RAM中取下一个数,否则将R2中的数替换为R3中的数。即,每次比较完后R2中都保存的是最小的负数。如此循环十次,最后输出R2中的数,即最小的负数。

     MOV  R0,1                    /将立即数1→R0     MOV  R1,11                   /将立即数11→R1(R2用于计数)L1:  IN1   R3                     /R3保存输入的数据     MOV2 R3,[R0]                 /写RAM,地址保存在R0中     INC R0                       /R0自加一     CMP R0,R1                     /将R1中的数与R0中的数进行比较,锁存CY/FC和ZI/FZ     JB L1                        /小于,则转到L1处执行     MOV R0,1                      /将立即数1→R0     MOV R1,11                    /将立即数11→R0     MOV R2,FFH                   /将立即数FFH→R0L2:  MOV1 [R0],R3                 /读RAM,地址保存在R0中     INC R0                        /R0中的数自加一     CMP R1,R0                     /将R1中的数与R0中的数进行比较,锁存CY/FC和ZI/FZ      JB L5                         /小于,则转到L5处执行     TEST R3                       /测试R3中的数是否为负数     JN L3                         /R3中的数是负数时,则跳到L3执行     JMP L2                        /无条件转到L2处执行,继续从RAM中取下一个数L3:  CMP R3,R2                     /将R3中的数与R1中的数进行比较,锁存CY/FC和ZI/FZ     JB L4                         /小于,则转到L4处执行     JMP L2                        /无条件转到L2处执行,继续从RAM中取下一个数L4:  MOV3 R3,R2                    /把R3中的数保存到R2中,R2一直保存的是最小的负数     JMP L2                        /无条件转到L2处执行L5:  OUT1 R2                       /输出R2中的最小负数     JMP L5                        /循环输出

八、机器语言源程序

根据设计的指令格式,将汇编语言源程序手工转换成机器语言源程序,并将其设计到模型机中的ROM中去。汇编语言源程序对应的机器语言源程序如下:

//助记符         地址(十六进制)   机器代码     机器代码十六进制     功能     MOV  R0,1             00           01110000            70           1→R0                           01           00000001            01                  MOV  R1,11            02           01110001            71           11→R1                           03           00001011            0B             L1:  IN1   R3              04           01100011            63           (SW)→R3     MOV2 R3,[R0]          05           10011100            9C           R3→[R0]     INC R0                06           11010000            D0           (R0)+1→R0     CMP R0,R1             07           10100001            A1           (R0)-(R1)     JB L1                 08           10110000            B0           L1→PC                           09           00000100            04     MOV R0,1              0A           01110000            70           1→R0                           0B           00000001            01     MOV R1,11             0C           01110001            71           11→R1                           0D           00001011            0B     MOV R2,FFH            0E           01110010            72           FF→R2                           0F           11111111            FF L2:  MOV1 [R0],R3          10           10000011            83           [R0]→R3     INC R0                11           11010000            D0           (R0)+1→R0     CMP R1,R0             12           10100100            A4           (R1)-(R0)     JB L5                 13           10110000            B0           L5→PC                           14 
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值