教程分享FPGA零基础学习:SPI协议驱动设计

SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,中间靠三线或者四线连接(三线时为单向传输或者数据线双向传输)。所有基于SPI的设备共有的,它们是MISO、MOSI、SCLK、CS。

MISO–MasterInputSlaveOutput,主设备数据输入,从设备数据输出。

MOSI–MasterOutputSlaveInput,主设备数据输出,从设备数据输入。

CS–ChipSelect,从设备使能信号,由主设备控制。

cs是从芯片是否被主芯片选中的控制信号,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),主芯片对此从芯片的操作才有效。这就使在同一条总线上连接多个spi设备成为可能。

通讯是通过数据交换完成的,由sclk提供时钟脉冲,mosi、miso则基于此脉冲完成数据传输。数据输出通过mosi线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取。完成一位数据传输,输入也使用同样原理。因此,至少需要N次时钟信号的改变(上沿和下沿为一次),才能完成N位数据的传输。

spi通信有四种不同的模式,不同的从设备可能在出厂时就已经配置为某种模式。通信的双方必须是工作在同一模式下,所以我们可以对主设备的spi模式进行配置,通过CPOL(时钟极性)和CPHA(时钟相位)来控制我们主设备的通信模式。

mode0:CPOL=0,CPHA=0;

mode1:CPOL=0,CPHA=1;

mode2:CPOL=1,CPHA=0;

mode3:CPOL=1,CPHA=1;

时钟极性CPOL是用来配置SCLK在空闲时,应该处于的状态;时钟相位CPHA用来配置在第几个边沿进行采样。

CPOL=0,表示在空闲状态时,时钟SCLK为低电平。

CPOL=1,表示在空闲状态时,时钟SCLK为高电平。

CPHA=0,表示数据采样是在第1个边沿。

CPHA=1,表示数据采样是在第2个边沿。

即:

CPOL=0,CPHA=0:此时空闲态时,SCLK处于低电平,数据采样是在第1个边沿,也就是SCLK由低电平到高电平的跳变,所以数据采样是在上升沿,数据发送是在下降沿。

CPOL=0,CPHA=1:此时空闲态时,SCLK处于低电平,数据发送是在第1个边沿,也就是SCLK由低电平到高电平的跳变,所以数据采样是在下降沿,数据发送是在上升沿。

CPOL=1,CPHA=0:此时空闲态时,SCLK处于高电平,数据采集是在第1个边沿,也就是SCLK由高电平到低电平的跳变,所以数据采集是在下降沿,数据发送是在上升沿。

CPOL=1,CPHA=1:此时空闲态时,SCLK处于高电平,数据发送是在第1个边沿,也就是SCLK由高电平到低电平的跳变,所以数据采集是在上升沿,数据发送是在下降沿。

在开发板上有一块flash(M25P16),用来保存FPGA的硬件配置信息,也可以用来存储用户的应用程序或数据。

M25P16是一款带有写保护机制和高速SPI总线访问的2M字节串行Flash存储器,该存储器主要特点:2M字节的存储空间,分32个扇区,每个扇区256页,每页256字节;能单个扇区擦除和整片擦除;每扇区擦写次数保证10万次、数据保存期限至少20年。

C(serialclock:串行时钟)为D和Q提供了数据输入或者输出的时序。D的数据总是在C的上升沿被采样。Q的数据在C的下降沿被输出。

ˉS(ChipSelect:芯片选择端),当输入为低时,该芯片被选中,可以允许进行读写操作。当输入为高时,该芯片被释放,不能够进行操作。

对于H——o——l——d——和W——,为保持功能和硬件写保护功能,在本设计中不使用此管脚,在硬件设计时,这两个管脚全部被拉高了,即全部失效。

flash采用spi的通信协议,flash当做从机。serialclcok等效于spi中的sclk,chipselect等效于spi中的cs,D等效于spi中的mosi,Q等效于spi中的miso。

flash可以支持mode0和mode3,这两种模式中,都是在时钟的上升沿采样,在时钟的下降沿发送数据。

flash的每一页都可以被写入,但是写入只能是把1改变为0。擦除可以把0改变为1。所以在正常写入数据之前,都要将flash进行擦除。

flash的命令表如下:

