姓名:黄楠琳 学号:19020100011 学院:电子工程学院
转自:https://blog.csdn.net/sinat_41653350/article/details/106355562
【嵌牛导读】本文介绍了如何在NIOS系统创建LCD1602的IP核
【嵌牛鼻子】NIOS II、LCD1602
【嵌牛提问】如何在NIOS系统创建LCD1602的IP核?LCD1602控制核是如何进行工作的?
【嵌牛正文】
由于在Qsys中提供了Optrex 16207 LCD Controller Core(下文统称1602控制核),因此我们只需调用,然后集成到我们的NIOS系统中即可,而且属于字符型输出设备,支持printf(),即我们可以直接输出我们想要的内容。
那么LCD1602控制核是如何进行工作的呢?
当把LCD1602控制核加入系统编译成功时,文件夹下会出现LCD16207.V的文件,我们来分析官方提供的文件是怎样进行描述的?
由上图端口定义得出以下总体结构
由上图可以看出LCD1602外设连接到LCD1602控制核上有11个信号:(信号命名根据.v文件)
LCD_E------输出使能
LCD_RS------数据/命令选择(输出)
LCD_RW------读或写选择(输出)
LCD_data------8位数据总线(双向DB0~DB7)
第一步:
我们首先需要控制输出使能LCD_E信号,根据Avalon-mm总线规则,可以看出有读写使能信号,而对于LCD1602来说,只有当LCD_E为下降沿时,指令或数据才有效,不论是对总线是什么操作,因此可以将读写使能赋值给LCD_E输出使能。
第二步;
我们需要理解LCD_RS和LCD_RW对于外设来讲是两个寄存器,而这两个寄存器是需要地址来进行访问的,因此第二步需要将LCD_RS和LCD_RW赋一个地址。
第三步:
此时我们需要知道LCD1602外设数据如何去与CPU进行交互?因为数据总线是双向的,因此三态门必不可少,其中readdata其实是总线上的接口,LCD_data赋值即可,也可对外来数据LCD_data进行异步信号同步处理。
而且Altera为Nios II处理器提供了HAL系统库驱动程序,使你能够使用ANSIC标准库功能访问LCD控制器, Altera提供的驱动程序集成到了Nios II系统的HAL系统库中。
即LCD1602控制器附以下软件文件。 这些文件定义了与硬件的底层接口,并提供了HAL驱动程序。
•altera_avalon_lcd_16207_regs.h-该文件定义内核的寄存器映射,提供用于访问底层硬件的符号常量。
•altera_avalon_lcd_16207.h,altera_avalon_lcd_16207.c-这些文件实现了HAL系统库的LCD控制器设备驱动程序。
综上可知,其实LCD1602控制核是个很简单的IP核,那我们如何在最小系统中去设计其他液晶的IP核呢?
自定义LCD液晶IP核
由LCD1602控制核须知自定义IP的接口有哪些?
1.全局时钟(Clk)和复位(Rst_n)信号必不可少。
2.Avalon-mm slave总线接口(接口信号根据实际外设接口来选择)
1)地址总线(avs_address)
2)片选信号(avs_chipselect /avs_chipselect_n)
3)写请求(avs_write /avs_write_n)
4)写数据(avs_writedata(8/16/32位 位宽))
5)读请求(avs_read /avs_read_n)
6)读数据(avs_readdata(8/16/32位 位宽))
7)等待信号(avs_waitrequest / avs_waitrequest_n)
8)读数据有效信号(avs_data_valid)
3.导出信号
导出到NIOS 系统层,分配到IO,或者连接到Qsys系统以外的逻辑。
下图是接口8080时序控制的液晶IP核。
那这时我们发现液晶信号的busy忙信号及RST复位信号未在导出信号之列,因为这两个信号在最小NIOS系统中可以单独用PIO核来进行读取控制。
5.7寸液晶导出的信号控制逻辑与LCD1602控制核一致。
当我们将该5.7寸文件编译通过后,就开始对我们的IP核进行封装。
自定义IP核封装
步骤一:点击下图位置打开自定义IP封装向导。
步骤二:如下图所示填好基本信息,最好将该元件纳入分组中,以便后期管理。
步骤三:将我们写好的.v文件添加进来分析,这里注意,因为这个IP核只有一个文件,因此顶层文件就是LCD,如果自定义IP核涉及多个文件,那么一定要注意顶层文件是哪一个。
步骤四:这里就体现信号规范命名的好处,接口和信号类型就显示正确,如果不正确,我们手动改变接口类型,注意信号类型如片选有低有效和高有效,不能与设计文件相违背,再例如我们导出的信号类型是.export,因此选择new_conduit接口。
步骤五:先移除掉无信号接口,在对每个接口进行配置,注意总线上的读写时序与接口8080一致,保证无错误即可生成.hw.tcl文件