VerilogHDL负责数字电路设计(AI助学版)课件_第1页
VerilogHDL负责数字电路设计(AI助学版)课件_第2页
VerilogHDL负责数字电路设计(AI助学版)课件_第3页
VerilogHDL负责数字电路设计(AI助学版)课件_第4页
VerilogHDL负责数字电路设计(AI助学版)课件_第5页
已阅读5页,还剩25页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

9.3Intel单片机接口电路Intel单片机8051通常用来作为电路系统板级控制的CPU。常见的使用方式是单片机通过串口与上位机通信,单片机通过“CPU接口”与板子上的各个功能芯片进行通信单片机通过CPU接口实现与板子上的各个功能芯片进行通信。通过控制寄存器对功能芯片的功能进行选择,实现对功能芯片工作模式的控制;同时,通过状态寄存器对功能芯片的工作状态进行检测。简单说,Intel单片机通过CPU接口直接对芯片内部寄存器进行写,完成对功能芯片的功能选择和控制,对功能芯片的状态寄存器进行读,实现对功能芯片工作状态的检测特定功能芯片内部的寄存器分为两种,一种是控制寄存器,另一种是状态寄存器。这两种寄存器可以是D触发器,也可以是RAM。因此,控制就是把数据写入D触发器或RAM中,触发器的Q输出端或RAM的输出就是控制端。读出就是把D触发器的Q端的电平值或RAM中的值读到单片机内部,对电路的工作状态进行监控Intel单片机对外进行读和写有一个完整的时序,在单片机设计时就已经规定好了,不管是哪个型号,都是固定不变,遵从这种时序规则。因此,在进行CPU接口的电路设计时,一定要遵从这个时序规则Intel接口下微处理器的写时序图Intel写时序时间参数表名称说明最小典型最大单位t1地址锁存建立时间20

nst2地址锁存保持时间20

nst3有效锁存脉宽20

nst4锁存写入建立时间0

nst5锁存写入保持时间20

nst6地址有效写入建立时间25

nst7有效写入脉宽40

nst8地址有效写入保持时间25

nst9数据有效写入保持时间20

nst10数据有效写入建立时间20

nsIntel

接口读时序图Intel读时序时间参数表名称

说明最小典型最大单位t1地址有效读出建立时间25

nst2地址锁存建立时间20

nst3有效锁存脉宽20

nst4地址有效读入保持时间25

nst5地址锁存保持时间20

nst6读入锁存建立时间0

nst7读入锁存保持时间20

nst8读有效驱动数据总线D[7:0]

80nst9读有效失效后,输出变为三态