下面介绍几个常用的命令

状态寄存器的格式如下:

READ(ReadDATABytes:读数据):发送命令READ(03H),后续发送3个字节的地址,然后就可以接收数据,内部的地址会不断递增。一个读命令就可以把整个flash全部读完。

SE(SectorErase:扇区擦除):发送命令SE(D8H),接着发送3个字节的地址。

BE(BulkErase:整片擦除):发送命令BE(C7H)。

关于flash的其他的介绍,可以参考03_芯片手册->FLASH->M25P16.pdf。

设计要求

设计分析

根据M25P16的数据手册得知,其接口为spi接口,且支持模式0和模式3,本设计中选择模式0。

输入时序图如下:

输出时序如下:

时序图中所对应的符号说明:

在设计中,FPGA作为主机,M25P16作为从机。

架构设计和信号说明

此模块命名为m25p16_drive。

二级模块(分模块)(第一页)

二级模块(分模块)(第二页)

设计中,各个命令单独写出控制器,通过多路选择器选择出对应的命令,然后控制spi_8bit_drive将数据按照spi的协议发送出去。各个命令的脉冲通过ctrl模块进行控制各个命令控制器,写入的数据首先写入到写缓冲区,读出的数据读出后写入到读缓冲区。

各个模块的功能,和连接线的功能在各个模块设计中说明。

spi_8bit_drive设计实现

本模块负责将8bit的并行数据按照spi协议发送出去,以及负责按照spi协议接收数据,将接收的数据(8bit)并行传输给各个模块。

spi_send_en为发送数据使能信号(脉冲信号),spi_send_data为所要发送数据,spi_send_done为发送完成信号(脉冲信号)。

spi_read_en为接收数据使能信号(脉冲信号),spi_read_data为所接收的数据,spi_read_done为接收完成信号(脉冲信号)。

在发送逻辑控制中,全部的信号采用下降沿驱动。利用外部给予的spi_send_en作为启动信号,启动send_cnt。send_cnt在不发送数据时为8,发送数据时,从0到7。

在接收逻辑中,全部的信号采用上升沿驱动。利用外部给予的spi_read_en作为启动信号,启动rec_en,经过移位接收数据。

在spi_sclk输出时,采用组合逻辑。由于设计采用spi的模式0,故而spi_sclk不发送或者接收数据时为0,接收数据时为时钟信号。因为要求为模式0,所以在接收数据时,spi_sclk的输出不能够先有下降沿,即要求spi_sclk的控制信号不能由上升沿信号驱动,所以将rec_en同步到下降沿的rec_en_n。

在仿真中,将时钟设置为10MHz。

所有的信号采用上升沿驱动。发送一个8bit的随机数值,接收一个8bit的随机数值。

spi_miso信号为从机下降沿驱动信号。

通过RTL仿真,可以看出发送和接收全部正常。

mux7_1设计实现

本模块负责将7个命令模块发出的命令(写使能、写数据和读使能)经过选择发送给spi_8bit_drive模块。

在设计中,有的命令模块不需要进行读取(pp和se等等),此时将输出的读使能信号输出为低电平。

be设计实现

该模块接收到be_en(整片擦除的脉冲信号)信号后,发送对应的使能和数据,等待发送完成脉冲。发送完成后,输出擦除完成的脉冲。

整片擦除的命令为8’hc7。

wren设计实现

该模块接收到wren_en(打开flash内部的写使能的脉冲信号)信号后,发送对应的使能和数据,等待发送完成脉冲。发送完成后,输出擦除完成的脉冲。

打开flash内部写使能的命令码为8’h06。

se设计实现

该模块接收到se_en(擦除扇区的写使能的脉冲信号)信号后,发送对应的使能和数据,等待发送完成脉冲。发送完成后,接着发送高八位地址,中间八位地址和低八位地址。全部发送完成后,发送se_done信号。

该模块采用状态机实现。SE_STATE(扇区擦除命令发送)、H_ADDR(高八位地址发送)、M_ADDR(中间八位地址发送)、L_ADDR(低八位地址发送)、SE_DONE(扇区擦除完成)。所有的脉冲信号在未标注的时刻,输出全部为0。

设计代码为:

