【Artix-7 50T FPGA试用体验】基于7A50T FPGA开发套件的工业通信管理机设计(一)
【Artix-7 50T FPGA试用体验】基于7A50T FPGA开发套件的工业通信管理机设计(二)
【Artix-7 50T FPGA试用体验】基于7A50T FPGA开发套件的工业通信管理机设计(三)AXI接口
【Artix-7 50T FPGA试用体验】基于7A50T FPGA开发套件的工业通信管理机设计(四)自定义IP封装
接上贴
Microblaze系统搭建然后使用本自定义IP创建基于MicroBlaze的片上系统,前期为了调试方便,因此只添加了4个本IP。主要是手头最多能找到4个USB转串口的模块,能够与PC机连接,使用MODBUS SLAVE软件进行模拟设备调试。
MicroBlaze程序设计关键数据结构要想对
通信管理机上的众多外设如16个自定义IP进行合理有序的管理,并保证数据流的正确传递,系统的数据结构设计必须巧妙。以下为针对本项目设计的串口的数据结构体:
typedef struct { uint8_t cmd_sum; //命令总数 uint8_t cmd_index; //当前命令号 uint8_t resend_sum; //重发次数 uint8_t resend_index; //当前重发次数 } SLAVE_STRUCT_TYPEDEF;
typedef struct { uint32_t uart_base; uint32_t uart_irq_ic_id; uint8_t uart_irq; uint16_t irq_mask; void *uart_irq_isr; uint32_t bps; //波特率 uint32_t timeout_period ; //接收超时时间 uint16_t MDP_period_cnt; uint8_t MDP_period_cnt_en; uint8_t slave_index; //串口当前操作的设备编号 uint8_t slave_sum; //串口所挂的设备总数 uint8_t uart_rx_status; //串口收状态 uint8_t uart_tx_status; //串口发状态 uint8_t uart_tx_fifo_len; //串口发送fifo指针长度 uint8_t uart_rx_fifo_len; //串口接收fifo指针长度 uint8_t uart_rx_fifo_len_temp; //串口接收fifo指针长度缓存 uint8_t uart_rx_fifo[256]; //接收fifo uint8_t uart_tx_fifo[256]; //发送fifo SLAVE_STRUCT_TYPEDEF slave[16]; } MDPORT_STRUCT_TYPEDEF; |
使用时,用到多少个自定义串口外设,就使用该结构体类型定义多少个串口变量,然后,就可以通过结构体引用来直接调用相关元素了。在实际使用时,uart_rx_fifo和uart_tx_fifo两个256字节的fifo严重浪费内存空间,因此可以将其从结构体中剔除,直接定义为全局变量。
系统调试方案后期调试是一个非常大的项目,为了方便调试,因此使用Modbus Slave软件模拟MODBUS从站,以让使用7A50T设计的通信管理机能够直接访问到有效数据。
调试系统为一根网线连接PC,两个USB转串口通过HUB连接到PC,并和上位机Modbus Slave软件连接。
预期效果运行MicroBlaze处理器,将以1秒钟的速率持续通过两个串口访问PC机上模拟的Modbus Slave主机,并将读到的数据处理后存储起来,等到PC网络上位机发出总召命令,就将处理后的数据按照指定格式,使用IEC104协议上传到PC机后台,以实时显示。在后台软件上发出控制命令,数据将通过网络协议传给7A50T板卡,然后经过分析处理后,再将需求信息通过对应的串口发送到PC上模拟的设备,改写对应的数据内容。
总结项目到此,不得不很遗憾的宣告失败,时间有限,对于我来说,之前从没接触过Xilinx的相关内容,以为凭着之前在Altera SOPC技术上的积累,能够快速上手Xilinx的MicroBlaze应用,但是目前来说,我还是图样图森破,也是因为没有真正全身心的投入到Vivado软件的学习和使用中,因此,最终的自定义IP封装都是在朋友的指导下才最终完成,在搭建MicroBlaze处理器系统时,纠结了好久,到现在为止,也有若干问题没解决,整个硬件项目依旧无法route通过,由于我现在是一个人创业,没有稳定的收入,因此也没办法再花太多的时间在这个不熟悉的技术上。所以,还是很感谢安富利、感谢
电子发烧友
william hill官网
,感谢Cici。未能很好的完成此试用项目,我也很遗憾。