0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于基于FPGA和ARM的虚拟软盘实现

电子设计 来源:网络整理 作者:工程师吴畏 2018-06-29 14:26 次阅读

0 引言

随着硬件技术的进步,软盘逐渐被新的存储介质代替。但部分旧设备(比如织布机等)并不支持这些更快、容量更大的存储设备,也不支持网络访问。因此,设法将存储设备虚拟成软盘,通过网络对其进行数据访问具有一定的实用价值。在台式机读写软盘过程中,数据流遵循MFM编码格式,使用CRC校验检测数据误差。

本文提出一种基于FPGAARM的虚拟软盘方案。在DE2-115开发平台下,将2 MB的SRAM存储器虚拟成1.44 MB软盘,通过台式机对虚拟软盘的数据进行读写,并使用树莓派实现UDP服务器,通过网络对虚拟软盘的状态和数据进行读写访问。

同时,对设计方案进行实现与验证,成功实现对虚拟软盘的镜像制作、文件读写、格式化、制作启动盘等操作,并实现局域网内设备对虚拟软盘的监控。

1 虚拟软盘核心模块的设计与实现

1.1 虚拟软盘数据分布结构

一张软盘包含80个磁道,每个磁道有2个柱面,每个柱面包含18个扇区,每个扇区包含有512 B数据。整个软盘包含有2×80×18×512 B=1.44 MB的数据量。在实际应用中,软盘通过软驱线发送到台式机的1个磁道的数据,包含数据头部、数据中部和数据尾部3个部分。

在本虚拟软盘设计中,虚拟软盘的数据分布结构示意如图1所示。

关于基于FPGA和ARM的虚拟软盘实现

头部的长度为200 B,其中GAP数据为0x4E,用于填充磁道,共有184 B;SYNC为同步信号0x00,共有12 B;IAM表示索引信号地址标记,内容为0xC2C2C2FC,用来指示磁道开始。而数据中部则包含有18个扇区的数据,每个扇区包含地址段和数据段两部分。其中,地址段长度为72 B,数据段长度为608 B。地址段中:GAP段用于填充空间;SYNC表示同步;IDAM为地址标记;CHNR包含有磁道、磁面、扇区号、扇区内数据字节数等信息;CRC为2 B校验信息,校验起始于IDAM段,终止于CRC段。数据段中:GAP段用于填充空间;SYNC表示同步;DATAAM为地址标记;DATA包含512 B数据信息;CRC为2 B的校验信息,校验起始于DATAAM段,终止于CRC段。磁道尾部包含的数据是用于填充用的GAP段,其内容为0x4E,长度为60 B。

1.2并行CRC运算模块的原理和实现

循环冗余校验(Cyclic Redundancy Check,CRC)算法检测数据传输的误差上发挥着重要的作用[1]。CRC校验被用在PCI-Express总线、以太网(IEEE 802.3)以及WiFi(IEEE 802.11)等通信标准中[2]。通常使用的CRC校验生成算法有串行的线性反馈移位运算LFSR[3-4],但随着数据传输速率的提高,使用串行运算不能满足系统的要求[5],有必要实现并行CRC计算模块。

关于基于FPGA和ARM的虚拟软盘实现

对于数据字节流{Cn(x),…,C1(x),C0(x)},Ck(x)都是关于x的7次多项式,表征一个字节的数据;生成多项式记作G(x),为关于x的N次多项式。CRC校验结果为:

关于基于FPGA和ARM的虚拟软盘实现

考虑到有限域GF(2)上的加法等效于XOR异或运算,而乘法等效于AND与运算,在FPGA上可以实现一种基于矩阵式数据选通的并行CRC运算模块。其结构框图如图2所示。该并行CRC运算模块包含有逻辑运算阵列和输出寄存器两个部分。其中逻辑运算阵列由组合逻辑构成,其功能包括:将收到的数据DataIn左移(N-8)位,得到N位数据关于基于FPGA和ARM的虚拟软盘实现利用关于基于FPGA和ARM的虚拟软盘实现与上次CRC运算结果Rk(x)进行XOR运算,得关于基于FPGA和ARM的虚拟软盘实现运算结果进入数据选通运算阵列,阵列由(N×N)个1-bit选择器和N个N-bit XOR运算单元构成,选通使能信号是通过计算Φ=(A+KB)8结果得到的;阵列出来的运算结果进入输出寄存器,由时序逻辑构成,在模块接收到ENA使能信号时,寄存逻辑运算阵列的结果输出到Q;当输出寄存器接收到RST复位信号时,CRC模块的输出Q相当于CRC校验初始值R-1(x)。

