设计示例 我们不妨来看看一些赛灵思开发板的LCD控制器参考设计,这种设计综合采用了简单MicroBlaze微控制器的各种特性。LCD控制器非常适用于小型微控制器实施,因为其硬件接口较慢,也比较简单,初始化序列较长,而且需要大量字符代码。 通过综合采用HDL和C代码,设计可将消息输出至电路板上的字符LCD屏。HDL可处理硬件接口,而软件则负责初始化和控制LCD屏。 LCD模块的时序较慢,但同时需要指令或数据之间的较大延迟。例如,清空显示的指令需要1.52毫秒的延迟,然后才能发出下一个指令或数据。部分指令需要40μs的延迟,其它的延迟则需要1μs。 我们可在C语言代码中用while回路来处理延迟问题,不过这样做不够准确,而且还会影响编译器的优化。更好的选择
是在FPGA中创建软件可载入的32位计数器,以便在到达编程的延迟时触发控制器中断。MicroBlaze写入地址0x10,以根据用户接口数据总线上的数据启动定时器。MicroBlaze随后将等待中断,以继续执行。 MicroBlaze写入用户接口地址0x0会触发LCD控制器硬件接口,硬件接口的时序由HDL处理。用户接口数据总线可捕获指令或数据值。按钮输入能够连接至用户接口地址0x20。 FPGA设计包括顶级模块、LCD硬件时序模块以及软件可寻址可编程定时器。此外,顶级文件还包括简单MicroBlaze 微控制器的示例,运行频率为66 MHz。 C语言应用包含在单个文件中。该代码不仅可实现MicroBlaze中断、初始化LCD屏幕、管理不同的延迟情况、打印双线LCD、等待按钮输入,同时还可清空屏幕并输出新的消息。 在Virtex-6 ML605电路板上,设计所用的FPGA资源还不足1%,并可为设计分区提供更加高效的方式。与仅采用HDL方案的实施和调试相比,C语言代码的编译和调试要快一个数量级。 |