在发送过程中,由于是每8bit发送一次,所以在时序上将看到发送时,每8个脉冲一组,中间会有明显的间隔。

pp设计实现

该模块负责将外部写fifo中的数据写入到flash中。wr_fifo_rd为写fifo的读使能信号,wrdata为从写fifo中读出的数据,wr_len为需要写入flash中数据的长度,wr_addr为写入地址。

cnt为记录已经发送的数据个数。

rdsr设计实现

WIP(writeinprogress:正在进行写进程),该bie位表示了flash内部是否在进行写进程。如果处于写进程时,flash忽略外部所有的命令,所以建议在执行任何命令前,首先进行检测该位。1表示正在写进程中,0表示不处于写进程。

如果检测到正在写进程中,进行延迟1ms,然后再次读取该位状态。直到写进程结束。

rdid设计实现

该模块负责读取flash的ID(2015),验证ID的正确性。

该模块采用状态机的方式实现。IDLE(等待读取ID的命令)、IDSTATE1(读取高八位ID)、IDSTATE2(读取中间八位ID)、IDSTATE3(读取低八位ID)、ID_CHECK(检测ID的正确性)。

状态转移图如下:

read_ctrl设计实现

该模块负责将flash的数据读出,写入到输出缓存中。

wr_fifo和rd_fifo调用

两个fifo的宽度设置为8,深度设置为256,同步fifo,带有复位。

ctrl设计实现

该模块根据外部的命令,按照m25p16的执行规则,进行控制各个模块的执行。

该模块采用状态机实现。INIT_RDSR(读WIP),INIT_RDID(读ID),INIT_ID(判断ID),WIP(读WIP),WIP_DONE(等待WIP),IDLE(空闲状态),**STATE(执行对应的命令),**WREN(打开flash的写使能)。在进行任何命令前,都检查wip。

在不同的状态,mux_sel选择对应的命令通过。

drive_busy只有在IDLE状态才是低电平。

spi_cs_n信号,DLE状态为高电平、WIP_DONE(INIT_RDID)中spi_read_done信号为高时(保证能够多次读取状态寄存器)、在其他状态发生切换时,spi_cs_n为高电平,否则为低电平。

m25p16_drive设计实现

本模块负责连接所有二级模块,实现所有的功能。

RTL仿真

仿真代码如下:

在设置testbench时,注意将所有文件全部添加到文件中。

选择testbench时,注意选中设置的m25p16_drive_tb。

利用modelsim仿真,可以得出如下RTL仿真波形。

读到ID,以及检测WIP都是正确的。

板级测试

由于m25p16的时序原因,整个设计工作在10MHz(利用PLL产生)。

在进行测试控制时,对最后一个扇区进行擦除;对最后一个扇区的第一页进行写入数据100个(1至100);对最后一个扇区的第一个进行读取,验证数据是否为1至100。

测试的控制模块命名为test_ctrl。

此模块采用状态机实现。WRFIFO(将1至100写入wrfifo中)、SE(扇区擦除)、PP(写入flash)、RD(读出flash)、WAIT_RD(等待读取)、CHECK(检测读出的数据的正确性)。

将test模块设置为顶层。在test模块中,m25p16_drive例化中,对于整片擦除不做控制,对于addr直接指向最后一个扇区的第一页,len指定为100。

代码为:

由于开发板上的flash是为FPGA进行保存配置信息的,所以管脚都连接在专用管脚上,本次实验需要将这专用管脚配置为普通io。

右击器件型号,选择device。

选择Dual-purposepins,将其中所有的功能改为普通IO。

点击ok后,即可进行综合分析。

连接开发板和PC,打开逻辑分析仪。

采样时钟选择10MHz(PLL的c0),采样深度设置为2K。

观测信号如下图所示。

首先将wrfifo_wr的触发条件设置为上升沿。点击触发后,按下复位按键。触发后,可以看到写入数据1至100后,然后进行SE命令。

将rdfifo_rd的触发条件设置为上升沿(将wrfifo_wr触发条件修改为donotcare)。点击触发后,按下复位按键。

通过仿真和下板实测,验证控制器设计正确。

长沙市望城经济技术开发区航空路6号手机智能终端产业园2号厂房3层(0731-88081133)

