microblaze之串口打印和LED显示

       现在早已忘记怎么使用microblaze来做系统设计,但是xilinx的很多方案要么基于zynq要么基于软核,面对这种困境,为了不让自己局限于逻辑开发的层次,于是从头跑一回软核吧。总的来说就是先在vivado里面搭建CPU硬件,然后导出设计到SDK去进行C代码编译。最后下载到板上进行验证。

1,首先建立一个rtl工程,然后create Block Design文件,选择添加IP,我自己调用了microblaze和axi_gpio,axi_uartlite这三个IP,如下:

 

2,这是三个孤立的IP,也不知道怎么连接,直接点击自动连接,就会生成其他附加的模块和连线,然后我把引脚的名称按照自己的习惯重命名了。关于这个系统做一个大致上的认识,标示1框住的东西是MDM,用来做在线调试软件的,至于怎么实现的暂且不关心了;标示2是软核的数据空间和指令空间,接口DLMB和ILMB分别代表数据总线和指令总线,可以看出程序空间全部采用片上BLOCK RAM实现;标示3其实就是一个PLL或MMCM模块,它主要实现了时钟的产生,在这个地方我遇到一个坑,由于我的外部复位引脚是低电平复位,导致没有时钟,因此要点击IP选择ACTIVE LOW,如下:

3,标示4就是一个产生各种复位信号的模块,标示5是一个AXI总线的仲裁互联IP,CPU访问各种外设,这里包括一个AXI_GPIO和AXI_URATLITE都需要经过它来调度,至于如何实现以后再深究。保存好之后,点击Create HDL Wrapper文件,这样以来就有了顶层设计。同时创建引脚约束文件XDC,点击生成bit文件即可。需要注意串口的RX和TX引脚不要弄反了,这算是我在调试中遇到的第二个坑。axi_gpio我用来控制一个LED灯的亮灭,于是我做了如下的更改,设置为输出端口,位宽选择为1:

4,在vivado之中生成完bit文件之后,点击file选择export hardware,然后点击launch SDK就进入了软件设计了。界面如下:

5,进入SDK后,还需要创建一个工程,这里我选择的是一个hello world的demo template模板,点击build project后直接run as就可以下载程序进行验证了。不知道过了多久,我的串口已经收到将近20万个hello world了。

6,进一步控制LED的闪烁,修改后的程序如下,首先添加两个相关的库文件,XGpio LED定义了一个变量,此时还没有关联到具体的硬件设备,XGpio_Initialize()则初始化了这个LED变量,意味着软件控制LED的值,则起作用的是外部的GPIO的电平,XPAR_AXI_GPIO_0_DEVICE_ID是设备的唯一标识符,XGpio_DiscreteWrite()函数中的1代表的是AXI_GPIO组件的通道1,在vavido例化IP的时候可以选择两个通道模式或一个通道模式,这里我只选择一个通道。

 

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值