精华内容
下载资源
问答
  • 微程序控制器实验湖南大学
  • 微程序控制器实验实验报告 Rust的99 LoC中快速而又肮脏的过程生成 几天前,我尝试创建一个过程景观生成器。 这是实际结果: https : //rap2hpoutre.github.io/landscape-site/ 我想知道事情是如何运作的。 这...

    微程序控制器实验实验报告

    Rust的99 LoC中快速而又肮脏的过程生成

    几天前,我尝试创建一个过程景观生成器。 这是实际结果: https : //rap2hpoutre.github.io/landscape-site/

    我想知道事情是如何运作的。 这就是我建造那个的方式。

    山脉

    我不是一个优秀的程序员,也不知道如何创建山脉。 我在Stack Exchange上找到了这个答案: https : //gamedev.stackexchange.com/a/93531/81351

    因此,我将此代码转换为Rust,因为出于某些原因我喜欢Rust。 首先,我创建了一个Mountain结构。

    struct Mountain { 
        points: Vec < u32 >,
    }

    这些points是每个峰的“ y”位置:在640x480图像上,有640个点从0(最高)到480(最低)不等。

    然后,我创建了两个关联的函数:一种用于初始化点的new方法和一种用于绘制山脉的每个像素的draw方法。

    impl Mountain {
        fn new (y_amp: ( f64 , f64 )) -> Mountain {
            let mut rng = rand::thread_rng();
            let step_max = rng.gen_range( 0.9 , 1.1 );
            let step_change = rng.gen_range( 0.15 , 0.35 );
            let (height_min, height_max) = y_amp;
            let mut height = rng.gen_range( 0.0 , height_max);
            let mut slope = rng.gen_range( 0.0 , step_max) * 2.0 - step_max;
            let mut points: Vec < u32 > = Vec ::new();
    
            for _ in 0 .. 640 {
                height = height + slope;
                slope = slope + (rng.gen_range( 0.0 , step_change) * 2.0 - step_change);
    
                if slope > step_max {
                    slope = step_max;
                } else if slope < -step_max {
                    slope = -step_max;
                }
    
                if height > height_max {
                    height = height_max;
                    slope = slope * - 1.0 ;
                } else if height < height_min {
                    height = height_min;
                    slope = slope * - 1.0 ;
                }
                points.push(height as u32 );
            }
            Mountain {
                points: points
            }
        }
        fn draw (& self , img: & mut RgbImage, color: Rgb< u8 >, c_fog: Rgb< u8 >) {
            let mut i = 0 ;
            for &point in self .points.iter() {
                img.put_pixel(i, point, color);
                for j in point.. 480 {
                    img.put_pixel(i, j, interpolate(c_fog, color, j as f32 / 480.0 ));
                }
                i = i + 1 ;
            }
        }
    }

    这是最长的部分(虽然很脏,但不是最丑的!),认为这只是我提到的StackExchange帖子中的改编副本/粘贴。

    new方法采用参数y_amp的元组,该参数y_amp是当前山脉的边界(最大高度和最小高度)。 用随机的相邻值初始化这些点。

    draw方法会参考要绘制的图像和两种颜色:山脉的初始颜色( color )和雾的颜色( c_fog ),这是创建渐变所必需的。 对于每个点,从图像的顶点到顶点绘制一条渐变“线”,将雾色与初始色混合。

    我可以使用常量(用于640、480等),为变量选择更好的名称并添加注释,但是,嘿! 没时间! 快点,脏点。

    随机颜色帮手

    该程序的主要任务是生成随机颜色。 我创建了一个小助手来生成颜色:

    fn rgb_rand (rng: & mut ThreadRng, r: ( u8 , u8 ), g: ( u8 , u8 ), b: ( u8 , u8 )) -> Rgb< u8 > {
        Rgb([rng.gen_range(r. 0 , r. 1 ), rng.gen_range(g. 0 , g. 1 ), rng.gen_range(b. 0 , b. 1 )])
    }

    我忘了提及所有功能和结构,如 Rgb RgbImage interpolate 等,都来自于出色的,部分记录的或多或少稳定的“ image ”和“ imageproc ”板条箱(板条箱是Rust lib)。

    我编写的rgb_rand函数可以从红色范围,绿色范围和蓝色范围生成随机颜色。 从现在开始,我将在任何地方使用它。

    渐变的天空和随机的月亮

    借助rgb_rand函数,我可以初始化随机的天空颜色,随机的雾颜色和随机的月亮颜色。

    天空。 它可以是浅色,深色或浅蓝色,让我们抛出1D3:

    let mut rng = rand::thread_rng();
    let c_sky = match rng.gen_range( 1 , 4 ) {
        1 => rgb_rand(& mut rng, ( 1 , 40 ), ( 1 , 40 ), ( 1 , 40 )),
        2 => rgb_rand(& mut rng, ( 215 , 225 ), ( 215 , 225 ), ( 230 , 255 )),
        _ => rgb_rand(& mut rng, ( 200 , 255 ), ( 200 , 255 ), ( 200 , 255 )),
    };

    雾的颜色是完全随机的,而行星(月亮?太阳?谁在乎?)颜色是天空和随机颜色的混合:

    let c_fog = rgb_rand(& mut rng, ( 1 , 255 ), ( 1 , 255 ), ( 1 , 255 ));
    let c_planet = interpolate(rgb_rand(& mut rng, ( 1 , 255 ), ( 1 , 255 ), ( 1 , 255 )), c_sky, 0.1 );
    

    现在让我们绘制所有内容。 所以我从天空开始(我们的基本图像缓冲区):

    let mut img = ImageBuffer::from_pixel( 640 , 480 , c_sky);

    然后,该程序会在用gen_weighted_bool投掷硬币后尽可能不频繁地绘制行星。 行星只是一个实心圆。 有时,会在天空之后立即绘制另一个实心圆,以创建新月形效果。

    if rng.gen_weighted_bool( 2 ) {
        let x = rng.gen_range( 101 , 520 );
        let y = rng.gen_range( 81 , 200 );
        let rad = rng.gen_range( 20 , 80 );
        draw_filled_circle_mut(& mut img, (x, y), rad, c_planet);
        if !rng.gen_weighted_bool( 5 ) {
            draw_filled_circle_mut(& mut img, (x + rng.gen_range(- 2 , 4 ) * 10 , y), rad, c_sky);
        }
    }

    然后将渐变应用于我们绘制的所有内容。

    for (_, y, pixel) in img.enumerate_pixels_mut() {
        *pixel = interpolate(c_fog, *pixel, y as f32 / 1000.0 );
    }

    有了所有这些代码后,我们现在有了一个带有月亮的渐变天空。

    无声的山脉,在渐变的天空

    现在是时候在此渐变天空上添加一些山脉了。

    let mountain_count: u32 = rng.gen_range( 4 , 7 );
    let c_mountain = rgb_rand(& mut rng, ( 1 , 255 ), ( 1 , 255 ), ( 1 , 255 ));
    for i in 0 ..mountain_count {
        let c = interpolate(c_mountain, c_sky, (i + 1 ) as f32 / mountain_count as f32 );
        let y_amp = ( ( 399 - 480 / 2 / mountain_count * (mountain_count - i)) as f64 , 401.0 );
        Mountain::new(y_amp).draw(& mut img, c, c_fog);
    }

    简而言之,我只是定义了一个随机数的山脉mountain_count ,然后定义了基色c_mountain 然后,我们对每个山脉进行迭代,构建和绘制第一步中创建的Mountain

    高山越深,天空的色彩越柔和。 请记住,雾色还与山脉混合在一起,使它们显得不太平坦。

    也许我忘记了一些,整个代码可以在这里找到: https : //github.com/rap2hpoutre/landscape/blob/master/src/main.rs

    最后的想法

    我喜欢程序生成,即使我大部分时间都不了解,我也喜欢阅读有关如何创建程序性内容的信息。 这篇文章是我编写代码的描述,显然不是Rust的使用方法或教程。 结果不是超级性感,但我喜欢创建它。 我还建立了一个小型网站,每分钟都会产生一个新鲜的风景。 在框架中,因为我希望它看起来像艺术品! 它在这里: https : //rap2hpoutre.github.io/landscape-site/

    我的主要灵感来自纳瓦拉山脉。 这里列出的项目远比我的要好,我也掠夺了他们的想法:

    我很乐意回答问题,听取建议或面对批评。

    感谢@dorhan_的评论!

    翻译自: https://hackernoon.com/a-procedural-landscape-experiment-4efe1826906f

    微程序控制器实验实验报告

    展开全文
  • (实验四 微程序控制器实验) 课程 计算机组成原理实验 实验日期 2015 年 12 月 1 日    一、实验目的 1.掌握时序发生器的组成原理。 2.掌握微程序控制器的组成原理。   二、实验内容 1.实验...

    (实验四 微程序控制器实验)

    课程 计算机组成原理实验

    实验日期 2015 年 12 月  1 日      

     

    一、实验目的

    1.掌握时序发生器的组成原理。

    2.掌握微程序控制器的组成原理。

     

    二、实验内容

    1.实验电路

    1)时序发生器电路

    本实验所用的时序电路见图4.1。电路由一个500KHz晶振、2GAL22V10、一片74LS390组成,可产生两级等间隔时序信号T1-T4W1-W3,其中一个W由一轮T1-T4组成,相当于一个微指令周期或硬连线控制器的一拍,而一轮W1-W3可以执行硬连线控制器的一条机器指令。另外,供数字逻辑实验使用的时钟由MF经一片74LS390分频后产生。

     

    4.1 时序信号发生器

     

    (2)微程序控制器电路

     

    4.2微程序控制器电路

    微地址转移逻辑表达式:

    A5=D5=μA5;

    A4=D4=C•P2+μA4;

    A3=D3=IR7•P1+μA3;

    A2=D2=IR6•P1+SWC•P0+μA2;

    A1=D1=IR5•P1+SWB•P0+μA1;

    A0=D0=IR4•P1+SWA•P0+μA0。

    2.一些关键技术

    (1) 微指令格式

     

    图4.3微指令格式

    (2)指令功能与格式

    41  指令功能与格式

    名称

    助记符

    功能

    指令格式

    IR7 IR6 IR5 IR4

    IR3  IR2

    IR1 IR0

    加法

    ADD Rd, Rs

    Rd + Rs→Rd

    0   0   0   0

    Rs1 Rs0

    Rd1 Rd0

    减法

    SUB Rd, Rs

    Rd - Rs→Rd

    0   0   0   1

    Rs1 Rs0

    Rd1 Rd0

    逻辑与

    AND Rd, Rs

    Rd & Rs→Rd

    0   0   1   0

    Rs1 Rs0

    Rd1 Rd0

    存数

    STA Rd, [Rs]

    Rd→[Rs]

    0   0   1   1

    Rs1 Rs0

    Rd1 Rd0

    取数

    LDA Rd, [Rs]

    [Rs]→Rd

    0   1   0   0

    Rs1 Rs0

    Rd1 Rd0

    条件转移

    JC R3

    若C=1, 则R3→PC

    0   1   0   1

    1    1

    ×   × 

    停机

    STP

    暂停执行

    0   1   1   0

    ×   ×

    ×   ×

    输出

    OUT Rs

    Rs→DBUS

    0   1   1   1

    Rs1 Rs0

    ×   ×

     

    3)上述8条指令的微程序流程图如图4.4所示

           

    图4.4微程序流程图

     

    4)微程序代码表

    4-2  微程序代码表

     

    微指令 KT  RRF             WRF             RRM        WRM       PR

    当前微地址 00   0C  1E  06  07  0B  1D  0D  0E  0A  02  03  09  04  05  08  0F

    下一微地址    08   1E  06  07  1E  1D  0D  0E  1D  02  03  02  04  05  04  0F  10

    P0        1    .   .    .    .   .    .    .    .    .   .    .    .   .    .   .    .

    P1        .    .   .    .    .   .    .    .    .    .   .    .    .   .    .   .    1

    P2        .    .   .    .    .   .    .    .    .    .   .    .    .   .    .   .   .

    备用          .    .   .    .    .    .   .    .    .    .   .    .    .   .    .   .   .

    TJ            .    1   .    .    1   1   .    1   1    .   1   .    1   .   1   .   .

    LDIR         .    .   .    1    .   .    .    1    .    .   .   .    .   .    .   .   1

    PC+1         .    .   .    .     .   .    .    .    .    .   .   .    .   .    .   .   .

    LDPC#        .    1   .    .    .   1    .    .    .    .   .   .    .   .    .   1   

    AR+1         .    .   .    .    .   .    .     .    .    .   .   1    .   .   1   .   .

    LDAR#        .    1   .    .    .   1    .    .    .    1   .   .    1   .  .   .   .

    LDDR1        .    .   .    .    .   .    .     .    .    .   .   .    .   .   .   .   .

    LDDR2        .    .   .    .    .   .    .     .    .    .   .   .    .   .   .   .   .

    LDRi          .    .   .    .    .   .    .     .    1   .   .   .    .   .    .   .   .

    SW_BUS#      .    1   1   .   .    1   1    .    1    1   .   .    1   1   .   1   .

    RS_BUS#      .    .   .    .    1   .    .    .    .    .    .   .    .    .   .   .   .

    ALU_BUS#     .    .   .    .    .   .    .    .    .    .    .   .    .   .   .   .   .

    RAM_BUS#     .    .   .   .    .   .    .    .    .    .    1   .    .   .   .   .   .

    CER#          .    .   .   1    .   .    .    1    .    .    .   .    .   .   .   .   1

    CEL#          .    .   1   .    .   .    1    .    .    .    1   .    .   1   .   .   .

    LR/W#         .    .   0   .    .   .    0    .    .    .    1   .    .   0   .   .   .

    Cn#           .    .   .    .    .   .    .    .    .    .     .   .    .   .   .   .   .

    M            .    .   .    .    .   .    .    .    .    .     .   .    .   .   .   .   .

    S0            .    .   .    .    .   .    .    .    .    .     .   .    .   .   .   .   .

    S1            .    .   .    .    .   .    .    .    .    .     .   .    .   .   .   .   .

    S2            .    .   .    .    .   .    .    .    .    .     .   .    .   .   .   .   .

    S3            .    .   .    .    .   .    .    .    .    .     .   .    .   .   .   .   .

     

     

    4-2  微程序代码表()

     

    微指令 ADD    SUB    AND    STA     LDA    JC      STP    OUT

    当前微地址 10  18  11  19  12  1A  13  1B  14  1C  15  1F  16      17

    下一微地址    18  0F  19  0F  1A  0F  1B  0F  1C  0F  0F  0F  0F     0F

    P0        .   .    .    .   .    .    .   .    .    .    .   .    .       .

    P1        .   .    .    .   .    .    .   .    .    .    .   .    .       .

    P2        .   .    .    .   .    .    .   .    .    .    1   .    .       .

    备用          .   .    .    .   .    .    .   .    .    .    .   .    .       .

    TJ            .   .    .    .   .    .    .   .    .    .    .   .    1       1

    LDIR         .    .   .    .   .    .     .   .    .    .    .   .    .       .

    PC+1         .    1   .    1   .   1    .   1    .    1    1   .    1     1

    LDPC#       .    .    .    .   .    .    .   .    .     .    .   1    .     .

    AR+1        .    .    .    .   .    .    .   .    .     .    .   .    .      .

    LDAR#           .    .    .   .    .    1   .    1    .    .   .    .      .

    LDDR1       1   .    1    .   1    .   1   .    .    .    .   .    .       .

    LDDR2       1   .    1    .   1    .    .   .    .    .    .   .    .       .

    LDRi         .   1    .    1   .    1    .   .    .    1    .   .    .       .

    SW_BUS#     .   .     .    .   .    .    .   .    .    .    .   .    .       .

    RS_BUS#     .   .     .    .   .    .    1   .    1    .    .   1   .       1

    ALU_BUS#   .   1     .    1   .    1   .   1    .    .    .   .    .       .

    RAM_BUS#  .   .     .    .   .    .    .   .     .    1    .   .    .       .

    CER#        .   .     .    .   .    .     .   .    .    .    .   .    .       .

    CEL#        .   .     .    .   .    .    .   1     .    1    .   .    .       .

    LR/W#          .     .    .   .    .    .   0     .    1    .   .    .       .

    Cn#         .    .    .    1   .    .    .   .     .    .    .   .     .       .

    M          .    0    .    0   .    1    .   0    .    .    .   .    .       .

    S0          .    1    .    0   .    1    .   0    .    .    .   .    .       .

    S1          .    0    .    1   .    1    .   0    .    .    .   .    .       .

    S2          .    0    .    1   .    0    .   0    .    .    .   .    .       .

    S3          .    1    .    0   .    1    .   0    .    .    .   .    .       .

     

     

    注:后缀为#的信号都是低电平有效信号,为了在控存ROM中用“1”表示有效,这些信号在控制器中经过反相后送往数据通路。

     

    3.实验任务

    1)按实验要求,连接实验台的电平开关K0K15、时钟信号源和微程序控制器。连接完成后应仔细检查一遍,然后才可以加上电源。

    注意:本次实验只做微程序控制器本身的实验,故微程序控制器输出的微命令信号与执行部件(数据通路)的连线不连接。

    2)观察时序信号

    用双踪示波器观测时序发生器的输入、输出信号:MF、T1-T4、W1-W3。比较相位关系,画出其波形图,并标注出测量所得的脉冲频率(f)、周期(T)及脉宽(tp)。观察时须将DB、DP开关置为0状态。先按CLR#,然后按QD按钮,则时序电路不停地在运行,直到按CLR# 按钮为止。

    3)熟悉微指令格式的定义,按此定义将图4.4所示的全部微程序变换成二进制代码,并列表登记。此表请在预习时完成。

    4)控制台操作的功能由SWCSWBSWA三个二进制开关的状态配合P0判断来决定。用单拍(DP)方式执行控制台操作微程序,观察判别字段和微地址指示灯的显示,跟踪微指令的执行情况,并与上表数据对照。

    5)深刻理解0FH微指令的功能和P1测试的状态条件(IR7IR4),用二进制开关设置IR7IR4的不同状态,观察ADDOUT八条机器指令对应微程序的微命令信号,特别是微地址转移的实现,并与上面表格进行对照。

    三、实验环境

    软件: WIN XP、串口调试助手软件

    硬件:1.微机                                    1台

        2.TEC-5实验系统                1台

        3.数字双踪示波器                        1台

        4.逻辑测试笔           1支 

        5.编程器                                  公用

     

    四、实验步骤和实验结果

    1.观察时序信号波形

    (1)接线表

    时序电路

    TJ

    SKIP

    固定电平

    注意:接线表中的TJ是时序电路中的TJ,不是控制器中的TJ(该TJ由控制器产生,不能接输入信号),切记勿接错。

    (2)时序信号的波形如下所示:

    按顺序依次是M,T1:

     

    T2,T3:

     

     

    T4,W1:

     

    W2,W3:

     

     

    2.控制台操作微指令编码测试

    接线表如下:

    控制器

    C

    IR4

    IR5

    IR6

    IR7

    模拟开关

    K0

    K1

    K2

    K3

    K4

     

    时序电路

    TJ

    SKIP

    固定电平

    控制台微代码在58C65的D0—D7输出,D0是最低位,D7是最高位,CM0是最低字节,CM3是最高字节。D0—D7对应于58C65的引脚11、12、13、15、16、17、18、19。对于控存的输出,有相应的32个指示灯指示。

    (1)写存储器WRM工作模式

    置DP = 1,DB =0,使实验系统处于单拍状态。置SWC = 0、SWB = 0、SWA = 1,实验系统处于写存储器WRM工作模式。按CLR#按钮,使实验系统处于初始状态,微地址为00H,测得的微码是00H 00H 00H 48H。按一次QD按钮,微地址为09H,测得的微码是00H 08H 84H 04H。按一次QD按钮,微地址为04H,测得的微码是01H 08H 00H 05H。按一次QD按钮,微地址为05H,测得的微码是00H 00H 44H 04H。按一次QD按钮,微地址为04H。由于微地址又返回04H,停止测试。

     

    (2)读存储器RRM工作模式

    置DP = 1,DB =0,使实验系统处于单拍状态。置SWC = 0、SWB = 1、SWA = 0,实验系统处于读存储器RRM工作模式。按CLR#按钮,使实验系统处于初始状态,微地址为00H,测得的微码是00H 00H 00H 48H。按一次QD按钮,微地址为0AH,测得的微码是00H 08H 80H 02H。按一次QD按钮,微地址为02H,测得的微码是03H 40H 04H 03H。按一次QD按钮,微地址为03H,测得的微码是00H 00H 40H 02H。按一次QD按钮,微地址为02H。由于微地址又返回02H,停止测试。

     

    (3)写寄存器WRF工作模式

    置DP = 1,DB =0,使实验系统处于单拍状态。置SWC = 0、SWB = 1、SWA = 1,实验系统处于写寄存器WRF工作模式。按CLR#按钮,使实验系统处于初始状态,微地址为00H, 测得的微码是00H 00H 00H 48H。按一次QD按钮,微地址为0BH,测得的微码是00H 08H A4H 1DH。按一次QD按钮,微地址为1DH,测得的微码是01H 08H 00H 0DH。按一次QD按钮,微地址为0DH,测得的微码是00H  80H  0CH 0EH。按一次QD按钮,微地址为0EH,测得的微码是00H 0CH 04H 1DH。按一次QD按钮,微地址为1DH。由于微地址又返回1DH,停止测试。

     

    (4)读寄存器RRF工作模式

    置DP = 1,DB =0,使实验系统处于单拍状态。置SWC = 1、SWB = 0、SWA = 0,实验系统处于读寄存器工作模式。按CLR#按钮,使实验系统处于初始状态,微地址为00H, 测得的微码是00H 00H 00H 48H。按一次QD按钮,微地址为0CH,测得的微码是00H 08H A4H 1EH。按一次QD按钮,微地址为1EH,测得的微码是01H 08H 00H 06H。按一次QD按钮,微地址为06H,测得的微码是00H 80H 08H 07H。按一次QD按钮,微地址为07H,测得的微码是00H 10H 04H 1EH。按一次QD按钮,微地址为1EH。由于微地址又返回1EH,停止测试。

     

    (5)实验系统处于PR工作模式

    置DP = 1,DB =0,使实验系统处于单拍状态。置SWC=0、SWB = 0、SWA = 0,实验系统处于PR工作模式。按CLR#按钮,使实验系统处于初始状态,微地址µA5-µA0为00H。按一次QD按钮,微地址为08H,测得的微码是00H 08H 20H 0FH。按一次QD按钮,微地址为0FH,测得的微码是00H 80H 08H 90H。由于以后的微码与机器指令有关,停止测试。

     

      深刻理解0FH微指令的功能和P1测试的状态条件(IR7-IR4),用二进制开关设置IR7-IR4的不同状态,观察ADD至OUT八条机器指令对应微程序的微命令信号,特别是微地址转移的实现。

    0FH微指令的功能是根据程序计数器PC从存储器取指令,送往指令寄存器IR。0FH微指令的下一微指令地址是10H。不过,10H只是一个表面的下一微地址,由于该微指令中P1 = 1,因此实际的微指令地址的低4位要根据IR7—IR4确定,实际微地址为10H + IR7 IR6 IR5 IR4。

     

    ① 置DP = 1,DB =0,使实验系统处于单拍状态。选择SWC = 0、SWB = 0、SWA = 0,按CLR#按钮,使实验系统处于初始状态,微地址是00H。按一次QD按钮,微地址变为08H,微代码为00H 08H 20H 0FH。按一次QD按钮,微地址变为0FH,微代码为00H 80H 08H 90H。令K4(IR7) = 0,K3(IR6)=0,K2(IR5)= 0,K1(IR4)= 0,相当于ADD指令的操作码。按一次QD按钮,微地址变为10H,微代码是(00H 03H 00H 18H)。按一次QD按钮,微地址变为18H,微代码是(90H 24H 10H 0FH)。按一次QD按钮,微地址回到0FH。

    ② 置DP = 1,DB =0,使实验系统处于单拍状态。选择SWC = 0、SWB = 0、SWA = 0,按CLR#按钮,使实验系统处于初始状态,微地址是00H。按一次QD按钮,微地址变为08H,微代码为00H 08H 20H 0FH。按一次QD按钮,微地址变为0FH,微代码为00H 80H 08H 90H。令K4(IR7) = 0,K3(IR6)=0,K2(IR5)= 0,K1(IR4)= 1,相当于SUB指令的操作码。按一次QD按钮,微地址变为11H,微代码是(00H 03H 00H 19H)。按一次QD按钮,微地址变为19H,微代码是(04H 24H 10H 0FH)。按一次QD按钮,微地址回到0FH。

    ③ 置DP = 1,DB =0,使实验系统处于单拍状态。选择SWC = 0、SWB = 0、SWA = 0,按CLR#按钮,使实验系统处于初始状态,微地址是00H。按一次QD按钮,微地址变为08H,微代码为00H 08H 20H 0FH。按一次QD按钮,微地址变为0FH,微代码为00H 80H 08H 90H。令K4(IR7) = 0,K3(IR6)=0,K2(IR5)= 1,K1(IR4)= 0,相当于AND指令的操作码。按一次QD按钮,微地址变为12H,微代码是(00H 03H 00H 1AH)。按一次QD按钮,微地址变为1AH,微代码是(B8H 24H 10H 0FH)。按一次QD按钮,微地址回到0FH。

    ④ 置DP = 1,DB =0,使实验系统处于单拍状态。选择SWC = 0、SWB = 0、SWA = 0,按CLR#按钮,使实验系统处于初始状态,微地址是00H。按一次QD按钮,微地址变为08H,微代码为00H 08H 20H 0FH。按一次QD按钮,微地址变为0FH,微代码为00H 80H 08H 90H。令K4(IR7) = 0,K3(IR6)=0,K2(IR5)= 1,K1(IR4)= 1,相当于STA指令的操作码。按一次QD按钮,微地址变为13H,微代码是(00H 11H 80H 1BH)。按一次QD按钮,微地址变为1BH,微代码是(01H 20H 10H 0FH)。按一次QD按钮,微地址回到0FH。

    ⑤ 置DP = 1,DB =0,使实验系统处于单拍状态。选择SWC = 0、SWB = 0、SWA = 0,按CLR#按钮,使实验系统处于初始状态,微地址是00H。按一次QD按钮,微地址变为08H,微代码为00H 08H 20H 0FH。按一次QD按钮,微地址变为0FH,微代码为00H 80H 08H 90H。令K4(IR7) = 0,K3(IR6)=1,K2(IR5)= 0,K1(IR4)= 0,相当于LDA指令的操作码。按一次QD按钮,微地址变为14H,微代码是(00H 10H 80H 1CH)。按一次QD按钮,微地址变为1CH,微代码是(00H 44H 10H 0FH)。按一次QD按钮,微地址回到0FH。

    ⑥ 置DP = 1,DB =0,使实验系统处于单拍状态。选择SWC = 0、SWB = 0、SWA = 0,按CLR#按钮,使实验系统处于初始状态,微地址是00H。按一次QD按钮,微地址变为08H,微代码为00H 08H 20H 0FH。按一次QD按钮,微地址变为0FH,微代码为00H 80H 08H 90H。令K4(IR7) = 0,K3(IR6)=1,K2(IR5)= 0,K1(IR4)= 1,相当于JC指令的操作码。按一次QD按钮,微地址变为15H,微代码是(00H 00H 11H 0FH)。令K0(C)=0。按一次QD按钮,微地址变为0FH,微代码为00H 80H 08H 90H。按一次QD按钮,微地址变为15H。令K0(C)=1,按一次QD按钮,微地址变为1FH,微代码是(00H 10H 20H 0FH)。按一次QD按钮,微地址回到0FH。

    ⑦ 置DP = 1,DB =0,使实验系统处于单拍状态。选择SWC = 0、SWB = 0、SWA = 0,按CLR#按钮,使实验系统处于初始状态,微地址是00H。按一次QD按钮,微地址变为08H,微代码为00H 08H 20H 0FH。按一次QD按钮,微地址变为0FH,微代码为00H 80H 08H 90H。令K4(IR7) = 0,K3(IR6)=1,K2(IR5)= 1,K1(IR4)= 0,相当于STP指令的操作码。按一次QD按钮,微地址变为16H,微代码是(00H 00H 14H 0FH)。按一次QD按钮,微地址回到0FH。

    ⑧ 置DP = 1,DB =0,使实验系统处于单拍状态。选择SWC = 0、SWB = 0、SWA = 0,按CLR#按钮,使实验系统处于初始状态,微地址是00H。按一次QD按钮,微地址变为08H,微代码为00H 08H 20H 0FH。按一次QD按钮,微地址变为0FH,微代码为00H 80H 08H 90H。令K4(IR7) = 0,K3(IR6)=1,K2(IR5)= 1,K1(IR4)= 1,相当于OUT指令的操作码。按一次QD按钮,微地址变为17H,微代码是(00H 10H 14H 0FH)。按一次QD按钮,微地址回到0FH。

     

    五、实验结果与讨论

    (1)实验任务(2)结果讨论:

           实验得出的波形图如下所示:

     

    结论:测量结果与理论值相符。

       (2)实验任务中的(4)和(5)所测的控制存储器代码如下表:

    微地址

    CM3

    CM2

    CM1

    CM0

    00

    00

    00

    00

    48

    01

    00

    00

    00

    00

    02

    03

    40

    04

    03

    03

    00

    00

    40

    02

    04

    01

    08

    00

    05

    05

    00

    00

    44

    04

    06

    00

    80

    08

    07

    07

    00

    10

    04

    1E

    08

    00

    08

    20

    0F

    09

    00

    08

    84

    04

    0A

    00

    08

    80

    02

    0B

    00

    08

    A4

    1D

    0C

    00

    08

    A4

    1E

    0D

    00

    80

    0C

    0E

    0E

    00

    0C

    04

    1D

    0F

    00

    80

    08

    90

    10

    00

    03

    00

    18

    11

    00

    03

    00

    19

    12

    00

    03

    00

    1A

    13

    00

    11

    80

    1B

    14

    00

    10

    80

    1C

    15

    00

    00

    11

    0F

    16

    00

    00

    14

    0F

    17

    00

    10

    14

    0F

    18

    90

    24

    10

    0F

    19

    64

    24

    10

    0F

    1A

    B8

    24

    10

    0F

    1B

    01

    20

    10

    0F

    1C

    03

    44

    10

    0F

    1D

    01

    08

    00

    0D

    1E

    01

    08

    00

    06

    1F

    00

    10

    20

    0F

     

    结论:测量结果与理论值相符。

     

    六、思考题

    请问图4.4微程序流程图中的0BH微地址是如何产生的?

    答:根据微指令产生后继微地址的多路转移方式的逻辑表达式:

      A5=D5=μA5;                      A4=D4=C•P2+μA4;

      A3=D3=IR7•P1+μA3;              A2=D2=IR6•P1+SWC•P0+μA2;

      A1=D1=IR5•P1+SWB•P0+μA1;   A0=D0=IR4•P1+SWA•P0+μA0。

      而由此时的流程图可知,WRF(011)指令,SWC、SEB、SWA分别为0、1、1。

    且P1=0,P0=1。

       故A5=0,A4=0,A3=1,A2=0,A1=1,A0=1。于是,产生001011地址,即0BH微地址。

     

    七、总结

    (一) 本次实验按时按量完成。

    (二) 通过本次实验我掌握时序发生器的组成原理和微程序控制器的组成原理。

    (三) 在观察时序信号波形时,如果出现红色的波形,则按MATH按钮即可消除。如果出现红色的横条或竖条线,则通过显示按钮来调节。

    (四) 向AR送地址时地址指示灯AR不随SW7-SW0数据的变化而改变。主要原因是LDAR#接触不良.同理向PC送地址时PC地址指示灯不随SW7-SW0数据的变化而改变.主要原因是LDPC#接触不良。

    展开全文
  • 华中科技大学,组成原理实验报告,微程序控制器实验,第三次实验
  • 计算机组成原理实验四:常规性微程序控制器实验

    千次阅读 多人点赞 2020-05-26 12:53:41
    本篇博文主要是讲述一下计算机组成原理实验中常规性微程序控制器,因为很多同学在刚学习计算机组成原理实验的时候对于调试的一些步骤还是有些懵懵懂懂,每个步骤之间的连接做的不是很连贯,故有了写此篇博文的初衷,...

    本篇博文主要是讲述一下计算机组成原理实验中常规性微程序控制器,因为很多同学在刚学习计算机组成原理实验的时候对于调试的一些步骤还是有些懵懵懂懂,每个步骤之间的连接做的不是很连贯,故有了写此篇博文的初衷,笔者会在近期分享计算机组成原理实验的五个实验,希望对有学习此课程的同学能够有一些帮助!

    实验目的
    (1)掌握时序产生器的组成原理。
    (2)掌握微程序控制器的组成原理。
    (3)掌握微指令格式的化简和归并。
    实验任务
    (1)按实验要求连接实验台的数码开关K0—K15、按钮开关、时钟信号源和微程序控制器。
    注意:本次实验只做微程序控制器本身的实验,故微程序控制器输出的微命令信号与执行部件(数据通路)的连线暂不连接。连线完成后应仔细检查一遍,然后才可加上电源。
    (2)观察时序信号。了解启停控制信号的功能,并熟练地使用连接这些控制信号的按钮或开关。
    (3)熟习微指令格式的定义,按此定义将控制台指令微程序的8条微指令按十六进制编码,列于下表。三种控制台指令的功能由SWC、SWB、SWA三个二进制开关的状态来指定(KRD =001B,KWE=010B,PR=000B)
    (4)设置IR7—IR4的不同组合,用单拍方式执行ADD至STP九条机器指令微程序,用微地址和P字段指示灯跟踪微程序转移和执行情况。

    相关机器指令与微程序:
    在这里插入图片描述
    实验结果:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    OK,接下来我们来实践本次实验
    步骤一:在微程序控制器进行连线任务,本次实验与前三次实验不同的是前三次实验是在数据通路与控制台进行连线任务,实验四中是微程序控制器与控制台进行连线任务
    在这里插入图片描述
    步骤二:根据实验任务中“三种控制台指令的功能由SWC、SWB、SWA三个二进制开关的状态来指定”进行操控SWC、SWB、SWA进行实验,得出微码变化情况,在本步骤中有两种可以得出实验结果的方法,务必注意,这里选择KRD存储器读操作示例即SWC、SWB置0,SWA置1
    操作方法1:
    在这里插入图片描述
    在这里插入图片描述
    操作方法2:
    在这里插入图片描述
    步骤三:根据微指令地址求出微指令编码,这里以表格中的实验数据07H为例
    在这里插入图片描述
    在这里插入图片描述
    步骤四:操作指令格式得出微码变化情况,这一步其实跟步骤二的操作方法2差不多,这里以加法为例
    在这里插入图片描述
    在这里插入图片描述
    OK,本次实验的总结就到了这里了,在计算机组成原理实验中,实验四中的操作界面算是最复杂的了,但是实践起来博主个人感觉比前三个实验更好做一点!
    觉得有帮助的可以点个赞!
    感谢大家的浏览!谢谢!

    展开全文
  • 实验名称: TEC-2机微程序设计实验 实验地点:10-413 ... (1)7片LS6116RAM组成的56位字长的微程序控制存储器 (2)微指令寄存器PLR,由7片8位的寄存器芯片(6片LS374和1片LS273) ...

    实验名称: TEC-2机微程序控制器实验

    实验地点:10-413

    一.实验目的

    比较深入透彻地学懂计算机各种指令的执行过程,以及控制器的组成、设计的具体知识。理解动态微程序设计的概念。

     

    二.实验原理

    1、TEC -2机的控制器部件的关键内容包括:

    (1) 7片LS6116RAM组成的56位字长的微程序控制存储器

    (2) 微指令寄存器PLR,由7片8位的寄存器芯片(6片LS374和1片LS273)

    (3) 微程序定序器AM2910芯片

    (4) 程序计数器PC和当前指令地址记忆寄存器IP

    (5) 指令寄存器IR

    (6) AM2910输入的配套线路,包括:

    • 两片LS2716ROM组成的MAPROM
    • 1片LS125和1片LS244组成的接收内部总线IB9-0选择门电路
    • 1片LS125和微指令寄存器PLR55-48组成的地址输入

    (7) AM2910输出的配套电路,包括:

    • 1片LS175和1片LS374寄存器组构成的记忆电路
    • 3片LS257芯片构成的微控存地址选择形成电路
    • 3片计数器芯片LS161组成的地址计数器电路

    (8) 2片LS2716ROM组成的固化微码保存电路和读写控制电路

    TEC-2机支持64条基本机器指令,已实现53条指令,保存在2片ROM芯片中。2片ROM组成一个2K-16位固定存储器,每4个相邻的字存放一条56字长的微指令,最高8位未用,用0填充。

    每条微指令由56位组成,具体如图:

    18位微码用于控制与给出每条微指令的下地址,供控制器使用,其中:

    B55-B46的10位微码是下址字段;B45、B44备用;B43-40为CI3-0;B39-37、B36分别为3为SCC和一位SC。

    提供给运算器的控制信号共26位,包括:

    A口地址、B口地址与对应地址选择控制信号SA、SB供10位;

    3组3位的AM2910控制信号MI8-6、MI5-3、MI2-0共9位;

    控制标志寄存器写入SST、最低位控制信号SCi、移位信号形成SSH三个字段共7位。

    最后三位微码/MI0、REQ和/WE控制内存的读写、外设接口的读写与微码的装入。

    2、TEC-2机微程序设计说明

    (1)写出要实现新指令的格式与功能。包括寻址方式、地址、字长,设计该指令的微操作执行步骤。

    (2)确定对应的微指令字各字段的编码。

    (3)选择操作码(OP码)和微程序入口地址时查看附录1各条指令的操作码及微程序入口地址表格。

    (4)不对存储器和IO端口操作时,MIO、REQ、/WE的编码为10X。

    (5)装入微码程序,使用特殊命令LDMC时,要求:

    R1为微程序在内存中的始地址; R2为微程序指令长度; R3为微程序在控存中的入口地址。

    3、装入微指令到控制存储器的两种操作方法。

    (1)在程序中用LDMC指令装入微指令

    具体方法见实验步骤,本实验用这种方法。

    (2) 通过水平板_上开关手工拨入

    此种方法不作要求,只作参考。

    三.实验内容:

    选定指令操作码,指令格式,设计一条指令,其功能是把用绝对地址表示的内存单元

    A中的内容与内存单元B中的内容相加,结果存放在B单元中。

    1、通过以下实例熟悉微指令的装入、新指令的运行及测试。

    例:用绝对地址表示的内存单元ADDR1的内容与内存单元ADDR2中的内容相加,结果存放到内存单元ADDR2中。

    确定指令格式:

    ⑴ 编写微程序

    PC→AR,PC+1→PC;  0000 0E00 A0B5 5402

    MEM→AR;           0000 0E00 10F0 0002

    MEM→Q;            0000 0E00 00F0 0000

    PC→AR,PC+1→PC;  0000 0E00 A0B5 5402

    MEM→AR;          0000 0E00 10F0 0002

    MEM+Q→Q;         0000  0E01 00E0 0000

    Q→MEM,CC#=0;0029 0300 1020 0010

    ⑵ 启动TEC-2机,进入监控程序状态,输入微程序到内存中。写入微码时,每条微指

    令的前8位补全0,补齐64位。

    ① 用“E”命令将微码写入内存, 本例写入0900H开始的内存区域。

    >E900↙

    屏幕显示:(每个数值间空格键隔开,回车键结束。)

    0900:  0000  0E00  A0B5  5402   0000

    0E00  10F0  0002  0000   0E00

    00F0  0000  0000  0E00   A0B5

    5402  0000  0E00  10F0   0002

    0000  0E01  00E0  0000   0029

    0300  1020  0010↙

    ② 用“D”命令检查写入是否正确

    >D900↙

    屏幕显示:

    0900 0000  0E00  A0B5  5402  0000  0E00  10F0  0002

    0908 0000  0E00  00F0  0000  0000   0E00  A0B5 5402

    0910 0000  0E00  10F0  0002  0000   0E01  00E0 0000

    0918 0029  0300  1020   0010  ┉

    ⑶ 装入微码

    将内存存放的微程序装入到控制存储器中,由专用指令LDMC完成。

    ① 用“A”命令输入用于装入微程序的汇编程序

    >A800↙

    0800:MOV     Rl,900   ;900:微码在内存的起始地址

    MOV     R2,7 ;7:微程序长度

    MOV     R3,100   ;100:微程序在控存的起始地址(为什么是“100”)

    LDMC    ;装入微码指令

    RET

    ② 用“G”运行上述程序

    >G800↙

    执行后,微码便装入到起始地址为0100H的微程序控制存储器中

    ⑷ 输入验证程序,运行新指令

    ① 用“A”命令输入程序

    >A820

    0820:MOV     R0,0023

    MOV     [A00],R0

    MOV     [A01],R0

    0826:NOP

    NOP

    NOP

    0829:RET

    ② 用“E”命令将 NOP填充位置改为新指令码

    >E826↙

    屏幕显示:

    0826:

    之后输入:

    D400 0A00 0A01↙

    ③ 用“U”命令查看输入的程序

    >U820↙

    屏幕显示:

    0820: 2C00 0023   MOV   R0,0023

    0822: 3400 0A00   MOV   [0A00],R0

    0824: 3400 0A01   MOV   [0A01],R0

    0826: D400       DW     D400

    0827: 0A00       ADC    R0,R0

    0828: 0A01       ADC R0,R1

    0829: AC00       RET

    ④ 用“G”命令执行验证程序

    >G820↙

    ⑸ 观察运算结果

    由“D”命令检查  0A00、0A01单元内容

    >DA00↙

    屏幕显示:

    0A00

    0023 0046┉

    0A01单元内容为  0046,结果正确。

    四.  实验器材

    1.    TEC-2机一台,电脑一台

    2.    TEC-2模拟软件一套

    五.  实验结果分析

    一、将微码输入到由900H开始的内存单元中

    (一)用“E”命令输入微码

    (二)用“D”命令查看输入的微码

          

    二、将微码加载到微控存中

    (一)用“A”命令输入加载微码的程序

    (二)用“G”命令运行加载微码的程序

    三、输入程序,运行新指令

    (一)用“A”命令输入程序

    (二)用“E”命令输入新指令

    (三)用“U”命令查看输入的程序

    (四)用“G”命令运行程序

    四、观察运算结果

    用“D”命令查看运行结果

     

                               

     

     

    六.  实验心得

    本次实验中,我跟着书上的步骤,在TEC-2机仿真软件中学习了如何设计一条机器指令,设计所需的微指令与如何装入微码,运行自己编写的指令。我学习了如何利用E命令在主存中写入微指令,然后使用A命令编写装入微码的程序,并执行程序装入微码。装入微码后,又学习了如何编写程序和指令,完成自己规定的操作。在本次实验的操作中,我比较深入透彻地学懂计算机各种指令的执行过程,以及控制器的组成、设计的具体知识。理解动态微程序设计的概念。

     

     

    参考文章

    https://wenku.baidu.com/view/d234b70dba1aa8114431d9e6.html

    展开全文
  • 1. 了解和掌握微程序控制器的组成和工作原理; 2. 了解和掌握Am2910微程序定序器的组成和工作原理; 3. 认识和掌握TEC-2机微程序控制器各控制信号的含义、作用和用法; 4. 了解和掌握微命令、微指令和微程序的概念;...
  • 这个是微程序控制器实验时我所写的vhdl代码和实验日志,基本上比较详尽的记录了我当时的心路过程,在这里上传上来,算是对我当时学习生活的一个记录,日后可以比较方便的进行查看
  • 微程序控制器

    2013-11-02 21:07:45
    微程序控制器实验,计算机组成原理课程设计。
  • 计算机组成原理实验实验微程序控制器组成实验
  • 熟悉微程序控制器的工作原理。 掌握微程序编制及微指令格式。 二、实验要求 按照实验步骤完成实验项目,熟悉微程序的编制、写入、观察运行状态。 三、实验原理 ⒈ 微程序控制电路 微程序控制器的组成见图7-1,其中...
  • 2.在EL-JY-II型实验仪上完成微程序控制器原理实验。 四、实验步骤 1.微程序控制器原理 (1) 在Logisim中打开电路文件lab3-step1.circ中的子电路LAB3; (2) 列举电路图6-1中所有的微命令以及这些微命令之间的...
  • 微程序控制及微程序设计实验报告

    千次阅读 2020-05-21 09:53:28
    2.在EL-JY-II型实验仪上完成微程序控制器原理实验。 四、实验步骤 1.微程序控制器原理 (1) 在Logisim中打开电路文件lab3-step1.circ中的子电路LAB3; 解:打开电路图如下 (2)列举电路图中所有的微命令以及这些微...
  • 深入理解计算机微程序控制器的功能、组成知识。 深入的学习计算机各类典型指令的执行流程。 对指令格式、寻址方式、指令系统、指令分类等建立具体的总体概念。 学习微程序控制器的设计过程和相关技术。 二、实验...
  • 实验一运算器组成实验_微程序控制器方式实验报告 一、实验目的 (1)熟悉逻辑测试笔的使用方法。 (2)熟悉 TEC-8 模型计算机的节拍脉冲 T1、T2、T3; (3)熟悉双端口通用寄存器组的读写操作; (4)悉运算器的...
  • 学生实验报告 实验课名称:计算机组成原理 实验项目名称:微程序...微程序控制器的基本任务是完成当前指令的翻译和执行,即将当前指令的功能转换成可以控制的硬件逻辑部件工作的微命令序列,完成数据传送和各种处理操
  • (1)掌握微程序控制器的工作原理和组成结构; (2)掌握微程序的编写、输入方法,观察微程序的执行过程。 三、实验环境 硬件资源:PC机或笔记本电脑,康芯实验箱;软件资源:Quartus17.1设计平台。 四、实验原理 ...
  • 计算机组成原理的综合性实验,用vhdl编写一个微程序控制器, 实现加法,减法,乘法的微指令,加法考虑进位标志,乘法有溢出的情况。有实验报告和vhdl源文件
  • 西安财经学院信息学院  《计算机组成原理》 实验报告   实验名称 微程序控制实验、基本模型机的设计与实现 实验实验楼418 实验日期 2018.12.6;... 2、掌握微程序控制器的设计思想和组成原理。 3...
  • 课程设计名称:微程序控制器设计简单计算机 使用实验器材:Dais-CMH+计组试验箱、相关软件 实验过程: 源程序区数据: ;基本模型机程序 #LOAD "123.IS" ;预调入指令系统/微程序 #SET RAM 0260h = 1222h...
  • 实验11 伺服电机控制器设计实验 了解伺服电机的应用领域,掌握伺服电机的速度控制模式、伺服电机的位置控制模式。 文章目录程序设计伺服电机的速度控制模式代码讲解main.ctimer.c伺服电机的位置控制模式代码讲解main...
  • 实验微程序控制的运算设计 实验分析 设计要求: 利用之前设计的具有超前进位功能的8位ALU,实现简单算术或逻辑运算 两操作数由八位寄存器R0、R1提供,其结果放入R2中。具体何种操作可由微命令任意设定...
  • ⑵ 设计方案(包括设计思路,采用的微指令格式,每条指令的指令流程及其微程序清单) (3) 调试过程(包括实验步骤,出现的问题,解决的方法 (4) 小结(在整个课程设计过程中的总结和体会) (5) 参考资料
  • 高效能模拟与混合信号IC领导厂商Silicon Laboratories (芯科实验室有限公司, Nasdaq: SLAB)日前在美国波士顿举行的嵌入式系统研讨会 (Embedded Systems Conference) 发表C8051F336系列高整合8位微控制器,进一步扩大...
  •  计算机组成原理与设计的课程设计总共分为四个部分,前两个位典型部件设计,如运算设计和存储器读写设计,后两个是简单模型机的设计,一个要求用微程序的思想来实现,另一个要求用硬布线的方式来实现。...
  • TEC-2机微程序设计实验 一.实验目的 比较深入透彻地学懂计算机各种指令的执行过程,以及控制器的组成、设计的具体知识。理解动态微程序设计的概念。 二.实验原理 1.TEC-2机的控制器部件的组成 TEC2机控制器部件的...
  • 微程序处理器

    2018-12-24 12:59:48
    #微程序处理器 姓名: 学号: 班级:计科1602班 ...微程序控制性质:验证型实验 ...一、实验名称: 微程序控制器 ...二、实验目的: ...微程序控制器的基本任务是完成当前指令的翻译和执行,即将当前指令...
  • 3. 微程序控制器实验中,四条机器指令如下所示: (1) 写出每一条机器指令对应的微程序段 (2) 根据流程图以及代码表,写出每一段微程序中每条微指令所完成的的微操作/微命令序列。 (3) A、B、C字段的含义是什么...
  • 本文以自带在系统中编程(ISP)功能的、高性价比的控制器SM2965为核心,研制了基于ISP功能的可编程序控制器,用于PLC控制实验。下面介绍PLC的设计思路、硬件构成和软件设计方法。

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 234
精华内容 93
关键字:

微程序控制器实验