医疗影像传输记录一体化专业处理系统课件_第1页
医疗影像传输记录一体化专业处理系统课件_第2页
医疗影像传输记录一体化专业处理系统课件_第3页
医疗影像传输记录一体化专业处理系统课件_第4页
医疗影像传输记录一体化专业处理系统课件_第5页
已阅读5页,还剩45页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

*1复杂时序系统关联状态机(Linkedstatemachine)数据处理器/控制器划分(Datapath/controller)微处理器及其操作指令复习简化的微处理器ASM图微处理器的VHDL描述*2Linkedstatemachine1、简单的交通灯例子1)设计问题描述

要求设计一套交叉路口交通信号灯,该路口有一条交通干线与支线,支线上装有传感器,当支线有车通过时,传感器输出信号CAR=1。正常的工作状态是干线亮绿灯,支线亮红灯;当CAR=1时,干线亮红灯,支线亮绿灯,并开始计时,当支线绿灯亮256个时钟周期后,重新回到正常工作状态(干线亮绿灯,支线亮红灯)。*3Linkedstatemachine1、简单的交通灯例子2)ASM图(包括控制器和计数器)*4Linkedstatemachine2、controller/datapathpartition1)法一(硬件子程序法)在控制器中,当CAR检测到时,START作为条件输出;同时START也作为第二个状态机的输入,用于启动第二个状态机从IDLE状态进入计数序列。当第二个状态机完成计数时,输出信号TIMED;TIMED同时作为第一个状态机的输入,用于启动控制器从R->G。*5Linkedstatemachine2、controller/datapathpartition1)法一(硬件子程序法)注意:当START有效时,启动第二个状态机。所以第二个状态机可以看作一个“硬件子程序”。不同于软件子程序,“硬件子程序”必需存在硬件与之对应,即使不处于有用状态时,也要在工作。所以状态IDLE是不可少的。*6Linkedstatemachine2、controller/datapathpartition2)法二不同于法一,右边的状态机是一个常规的计数器。这里在datapath/controller分离的时候,利用了标准的元件。计数器,在状态S255,TIMED作为条件输出;同时用于控制控制器从R->G。控制器,在状态R输出信号ENABLE,允许计数器进行计数。*7Linkedstatemachine2、controller/datapathpartition2)法二*8Datapath/controllerpartition1、controller/datapathpartition数据处理器(datapath)可以方便地看作一个时序系统,其中的一些功能元件可以复用以前已经设计好的一些功能模块。*9Datapath/controllerpartition2、交通灯例子说明如前面交通灯的例子,左边的状态机对应于控制器,右边的计数器对应于数据处理器。TIMED信号是处理器输出的状态信号statussignal,ENABLE信号是控制器输出的控制信号controlsignal。*10Datapath/controllerpartition3、寄存器传送操作(registertransferoperations)数据处理器的功能通常由寄存器操作完成,而系统的处理功能通常由数据处理器完成,所以可以从寄存器传送操作的观点来描述一个系统。寄存器传送操作可以用ASM图的符号来表示。Z在状态末置为1,直到重新赋值才改变。不同于ENABLE信号,只在这个状态中为1,其余为0*11Datapath/controllerpartition4、一个复杂的例子由寄存器传送操作来描述数据处理功能。当A=0时,作左移操作(multiply2),当A=1,X0=0作右移操作(divide2)。1)ASM图*12Datapath/controllerpartitionS1S0AX0S1+S0+000X0100111000101101XX0010XX0011XX004、一个复杂的例子2)状态转移表3)次态方程*13Datapath/controllerpartition4、一个复杂的例子4)多路选择器法实现数据处理部分S1,S0作为多路选择器的控制端,用于控制3个寄存器B2,B1和B0在相应的状态执行的操作。举例:S1S0=10时,B2B2.B1.B0*14微处理器及其操作指令复习1、简化的微处理器功能简单-只能做两个数的加减法内存量小-32X8bit的RAM字长8位(系统总线8位)*15微处理器及其操作指令复习1、简化的微处理器Sequencer是控制部件。程序计数器PC、算术逻辑部件ALU、数据存储器RAM、指令寄存器IR为4个数据处理功能部件,它们都可以驱动总线,但在任一时刻,都只能有1个功能部件在总线上输出有效数据。PC,每次运行之前,先复位成全0,当取出一条指令后,PC加1。ACC是累加器,用以存储微处理器运行期间的中间结果。MAR是地址寄存器,接收来自PC的地址码,送到RAM中。MDR是数据寄存器,通过MAR提供的地址码,从RAM中读出数据。*16微处理器及其操作指令复习2、复习两种寻址方式微处理器通过执行指令使控制器完成程序操作。指令寄存器IR通常包括两部分:指令段+地址字段立即数寻址方式(immediateaddressing):有部分指令所用的操作数就在指令中提供。直接寻址方式(directaddressing):使用直接寻址方式,数据总是在存储器中,存储单元的有效地址由指令直接指出,所以直接寻址是对存储器进行访问时可采用的最简单的方式。本章中微处理器例子采用直接寻址方式。*17微处理器及其操作指令复习3、指令举例LoadR9;00001001