关于基于FPGA和ARM的虚拟软盘实现

在本虚拟软盘设计中,取N=16,即进行CRC-16校验,生成多项式为G(x)=x16+x12+x5+1,根据定义得到K=[0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1]T,计算状态转移矩阵Φ,得到选通使能阵列如表1所示。其中横向表示输入位,用十六进制表示相应的位下标;纵向的表示输出位对应的下标;表中阴影部分对应的输入位被选通,空白部分对应的输入位不被选通。

关于基于FPGA和ARM的虚拟软盘实现

1.3 MFM编解码

1.3.1 MFM编码原理与实现

在软盘应用中,读写的数据都是以串行方式传输的。通常在各个数据位之间插入时钟位,保证数据能被正确传输和识别[6]。在软盘的数据传输中,采用MFM编码。其表达式如下:(x,y,z)→(x,x NOR y,y,y NOR z,z),其中NOR为非或运算,即p NOR q=p∨q。在RData和WData信号线上,一个电平翻转表示在MFM编码码流的时钟位或者数据位中出现了“1”;而没有翻转,则表示在码流的时钟位或数据位中出现了“0”。采用500 kb/s的传输速率,一个数据位的传输需要消耗2 μs时间。图3为4-bit数据流“1010”MFM编码示意。

关于基于FPGA和ARM的虚拟软盘实现

MFM编码没有起始标志,所以在每个扇区地址段和数据段之前都有AM域,其中的数据字节“0xA1”的编码采用了MMFM编码,用于标记码流起始:在数据位中,若出现连续的0-0,则时钟位变1;若出现0-0-0,则时钟位是1-0;若出现0-0-0-0,则时钟位是1-0-1;以此类推。

图4是MFM编码模块的结构框图。整个MFM编码过程由移位寄存模块、核心编码模块、计数模块和并行转串行模块组成。其中,移位寄存模块保留上一字节数据的最低位和当前字节数据,生成数据mfmData用来传递给核心编码模块进行MFM编码。核心编码模块根据MFM编码规则,对mfmData进行编码运算,并通过Violate信号判断当前是否处于AM域,若是,则要使用MMFM编码规则。计数器模块用来生成BitCnt计数信号,传递给并转串模块,生成最后的数据比特流mfmBit信号。

关于基于FPGA和ARM的虚拟软盘实现

1.3.2 MFM解码原理与实现

数据在编码和传输过程中,经常出现相位超前、延迟的情况。在MFM解码之前,需要先同步WData码流和MFM解码时钟。此外,软盘数据在AM域的0xA1标志遵循MMFM编码,用于定位MFM码流的起始位置。图5是MFM解码模块的模块结构框图。采用32 MHz的采样时钟捕捉WData信号。因为一个数据位周期为2 μs,采样过程中计数器由0计到63,即T=0,1,2,…,62,63。据此设定数据比特的采样时间在T=10和T=42时刻采样结果保存在移位寄存器SHIFTER中,并分离数据位和时钟位。MFM码流中的下降沿出现通常在T=0或者T=31时刻。AM域的数据字节0xA1经 MMFM编码后CLOCK_BITS是0x0A,而MFM编码后CLOCK_BITS为0x0E。据此,仲裁单元的相位调整规则如下:

(1)检测到WData下降沿时:若16≤T≤47,选通T=31;若T≤15或者T≥48,选通T=0;

(2)若DATA_BITS==0xA1且CLOCK_BITS ==0x0A,即检测到0xA1编码违例,则选通T=44;

(3)否则选通T=T+1。

关于基于FPGA和ARM的虚拟软盘实现

最后,数据比特计数模块用来判断是否接收到8 bit数据,若是,则输出数据有效脉冲信号MFM_DATA_EN。

2 虚拟软盘系统的设计与实现

2.1 虚拟软盘系统框架结构

虚拟软盘系统如图6所示。其中,控制电脑与虚拟软盘系统处于同一个局域网下,通过socket通信实现与虚拟软盘系统的交互,包括软盘状态获取、软盘状态修改、发送软盘镜像和选择软盘镜像等命令;虚拟软盘系统包括ARM、FPGA和SRAM存储器3个部分,其中ARM和FPGA的交互通过SPI接口实现;ARM负责网络交互,从网络获取软盘数据、状态的读写命令,同时开启SSH服务,方便远程登录,开启FTP服务用于控制中心发送、选择虚拟软盘系统中的软盘镜像;FPGA负责将2 MB容量的SRAM虚拟成1.44 MB软盘,并通过软驱线和外部的台式机/织布机进行交互。

