我的大学之计算机组成原理系列NO.7

课题:控制器设计与验证

一、实验目的
1.理解微程序控制器的设计过程,掌握其设计方法;
2.了解运算部件的基本结构和数据传输过程,并掌握其设计和调试方法。
二、实验设备
1.装有ISE Design Suite 14.7的计算机一台
2.EDK-3 SA ISE实验平台
三、实验任务
1.实现微程序控制器
2.编写测试代码
3.通过实验板操作验证控制器设计的正确性
四、实验原理
实验原理
微程序控制方式的计算机控制器具有规整性、灵活性、功能的可扩充性、易
改性等优点。因此愈来愈广泛地被用于计算机及其它数字设备的控制系统。我们
知道,计算机执行一条指令的过程实际上是执行一段微程序的过程,也就是说采
用微程序方式的计算机,是用各段微程序去对应各条机器指令,微程序存贮在控
存CM 里,当调用某指令时,就由相应的微程序进行控制,以此来执行该指令。
本实验要求根据微程序设计的基本原理,采用微程序设计方法,设计一个简
单的运算器数据通路的控制器,下面就有关设计和调试步骤作一些说明:

(1) 确定数据通路的结构和操作功能。数据通路采用单总线结构;数据长度为4 位;操作数A由AC提供;操作数B由数据开关D3~D0 设置,经驱动门B 和BUS到达ALU的B输入端;暂存器TEM为ALU的结果寄存器,其内容经BUS回送AC。数据通路结构图如下图所示:
在这里插入图片描述

要求完成下列六种操作功能(可由实验箱上的开关控制)
MOV B ,A ; B→A
OR B ,A ; A+B→A
AND B ,A ; A∙B→A
ADD B ,A ; A 加B→A
SUB B ,A ; A-B→A
RCC A ; A 加A 加C→A (带进位的左环移)
(2) 列出各指令的微操作流程。

MOV AC ,B ; B→AC

T1: B→IB ,ACin ;


OR AC,B ; AC+B→AC

T1: D→IB ,ACin;
T2: B→IB ,OR(S3、S2、S1、S0、M、Cn(‐)=1、1、1、0、1、X) ,TEMin;
T3: TEM→IB ,ACin;


AND AC ,B ; AC∙B→AC

T1: D→IB ,ACin;
T2: B→IB ,AND(S3、S2、S1、S0、M、Cn(‐)=1、0、1、1、1、X),TEMin;
T3: TEM→IB ,ACin;


ADD AC ,B; AC加B→AC

T1: D→IB ,ACin ;
T2: B→IB ,ADD(S3、S2、S1、S0 、M、Cn(‐)=1、0、0、1 、0、1),TEMin ;
T3: TEM→IB ,ACin ;


SUB AC,B ; AC减B→AC

T1: D→IB ,ACin ;
T2: B→IB ,SUB(S3 、S2、S1、S0 、M、Cn(‐)=0、1、1、0、0、0),TEMin ;
T3: TEM→IB ,ACin ;
(3) 各控制信号的逻辑条件和时间条件及操作码的编码。各控制信号的逻辑条件和时间条件:
B→IB=(MOV∙T1)+(OR∙T2)+(AND∙T2)+(ADD∙T2)+(SUB∙T2) =(MOV∙T1)+(非MOV∙T2)
ACin=(T1∙M)+(OR∙T3∙M)+(AND∙T3∙M)+(ADD∙T3∙M)+(SUB∙T3∙M) =(T1∙M)+(非MOV∙T3∙M)
D→IB=(OR∙T1)+(AND∙T1)+(ADD ∙T1)+(SUB∙T1)=(非MOV∙T1)
TEMin=(OR∙T2∙M)+(AND∙T2∙M)+(ADD∙T2∙M)+(SUB∙T2∙M)=(非MOV∙T2∙M)
TEM→IB=(OR∙T3)+(AND∙T3)+(ADD∙T3)+(SUB∙T3)=(非MOV∙T3)
(4) 操作码的编码:

MOV的操作码:
K13、K12、K11、K10、K9、K8=0、0、0、0 、0 、0,分别接 S3、S2、S1、S0、M、Cn(‐) ;
OR的操作码:
K13、K12、K11、K10、K9、K8=1、1、1、0、1、X,分别接 S3、S2、S1、S0、M、Cn(‐) ;
AND 的操作码:
K13、K12、K11、K10、K9、K8=1、0、1、1、1、X ,分别接 S3、S2、S1、S0、M、Cn(‐) ;
ADD 的操作码:
K13、K12、K11、K10、K9、K8=1、0、0、1、0、1,分别接 S3、S2、S1、S0、M、Cn(‐) ;
SUB 的操作码:
K13、K12、K11、K10、K9、K8=0、1、1、0 、0 、0,分别接 S3、S2、S1、S0、M、Cn(‐) ;

“MOV” 操作码的特征: K13+K12=0 ;
“ 非MOV”操作码的特征: K13+K12=1 ;

五、部分代码:
①总线数据读写,由于在 FPGA的特性,总线实现的方式跟传统的方式不同,无法实现inout 操作,这里用使能方式来控制总线数据的读写。

实验代码如下:

wire   notmove;                            //NOT  MOV 
  assign   notmove   =  k13   |  k12;      //74LS32;  
  
  wire   move;                            //MOVE 
  assign   move  =   !notmove; 
  
  wire   TEMIB,TEMin,DIB,ACin,BIB;  
  wire   T1,T2,T3,T4;  
   assign  BIB  =  (move   &  T1)  |(notmove  & T2);  
  assign   ACin   =  ((move   &  T1)  |  (notmove   &  T3)|(notmove   &  T1));  
  assign   DIB  =  notmove   &  T1; 
  assign   TEMin   =  notmove   &  T2; 
  assign   TEMIB   =  notmove   &  T3; 
    
   wire   [3:0]  databus_B;  
  wire   [3:0]   databus_D;  
  wire   [3:0]   databus_TEM;  
 
   reg  [3:0]   databus; 
 
  wire   [3:0]   B;  
  assign   B=(BIB==1)?  databus:4'b0; 
  
   wire   [3:0]  dout_ac_temp; 
  assign   dout_ac= dout_ac_temp;
  wire[3:0]  A;  
  assign   A= ((((TEMIB|DIB) &  notmove)|(BIB  &  move))==1)?databus:4'b0; 
 
  wire   [3:0]   dout_f_temp;  
  assign   dout_f   =  dout_f_temp;  
  
  /   B,D,TEM  write  data   to   IB    
   always@(BIB  or DIB  or  TEMIB or databus_B or databus_D or databus_TEM)  
  begin 
   if(BIB)  
     databus  <=   databus_B;  
   else   if(DIB)  
             databus  <=   databus_D;  
         else   if(TEMIB)  
             databus  <=   databus_TEM;  
         else  
             databus  <=  4'b0; 
       end 

②为了保持AC所输入的数据为当前时序的输入,这里做了延迟出来,来保证数
据的一致性。实验代码如下:

 wire   ACin_reg1; 
  wire   ACin_reg2; 
  reg  ACin_reg3; 
  wire   TEMin_reg1; 
  wire   TEMin_reg2; 
  reg  TEMin_reg3; 
 
    SRL16  #(  
       .INIT(16'h0000)  //   Initial   Value  of   Shift   Register 
   )  SRL16_inst1   ( 
       .Q(ACin_reg1),        //   SRL  data   output  
       .A0(1),      //   Select[0]   input 
       .A1(1),      //   Select[1]   input 
       .A2(1),      //   Select[2]   input 
       .A3(1),      //   Select[3]   input 
       .CLK(clk),    //   Clock  input 
       .D(ACin)          //  SRL  data   input 
   );  
SRL16  #(  
       .INIT(16'h0000)  //   Initial   Value  of   Shift   Register 
   )  SRL16_inst2   ( .Q(ACin_reg2),        //   SRL  data   output  
       .A0(1),      //   Select[0]   input 
       .A1(1),      //   Select[1]   input 
       .A2(1),      //   Select[2]   input 
       .A3(1),      //   Select[3]   input 
       .CLK(clk),    //   Clock  input 
       .D(ACin_reg1)          //   SRL  data   input 
   );  
  
   always@(posedge  clk) 
   begin 
    ACin_reg3  <=   ACin_reg2; 
    TEMin_reg3   <=   TEMin_reg2; 
   End
SRL16  #(  
       .INIT(16'h0000)  //   Initial   Value  of   Shift   Register 
   )  SRL16_inst3   ( 
       .Q(TEMin_reg1),        //   SRL  data   output  
       .A0(1),      //   Select[0]   input 
       .A1(1),      //   Select[1]   input 
       .A2(1),      //   Select[2]   input 
       .A3(1),      //   Select[3]   input 
       .CLK(clk),    //   Clock  input 
       .D(TEMin)         //   SRL  data   input 
   );  
  
  SRL16  #(  
       .INIT(16'h0000)  //   Initial   Value  of   Shift   Register 
   )  SRL16_inst4   ( 
       .Q(TEMin_reg2),        //   SRL  data   output  
       .A0(1),      //   Select[0]   input 
       .A1(1),      //   Select[1]   input 
       .A2(1),      //   Select[2]   input 
       .A3(1),      //   Select[3]   input 
       .CLK(clk),    //   Clock  input 
       .D(TEMin_reg1)          //   SRL  data   input 
   ); 

六、实验结果

  1. 仿真结果
    在这里插入图片描述
    2.实验结果分析:
    在这里插入图片描述
    M 为主板按键SW2 ,按下为‘1’;
    Cn为主板按键SW3 ,按下为‘1’;
    (1) MOV AC,B ; B→AC
    在这里插入图片描述
    (2)OR AC,B ; AC+B→AC
    在这里插入图片描述
    (3)AND AC,B ; AC∙B→AC
    在这里插入图片描述
    (4)ADD AC,B ; AC加B→AC
    在这里插入图片描述
    (5)SUB AC,B ; AC减B→AC
    在这里插入图片描述
    例:要求实现6-3运算,也就是SUB运算,因而只需修改Din为0110、Bin为0011、Sin为0110、M为0、Cn为0即可。

七、问题思考
1.如何较好实现微程序控制器设计的模块化?
通过对各控制信号的逻辑条件和时间条件及操作码进行编码,通过控制信号
的改变来进行微程序设计的模块化

2.分析操作过程中显示器所显示数据的变化过程及其原理。
操作数 A 由 AC 提供,为 AC 输入的数。
操作数 B 由数据开关 D3~D0 设置
暂存器 TEM 为 ALU 的结果寄存器,其内容经 BUS 回送 AC
时钟为 1 时将 Din 输入的数存入 AC 和 Databus 寄存器,时钟为 2 时将 Bin
输入的数推入 Databus 并根据操作数在 Term 显示运算结果,时钟为 3 时将
Term 内存的结果经 BUS 推入 AC 中。

3.在实际微程序控制器中,有哪些因素会影响其运行速度?
数据总线的时钟频率,字长和带宽。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值