--把R9中的数据存入累加器ACCAddRA;01001010

--把RA中的数据与ACC相加,结果存入ACCSubRB;01101011

--把ACC中的数据与RB相减,结果存入ACC;StoreRC;00101100

--把ACC中的数据存入RC假设指令寄存器为8位,其中指令码占3位,地址码占5位,所以数据存储器的大小为32*8bit。RAM用于存放指令(程序)和数据。*18简化的微处理器ASM图1、指令(instruction)Load:000;Store:001;Add:010;Sub:011;Bne:100;(*)--Branch_Not_zero_at_acc_Examine,ALU有个Flags标志*19简化的微处理器ASM图2、Sequencer输出的控制信号*20简化的微处理器ASM图3、ASM图(没考虑op=bne分支)这个ASM图中包含了寄存器传送操作。*21简化的微处理器ASM图4、ASM图(考虑BNE)*22简化的微处理器ASM图4、ASM图(考虑BNE)考虑累加器ACC中的数据是否为0。ALU输出的z_flag决定PC载入哪个目标地址。ACCMDR等效于

MDR_bus,load_ACCPCMDR等效于MDR_bus,load_PC;所以要增加一个控制信号load_PC;MDR_bus:drivebuswithcontentsofMDRLoad_ACC:loadACCfrombus*23简化的微处理器ASM图5、ASM图(考虑BNE,ASM图中用控制信号代替寄存器操作)*24微处理器的VHDL描述微处理器可以分为:控制器Sequencer

功能部件ALU、PC、IR、RAM注意:这些功能部件都描述成时序系统,有统一的时钟。*25微处理器的VHDL描述1、程序包

程序包中包含了总线宽度、操作指令宽度、枚举类型的操作符、以及枚举类型的操作符与二进制指令代码之间的转换函数。程序包可以被各个模块包含调用。libraryieee;useieee.std_logic_1164.all;packagecpu_defsistypeopcodeis(load,store,add,sub,bne);

constantword_w:natural:=8;--总线宽度

constantop_w:natural:=3;--操作指令宽度

constantrfill:std_logic_vector(op_w-1downto0):=(others=>'0');functionslv2op(slv:instd_logic_vector)returnopcode;functionop2slv(op:inopcode)returnstd_logic_vector;endpackagecpu_defs;*26微处理器的VHDL描述packagebodycpu_defsistypeoptableisarray(opcode)ofstd_logic_vector(op_w-1downto0);constanttrans_table:optable:=("000","001","010","011","100");

functionop2slv(op:inopcode)returnstd_logic_vectorisbeginreturntrans_table(op);endfunctionop2slv;

functionslv2op(slv:instd_logic_vector)returnopcodeisvariabletransop:opcode;beginforiinopcodeloopifslv=trans_table(i)thentransop:=i;endif;endloop;*27微处理器的VHDL描述--slv2op的另外一种描述法--caseslvis--when"000"=>transop:=load;--when"001"=>transop:=store;--when"010"=>transop:=add;--when"011"=>transop:=sub;--when"100"=>transop:=bne;--endcase;

