3 仿真与分析
为了测试指令的运行情况,本文在后给出了一段基于 II的程序仿真。

仿真时给出了10位输入数据indata=”1 110000101”,10.0~10.4分别对应着该数据的第0位~第4位,同样Q0.0和Q0.1分别对应着输出端子的第0位和第1位。
仿真结果的图6中:T1,T2,T3,T4为4个时钟节拍信号,out0和out1分别对应着输出端子Q0.0和Q0.1,因为IO.0和IO.2为1,IO.3和IO.4都为0,因此程序运行的后结果应该是Q0.0和Q0.1都为1,并且从图6可以看出,仿真结果与此相同,程序运行正确,说明所设计的微处理器及其指令正确可靠。

图6 II仿真结果
4 结束语
本文所设计的PLC微处理器具有很强的可修改性和可移植性,并且优化升级也很方便,可以根据特定的需要方便地增删指令和I/O端口的数量,这比传统的PLC具有更大的灵活性。另外,由于FPGA具有很高的密度,能够集成很大的系统,因而极大地提高了系统的可靠性。

表1 指令系统
该系统中的每条微指令为32位,其中低5位为下地址字段,直接送给微地址寄存器,第5~7位为测试字段,送到微地址产生逻辑电路里面以控制微地址的产生,其余位为用来产生各种微命令的控制字段。
(2)控制存储器。控制存储器中存放的是各指令所对应的微程序,它可以用FPGA中的LPM—ROM模块来实现,如图2所示。Clock为同步时钟信号,address为5位的地址值,q为32位的微指令,当clock上升沿到来时,rom就把address所对应的地址中的值输出给q。

图2 控存原理图
(3)微地址产生逻辑。微地址产生逻辑主要是根据微指令中的测试位及其他相关的条件来控制微地址的产生,它是根据一定的逻辑功能用VHDL语言编写的,并且经过编译和综合后生成的模块,如图3所示。

图3 微地址产生逻辑电路原理图
其中,clk为同步时钟信号,rst为复位信号,q为输出的5位微地址值。其控制流程如下:
(1)系统启动时,给出一个rst=1的复位信号,q端便输出“00010”,为输入扫描微程序的入口地址;(2)对应的微指令就从控存中输出,然后该微指令中的5位下地址字段直接输入到din端,3位测试位输入到m端;(3)如果m=“000”,则q端输出的地址值直接加1,且返回(2)继续执行;否则,执行下一步;(4)如果m=“001”,则看i端输入的用户程序指令来判断是否需要取数操作,如果需要,则q端输出各个取数微程序的入口地址;如果不需要,则q端根据i的操作码输出相应指令的微程序入口地址,且返回(2)继续执行;否则,执行下一步;(5)如果m=“010”,q端直接输出din的地址值,且返回(2)继续执行;否则,执行下一步;(6)如果m=“011”,则q端根据i的操作码输出相应指令的微程序人口地址,且返回(2)继续执行。
2.2 运算器
运算器是用来对输入的数据进行算术和逻辑运算的部件,该ALU具有三输入和两输出,d1和d2是参与逻辑运算的两个位数据,其中dl来自外部的取数,d2来自输出暂存器s,sel是指令的操作码。result是运算后的结果,输出后送给了暂存器S,q用来启动定时器,如图4所示。

图4 运算器原理图
2.3 RAM
RAM用来存储用户程序,它可以用FPGA中的LPM—RAM—DQ模块来实现。其中,wren是读写控制端,当wren=0时为读允许,这时在同步时钟clock的上升到来时沿将address所对应的地址中的内容给输出端q;当wren=1时为写允许,这时在同步时钟clock的上升沿到来时将data端的数据写入到address所指明的地址中,如图5所示。

图5 RAM原理图
西门子代理商,西门子模块代理商,西门子一级代理商,西门子PLC代理,西门子中国代理商