博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(原創) 如何讓Nios II自動抓到自己寫的IP的HAL? (SOC) (Nios II) (SOPC Builder) (DE2-70)
阅读量:6830 次
发布时间:2019-06-26

本文共 1783 字,大约阅读时间需要 5 分钟。

Abstract

使用Altera所提供的ip時,如UART、DMA...等,只要在SOPC Builder加進要用的ip,Nios II的C語言include正確的header file後,就可以正常使用,為什麼自己寫的ip,還必須將HAL的*.c複製到project的目錄下才能編譯呢?

Introduction

使用環境:Quartus II 8.1 + Nios II EDS 8.1 + DE2-70 (Cyclone II EP2C70F896C6N)

在DE2-70 CD的DE2_70_NIOS_HOST_MOUSE_VGA範例中,其實如SEG7.cVGA.c都是友晶科技自己寫的ip:TERASIC_SEG7TERASIC_Binary_VGA_Controller的HAL,在Nios II編譯時,還必須將HAL複製到project下,Nios II EDS的gcc才能編譯,雖然也沒什麼不妥,但總是麻煩,為什麼自己寫的ip不能如Altera提供的ip一樣,只要SOPC Builder加入後就可使用呢?

component_mk03

一切的原因,在於SOPC Builder在Quartus II 7.0之後的做了重大的改變:SOPC Builder不再為HAL做打包的動作!!我不清楚為什麼Altera要將這個功能拿掉,大體上來說,SOPC Builder是越改越好用,Avalon Bus也越改越強,但在HAL的支援上,卻不如Quartus II 6.1好用。不過還是得面對現實,從Quartus II 7.0到目前的Quartus II 8.1,SOPC Builder都不在支援HAL的打包,所以這個動作必須手動自己做,才能讓Nios II自動抓到HAL,而不用在手動複製*.c到project目錄下。

component_mk00

一個典型的ip,目錄結構入下圖所示,事實上,在C:\altera\81\ip\altera\sopc_builder_ip\目錄下,放的就是Altera所提供的ip,可以拿來研究Altera是怎麼寫HAL。

外層的inc,放的是俗稱的register map,是由macro所構成。

HAL的inc,放是HAL的header files,而src則放HAL的source code。

至於要不要寫register map呢?Altera是建議你要寫,不過若你偷懶的話,可以不寫register map,只提供HAL即可,這樣Nios II一樣可以使用你寫的ip。

component_mk01

Solution

Step 1:
在HAL\src下加入component.mk

component.mk在Quartus II 6.1時,SOPC Builder會幫我們將HAL打包成component.mk,現在只好自己手動建立。

# List all source files supplied by this component.
C_LIB_SRCS   +
=
SEG7.c
ASM_LIB_SRCS +
=

這僅僅是個文字檔而以,敘述HAL的*.c檔,若你有很多*.c檔,可以學UART的寫法。

# List all source files supplied by this component.
C_LIB_SRCS   +
=
altera_avalon_uart_fd.c \
                altera_avalon_uart_init.c \
                altera_avalon_uart_ioctl.c \
                altera_avalon_uart_read.c \
                altera_avalon_uart_write.c
ASM_LIB_SRCS +
=
INCLUDE_PATH +
=

加了這個文件後,Nios II EDS在編譯時,就會將這個抓到這個*.c,再也不用再手動複製到project的目錄下了。

完整程式碼下載

此範例是以友晶科技DE2-70 CD所提供的TERASIC_SEG7 ip為基礎加以修改,配合本文的component.mk的技巧。

Conclusion

雖然只是一個小小的技巧,不過在友晶科技的範例與很多書上都沒提到,甚至在Altera的手冊也沒看過,或許因為這本來是SOPC Builder該做的,但無奈現在SOPC Builder將此功能拿掉,我們只好自己手動完成。

转载地址:http://nynkl.baihongyu.com/

你可能感兴趣的文章
99 Lisp Problems 列表处理(P1~P28)
查看>>
实用图片滑块,传送带,幻灯片效果【附源码】
查看>>
Bluez SPP实现代码分析(转)
查看>>
android中给TextView或者Button的文字添加阴影效果
查看>>
读《被投资人“送”入看守所》一文有感(转)
查看>>
生产环境线上測试的慘淡人生
查看>>
代码阅读分析工具Understand 2.0试用
查看>>
Linux Load average负载详细解释
查看>>
Android多媒体框架图
查看>>
jps命令使用
查看>>
ADC In An FPGA
查看>>
#import </usr/include/objc/objc-class.h> not such file or directory问题的解决方法
查看>>
集装箱项目
查看>>
C#中的Action<>和Func<>
查看>>
关于opencv中人脸识别主函数的部分注释详解。
查看>>
SQLServer内核架构剖析 (转载)
查看>>
Android 风格化的 Toggle Buttons
查看>>
Eclipse中SVN的安装步骤(两种)和用法
查看>>
安全运维之:网络实时流量监测工具iftop
查看>>
在 Windows上配置NativeScript CLI
查看>>