returntransop;endfunctionslv2op;endcpu_defs;*28微处理器的VHDL描述2、控制器sequencer

根据ASM图(P151),采用二进程法描述状态机(P154-155)libraryieee;useieee.std_logic_1164.all;usework.cpu_defs.all;entitysequencerisport(clock,reset:instd_logic;op:inopcode;z_flag:instd_logic;

ACC_bus,load_ACC,PC_bus,load_PC,load_IR,load_MAR,MDR_bus,load_MDR,ALU_ACC,ALU_add,ALU_sub,INC_PC,Addr_bus,CS,R_NW:outstd_logic);endentitysequencer;*29微处理器的VHDL描述architecturertlofsequenceris

typestateis(s0,s1,s2,s3,s4,s5,s6,s7,s8,s9);signalpresent_state,next_state:state;beginseq:process(clock,reset)isbeginifreset='1'thenpresent_state<=s0;elsifrising_edge(clock)thenpresent_state<=next_state;endif;endprocessseq;--时序进程*30微处理器的VHDL描述com:process(present_state,op,z_flag)isbegin

--给所有控制信号赋一个默认值

ACC_bus<='0';load_ACC<='0';PC_bus<='0';load_PC<='0';…CS<='0';R_NW<='0';*31微处理器的VHDL描述casepresent_stateis

whens0=>PC_bus<='1';load_MAR<='1';INC_PC<='1';

load_PC<='1';

next_state<=s1;whens1=>CS<='1';R_NW<='1';next_state<=s2;whens2=>…endcase;endprocesscom;Endrtl;*32微处理器的VHDL描述3、算术逻辑部件ALUlibraryieee;useieee.std_logic_1164.all;Useieee.std_logic_unsigned.all;--位矢量相加在unsigned程序包中。usework.cpu_defs.all;entityALUisport(clock,reset:instd_logic;ACC_bus,load_ACC,ALU_ACC,ALU_add,ALU_sub:instd_logic;z_flag:outstd_logic

;

sysbus:inoutstd_logic_vector(word_w-1downto0));endentityALU;architecturertlofALUissignalacc:std_logic_vector(word_w-1downto0);constantzero:std_logic_vector(word_w-1downto0):=(others=>'0');*33微处理器的VHDL描述3、算术逻辑部件ALUbegin

sysbus<=accwhenACC_bus='1'else(others=>'Z');

z_flag<='1'whenacc=zeroelse'0';process(clock,reset)isbeginifreset='1'thenacc<=(others=>'0');

*34微处理器的VHDL描述elsifrising_edge(clock)thenifload_ACC='1'then--loadACCfrombus

ifALU_ACC='1'then--loadACCwithresultfromALU

ifALU_add='1'thenacc<=acc+sysbus;elsifALU_sub='1'thenacc<=acc-sysbus;endif;elseacc<=sysbus;endif;endif;endif;endprocess;endrtl;*35微处理器的VHDL描述4、程序计数器PClibraryieee;useieee.std_logic_1164.all;Useieee.std_logic_unsigned.all;usework.cpu_defs.all;entityPCisport(clock,reset:instd_logic;PC_bus,load_PC,INC_PC:instd_ulogic;

sysbus:inoutstd_logic_vector(word_w-1downto0));endentityPC;*36微处理器的VHDL描述architecturertlofPCissignalcount:std_logic_vector(word_w-op_w-1downto0);begin

sysbus<=rfill&countwhenPC_bus='1'else(others=>'Z');

--PC输出的指令地址码是5位的,而总线是8位的,所以要填满8位

process(clock,reset)isbeginifreset='1'thencount<=(others=>'0');*37微处理器的VHDL描述elsifrising_edge(clock)then

ifload_PC='1'then

ifINC_PC=‘1’then

--INC_PC:incrementPCandsavetheresultinPCcount<=count+1;elsecount<=sysbus(word_w-op_w-1downto0);endif;

