微型计算机inc,8位微型计算机的逻辑设计

8位微型计算机的逻辑设计

8位微型计算机的逻辑设计

一、概述

本次设计描述、设计九个寄存器,一个运算器ALU及其逻辑功能,8选1多路选择器,指挥数据通路、存储器、输入设备和输出设备中的各个部件按照一定的顺序工作的控制器;译码器实现了输入设备和输出设备的片选,8个拨位开关的输入设备和8个LED指示灯的输出设备。

二、系统功能描述和需求分析

1、数据通路部分:需要九个寄存器、一个运算器ALU、一个8选1多路选择器;寄存器功能描述: Clk:时钟信号,时钟上升沿进行数据锁存、递增、递减等操作。

Reset_n:异步复位信号,低电平有效的复位输入,当低电平时清零寄存器;

LD:寄存器的写同步控制信号,在时钟沿时,如果LD=1,将DIN的数据存入寄存器并输出到DOUT;

INC:寄存器的递增同步控制信号,在时钟上升沿时,如果INC=1,将寄存器存放的数据+1;

DEC:寄存器的递减同步控制信号,在时钟上升沿时,如果DEC=1,将寄存器存放的数据-1;

DIN:寄存器的输入数据,只有当时钟上升沿时LD=1才能写入该寄存器;

DOUT:寄存器的输出端,将寄存器存放的数据输出;

运算器ALU功能描述:输入8位数据的A和B,进行两个数加、减、A加减一、与或、异或、输出B运算;

8选1多路选择器功能描述:当MDRBus的值为1时输出为MDR,否则当PCbus的值为1时输出为PC,否则当SPbus的值为1时输出为SP,否则当ACbus的值为1时输出为AC,否则当BRbus的值为1时输出为BR,否则当CRbus的值为1时输出为CR,否则当IO_M的值为0并且Read的值为1时输出为MEME2CPU,否则当Read和IO_M的值都为1时输出为KEY2CPU,否则当IO_M的值为任意值并且其他值都为0时输出为8位二进制的0;

2、控制器部分:功能描述:控制器的作用是在时钟的驱动下产生计算机工作所需要的控制信号,指挥数据通路、存储器、输入设备和输出设备中的各个部件按照一定的顺序工作,完成取指令、执行指令的循环,实现指令系统每条指令的功能。控制器本质上是一个有限状态自动机FSM,即一个时序逻辑电路,可以按照摩尔型状态机的设计方法进行设计。我设计的是按照文档六共有95个状态,33个指令码字段,25个输出。其中ALUsel有四个从ALUsel[0]到ALUsel[3],分别实现不同的运算。

3、译码器、存储器和输入输出部分:译码器的功能是完成输入和输出的片选,译码器上的CS0接输出设备,CS1接输入设备;当读信号有效并且接CS1时输入KEY[7:0]送到KEY2CPU[7:0],当写信号有效并且接CS0时DBout[7:0]送到LED[7:0]。

三、相关器件介绍,

本设计需要用到寄存器、运算器ALU、8选1多路选择器组成数据通路、控制器、存储器、译码器、输入设备和输出设备、主实验箱。

下面对这些硬件和组进行简单介绍:

1、寄存器:

363f0c8bcdaa7d19bb277f624569109c.png 寄存器的设计和描述可以采用参数化的模块,如上图所示。

输入有6个:Clk、Reset_n、LD、INC、DEC、DIN。

输出有1个:DOUT。

2、运算器ALU:

fadcf84465a63d78d3c0ef7ea5610790.png

ALU的输入是参与运算的8位数据的A和B,

输出是8位的运算结果result和4个标志位CF(进位)、OF(溢出)、SF(符号位)、ZF(是否为零)。

3、8选1多路选择器:

8374ca15eafef5fa8ad218c3089d0149.png

该8选1多路选择器有8个8位的数据输入端,分别是

KEY2CPU、MEM2CPU、MDR、PC、SP、AC、BR、CR

该多路选择器有1个8位的数据输出端:OUT

该多路选择器有8个选择控制信号输入端,分别是:

MDRBus、PCBus、SPBus、ACBus、BRBus、CRBus、IO_M、Read

4、数据通路:

8ebc54224728281daf8462659c4cf824.png

数据通路内包含9个寄存器、1个ALU和1个八选一多路开关

5、控制器:控制器本质上是一个有限状态自动机FSM,即一个时序逻辑电路,可以按照摩尔型状态机的设计方法进行设计。其状态图可以简画如下:

d7549f961e16f0ad919440a5ca45c08c.png

2051515a49bfe18b23593ed200a49a08.png

控制器包括:所有状态的状态编码、指令码字段常量、状态寄存器定义和描述、次态定义和生成描述、控制信号输出逻辑。

6、存储器、译码器、输入输出:

module Memory(input clk, reset_n,read,wirte,cs_n,

input [7:0] Addr,

input [7:0] din,

output [7:0] MEM2CPU);

reg [7:0] RAM[255:0];

assign MEM2CPU = ((~cs_n)&read )? RAM[Addr] : 8’b0000_0000; // byte aligned

always @(posedge clk,negedge reset_n)

if (~reset_n) begin

……

end

else if(wirte &(~cs_n))

RAM[Addr] <= din;

endmodule

module Decoder( input IO_M,

input [7:0] Addr,

output cs0,cs1);

assign cs0=IO_M & (Addr == 8’b0000_0000);

assign cs1=IO_M & (Addr == 8’b0000_0001);

endmodule

module keyinput(input clock,

input reset_n,

input Read,

input cs,

input [7:0] key,

output reg [7:0] Key2cpu

);

always @(posedge clock,negedge reset_n)

if( ~reset_n) Key2cpu <=0;

else if(cs&Read) Key2cpu <=key;