关于基于FPGA和ARM的虚拟软盘实现

2.2 FPGA部分的结构

FPGA部分的结构框图如图7所示。该系统主要包括虚拟软盘控制模块、SPI收发模块、SRAM控制模块。

关于基于FPGA和ARM的虚拟软盘实现

控制模块实现软盘磁针的位置控制和数据编解码:步进模块通过检测iStep下降沿和iDir电平确定当前软盘磁针所处的磁道号rCylNo;通过iHdSel电平确定磁针所处柱面号rHeadNo;旋转模块确定当前扇区号rSectNo以及在扇区内偏移地址rAddrL。MFM解码模块根据WData得到回写数据wData和磁道wCylNo、柱面wHeadNo、扇区号wSectNo及扇区内偏移地址wAddrL等信息。

通过SPI收发模块,FPGA可获取到ARM给出的读写命令,数据交换模块会根据命令判断执行以下某个行动:读取软盘的扇区数据、修改软盘的扇区数据、获取软盘状态(写保护,软盘就绪,写入使能,磁道、磁面和扇区等)、修改软盘状态(写保护和软盘就绪等)。

地址、数据等信息通过地址转移模块,映射成对SRAM的读地址rAddr和写地址wAddr。通过SRAM读写控制模块,可以对虚拟成软盘的SRAM进行数据访问。CRC编码模块用于计算地址段和数据段的校验和,可以用来检测数据传输上可能出现的错误。软盘数据或者校验和经过MFM编码模块生成MFM码流传送给台式机。

2.3 ARM程序结构

