姓名:黃楠琳? ? ? ?學(xué)號:19020100011? ? ? ? 學(xué)院:電子工程學(xué)院
轉(zhuǎn)自:https://blog.csdn.net/sinat_41653350/article/details/106355562
【嵌牛導(dǎo)讀】本文介紹了如何在NIOS系統(tǒng)創(chuàng)建LCD1602的IP核
【嵌牛鼻子】NIOS II、LCD1602
【嵌牛提問】如何在NIOS系統(tǒng)創(chuàng)建LCD1602的IP核?LCD1602控制核是如何進行工作的?
【嵌牛正文】
由于在Qsys中提供了Optrex 16207 LCD Controller Core(下文統(tǒng)稱1602控制核),因此我們只需調(diào)用,然后集成到我們的NIOS系統(tǒng)中即可,而且屬于字符型輸出設(shè)備,支持printf(),即我們可以直接輸出我們想要的內(nèi)容。
那么LCD1602控制核是如何進行工作的呢?
當(dāng)把LCD1602控制核加入系統(tǒng)編譯成功時,文件夾下會出現(xiàn)LCD16207.V的文件,我們來分析官方提供的文件是怎樣進行描述的?

由上圖端口定義得出以下總體結(jié)構(gòu)

由上圖可以看出LCD1602外設(shè)連接到LCD1602控制核上有11個信號:(信號命名根據(jù).v文件)
LCD_E------輸出使能
LCD_RS------數(shù)據(jù)/命令選擇(輸出)
LCD_RW------讀或?qū)戇x擇(輸出)
LCD_data------8位數(shù)據(jù)總線(雙向DB0~DB7)
第一步:
我們首先需要控制輸出使能LCD_E信號,根據(jù)Avalon-mm總線規(guī)則,可以看出有讀寫使能信號,而對于LCD1602來說,只有當(dāng)LCD_E為下降沿時,指令或數(shù)據(jù)才有效,不論是對總線是什么操作,因此可以將讀寫使能賦值給LCD_E輸出使能。

第二步;
我們需要理解LCD_RS和LCD_RW對于外設(shè)來講是兩個寄存器,而這兩個寄存器是需要地址來進行訪問的,因此第二步需要將LCD_RS和LCD_RW賦一個地址。

第三步:
此時我們需要知道LCD1602外設(shè)數(shù)據(jù)如何去與CPU進行交互?因為數(shù)據(jù)總線是雙向的,因此三態(tài)門必不可少,其中readdata其實是總線上的接口,LCD_data賦值即可,也可對外來數(shù)據(jù)LCD_data進行異步信號同步處理。

而且Altera為Nios II處理器提供了HAL系統(tǒng)庫驅(qū)動程序,使你能夠使用ANSIC標(biāo)準(zhǔn)庫功能訪問LCD控制器, Altera提供的驅(qū)動程序集成到了Nios II系統(tǒng)的HAL系統(tǒng)庫中。
即LCD1602控制器附以下軟件文件。 這些文件定義了與硬件的底層接口,并提供了HAL驅(qū)動程序。
?altera_avalon_lcd_16207_regs.h-該文件定義內(nèi)核的寄存器映射,提供用于訪問底層硬件的符號常量。
?altera_avalon_lcd_16207.h,altera_avalon_lcd_16207.c-這些文件實現(xiàn)了HAL系統(tǒng)庫的LCD控制器設(shè)備驅(qū)動程序。
綜上可知,其實LCD1602控制核是個很簡單的IP核,那我們?nèi)绾卧谧钚∠到y(tǒng)中去設(shè)計其他液晶的IP核呢?
自定義LCD液晶IP核
由LCD1602控制核須知自定義IP的接口有哪些?
1.全局時鐘(Clk)和復(fù)位(Rst_n)信號必不可少。
2.Avalon-mm slave總線接口(接口信號根據(jù)實際外設(shè)接口來選擇)
1)地址總線(avs_address)
2)片選信號(avs_chipselect /avs_chipselect_n)
3)寫請求(avs_write /avs_write_n)
4)寫數(shù)據(jù)(avs_writedata(8/16/32位 位寬))
5)讀請求(avs_read /avs_read_n)
6)讀數(shù)據(jù)(avs_readdata(8/16/32位 位寬))
7)等待信號(avs_waitrequest / avs_waitrequest_n)
8)讀數(shù)據(jù)有效信號(avs_data_valid)
3.導(dǎo)出信號
導(dǎo)出到NIOS 系統(tǒng)層,分配到IO,或者連接到Qsys系統(tǒng)以外的邏輯。
下圖是接口8080時序控制的液晶IP核。

那這時我們發(fā)現(xiàn)液晶信號的busy忙信號及RST復(fù)位信號未在導(dǎo)出信號之列,因為這兩個信號在最小NIOS系統(tǒng)中可以單獨用PIO核來進行讀取控制。
5.7寸液晶導(dǎo)出的信號控制邏輯與LCD1602控制核一致。
當(dāng)我們將該5.7寸文件編譯通過后,就開始對我們的IP核進行封裝。
自定義IP核封裝
步驟一:點擊下圖位置打開自定義IP封裝向?qū)А?/p>

步驟二:如下圖所示填好基本信息,最好將該元件納入分組中,以便后期管理。

步驟三:將我們寫好的.v文件添加進來分析,這里注意,因為這個IP核只有一個文件,因此頂層文件就是LCD,如果自定義IP核涉及多個文件,那么一定要注意頂層文件是哪一個。

步驟四:這里就體現(xiàn)信號規(guī)范命名的好處,接口和信號類型就顯示正確,如果不正確,我們手動改變接口類型,注意信號類型如片選有低有效和高有效,不能與設(shè)計文件相違背,再例如我們導(dǎo)出的信號類型是.export,因此選擇new_conduit接口。

步驟五:先移除掉無信號接口,在對每個接口進行配置,注意總線上的讀寫時序與接口8080一致,保證無錯誤即可生成.hw.tcl文件

