基于FPGA的8085A CPU结构分析

发布者:EnchantedBreeze最新更新时间:2011-03-31 来源: elecfans关键字:FPGA  8085A  CPU结构 手机看文章 扫描二维码
随时随地手机看文章
    1 引 言

  现场可编程门阵列FPGA 门数众多,人们可以将合适的IP软核或其他形式的核作为嵌入式模块装在自己的设计中。但通常IP软核需要门数较多的FPGA 器件支持,作为学习来说的FPGA 芯片往往资源有限,需要节约FPGA 的成本与面积; 并且没必要实现所有功能, 只要做出关键部分及重要结构,明白其运行机理,又能与真实的CPU 紧密相联即可。实验箱上采用的FPGA 芯片为A ltera 公司的EPF10K20TC144- 4。这里以Inte l的8085A 为例来说明8位计算机的工作原理。

  2 8085A CPU 设计及实现

  2. 1 FPGA 芯片及外围电路简介

  A ltera的FLEX10K 器件是工业界首例嵌入式PLD, 基于可重配置CMOS SRAM 元件。EPF10K20带有144个LAB (逻辑阵列块) 和1152 个逻辑单元, 最大I/O数目为189。另外, 芯片中嵌入式陈列块( EAB)有6个, 其RAM 总位数为12288。

  实验涉及到FPGA 芯片的外围部分包括控制开关、2* 8键盘输入、6个数码管输出、8个输入端口、8个输出端口及2个中断开关等。主要用来增添程序设计的灵活性及形象性, 使其可现场调试, 验证结果, 避免单纯用软件仿真的不足。外围电路控制模块及结构可参见文献[ 1] 。

  现场调试时可以通过控制开关, 手动从键盘输入相应的地址及数据(通过数码管显示), 输错可以修改; 用写使能开关给RAM 写入相应程序。当输入完所有程序后, 按下运行开关即可执行程序, 在数码管上显示地址、数据及最终结果。控制开关用于配合键盘通过手动方式输入程序, 可以形象化的现场编程。在软件下载后不使用计算机, 通过按钮、键盘就能将程序输入到RAM 中, 然后运行, 显示出结果。

  2. 2 CPU模块

  2. 2. 1 内部结构

  CPU 模块的内部结构如图1所示。微型计算机由下面几个部分组成: 8位通用寄存器H、L, 16位程序计数器( PC ) , 16位堆栈指示器( SP), 一个加1 /减1 地址锁存器( ADD /ADR ), 8 位NL 寄存器( NL) , 8位中断时间寄存器( T IMER ) ; 算术逻辑单元(ALU ), 累加器(A ), 标志寄存器( FR ), 数据选择器( SEL) ; 指令寄存器( IR) , 控制器( CON ) , 4选1多路选择器(MUX) , 存储地址寄存器(MAR ) , 8 位数据寄存器(MDR) ; 输入数据寄存器( INDT ), 输出数据寄存器( OUTDT )等部分组成。其中标志寄存器有4位, 分别是: 进位位( Cy)、零位( Z)、符号位( S)、奇偶位( P) , 微机通过检测这些标志位的1位或多位来判断程序是否需要转移。

  微型计算机CPU 结构图

  

 

  图1 微型计算机CPU 结构图

  图中字母L为数据载入控制信号, E 为三态输出选通信号, clk为时钟信号, c lr为清零信号, W 为数据载入PC信号, Cpc为控制PC 加1信号, S3- S0为控制ALU 进行加减、逻辑运算或移位运算的选择信号, Iadr、Dadr为加1 /减1地址锁存器加1减1控制信号, Isp、DSP为堆栈指示器的加1减1 控制信号, E ram、W ram 为读写RAM 控制信号。另外, 累加器(A ) , 标志寄存器( FR )增加了专用的清零信号。

  所有的控制、时钟及清零信号由控制器( CON)模块给出, 而CON 模块由外部时钟clkin、清零信号rst及使能信号enable 控制。存储地址寄存器(MAR )用来给RAM输送地址, 从RAM 读指令和数据, 也可以给RAM写数据。Altera公司的EPF10K20TC144 - 4 芯片中有6个嵌入式陈列块, 其RAM 总位数为12288。这里RAM 可配置为1024 * 8( 1024个地址, 8位数据) ,直接调用参数可设置模块库中LPM _RAM _ IO 的LPM_FILE 文件, 用文本编辑器编辑m if文件来初始化数据。如果不用FPGA 的内部RAM, 可外接64K的8位RAM, 即寻址空间为64K。

  2. 2. 2 指令系统

  内部工作原理和指令系统紧密相联。本微机共有54条指令, 可分为8类, 即数据传送指令、算术与逻辑运算指令、移位指令、增量与减量指令、堆栈操作及中断指令、转移指令、子程序调用及返回指令、其它指令等。指令系统与8080 /8085的指令系统表基本一致, 标志位的变化(无辅助进位位) 与其相同, 可参见文献。

  由于资源所限, 没有使用8085A 所有的寄存器及某些功能, 如B、C、D、E 寄存器等, 但是这并不妨碍本微机能够实现其绝大多数功能。从时钟周期数(状态数)来说, 比8085A 更少, 也就是说速度更快。

  数据传送指令有14条(一个n表示一个8位二进制数据): 3个状态数的movah (将H 的内容存入A )、movha、mov la(将A 的内容存入L)、mova;l 4状态的mvian(将数据n存入A)、mv ihn、mv iln、mvitn(将数据n 存入t ime寄存器, 此指令为新增) ; 5 状态的movma(将A 的内容装入HL所指的地址)、movam; 4状态数的sphl(将HL寄存器的内容装入SP); 6状态的inn( n所指地址的内容给A )、outn; 4状态的cd _out(A内容给PC+ 1, 停机, 此指令为新增)等。

  算术与逻辑运算指令有13 条: 3 状态的cmc( Cy符号取反)、stc( Cy置1) 、cma(寄存器A 内容取反); 4状态的addh(将A 与H 相加后给A )、adin(将A 与n相加后给A)、subh、su in、cmph(将A 与H相比较(只影响符号) )、ADCh(将A 与H 及符号Cy相加后给A )、sbbh、anah(将A 与H 寄存器的内容相与后给A )、orah、xrah(将A 与H 异或后给A )等。

