1.软件版本

modelsim 6.5se

2.本算法理论知识

在此ATA命令集中,记录了ATA协议中所有命令的代码,以及对应的命令传输类型和传输模式。通过将记录命令块寄存器组中命令寄存器的命令代码,与AEA命令集中的代码进行比较,找到此代码在命令集中对此命令的定义,进行命令分析,实现以下功能:

·命令操作类型:读或者写,通过读写信号RD/WR将命令传输类型发送给Flash文件系统,当RD/WR =1时,表示该命令类型为读操作,否则,为写操作。

·若该命令下的数据需要加/解密处理,则向加密核发出加懈密请求信号:加密请求信号en_en,解密请求信号de_en。当en_en=‘1’时,加密核对数据进行加密处理;当de_en=‘1’时,加密核则进:两信号不同时为‘1’。若命令下传输的数据不需要加解密,则发送数据直通请求,此时信号en_en=‘0,并且de_en=‘0’。

·解析得到命令类型的和传输模式,通过Trans_mode(l~0)信号将当前命令的传输模式发送给Flash文件系统和传输控制模块。

该命令解析模块在分析某一条命令下所传输的数据是否需要加解密处理的过程中,我们认真细致的分析了ATA/ATAPI-7协议中对每条命令的描述,很清晰地总结出命令代码及其传输类型和传输模式,以及在该条命令下传输的数据是否进行加/解密处理,得到了所有需要加解密处理的命令,如在PIO传输模式下,需要加密处理的写命令C5h(命令代码)和需要解密处理的读命令C4h;在Ultra-DMA传输模式下,需要加密处理的写命令CAH从和需要解密处理的读命令C8h;不需要进行加解密处理的设备识别命令Ech等。除此之外,其它命令下传输的数据均不需加解密处理,直接传输,即直通。通过ATA命令集模块对命令代码的分析,为Flash文件系统确定对Flash存储介质进行读或者写操作提供基本信息。

2 ATA数据传输方式

ATA接口的数据传输包括PIO和DMA两种方式。PIO方式是硬盘数据传输的基本方式。PIO方式分为又分为5种模式:mode0、mode1、mode2、mode3、mode4,各模式下接口传输最大速率分别为:3.3、5.6、8.3、11.1、16.7MB/S,在PIO方式下,数据的传输以数据块(1个或者多个扇区sector)为单位,每传输完一个数据块后,硬盘都会产生一个中断请求,并向主机报告命令执行结果。

在DMA方式下,主机和硬盘之间需要通过一系列握手信号建立一个DMA通道,数据以数据流的形式传输。当传输完一个命令的所有数据时,硬盘产生一个中断请求,并向主机报告命令执行结果。DMA方式分为Multiword DMA(简称MDMA)和Ultra DMA(简称UDMA)两种模式,其中MDMA分为3种模式:mode0、mode1、mode2,各模式下接口传输最大速率分别为:4.2、13.3、16.7MB/S;UDMA分6种模式:mode0、mode1、mode2、mode3、mode4、mode5,各模式下接口传输最大速率分别为:16.7、25、33.3、44.4、100、133MB/S。UDMA方式在选通信号的上升沿和下降沿均锁定数据,提高了数据的传输速率,并且在数据传输结束时还要进行CRC校验。

3 ATA协议及命令解析

ATA协议按用途分为17种子协议,17种子协议又都分为对Host端和对Device端的,下面着重介绍论文设计中使用到的对Device端10种子协议及子协议所包含的命令和子协议的状态机,其它子协议为简单的辅助协议或ATAPI协议,这里不予介绍。

图1 ATA子协议之间关系

ATA协议的包括17种子协议分别为:Power-on and hardware reset协议、Bus idle协议、No-data command协议、PIO data-in command协议、PIO data-out command协议、DMA command协议、EXECUTE DEVICE DIAGNOSTIC command协议、Ultra DMA data-in command协议、Ultra DMA data-out command协议、Ultra DMA CRC协议、Read/Write DMA Queued command协议、Signature and persistence协议、PACKET command协议、DEVICE RESET command协议、Single device配置协议、Software reset协议、Packet command协议等。

各个子协议之间的状态转换关系如图4-1,本论文着重介绍上面列出的前10种针对Device端的子协议,根据这些协议在数据传输中的作用可以分为用于数据传输类协议和非数据传输类协议,其中带PIO和DMA的协议为数据传输类协议,其它协议为非数据传输类协议。数据传输类协议主要完成数据输入输出传输及数据缓冲等功能,非数据传输类协议则主要完成协助数据传输、命令执行、总线等待、电源管理、软件硬件复位、设备诊断和设备使用安全等功能。