endif;endif;endprocess;endrtl;*38微处理器的VHDL描述5、指令寄存器IRlibraryieee;useieee.std_logic_1164.all;usework.cpu_defs.all;entityIRisport(clock,reset:instd_logic;Addr_bus,load_IR:instd_logic;op:outopcode;

sysbus:inoutstd_logic_vector(word_w-1downto0));endentityIR;architecturertlofIRissignalinstr_reg:std_logic_vector(word_w-1downto0);*39微处理器的VHDL描述beginsysbus<=rfill&instr_reg(word_w-op_w-1downto0)whenAddr_bus='1'else(others=>'Z');op<=slv2op(instr_reg(word_w-1downtoword_w-op_w));process(clock,reset)isbeginifreset='1'theninstr_reg<=(others=>'0');elsifrising_edge(clock)then

ifload_IR=‘1’then--load_IR:loadIRfromBUS;instr_reg<=sysbus;endif;endif;endprocess;endarchitecturertl;*40微处理器的VHDL描述6、数据存储器RAM(P149控制信号的含义)libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;useieee.std_logic_arith.all;usework.cpu_defs.all;entityRAMisport(clock,reset:instd_logic;MDR_bus,load_MDR,load_MAR,CS,R_NW:instd_logic;sysbus:inoutstd_logic_vector(word_w-1downto0));endentityRAM;architecturertlofRAMissignalmdr:std_logic_vector(word_w-1downto0);--数据寄存器

signalmar:std_logic_vector(word_w-op_w-1downto0);

--地址寄存器*41微处理器的VHDL描述Begin

--与上次课讲的SRAM相似

sysbus<=mdrwhenMDR_bus='1'else(others=>'Z');process(clock,reset)is

typemem_arrayisarray(0to2**(word_w-op_w)-1)ofstd_logic_vector(word_w-1downto0);variablemem:mem_array;

constantprog:mem_array:=(--定义一段程序

0=>op2slv(load)&conv_std_logic_vector(4,word_w-op_w),

--conv_std_logic_vector转换函数将整数4转换为word_w–op_w

--大小的位矢量,这个函数在arith程序包中。*42微处理器的VHDL描述1=>op2slv(add)&conv_std_logic_vector(5,word_w-op_w),2=>op2slv(store)&conv_std_logic_vector(6,word_w-op_w),3=>op2slv(bne)&conv_std_logic_vector(7,word_w-op_w),4=>conv_std_logic_vector(2,word_w),5=>conv_std_logic_vector(2,word_w),others=>(others=>'0'));beginifreset='1'thenmdr<=(others=>'0');mar<=(others=>'0');mem:=prog;*43微处理器的VHDL描述Elsifrising_edge(clock)thenifload_MAR='1'thenmar<=sysbus(word_w-op_w-1downto0);elsifload_MDR='1'thenmdr<=sysbus;elsifCS='1'thenifR_NW='1'thenmdr<=mem(conv_integer(mar));--在unsigned程序包中

elsemem(conv_integer(mar)):=mdr;endif;endif;endif;endprocess;endarchitecturertl;*44微处理器的VHDL描述7、CPU(top文件)P160将控制部件和功能部件通过统一的时钟、复位信号和总线连在一起。libraryieee;useieee.std_logic_1164.all;usework.cpu_defs.all;entityCPUis

port(clock,reset:instd_logic;sysbus:inoutstd_logic_vector(word_w-1downto0));endentityCPU;*45微处理器的VHDL描述architecturetopofCPUis

componentsequenceris…endcomponentsequencer;

componentIRis…endcomponentIR;

…

componentRAMis…endcomponentRAM;*46微处理器的VHDL描述signalACC_bus,load_ACC,PC_bus,load_PC,load_IR,load_MAR,MDR_bus,load_MDR,ALU_ACC,ALU_add,ALU_sub,INC_PC,Addr_bus,CS,R_NW:std_logic;signalz_flag:std_logic;signalop:opcode;Begin

*47微处理器的VHDL描述s1:sequencerportmap(clock=>clock,reset=>reset,op=>op,z_flag=>z_fla

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论