[page]

 

    移位指令有4条, 同8085A。增量与减量指令有4条, 只针对H、L寄存器。堆栈操作及中断指令有8条: 7 状态的pushh( HL 压入堆栈)、pushp( AF压入堆栈); 6状态的poph、popp; 8状态的rsta(重新启动); 3状态的etim e( T 寄存器使能, 此指令为新增)、eint(中断使能)、d int等。转移指令有5条: 7状态的jmpn(无条件转移至程序nn, 低位在前); 不跳转时5状态, 跳转时7状态的jnn( Z= 1时转移至程序nn)、jcn、jmn、jpen等。子程序调用及返回指令有2条: 11状态的calln (保留当前PC, 转移至程序nn, 低位在前)、7状态的ret(返回)。其它指令有4条: 3状态的nop、c lRF(标志寄存器清零, 此指令为新增)、clrA (A 清零, 此指令为新增)、hlt等。

  状态数的计算, 若本次指令的前面一指令为3状态数时, 本指令将会减少1 状态。如: movha,adin; 若第1指令movha前没有其它3 状态指令时,它是3个状态, 而adin会减少1状态, 由原来的4状态变为3状态。再如: mov la, movha; 则后一状态由3状态变成2状态。其余类似(但不包括rsta)。

  2. 2. 3 工作原理

  由图1可知, 不同的子模块一共有20个, 每个模块用VHDL程序来实现, 最后用元件例化语句构成总模块。下面以设计算术逻辑部件模块c_alu及控制模块c_con为例简要介绍一下思路。

  ( 1)算术逻辑部件c_alu。

  算术逻辑部件c_a lu非常占用FPGA的逻辑单元log ic cells, 需要尽量优化。S3- S0为控制ALU 进行加减、逻辑或移位运算的选择信号, 一共可得到16种运算, 这里用了13种: 6种算术、3种逻辑运算和4种移位指令。如加法、减法、加1、减1、带符号位加法、带符号位减法; A 或B、A 与B、A 异或B; A 左移、A右移、A 带Cy 左移、A 带Cy右移等。另外, ALU 的运算直接影响到符号位的变化, 运算结果存入标志寄存器( FR)。有关alu的运算多为4个状态。

  ( 2)控制模块c_con。

  占用FPGA 的逻辑单元log ic ce lls最多的是控制模块c_con。在参考文献[ 3] 中的思路不再适合于稍大型的CPU 设计, 但它是理解如何控制CPU 信号的一个起点。对于一条指令应该细化到每一个步骤及每一位, 而不再是以一个控制字的方式去实现。以指令movah为例, 首先把PC 值送入MAR 寄存器, 此为状态s0, 这时起作用的是Lmar; 然后在状态s1时, PC值加1, 将存储器单元中的内容读入到IR, 这时Cpc、E ram、Lir起作用, Lmar不再起作用, 需要置0; 接着在状态s2时, 对IR 寄存器中的指令进行译码, 所有的操作指令都是在此状态译码(不包括rsta)。对于3状态指令, 不保存指令, 直接执行, 然后跳转到状态s1。因此对于下一条指令来说, 其状态数减1。

  指令中状态数最多的是子程序调用ca lln指令。

  C alln指令要保存PC 值到SP- 1及SP- 2中, 然后跳转到子程序。考虑到返回指令ret执行后, PC 要重新在原位置执行, 那么存入SP中的PC 值应该是在得到其指令后加3。对PC 进行单独加3是一种思路, 但需要另外耗费资源, 并且增加状态。这里采用了先把ca lln后的nn存入16位的加1 /减1 地址锁存器, 然后保存PC 到SP, 再将nn 赋值给PC, 跳转到子程序的方法。返回指令ret不仅可以用作子程序调用后的返回, 还可用于中断的返回。

  2. 3.. FPGA 实现及编程思路

  由于使用内部RAM, 其地址空间为0000 -03FFH。通常在00H 中放入28 (即jmpn, 跳转指令) , 将程序跳转到从40H 开始。把03- 0EH 作为放常用变量的空间, 用inn及outn指令来调用, 以解决寄存器不足的缺陷。这也是一种编程思路, 可参见文献[ 4] 。0FH、1FH、2FH 分别为外部中断0( int0) , 外部中断1( int1), 定时器中断( time) 的起始位置。Int0优先级最高, int1次之, time最低。中断信号高电平有效。中断功能的实现是为了学习其工作原理, 只做了一个定时器中断。计时为减1方式, 当计时为0时, 发出中断信号。T ime中断的使用方法: 首先关中断( dint), 给T赋值(mv itn) , 再开中断( e int), T寄存器使能( et ime)。此后, T 寄存器正常工作。若要再次使用, 首先给T 赋值, 然后T寄存器使能。

  初始时的PC 为0000H, SP为03FFH。SP的更改可通过指令sph l来执行。针对实验箱, 将8000-0FFFFH 作为输出口地址, 4000 - 7FFFH 作为输入口地址。而实际实验箱上只定义了1个8位输入, 1个8位输出。IO 口的操作可通过movam 及movma指令去实现。

  由于键盘输入时, 要进行去抖动处理, 使用了两种不同的时钟频率。键盘处理采用1KH z的频率,而CPU 的工作时钟可选择实验箱上的不同频率, 从1H z到10MH z皆可, 甚至可以外接其它更高频率。

  如果采用1H z的clk in 频率, 可以清楚地看到CPU工作的每一过程。

  将本微机下载到实验箱上, 已成功实现了乘法(用减1或右移的方法), 调用子程序, IO 口的使用,中断的使用等多项实验, 验证了CPU 设计的正确性。

  3 结束语

  QuartusII对微机进行编译, 其逻辑单元LE 用到1151, 占100% 。用FPGA 来实现CPU 的功能, 研究其工作原理, 然后用Synp lify pro软件对其进行门级研究, 对CPU 的面纱将不再感到神秘, 有利于做成专用集成电路ASIC, 控制其规模, 节约芯片成本与面积。同时, 也会增加对FPGA 的学习兴趣和使用技巧, 开发出更多新的产品。

