模型机设计(VERILOG)-模型机结构与Verilog语言

前言

        模型机是本学期电子电路课程的综合设计实验作业,主要利用数字电路逻辑部分的知识完成一个能实现多个指令的模型机,使用Verilog语言实现各个部件并完成最终的部件连接及验证。
        在实现这个模型机的过程中,虽然各个部件的Verilog实现和最后的组成都很顺利的搞定了,但其中有很多问题和疑惑其实是在整个模型机完成后才解决的。回想起整个过程,一开始接触模型机,在对组成和功能实现都不够清晰的情况下确实是很难动手的。因此趁假期开始但还对模型机相关内容比较清楚,记录整个模型机的一部分部件实现和需要注意的细节,希望能对后续完成这项综合实验的同学有所帮助。

目录

一.模型机结构与Verilog语言
二.指令译码器与ALU
三.多路复用器和移位逻辑
四.控制信号发生器
五.时序部件
六.模型机设计(VERILOG)-连接与验证

模型机设计(VERILOG)-模型机结构与Verilog语言

一.Verilog语言

        在电子电路课程Quarters中设计电路,主要使用两种方式进行电路设计。一种是通过原理图进行设计(新建原理图,调出各个模块和需要的部件进行端口连接),另一种是使用硬件描述语言设计电路,quarters会根据代码进行电路的生成。硬件描述语言Verilog HDL和VHDL都可使用。本模型机设计使用了较为简单的Verilog语言。

1.模块声明
        使用Verilog语言编写模块需要先进行模块声明,需要注意的是,模块名应该与工程文件名相同。
2.端口声明
        对端口的类型进行声明。类型为输入Input和输出Output。
3.数据类型声明
        直接连接的类型wire,通常声明可以省略,用于组合电路。
        寄存器类型reg,通常用于时序电路。(可能在前期实现部件时,还未学习寄存器。可以暂时只知道寄存器可以保存数据,在需要修改更新数据的时候对数据进行修改即可。)
        常量类型parameter,例parameter A=2'b01表示令A为两位二进制数01。
4.功能描述
        功能描述可以使用assign持续赋值实现,如assign a=b,则任何时刻都有a=b。通常用于组合逻辑的设计。也可以使用过程赋值语句always实现,当敏感信号发生变化时进行赋值。

简单的4选1多路复用器的例子:

module Mux4_1(a,b,c,d,s,f);                //模块声明
    input [1..0]s;                         //两位的选择信号
    input a,b,c,d;                         //四个数据选一个输出
    output f;                              
    parameter A=2'b00,B=2'b01,C=2'b10,D=2'b11;
    //都使用直接连接,wire类型,省略wire的数据类型声明
    //always过程赋值
    always@(s)                            //敏感信号是选择信号
        begin
            if(s==A) f=a;
            else if(s==B) f=b;
            else if(s==C) f=c;
            else f=d;
        end
endmodule

        Verilog编写模块大体上是这样的结构,具体的时序电路和组合电路中的编写之后介绍。语法和一些编写注意点在此时应该在课程中已经有过介绍了。

二.模型机结构

1.整体结构
        模型机的整体结构如下:

  
可以大致将整个模型机分为三部分
(1)指令存储和取出
        指令在模型机中存储在RAM当中,每一个指令所在的单元都有一个地址编号,例如第一  个单元可以存储一个转移指令,第二个单元可以存储一个运算指令....。而从哪个单元取出指令是由传入RAM的一个地址决定的,如传入00000001,那么下一次读指令就会从第一号单元取出指令。指令地址或数据通过选择器得到,有三个途径:从指令计数器得到指令地址;从寄存器组的S口得到地址;从寄存器的D口得到地址。
        执行转移类指令时,选择器选择通用寄存器的S口或D口的地址数据;其他情况从指令计数器得到地址。
        指令计数器在执行正常指令时是将存储的地址逐个+1传给RAM,也就是将地址1,2,3...传给RAM,顺序执行RAM中存储的指令。执行转移指令时读取总线上的数据,下一个指令的地址就是传入计数器的这个数据。(转移类指令是指将数据在RAM和寄存器或者寄存器之间转移的指令,转移指令是指令地址的转移。例如:当前计数器PC存储的数据是4,执行指令后+1变为5,下一次传给RAM应该取出单元5的指令,但是我们想要在执行单元4的指令之后去执行单元32的指令,那么使用一个转移指令,将PC指令计数器中的数据改写为32,这样下一次取指就是取出单元32中存储的指令并执行。)
(2)指令译码和执行
       
在取出指令后,要对指令进行译码,并将译码结果(即执行哪条指令)传给控制信号发生器,发出所有的控制信号,完成指令的执行和数据传输。
        从总线上读取的指令编码会暂时保存在指令寄存器当中。SM控制读取指令和执行指令的时间,当SM为0时会读取指令,指令译码器得到放在指令寄存器中的指令,并译码传输给控制信号发生器。SM为1时,控制信号会发出对应的控制信号,执行这个指令。
(3)数据通路
    
    通用寄存器组和函数发生器ALU,移位逻辑共同构成数据通路。在控制信号的控制下,通用寄存器可以读出或写入数据,数据可以经过函数发生器和移位逻辑,进行运算和移位等操作。

2.指令表
       
指令编码对应指令,共有16条。编码和指令的对应关系是可以自己设定的,只要整个设计中保持一致就可以,如果同时参考了不同来源的指令编码表,需要注意这些编码表可能是不同的

        这里R1,R2指的是寄存器,前一个是目的寄存器(D),后一个是源寄存器(S)。例如:MOV R1 R2指将R2的数据写入R1,ADD R1 R2指将R1和R2的数据相加写入R1。
        需要注意的是转移指令JZ,JC,这两个指令的执行成功是有条件的,结果为0或有进位是指上一次运算结果为0或有进位,如果符合条件,那么指令计数器指令地址会变成转移到的地址(address),否则指令计数器正常+1,RAM顺序读出下一单元的指令。

3.控制信号 
        根据每一条指令需要的控制信号,控制信号发生器会发出一些控制信号,使指令正确执行。

        详细的指令和控制信号的关系留到后面单独写一篇。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值