ARM部分的程序设计框图如图8所示。其中,主线程负责socket和SPI接口的初始化,并创建线程1和线程2;线程1负责通过网络获取控制中心的命令(包括软盘状态读取命令即#R,软盘状态修改命令即#W、WP、READY、FLAG,以及镜像文件读取/写入命令即&R/W、xxx.ima),对互斥量filelock进行上锁后,修改data_sent为1,再把filelock解锁;线程2负责判断data_sent是否为1,即网络命令是否有效。若是,则对filelock进行上锁后,根据网络命令执行相应的操作,并返回相应数据给控制中心,再将data_sent清零后,把filelock解锁;若data_sent为0,即没有收到网络命令,那么读取当前软盘状态,空闲1 s后,重新进行循环。

关于基于FPGA和ARM的虚拟软盘实现

此外,ARM端还负责作为FTP服务器,用于接收控制中心发送的各个ima软盘镜像文件。

3 虚拟软盘运行测试情况

针对提出的虚拟软盘设计方案进行测试与验证。在Altera的DE2-115开发板上烧写FPGA工程文件,并在树莓派上运行ARM部分的程序。对虚拟软盘的测试包括虚拟软盘格式化、文件读写、镜像制作、启动盘测试等。首先对虚拟软盘彻底格式化,将虚拟软盘所有扇区数据清零;然后进行多文件随机写入,并读取虚拟软盘文件,进行文件比较,比对结果说明虚拟软盘读写正常;最后,制作启动盘并利用UltraISO制作软盘镜像,通过启动测试程序加载镜像,能顺利进入系统,说明启动盘制作和读取正常。

4 结论

本文提出并实现了一种基于FPGA和ARM的虚拟软盘方案,并成功将2 MB的SRAM虚拟成1.44 MB软盘,可通过网络对虚拟软盘的状态和数据进行远程访问,也可通过台式机对虚拟软盘进行读写操作。利用实际开发板进行实验,验证了本设计方案的可行性。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1629

    文章

    21736

    浏览量

    603420
  • ARM
    ARM
    +关注

    关注

    134

    文章

    9097

    浏览量

    367584
  • 编码
    +关注

    关注

    6

    文章

    942

    浏览量

    54831
收藏 人收藏

    评论

    相关推荐

    关于quartus虚拟按键的问题

    FPGA调试的时候用实际电平触发很麻烦,想问一下quartus有没有能实现虚拟键盘的ip,ISE里边就有。虚拟键盘就是可以在电脑上,直接通过GUI界面向
    发表于 08-05 12:10

    VxWorks 系统启动

    我在PC机上安装了grub用来引导VxWorks系统,后有做了一个虚拟软盘,将Tornado生成的Bootrom和VxWorks系统镜像放到虚拟软盘里,然后用grub读软盘镜像,Bootrom已经启动起来了,但到了bootrom
    发表于 04-16 20:42

    FPGA板卡能实现虚拟化图形界面吗

    想问两个问题 第一财富下着下着就没了。。。肿么办。。。第二个 初接触labview,觉得他以自己的虚拟化图形界面引以为傲,想知道,能不能不用虚拟化界面,和具体仪器相结合,就用仪器上的按钮和显示行不行?他的FPGA板卡能
    发表于 06-07 10:24

    有什么方式能够用FPGA实现虚拟光栅的生成

    本帖最后由 gk320830 于 2015-3-4 17:23 编辑 求助,有什么方式能够用FPGA实现虚拟光栅的生成
    发表于 11-03 23:07

    基于ARM的嵌入式系统中从串配置FPGA实现,不看肯定后悔

    关于基于ARM的嵌入式系统中从串配置FPGA实现,不看肯定后悔
    发表于 04-15 06:29

    怎么实现基于FPGA的低成本虚拟测试系统的设计?

    本文选用FPGA实现数据处理、逻辑控制,充分利用PC机,结合Labwindows图形化上层应用软件界面生成的虚拟测试系统具有较强的竞争力。本系统在FPGA单板单片主控器件控制下,
    发表于 05-12 06:58

    ARM虚拟化技术是什么?如何去实现

    主流的操作系统都有一个假设,就是这个系统有一个特权模式之下的OS,之上在跑多个非特权模式的APP;而ARM虚拟化技术就是在同一个系统上共存多个操作系统,实现这种虚拟技术需要硬件的扩展
    发表于 05-09 09:55

    一种基于FPGA技术的虚拟逻辑分析仪的研究与实现

    一种基于FPGA技术的虚拟逻辑分析仪的研究与实现:逻辑分析仪的现状" 发展趋势及研制虚拟逻辑分析仪的必要性, 论述了基于FPGA技术的
    发表于 11-27 13:13 29次下载

    基于FPGA虚拟测试系统实现

    设计了一种基于FPGA的单板单片主控器件的低成本即插即用虚拟测试系统。系统包括两路分立信号源、一路虚拟存储示波器和16路高速虚拟逻辑分析仪,结合FP
    发表于 12-14 10:07 16次下载

    关于MPU, FPGA SoC以及eFPGA

    有不少喜欢将FPGA与MPU做比较,其实应用有很大不同。FPGA适合行业个性化定制,如协议、前后仿功能逻辑实现甚至综合包括现在流行的卷积算法等. ARM架构的MCU及MPU已渐成行业主
    的头像 发表于 01-17 17:18 5977次阅读
    <b class='flag-5'>关于</b>MPU, <b class='flag-5'>FPGA</b> SoC以及e<b class='flag-5'>FPGA</b>

    基于FPGAARM并行总线和端口设计

    在数字系统的设计中,FPGA+ARM 的系统架构得到了越来越广泛的应用,FPGA主要实现高速数据的处理;ARM 主要实现系统的流程控制.人机
    发表于 08-08 15:37 6503次阅读
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>ARM</b>并行总线和端口设计

    如何使用FPGAARM设计和实现多路视频采集系统

    提出了一种基于FPGA+ARM的多路视频采集系统的设计与实现方法。该视频采集系统不仅能对多路快速变化的视频信号进行采集和处理,而且能应用为系统信号发生设备.系统采用FPGA为核心高速时序逻辑控制
    发表于 11-19 15:51 21次下载
    如何使用<b class='flag-5'>FPGA</b>和<b class='flag-5'>ARM</b>设计和<b class='flag-5'>实现</b>多路视频采集系统

    ARMFPGA的接口实现的解析

    ARMFPGA的接口实现的解析(应广单片机)-该文档为ARMFPGA的接口实现的解析详述资料
    发表于 07-22 09:47 14次下载
    <b class='flag-5'>ARM</b>与<b class='flag-5'>FPGA</b>的接口<b class='flag-5'>实现</b>的解析

    基于ARMFPGA嵌入式系统实现

    基于ARMFPGA嵌入式系统实现(嵌入式开发工作怎么这么难找)-该文档为基于ARMFPGA嵌入式系统
    发表于 07-30 13:03 15次下载
    基于<b class='flag-5'>ARM</b>的<b class='flag-5'>FPGA</b>嵌入式系统<b class='flag-5'>实现</b>

    基于ARMFPGA嵌入式系统实现

    点击上方 蓝字 关注我们 基于ARMFPGA嵌入式系统实现 ARM(Advanced RISC Machines)既可以认为是一个公司。也可以认为是对一类微处理器的统称,还可以认为是
    的头像 发表于 05-18 13:05 1365次阅读