关键字:FPGA  8085A  CPU结构 引用地址:基于FPGA的8085A CPU结构分析

上一篇:Stratix系列FPGA电源方案设计分析
下一篇:Verilog HDL与VHDL及FPGA的比较分析

推荐阅读最新更新时间:2024-05-02 21:19

基于Virtex UltraScale+FPGA的可配置的HES-HPC-HFT-XCVU9P PCIe 卡
高频交易,这个名词可能对你并不陌生,它是指那些人们无法利用的,极为短暂的市场变化中寻求获利的自动化程序交易,高频交易瞬息万变,而决胜的关键就在于快。今天小编就给大家介绍一款Aldec最新的专门用于高频交易的PCIe卡,由小编前面的介绍,大家一定也只知道这款卡的主打性能就是速度快,没错,这也就不难理解为什么Aldec的新型的面向高频交易的HES-HPC-HET-XCVU9P PCIe卡采用Xilinx Virtex UltraScale + VU9P FPGA 的结构。 这款PCIe卡在速度上与任何可重编程或重配置的技术所能达到的速度一样快。Virtex UltraScale + FPGA直接链接到主板上所有的关键的高速接口
[嵌入式]
基于FPGA的CAN总线控制器设计
0 引言     CAN(控制器局域网)是一种先进的串行通信协议,由德国BOSCH公司开发,并最终成为国际标准(ISO11898),是国际上使用最广泛的现场总线之一。目前世界上已有20多家CAN总线控制器生产商,110多种CAN总线控制器芯片和集成CAN总线控制器的微处理器芯片。     由于定制的CAN总线控制器芯片不能嵌入到SoC(片上系统)中,而采用分立元器件实现CAN总线接口,使得系统中器件数量增加,同时也增大了系统面积,本文所介绍的CAN总线控制器正是由Verilog HDL语言描述,既可以作为一个独立的设备,也可以作为一个模块集成到FPGA中。     虽然目前国内外已有很多人研究或设计了CAN总线控制器IP核,但其中大
[嵌入式]
英特尔® FPGA Vision线上研讨会亮点抢先看
英特尔成立独立FPGA公司,加速行业创新 继宣布将可编程解决方案事业部 (PSG) 作为独立业务部门运营后, 英特尔将于3月1日举行FPGA Vision线上研讨会 。届时,首席执行官Sandra Rivera和首席运营官Shannon Poulin将分享有关全新企业品牌、公司愿景与战略,以及市场增长机会的更多信息。 英特尔PSG团队诚邀您参加本次线上研讨会,深入了解独立运营的全新FPGA公司,持续增长的市场及客户需求,以及我们旨在助力行业创新加速的产品路线图。与此同时,线上研讨会还将重点介绍FPGA在AI领域的布局,即如何使AI在数据中心、网络和边缘易于访问及扩展。此外,Rivera和Poulin将重磅发布全新支持工具
[嵌入式]
FPGA在语音存储与回放系统中的应用
   1 引言   随着数字信号处理器、超大规模集成电路的高速发展,语音记录技术已从模拟录音阶段过渡到数字录音阶段。在数字化录音技术中,压缩后的语音数据有些存储在硬盘中,有些存储在带有掉电保护功能的RAM或FLASH存储器中。笔者介绍的语音存储与回放系统,未使用专用的语音处理芯片,不需要扩展接口电路,只利用FPGA作为核心控制器,就能完成语音信号的数字化处理,即实现语音的存储与回放。   2 系统总体结构   数字化语音存储与回放系统的基本工作原理是将模拟语音信号通过模数转换器(A/D)转换成数字信号,再通过控制器控制存储在存储器中;回放时,由FPGA控制将数据从存储器中读出,然后通过数模转换器(D/A)转换成模拟信号,经放