endmodule

module ledoutput(input clock,

input reset_n,

input Write,

input cs,

input [7:0] DBout,

output reg [7:0] LED);

always @(posedge clock,negedge reset_n)

if( ~reset_n) LED<=0;

else if(cs&Write) LED <=DBout;

endmodule

译码器完成输入和输出的片选,译码器上的CS0接输出设备,CS1接输入设备。

7、主实验箱:主实验箱上,输入设备采用8个拨位开关,输出设备采用8个 LED 指示灯。

四、系统结构设计

本节给出8位微型计算机的系统结构和总体设计思路:本课程设计要求完成一款字长是8位的微型计算机的设计,该微型计算机的中央处理器CPU寄存器中,开放给程序员使用的寄存器有累加器AC、基址寄存器BR、计数寄存器CR和堆栈指针寄存器SP。该CPU的指令集采用变长指令字结构,分为单字节指令和双字节指令两类。该微型计算机的外设和存储器采用独立编址的方法进行设计,存储器总容量是256字节,地址是0255;外设地址范围0255,CPU 访问的是存储器还是IO_M,设备由IO_M决定,当IO_M=0时访问的是存储器,当IO_M=1时访问外部设备。本课程设计要求设计一个输入设备和一个输出设备,地址分别是1和0,地址译码器1和地址译码器;完成输出设备和输入设备的片选。主实验箱上,输入设备采用8个拨位开关,输出设备采用8个LED指示灯。

五、系统详细设计

在前一节系统结构设计的基础上,本节重点描述数据通路、控制器等几个模块的设计和实现的细节。

数据通路:

module datapath(input clk,input reset_n,

input MARLD,

input [7:0] MEM2CPU,

……

……

output [7:0] DBout,

);

wire [7:0] IB,MDRdata,PCdata,SPdata,ACdata,BRdata,CRdata,

aluresult;

wire[3:0] aluresult2; //4位

//九个寄存器

flipflop_with_reset_en_inc#(8)PC(clk,reset_n,PCLD,PCINC,1’b0,IB,PCdat);

flipflop_with_reset_en_inc#(8)SP(clk,reset_n,SPLD,SPINC ,SPDEC,IB,SPd);

……

……

//1个ALU

ALU ALU1(ACdata,IB[7:0],ALUsel[3:0],aluresult,aluresult2[3],

aluresult2[2],aluresult2[1],aluresult2[0]);

//1个八选一多路开关

MUX8_1 MUX1(MEM2CPU,Key2CPU,MDRdata,PCdata,SPdata,ACdata,

BRdata,CRdata,MDRbus,PCbus,SPbus,ACbus,BRbus,CRbus,IO_M,Read,IB;

assign DBout = Write ? IB : 8’b0000_0000;

endmodule

//寄存器实现

module flipflop_with_reset_en_inc #(parameter WIDTH = 8)(

input clk,reset_n,

input LD, INC, DEC,

input [WIDTH-1:0] DIN,

output reg [WIDTH-1:0] DOUT);

always @(posedge clk,negedge reset_n)

if(~reset_n) DOUT<=0;

else if(LD) DOUT<=DIN;

else if(INC) DOUT<=DOUT+1’b1;

else if(DEC) DOUT<=DOUT-1’b1;

endmodule

//ALU实现

module ALU(

input [7:0]A,B,

input [3:0] ALUsel,

output reg [7:0] result,

output reg CF,

……

……

assign SF = result[7];

assign ZF = (result == 0);

endmodule

//八选一多路开关实现

module MUX8_1(input[7:0] MEM2CPU,KEY2CPU,MDR,PC,SP,AC,BR,

CR,

input MDRbus,PCbus,SPbus,ACbus,BRbus,CRbus,IO_M,Read,

output [7:0] OUT);

assign OUT=MDRbus?MDR:(PCbus?PC:(SPbus?SP:(ACbus?AC:(BRbus?BR

:(CRbus?CR:(Read?(IO_M?KEY2CPU:MEM2CPU):8’b0000_0000))))));

endmodule

控制器:

module controller(input clk, input reset_n,//时钟和复位输入信号

input[3:0] PSWwire,

input [7:0] IRwire,

output MARLD, //输出以下信号

output MDRLD,

……

……

output IO_M);

//所有状态的状态编码,使用状态常量便于阅读和代码编写

parameter S0_Reset = 8’d0;

parameter S1_Fetch1 = 8’d1;

……

……

//指令码字段常量

parameter IR_LD = 8’h00;

parameter IR_ST = 8’h01;

parameter IR_PUSH_AC = 8’h02;

//状态寄存器定义和描述

reg [7:0] state;

reg [7:0] nextstate; //次态

//状态寄存器和状态更新

always @(posedge clk,negedge reset_n)

if (~reset_n) state <= S0_Reset;

else state <= nextstate;

//次态生成组合逻辑电路

always @(*)

case (state)

S0_Reset: nextstate = S1_Fetch1;

S1_Fetch1: nextstate = S2_Fetch2;

S2_Fetch2: nextstate = S3_Fetch3;

S3_Fetch3:

begin

if (IRwire[7:0]==IR_LD ) nextstate = S4_LD1;

else if(IRwire[7:0]IR_ST ) nextstate = S9_ST1;

……

……

else nextstate = S0_Reset;

end

S4_LD1: nextstate = S5_LD2;

S5_LD2: nextstate = S6_LD3;

S6_LD3:nextstate=S7_LD4;

……

……

//输出组合逻辑电路

assign MARLD =(stateS1_Fetch1)……

assign MDRLD=……

……

……

六、功能测试

本节测试本文设计的8位的微型计算机验证输出设备,验证输入输出设备,验证运算指令。

8位微型计算机的逻辑设计相关教程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值