基于FPGA和VHDL的简易微机的结构分析与应用

通常,人们对微型计算机的工作原理及硬件结构的了解来源于书本知识,深入理解掌握其功能特点比较困难,要自己亲手去做一个类似功能的微型计算机更是不可能。随着可编程逻辑器件的广泛应用,为数字系统的设计带来了极大的灵活性,用户可以利用fpga(现场可编程门阵列)来开发出一个精简指令的cpu,同时对微型计算机的原理及结构进行充分研究,便于将来进行相关asic(专用集成电路)设计,也可用于计算机原理教学之中。
1 微型计算机结构及原理
以一个简化的微型计算机为例,微型计算机的简化结构。
1.1 微型计算机结构
微型计算机由pc(程序计数器)、ir(指令寄存器)、con(控制部件)、mar(存储地址寄存器)、rom(只读存储器)、a(累加器)、alu(算术逻辑部件)、b(寄存器)、outreg(输出寄存器)、dleddis(数码管动态扫描模块)及decl7s(显示模块)等组成。这里仅介绍有所改变或不同的模块,其余可见文献。
l为数据载入控制信号,e为三态输出选通信号,clk为时钟信号,clr为清零信号,cp为控制pc加1信号,s0-s3为控制alu进行加减或逻辑运算的选择信号。所有的控制、时钟及清零信号由con模块给出,而con模块由外部时钟clkin及清零信号rst控制。pc可以置数,即可执行跳转指令。outreg可清零,便于多次调试。dleddis及decl7s用来把地址及结果在数码管上显示出来。
1.2 微型计算机原理
虽然这台微型机可以实现16条指令,但本文对指令不做扩展,仅以5条指令为例。lda为将数据装入累加器a(操作码0000);add为进行加法运算(操作码0001);sub为进行减法运算(操作码0010);out为输出结果(操作码1110);hlt为停机(操作码1111)。
在程序和数据装入后,当外部给出时钟信号及清零信号无效时,由con模块发出信号及控制字,开始取出和执行每条指令。如控制字顺序为erlrs3s2s1soeulm lbealaei licpeplp,这里lr可用于存储器为ram时做写使能信号。由于采用的是数据总线与地址总线合一的总线结构,一条指令的执行需要6个机器节拍,即前3节拍取指周期与后3节拍执行周期。如执行add 0ah,机器码为1ah(0001 1001)。第1节拍将pc内容送入mar,控制字为“0000 0001 00000010”,即ep与lm为1;第2节拍将rom中对应地址单元中的内容送到ir,ir高4位送至con,控制字为“1000 0000 0000 1000”,即er与li为1;第3节拍使pc加1,控制字中cp为1,其余为0;第4节拍将ir的低4位送至mar,ei与lm为1;第5节拍将rom中的内容送入累加器a中,er与la为1;第6节拍为加法运算,eu与la为1,同时s0-s3选择为加法运算。
2 fpga实现
2.1 总线方式
总线方式是指严格按图1用fpga实现相应结构的微型机。本实验采用上海航虹公司的aedk实验箱,fpga芯片为altera公司的epf10k20tc144-4,软件采用quartusii4.0、max+plusii10.0及synplifypr07.5,程序设计采用vhdl语言。
共有11个子模块,最后用元件例化语句构成总模块。以设计程序计数器模块c-pc及控制模块c_con为例简单做一介绍。
当三态输出信号es选通时,即es=“1”,pc可输出,否则输出为高阻态。数据或地址与总线相关的子模块都需采用三态门。由于采用了三态门,最好用quartusⅱ软件来进行编译,max+plusⅱ有时不一定可以通过。
用synplify pro7.5对c_pc模块进行rtl(寄存器传输级)原理图观察,如图2所示。其综合电路与一个4位二进制计数器类似,只是多了一个三态门。用synplify pro7.5不仅可以观察rtl电路,还可以观察门级电路结,深入了解其内部结构。
c_con模块是最关键的模块,因为所有的控制信号都由它发出。由于指令执行需6个机器节拍,每个节拍对应相应功能,采用状态机是实现此高效率、高可靠逻辑控制的重要途径。如以下程序所示,每个状态对应着不同的控制字,共有6个状态。
只读存储器模块可使用lpm_rom的lpm_file文件,便于调试不同的程序。
2.2 多路选择器方式
多路选择器方式是对总线方式的一种改进,可以实现地址总线与数据总线分离,一条指令的执行只需4个机器节拍,极大地提高了运行速度。对图1进行略微改变,如图3所示。其中程序计数器模块duolu_pc及指令寄存器模块duolu_ir不再有三态门,对其控制也相应简化。增加了2个二选一多路选择器。下面介绍其工作原理。
状态s0(第1节拍)时,首先判断有没有加减法指令,若有则发出控制信号,pc值同时送入mar.如控制字顺序为erlrs3s2 s1s0eulm lbealaei licpeplp,有加法时,其控制字为“0000 1011 0010 0010”,当s3s2s1s0为“0001”时做加法运算;没有加减法时则控制字为“0000 0001 0000 0010”。状态s1时,pc值加1,将存储器单元中的内容读人到ir,其控制字为“1000 0000 0000 1100”,注意当给程序计数器置数时,lp才为l,多路选择器选通由ir米置数。状态s2和s3与总线方式的第4和第5节拍类似。整个周期可简化为判断与置地址、读数、判断与置地址、读数4个步骤。
这里的多路选择器方式仅仅是略微改变,不是指全部,只是提出一种方法。
2.3 功能描述方式
功能描述方式是指充分利用vhdl语言的行为描述能力,从功能描述的角度来实现简易微型计算机。除了调用rom模块及outreg、dleddis、decl7s外,其余子模块被包含在一个整体c_sim_cpu模块内,每一个状态实现一定的功能。同样,c_sim_cpu模块只需4个状态即可实现相应功能。部分程序如以下所示,不再采用控制字的方式。
c_sim_cpu模块由于强调实现功能,其语句不同用户有着不同写法,不同的综合软件也会生成不同的结构,因而这里不再展开讨论。
2.4 3种方式比较
用quartusⅱ4.0对总线方式、多路选择器方式及功能描述方式分别进行编程下载,都可以实现一些简单的计算程序,在数码管上显示出地址及相应结果。如果采用1 hz的clkin频率,动态扫描频率单独用1 khz时,可以清楚地看到每一过程。
quartusⅱ4.0对总线方式、多路选择器方式及功能描述方式编译,其le(逻辑单元)分别为:232、206、143.功能描述方式资源利用最优,但结构复杂。多路选择器方式优于总线方式,不仅是在资源利用上,还是在执行速度上。当然,总线方式对于模块的扩展方面要强于多路选择器方式。
如果想更深入了解其内部结构,可以使用synplifypro软件观察这3种方式的rtl电路及门级电路。用synplify pro软件进行综合,显示所需的le比quartusⅱ4.0更少。
3 结束语
微型计算机的原理及结构一般不易理解掌握,利用fpga来学习并构建一个简易微型计算机无疑是一个好方法,对eda的软硬件学习也是一个不错的选择,可为将来进行相关asic没计打下良好的基础。

未来工业物联网的市场将会发展为多大
通过软件的改进与创新推动物理安防领域的进步
关闭iPhone两个隐蔽功能 降低iPhone耗电量
新能源 | 美国推进电动车供应链发展计划
把ChatGPT塞进副驾驶!清华、中科院、MIT联合提出Co-Pilot人机交互框架
基于FPGA和VHDL的简易微机的结构分析与应用
安捷数科与Graphcore携手,使用IPU进行气象预测、精准灌溉和防灾减灾
使用IPMI命令批量禁用服务器BMC Web门户的强密码策略
一文包你读懂VGA接口连接器
特斯拉和Fastned等创立德国最大的快速充电中心
汽车级CAN隔离收发模块——CTD-CAN系列
AI机器人助力疫情防控 让关键地区实现无接触式检测
农业大棚温湿度看板的3大功能及在不同行业中的广泛应用
基于人工智能的故障检测工具TSD
哪三大技术促使3G应用更加成熟和丰富
FM激光雷达与替代方案:比较和设计权衡
分享PCB中的去耦电容设计
巴鲁夫BTL线性磁致伸缩传感器
为理想ONE汽车装上智能驾驶之“慧眼”
IT7900高压电网模拟器单机轻松完成并网逆变器高压穿越测试