20ns以D触发器构建寄存器,进行电路设计把CPU的读写时序进行有机组合,以便满足对D触发器进行数据写入的时序要求寄存器可以是一位的寄存器,由一个D触发器构成,也可以是位寄存器,由多个D触发器构成。对于多位寄存器,CPU一次能写入的数据受数据总线宽度的限制,如果总线的数据位宽度为8位,一次最多能写8个寄存器CPU最多能写入寄存器的位数与CPU数据总线宽度位相等,如果需要控制写入的寄存器多于8位,就不能通过一次写入控制,需要对寄存器进行分组,进行多次写入控制,每一组寄存器分配一个地址对地址宽度进行译码,每个译码值对应一组寄存器。若地址宽度为8,对应有256个地址译码值,最多可以对256组寄存器进行控制CPU对某个外部芯片进行读和写操作时,都会给出一个地址段,有多少个地址译码值,可以最多读写多少个8位数据总共可以读写的寄存器个数等于地址段译码值乘以数据的宽度设计时可以地址进行数据分组,让每一组的D触发器个数与总线的宽度位数相等,不同的寄存器组用地址加以区分,一个地址值对应一组寄存器如果所有可用的地址都用了,还不能达到控制寄存器的个数,需要采用间接寄存器读写的方式进行Intel接口电路中间电路就是:写寄存器电路,把CPU的写时序转换为具有使能端D触发器的时钟、数据和使能信号读寄存器电路,把各组寄存器的Q端通过选择输出,然后存入一组D触发器中,该组D触发器的输出端与CPU的数据总线直接连接,以便CPU能读到稳定的数据。把CPU的读时序转换为输出数据的选择信号和存入D触发器组的时钟信号。选择输出用选择器,选择信号位地址信号地址译码电路,通过译码器,把CPU的给出的地址信号转换为写入D触发器组的使能信号always@(posedgeresetorposedgewr)beginif(reset)reg_DFF<=8'b0000_0000;elseif(addr)reg_DFF<=D_in;end1)写寄存器寄存器分为多个组,每一组为一个寄存器组,对应一个写地址,寄存器组中的D触发器的个数与CPU数据总线的位数相同。assignaddr0=(A==8'h00)?1:0,addr1=(A==8'h01)?1:0,addr2=(A==8'h02)?1:0,addr3=(A==8'h03)?1:0,addr4=(A==8'h04)?1:0,addr5=(A==8'h05)?1:0,……addr255=(A==8'hFF)?1:0;在addr为高电平时,Din的数据在写时钟wr的作用下才能写入D触发器组reg_DFF。由于寄存器由多个组组成,因此在写之前,需要先进行写地址译码。译码电路为8-256比较译码器always@(ALEorA)beginif(ALE)latch_A=A;end有些种类的单片机,为了减少引脚,把地址总线和和数据总线进行复用,即共用。在这种情况下,需要先对地址进行锁存2)读寄存器由于有多组寄存器组,需要用读地址进行寄存器组的选择,然后把选择好的寄存器组的数据读(写)入一组D触发器,该DFF的输出经过三态buf送入数据总线,供CPU读取。always@(posedgerdorposedgereset)beginif(reset)D_out<=8'b00000000;elseD_out<=reg_o;endalways@(*)begincase(1'b1)addr0:reg_o=reg0;addr1:reg_o=reg1;addr2:reg_o=reg2;addr3:reg_o=reg3;addr4:reg_o=reg4;addr5:reg_o=reg5;addr6:reg_o=reg6;……addr255:reg_o=reg255;default:reg_o=8'b0000_0000;endcaseend读地址进行寄存器组的选择,对应的是一个256选1的选择器modulesel_int(CSB,RDB,WRB,wr,rd);inputCSB,RDB,WRB;outputwr,rd;assignrd=~(CSB|RDB);assignwr=CSB|WRB;endmodule3)时钟rd和wr构造双向数据总线D经过驱动器buf直接进行电路内部。输出数据D_out在rd为高电平时,送到数据总线上,以便CPU进行读取4)双向总线电路5)电路的总体结构图6)端口定义信号名类型引脚数功能描述CSB输入1低电平有效的片选信号。RDB输入1低有效的读使能信号,在Intel模式下寄存器读访问期间为低。在RDB和CSB为低电平时用被寻址的寄存器内容驱动D[7:0]总线。WRB输入1低有效的写选通信号,在Intel模式下寄存器写访问期间为低。当CSB为低时在WRB的下降沿将D[7:0]总线的内容打入寻址的寄存器中。D双向8双向数据总线,在寄存器读写访问期间使用。在电路内部通过双向连接,变为D_in和D_out两个信号。A输入8地址总线,在寄存器访问期间选择指定的寄存器。reset输入1高电平有效的异步复位信号。ALE输入1在地址/数据复用模式下,该信号用作地址锁存信号,在非复用模式下,该信号应接高电平。7)VerilogHDL建模moduleCPUInterface(reset,CSB,RDB,WRB,A,D,ALE);inputreset,CSB,RDB,WRB;input[7:0]A;inputALE;inout[7:0]D;wirerd;reg[7:0]D_out;reg[7:0]latch_A;wire[7:0]reg_o,D_in;assignD_in=D;assignD=(rd)?D_out:8'hzz;always@(ALEorA)beginif(ALE)latch_A=A;endmain_rmain_r(.latch_A(latch_A),.wr(wr),.D_in(D_in),.reg_o(reg_o),.reset(reset));sel_intsel_int(.CSB(CSB),.RDB_E(RDB),.WRB(WRB),.wr(wr),.rd(rd));always@(posedgerdorposedgereset)beginif(reset)D_out<=8'b00000000;elseD_out<=reg_o;endendmodulemodulesel_int(CSB,RDB,WRB,wr,rd);inputCSB,RDB,WRB;outputwr,rd;assignrd=~(CSB|RDB);assignwr=CSB|WRB;endmodule//-------------------------------------------modulemain_r(latch_A,wr,D_in,reg_o,reset);inputreset,wr;input[7:0]D_in,latch_A;output[7:0]reg_o;reg[7:0]reg0,reg1,reg2,reg3,reg4,reg5,reg6,reg7,reg_o;wireaddr0,addr1,addr2,addr3,addr4,addr5,addr6,addr7;assignaddr0=(latch_A==0)?1:0;assignaddr1=(latch_A==1)?1:0;assignaddr2=(latch_A==2)?1:0;assignaddr3=(latch_A==3)?1:0;assignaddr4=(latch_A==4)?1:0;assignaddr5=(latch_A==5)?1:0;assignaddr6=(latch_A==6)?1:0;assignaddr7=(latch_A==7)?1:0;always@(posedgeresetorposedgewr)beginif(reset)reg0<=8'b0000_0000;elseif(addr0)reg0<=D_in;endalways@(posedgeresetorposedgewr)beginif(reset)reg1<=8'b0000_0000;elseif(addr1)reg1<=D_in;endalways@(posedgeresetorposedgewr)beginif(reset)reg2<=8'b0000_0000;elseif(addr2)reg2<=D_in;endalways@(posedgeresetorposedgewr)beginif(reset)reg3<=8'b0000_0000;elseif(addr3)reg3<=D_in;endalways@(posedgeresetorposedgewr)beginif(reset)reg4<=8'b0000_0000;elseif(addr4)reg4<=D_in;endalways@(posedgeresetorposedgewr)beginif(reset)reg5<=8'b0000_0000;elseif(addr5)reg5<=D_in;endalways@(posedgeresetorposedgewr)beginif(reset)reg6<=8'b0000_0000;elseif(addr6)reg6<=D_in;end---------------always@(addr0oraddr1oraddr2oraddr3oraddr4oraddr5oraddr6oraddr7orreg0orreg1orreg2orreg3orreg4orreg5orreg6orreg7)begincase(1'b1)addr0:reg_o=reg0;addr1:reg_o=reg1;addr2:reg_o=reg2;addr3:reg_o=reg3;addr4:reg_o=reg4;addr5:reg_o=reg5;addr6:reg_o=reg6;addr7:reg_o=reg7;default:reg_o=8'b0000_0000;endcaseendendmodule//----------------------------8)VerilogHDL建模(1)Intel接口地址复用模式的数据读写仿真要求:CPUInterface的D和A两个引脚连接CPU的复用引脚A。reset信号1000ns的高电平通过写操作分别向reg0~reg7写入8组十六进制数02、03、04、05、06、07、0A、FF通过读操作将写入到寄存器reg0~reg7中的数据读出//测试激励`timescale1ns/1nsmoduleCpuInterface_tb;regALE,CSB,RDB,WRB,reset;wire[7:0]A;parameterDELAY=5;CPUInterfaceutt(.reset(reset),.CSB(CSB),.RDB(RDB),.WRB(WRB),.A(A),.D(A),.ALE(ALE));initialbeginALE=0;CSB=0;RDB=1;WRB=1;reset=1;endinitial#(DELAY*200)reset=0;taskwreg;input[7:0]addr;input[7:0]data;begin

forceA=addr;#(DELAY*4);ALE=1;#(DELAY*4);ALE=0;

releaseA;//释放#(DELAY*4);

forceA=data;#(DELAY*4);WRB=0;CSB=0;#(DELAY*8);WRB=1;#(DELAY*5);

releaseA;//未释放force语句导致信号锁存#(DELAY*5);endendtasktaskrreg;input[7:0]addr;begin

forceA=addr;#(DELAY*2);ALE=1;#(DELAY*4);ALE=0;#(DELAY*2);ALE=0;releaseA;//未释放force语句导致信号锁存

#(DELAY*2);CSB=0;RDB=0;#(DELAY*8);RDB=1;CSB=0;#(DELAY*5);endendtaskinitialbegin#(DELAY*200);wreg(8'h00,8'h02);//验证地址0的寄存器写入功能wreg(8'h01,8'h03);//验证地址1的寄存器写入功能wreg(8'h02,8'h04);//验证地址2的寄存器写入功能wreg(8'h03,8'h05);//验证地址3的寄存器写入功能wreg

温馨提示

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

最新文档

评论

0/150

提交评论