IDE接口的主机严格遵守ATA/ATAPI协议,在识别IDE接口上的硬件设备之后,按照ATA协议或者ATAPI协议的命令集对设备进行访问和操作。IDE设备盘遵守ATA/ATAPI协议中ATA协议的命令集,因此,我们必须对ATA/ATAPI协议中的所有命令集进行解析工作。

对于一个主机系统,从主机的角度来看,IDE设备的控制器就像两个I/O寄存器组。它们处于ISA总线中的I/O位置,而不是内存寻址空间。尽管PC兼容机中把I/O寻址空间限定在0到3FFh,但是它却可以使用从0到FFFFh的寻址空间。其中,命令寄存器组用来给磁盘驱动器发送命令并进行数据交换;控制寄存器组用来控制磁盘驱动器。

我们设计的ATA主机控制器是基于WISHBONE协议的,其仅兼容PIO传输方式,由两个block。ATA主机控制器和wishbone控制器之间有两条数据通道,一条是wishbone控制器的数据通道,当准备进行数据传输的时候,ATA主机控制器接收来自控制器的指令。设置ATA主机控制器或则设置所连接的ATA设备。

3.部分源码

`include "timescale.v"module atahost_pio_tctrl(clk, nReset, rst, IORDY_en, T1, T2, T4, Teoc, go, we, oe, done, dstrb, DIOR, DIOW, IORDY);parameter TWIDTH = 8;parameter PIO_MODE0_T1   =  6;  parameter PIO_MODE0_T2   = 28; parameter PIO_MODE0_T4   =  2; parameter PIO_MODE0_Teoc = 23; input clk; input nReset; input rst; input IORDY_en;     input [TWIDTH-1:0] T1;  input [TWIDTH-1:0] T2; input [TWIDTH-1:0] T4; input [TWIDTH-1:0] Teoc; input go; // PIO controller selected input we; // write enable signal. 1'b0 == read, 1'b1 == writeoutput oe; // output enable reg oe;output done; output dstrb; // data strobe, latch data reg dstrb;output DIOR; // IOread reg DIOR;output DIOW; // IOwrite reg DIOW;input  IORDY; // IOrDY // PIO mode 0 settingswire [TWIDTH-1:0] T1_m0   = PIO_MODE0_T1;wire [TWIDTH-1:0] T2_m0   = PIO_MODE0_T2;wire [TWIDTH-1:0] T4_m0   = PIO_MODE0_T4;wire [TWIDTH-1:0] Teoc_m0 = PIO_MODE0_Teoc;// variable declarationreg busy, hold_go;wire igo;wire T1done, T2done, T4done, Teoc_done, IORDY_done;reg hT2done;always@(posedge clk or negedge nReset)if (~nReset)beginbusy    <=   1'b0;hold_go <=   1'b0;endelse if (rst)beginbusy    <=   1'b0;hold_go <=   1'b0;endelsebeginbusy    <=   (igo | busy) & !Teoc_done;hold_go <=   (go | (hold_go & busy)) & !igo;endassign igo = (go | hold_go) & !busy;ro_cnt #(TWIDTH, 1'b0, PIO_MODE0_T1)t1_cnt(.clk(clk),.rst(rst),.nReset(nReset),.cnt_en(1'b1),.go(igo),.d(T1),.q(),.done(T1done));always@(posedge clk or negedge nReset)if (~nReset)beginDIOR <=   1'b0;DIOW <=   1'b0;oe   <=   1'b0;endelse if (rst)beginDIOR <=   1'b0;DIOW <=   1'b0;oe   <=   1'b0;endelsebeginDIOR <=   (!we & T1done) | (DIOR & !IORDY_done);DIOW <=   ( we & T1done) | (DIOW & !IORDY_done);oe   <=   ( (we & igo) | oe) & !T4done;           endro_cnt #(TWIDTH, 1'b0, PIO_MODE0_T2)t2_cnt(.clk(clk),.rst(rst),.nReset(nReset),.cnt_en(1'b1),.go(T1done),.d(T2),.q(),.done(T2done));always@(posedge clk or negedge nReset)if (~nReset)hT2done <=   1'b0;else if (rst)hT2done <=   1'b0;elsehT2done <=   (T2done | hT2done) & !IORDY_done;assign IORDY_done = (T2done | hT2done) & (IORDY | !IORDY_en);always@(posedge clk)dstrb <=   IORDY_done;ro_cnt #(TWIDTH, 1'b0, PIO_MODE0_T4)dhold_cnt(.clk(clk),.rst(rst),.nReset(nReset),.cnt_en(1'b1),.go(IORDY_done),.d(T4),.q(),.done(T4done));assign done = T4done; ro_cnt #(TWIDTH, 1'b0, PIO_MODE0_Teoc)eoc_cnt(.clk(clk),.rst(rst),.nReset(nReset),.cnt_en(1'b1),.go(IORDY_done),.d(Teoc),.q(),.done(Teoc_done));endmodule
    在ATA/ATAPI-5协议中,PIO传输方式可以分为PIO寄存器和PIO数据传输。PIO寄存器和PIO数据传输的传输过程基本相同。其Verilog代码如下所示:always@(posedge clk)begin : synch_incomingcIORDY <=   IORDY;cINTRQ <=   INTRQ;sIORDY <=   cIORDY;irq    <=    cINTRQ;endalways@(posedge clk or negedge nReset)if (~nReset)beginRESETn <=   1'b0;DIORn  <=   1'b1;DIOWn  <=   1'b1;DA     <=   0;CS0n   <=   1'b1;CS1n     <=   1'b1;DDo    <=   0;DDoe   <=   1'b0;endelse if (rst)beginRESETn <=  1'b0;DIORn  <=   1'b1;DIOWn  <=   1'b1;DA     <=   0;CS0n     <=   1'b1;CS1n     <=  1'b1;DDo    <=   0;DDoe   <=   1'b0;endelsebeginRESETn <=   !IDEctrl_rst;DA     <=   PIOa[2:0];CS0n   <=   !( !PIOa[3] & PIOreq); CS1n   <=   !(  PIOa[3] & PIOreq); DDo    <=   PIOd;DDoe   <=   PIOoe;DIORn  <=   !PIOdior;DIOWn  <=   !PIOdiow;endalways@(posedge clk)if (dstrb)PIOq <=   DDi;always @(posedge clk or negedge nReset)if (~nReset)begindPIOreq <=  1'b0;PIOgo   <=   1'b0;endelse if (rst)begindPIOreq <=   1'b0;PIOgo   <=   1'b0;endelsebegindPIOreq <=   PIOreq & !PIOack;PIOgo   <=   (PIOreq & !dPIOreq) & IDEctrl_IDEen;endassign T1      = PIO_cmdport_T1;assign T2      = PIO_cmdport_T2;assign T4      = PIO_cmdport_T4;assign Teoc    = PIO_cmdport_Teoc;assign IORDYen = PIO_cmdport_IORDYen;atahost_pio_tctrl #(TWIDTH, PIO_mode0_T1, PIO_mode0_T2, PIO_mode0_T4, PIO_mode0_Teoc)PIO_timing_controller (.clk(clk),.nReset(nReset),.rst(rst),.IORDY_en(IORDYen),.T1(T1),.T2(T2),.T4(T4),.Teoc(Teoc),.go(PIOgo),.we(PIOwe),.oe(PIOoe),.done(PIOdone),.dstrb(dstrb),.DIOR(PIOdior),.DIOW(PIOdiow),.IORDY(sIORDY));always@(posedge clk)PIOack <=  PIOdone | (PIOreq & !IDEctrl_IDEen);

4.仿真分析

在ATA/ATAPI-5协议中,PIO传输方式可以分为PIO寄存器和PIO数据传输。PIO寄存器和PIO数据传输的传输过程基本相同。

PIO时序控制器主要用来控制PIO协议传输的时序,使其能够正常工作。其主要代码如下所示:

5.参考文献

[01]Michael Keating.片上系统—可重用设计方法学(第三版)[M].电子工业出版社.2004

[02]Mark Zwolinski.VHDL数字系统设计[M].电子工业出版社.2004

[03]Uwe Meyer-Baese.数字信号处理的FPGA实现[M].清华大学出版社.2003,01A08-34

【ATA】基于FPGA的高速数据采集ATA (Advanced Technology Attachment)接口verilog开发相关推荐

  1. 基于FPGA实现ADS1675数据采集

    1 ADC芯片简介 ADS1675是一种高速.高精度模数转换器(ADC).采用先进的(Δ∑)结构,其工作速度为T0 4MSPs,具有优异的交流性能和直流精度.ADS1675模数转换器由低漂移调制器组成 ...

  2. 基于FPGA实现ADC7768数据采集系统设计(8路)

    一件事,只要愿意去做并且认真去做,总会发现其中的趣味和意义. 1 简介 针对特殊系统中对于一些微弱信号的采集和监测设计了一种基于大规模现场可编程逻辑器件(FPGA),采用AD7768芯片,实现32位高 ...

  3. FPGA学习-基于FPGA的高速串行通信GTX知识梳理

    对于XILINX,7系列FPGA,关于GTX核对配置见PG168,了解GTX内部结构及更多的知识见ug476. 以7系列XC7k325t-ffg900为例,见各ug476,351页.可看到该芯片共有4 ...

  4. 六,基于FPGA的高速串行通信GTX知识梳理

    对于XILINX,7系列FPGA,关于GTX核对配置见PG168,了解GTX内部结构及更多的知识见ug476. 以7系列XC7k325t-ffg900为例,见各ug476,351页.可看到该芯片共有4 ...

  5. 基于FPGA的ADC数据采集蓝牙传输系统

    本工程包含设计文档以及设计代码.利用FPGA处理传感器经ADC采集的数据,并通过蓝牙模块发送到手机,进行数据的实时监测. 本设计使用气体传感器,也可换成其他传感器,例如温度湿度等. 为了实现对气体传感 ...

  6. 基于FPGA的高速电路板设计

    目录 1.PCB材料选择 2.PCB上的传输线走线 3.阻抗计算 4.降低串扰和维持信号完整性的布线方法 随着器件引脚密度和系统频率的增大,PCB布 板越来越复杂.成功的高速电路板应能够高效地集成器件 ...

  7. 【信号采集】基于FPGA的高速信号采集系统

    1.高速采集系统实现的功能,FPGA内部功能模块组成: 2.高速ADC接口的FPGA实现: 3.数字下变频(DDC)的FPGA实现: 4.三倍抽取功能的FPGA实现: 5.Aurora接口的FPGA实 ...

  8. 基于FPGA的高速ADC9XXX系列的产品研发记录与心得----系列二(玩FPGA玩到最后还是玩时钟)

    当板子回来之后我们的数据二通道还是存在bug,通过测试发现,还是在测试模式下面,adC的输出数据没有问题,但在接收的那边还是存在如下图的问题,通过电源AVDD和DVDD的查看发现,没有问题啊!!! 如 ...

  9. 基于FPGA的高速PCB板设计

    原贴:http://bbs.ednchina.com/BLOG_ARTICLE_211733.HTM 高速PCB板设计 由于I/O的信号的快速切换会导致噪声产生.信号反射.串扰.地反弹,所以设计时必须 ...

最新文章

  1. Python快速入门,你想要的就在这里了!
  2. 零基础入门学习 Python(4)条件分支、while循环、逻辑连接符、引入外援
  3. TCP如何能正常关闭连接?
  4. VTK:可视化算法之DecimateFran
  5. 是先打工还是直接创业?答案让我惊呆了!
  6. Tomcat设置URL兼容特殊符号
  7. js如何读取客户端Excel文件
  8. linux tcp cork,在此用例中,TCP_CORK和TCP_NODELAY是否有显着差异?
  9. 华为手机怎么下载linux命令,在linux命令
  10. 苹果可折叠iPhone有望在2023年推出 支持手写笔
  11. Elasticsearch 不属于 Elastic
  12. 谷歌 Compute Engine 的虚拟机曝0day未修复,可遭接管
  13. TDateTime转
  14. Origin打断图像的y坐标和在柱状图上显示数字
  15. sql获取服务器系统时间,sql server 获取系统时间的方法
  16. 【校招VIP】产品行测之逻辑计算题
  17. GoDot引擎打包安卓
  18. Charles 最新版(Charles 4.1.4 ) 破解注册
  19. 晶振的负载电容、寄生电容和动态电容及参考值
  20. 电容器充放电的原理是什么?

热门文章

  1. Linux 电驴(aMule)的安装与使用
  2. 网络层协议与ARP攻击
  3. 硬件系列(三)--------wifi打印机之使用socket打印(无sdk)
  4. 高级计算机怎样关机,4种高级酷炫的电脑关机方式,知道3种以上的都是电脑大神...
  5. builder打开闪退 oracle report_Kettle执行过程中出现闪退现象
  6. 为什么一个系统的运行日志log是至关重要的?
  7. c语言炸弹人小游戏,Unity初级案例 - 炸弹人
  8. 【淘宝客】PHPMailer-v6.0.5版 发送邮件dome
  9. java利用网易邮箱免登录发送邮件
  10. 一阶差分(First Difference)