THE END
1.享设计设计素材第一目录网站长目录中文分类目录网站描述:享设计是一家设计作品共享交易平台,为设计师寻找创意设计,提供海报,背景板,长图,房地产,旅游,招聘,教育,医美,节日,节气等设计源文件psd,ai,cdr免费素材下载下载.上传作品,轻松赚钱! TAG标签:享设计 设计作品交易 海报 背景板 创意设计 设计素材 免费素材 psd下载 广告招商:13241781013 相关https://www.d1ml.net/siteinfo-18697.html
2.享学设计的个人主页导航 全部 工具 创收 上传 充值 会员 签到 享学设计暂无签名0 关注 0 粉丝 79 作品 +关注 动态0 作品79 创作历程 10 2024 09 2024 03 2024 02 2024 12 2023 10 2023 04 2023 03 2023 https://club.justeasy.cn/designer/cps/VWhMbFk0SzRNQ1FRRTcxU2hEY01aZz09.html
3.从入门到进阶UI设计全能实战课程介绍《从入门到进阶UI设计全能实战》课程专为设计新手与提升者设计,系统讲解UI设计的核心原则与实战技巧。课程涵盖用户体验、界面设计、工具使用及项目实操,帮助学员全面掌握UI设计流程,提升设计能力,打造出色的用户界面作品。学习地址百度:https://pan.baidu.com/https://www.bhshare.cn/article/4297
4.设计教程catia v5r21模具设计教程 电子图书325KBv1.0 详情 网页设计与制作教程pdf 电子图书28.98Mv1.0 详情 天正cad设计教程苹果版 常用工具54.20Mv1.0 详情 java程序设计教程电子书 电子图书22.40Mv1.0 详情 VvvebJs免费版(网页设计工具) 网页设计46.70Mv1.0 详情 cad设计教程app 教育学习29.21Mv1.2.2 详情 http://m.downcc.com/tags_%C9%E8%BC%C6%BD%CC%B3%CC.html
5.设计软件在网易云课堂设计软件频道,发现好课!云课堂是网易公司(163.com)旗下实用技能学习平台。与顶级机构、院校和优秀讲师合作,为您提供海量优质课程,以及创新的在线学习体验。涉及IT互联网、设计、职场提升、经管、法律、语言、留学、考试、亲子育儿、兴趣生活等多个领域。帮https://m.study.163.com/m/category/480000004062007.htm
6.www.zcool.com.cn/tag/ZMTE3MDEy.html樱桃教你学设计 C4D一个月学习记录(含初学者免费教程推荐) 4 画画的禾盐 樱桃教你学设计 修图师廖滔 一点笔墨 郭术生 平面设计鬣天 Turing_Studios 聚心恒网校 聚心恒教育 聚心恒网校 聚心恒网校 PhotoShop免费教程: 83 聚心恒网校 PhotoShop免费教程:调色,让图片更美! https://www.zcool.com.cn/tag/ZMTE3MDEy.html
7.[免费]网上学堂设计码农集市专业分享IT编程学习资源使用DW做的一个以个人网站为主题的网站,内容比较简洁https://www.coder100.com/index/index/content/id/612816
8.案例06(下)视频教程答:课程是在线录播学习视频教程,不支持离线下载。方便大家随时观看和学习,不受时间限制。 问:自学贵族可享受哪些优惠? 答:免费学贵族专区全部课程,单付费课程享专属折扣,具体以贵族专享价为准。 问:购买了自学贵族、课程、秒杀、活动课程能否退款? 答:自学贵族、课程、秒杀、活动课程购买后权益即生效,不支持退款,请https://zixue.3d66.com/course/1967_181852.html
9.享设计享设计是一家设计作品共享交易平台,为设计师寻找创意设计,提供海报,背景板,长图,房地产,旅游,招聘,教育,医美,节日,节气等设计源文件psd,ai,cdr免费素材下载下载.上传作品,轻松赚钱!https://www.design006.com/
10.UG教程网专注互联网资源分享,线束教程,学习资料,视频教程,模具设计,免费教程,模具教程,ug教程,3D教程,线束教程,小吃教程,办公教程,机械设计,网站设计及淘宝热销教程,插件下载,打造教程资料共享下载平台https://ugjcw.com/
11.优秀UI设计网站分享很多初学ui设计的朋友,不知道该如何入门,在这里整理了国内外一些优秀的ui设计网站,大家可以在上面学习交流,多看看别人优秀的设计,这样也能增长见识,积累经验,快速提升自己的设计水平。(排名不分先后) https://www.uisdc.com/ 优设网 - UISDC - 设计师交流学习平台 - 看设计文章,学软件教程,找灵感素材,尽在优设https://www.douban.com/note/744291226/
12.专业的设计学习交流平台百度关键词 7天 30天 前10名 前20名 前30名 前40名 前50名 19 34 41 52 79 前10名 前20名 前30名 前40名 前50名 5 6 19 28 37 百度 360 神马 搜狗 谷歌 收录 171654 44300 - 1176289 - 反链 - 69900 - 21697 - 最近访问 www.hbyhxn.comm.chensuguohua.comm.hslufeng.comwww.benyin.xyzwwhttp://cnbyjt.com/tools/seo/www.linecg.com
13.室内设计设计教程设计教程 ,晨若资源分享论坛——学习资源丰富,视频课程很全的中文分享社区网!http://bbs.chenruo.net/forum.php?mod=forumdisplay&fid=92&typeid=153
14.设计师必备的34个工具网站,按工作流程整理好了虎课网是一个案例式短视频设计教学网站,在国内平台内自学专业度较高。 国内很多设计大咖在这里开课,行业影响力大,教程非常丰课程呈现为点状,有些教程只有一个案例,适合按需学习。每天可以免费看一集视频,开通全站VIP会员则可无限观看。 但是需要注意,虎课网没有在线笔记,课程介绍不是很明确,课程内容主要由合作老师自https://www.digitaling.com/articles/372365.html
15.SD分享导航站分享推荐免费图片站点、设计素材软件网站、AI在线工具、视频音频、软件下载等资源网站http://designshidai.com/
16.2023LinuxC/C++全栈开发知识技术合集(基础入门到高级进阶)本文介绍下Linux C/C++开发(后端/音视频/游戏/嵌入式/高性能网络/存储/基础架构/安全)从入门到高级进阶的学习路线,整个学习路线,直接对标腾讯c++后台开发岗位,知识点包括C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等等 。其次你把整个内容,全部消化https://www.360doc.cn/mip/1098689094.html
17.动效教程!充满科技感的飞线图动效,设计加代码一起教给你!温馨提醒 本篇文章大概 9300 字,配图 86 张,约 13 分钟视频教程一个。配合文章制作 1 个示例网页,代码示例 5 个。阅读设计部分需要 10 分钟。https://uiiiuiii.com/other/1212414982.html
18.模具数据网致力于打造一个优秀的模具资源共享学习平台,为制造业加油!http://www.mujudata.com/
19.B站VIP会员设计b站vip会员账号共享设计教程摘要:B站VIP会员设计,b站vip会员账号共享设计教程,新片场素材小编阮安B站VIP会员设计,b站vip会员账号共享设计教程相关内容整理,如果您对B站VIP会员设计,b站vip会员账号共享设计教程感兴趣欢迎访问免费阅读。 B站VIP会员设计,b站vip会员账号共享设计教程 一、B站VIP会员在线设计教程介绍 https://edu.xinpianchang.com/article/baike-96840.html
20.二三维CAD快速制图设计学习教程,免费共享CADCAMCAE图文CAD之家为您提供最新CAD软件免费下载,二三维CAD快速制图设计学习教程,免费共享CAD、CAM、CAE、图文视频教程,致力于机械、建筑、电子、装修等设计师的免费学习资源网站。 百度关键词 7天30天 前10名 前20名 前30名 前40名 前50名 0 0 0 0 0 前10名 http://tefeng888.com/tools/seo-lookup/www.cadhome.com.cn
21.设友网设友网是集设计素材下载、设计课程学习、设计师交流共享推广于一体的设计类资源网站。致力于打造设计师在线学习平台、资源素材中心、创客中心;为广大设计爱好者提供专业的学习、交流、成长和行业资源分享平台!https://www.116811.com/
22.UISDC–设计师交流学习平台–看设计文章,学软件教程,找优设网-优秀设计联盟(SDC),是国内优秀的设计师学习平台,拥有海量优质设计文章,包含了PS教程,AI教程,UI设计,网页设计,排版教程等。学设计,上优设!https://www.iwuxian.vip/sites/1259.html
23.25学堂分享全球最优秀的APP设计,网站UI界面设计,ui设计素材,学习和借鉴,发现优秀的移动互联网产品,网页设计素材,做中国最好APP,网站ui设计博客,设计素材下载提供方和网页设计师加油站!https://www.25xt.com/
24.C4D之家模型下载灰猩猩GSG 102G超级材质包:3D设计与动画创作的终极利器,打造完美视觉效果的必备神器GSG - Materials C4D材质 28252 阿诺德2024-12-03 66套映速官方C4D中文教程free大合集(2008-2016) 本套教程收录了上海映速(IHDT 发布人:starimage6419 C4D R19小白成长记(入门篇) 零基础学习Cinema 4d R19https://www.c4d.cn/
25.设计达人爱设计,爱分享。精选全球优秀UI设计和网页设计欣赏,分享免费高质量设计素材,为设计师提供新鲜的技术教程和创意灵感,探讨交互设计、产品设计、用户体验以及xhtml+css教程。http://shejidaren.com/
26.昵享网原创素材共享平台www.nipic.cn梦想导航昵享网_原创素材共享平台.图片素材图库提供海量原创素材,图片下载,摄影作品,设计素材,视频素材,ppt模板,PSD源文件,矢量图,AI,CDR,EPS等高清图片-梦想导航https://nav.dreamthere.cn/site/index/12199170
27.我的设计图源文件上传到“享设计”网站,这个网站是设计交流借鉴网站是的 侵犯了你的著作权 https://www.66law.cn/question/46327916.aspx
28.UI设计师导航网优阁UI设计师网址导航专注分享优秀设计网站、免费无版权限制可商用的高品质素材,UI设计教程、尺寸规范、配色方案、设计素材和灵感http://so.uigreat.com/
29.精选设计导航必备设计网站大全拜拜设计导航网是最全的设计师导航网站,平面设计师电商网页UI设计师必备的设计网址导航网站大全,精选优秀设计网站、设计教程、免费无版权可商用设计素材下载和设计技巧 笔点导航 笔点网址导航是一款简洁的网址导航网站,用户可以自定义上网常用网址和自我需要的工具模块 UPTMR 一个忠于用户自定义的引导网站 AI way导航站https://hao.58pic.com/
30.C4D培训,Pr剪辑教程,Pr剪辑课程,平面设计课程,网页设计课程三维空间案例工程 - 后期案例 - 鬼谷云课堂,guigucollege,影视后期培训,ps培训,Ps课程,剪辑培训,AE课程,AE培训,C4D课程,C4D培训,Pr剪辑教程,Pr剪辑课程,平面设计课程,网页设计课程,电商美工课程,UI设计课程,一对一设计培训,在线学习,线上教学,在线学习平https://www.guigucollege.com/index.php?show=19-527
31.学兔兔(原标准分享网)专注工程技术学习网站学兔兔(原标准分享网)是专注于工业工程技术方面学习资料分享标准下载网站.网站主要提供国家标准,行业标准规范下载,及时分享各类最新标准规范.机械,建筑,石油,化工,电力等行业论文资料标准分享网站!http://www.bzfxw.com/
32.IronCAD2023破解版设计协作套件IronCADDesignColl无论您是需要CAD程序来支持整个公司的3D或2D图纸的销售,培训或其他应用程序,IRONCAD都可以调整其灵活的平台,以创建满足您需求的定制设计解决方案。 定制CAD软件解决方案 IronCAD设计协作套件背后的主要目标之一 是使CAD模型可用于更多用途,而不仅仅是工程。IRONCAD直观的用户界面和快速学习曲线使3D图像可供所有对企业至http://www.sd173.com/soft/7758.html
33.火星时代教程网火星时代教育教程知识库致力于提供免费设计软件图文教程,包括ps教程、3dsMax教程、Maya教程、AutoCAD教程、CG原画教程、CG动画教程、游戏CG教程、CG插画教程、Unity3d教程、mentalray教程等。学习cg设计软件就上火星时代教程cg资源网。https://jiaocheng.hxsd.com/