[嵌入式]
<font color='red'>FPGA</font>在语音存储与回放系统中的应用
基于DSP+FPGA的WCDMA系统基带发送实现方案
引言 随着Internet的迅猛发展和各种无线业务需求的增加,目前以承载单一话音业务为主的无线通信网已经越来越不适应人们的需要,所以,以大容量、高数据率和承载多媒体业务为目的的第三代移动通信系统(IMT-2000)成为无线通信的发展方向。码分多址(CDMA)技术凭借其良好的抗噪性、保密性和低功率等优点成为第三代移动通信中最主要的多址接入技术。 和传统的CDMA系统相比,第三代移动通信的最大特点在于能支持多种速率的业务,从话音到分组数据到多媒体业务,并能根据具体的业务需要,提供必要的带宽。3GPP协议规定WCDMA系统支持的业务类型包括:5.15Kbps~12.2Kbps话音数据、64Kbps电路数据、144Kbps分组数据和384
[嵌入式]
基于DSP+<font color='red'>FPGA</font>的WCDMA系统基带发送实现方案
基于FPGA的SDX总线与Wishbone总线接口设计
  随着微电子设计技术与工艺的迅速发展,数字集成电路逐步发展到专用集成电路(ASIC),其中超大规模、高速、低功耗的新型FPGA的出现,降低了产品的成本,提高了系统的可靠性。同时,各种电子产品的复杂度和现代化程度的要求也逐步提高,文中针对机载信息采集系统的可靠性、数据管理的高效性以及硬件成本的需求。设计实现了与Wishbone总线SDX总线的接口转化,完成了数据采集功能模块与SDX总线协议之间的数据传输。   该设计主要采用硬件描述语言Verilog HDL在可编程逻辑器件FPGA上实现,由于数据采集功能模块繁多,而Wishbone总线可以与任何类型的ROM或RAM相连,因此需在SDX总线与数据采集模块中嵌入Wishbone总
[嵌入式]
基于FPGA的高精度相位测量仪的设计
  引言   随着集成电路的发展,利用大规模集成电路来完成各种高速、高精度电子仪器的设计已经成为一种行之有效的方法。采用这种技术制成的电子仪器电路结构简单、性能可靠、测量精确且易于调试。本文采用Altera CycloneII系列FPGA器件EP2C5,设计了高精度相位测量仪。测量相位差所需的信号源在FPGA内部运用DDS原理生成,然后通过高速时钟脉冲计算两路正弦波过零点之间的距离,最后通过一定的运算电路得到最终相位值,测相精度为1°。 图1 相位测量仪硬件结构图 图2 基于DDS的数字移相信号发生模块框图 图3 控制模块顶层原理框图 图4 相位测量模块原理框图 系统硬件设计   该基于FPGA的相位测量仪,硬件
[测试测量]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved