CrazyBingo

Avalon-MM____IP Design 心得体会

0
阅读(32238)

终于,我学会了一点点,阿窝龙妹妹,这些天,一直很心烦,苦恼,难耐,都是这个龙妹妹陪我走到了现在,谢谢你。。

在这之间感触最深的,就是“无助”,或者说“不甘心”,有很多人不会,你觉得大家同样傻X,又有些NX的人会,可是他很高傲,懒得知指导你,觉得你真傻X,这都不会,但是,说实话,如果跟单片机比起来,Avalon-MM的资料真的是很少……

当然www.altera.com里面的还是有很多 ,Avalon-MM Interface Speciation,很不错,只是,可能你看了也不会很知道。

写过《深入浅出玩转FPGA》的吴厚航:特权同学,估计学fpga的很多人都知道,听说他在录制nios2的视频,他身边资源比我多的去,等到那一天,阿窝龙妹妹可能就不会再那么神奇了,受益于此的人,从此会觉得洒脱。

这几天写了这几个IP ,终于全部搞定了。不过只是简单的接口,可能某些层面上压根不算什么IP吧,虽然再加代码只是加了描述就OK了(现在觉得很简单)。但我还是折腾了好几天,以后慢慢练功,总会柳暗花明的。。。

下面是我做的IP核,以前连载:

Crazy_LED:http://blog.chinaaet.com/detail/18122.html

Crazy_KEY:http://blog.chinaaet.com/detail/18121.html

Crazy__KEY_LED:http://blog.chinaaet.com/detail/18124.html

Crazy_LCD1602:http://blog.chinaaet.com/detail/18125.html

Crazy_SRAM:http://blog.chinaaet.com/detail/17880.html

Crazy_SDCARD:http://blog.chinaaet.com/detail/18126.html


   至此,我表述我其中遇到的痛苦,希望有些人能够看的懂:

(1)Avalon-MM的命名最好根据规范来命名:csi_是时钟,avs是龙妹妹从机端口,coe是从机通道

(2)地址必须有,而且必须是4的倍数(pdf说1,4,8,16…但我测试0不行)

(3)bytebeenable 可以没有,如果地址线小于8bits的话

(4)如果只是write,可以只写write data process

(5)如果只是read,可以只写read data pocess

(6)如果想写的同时读取自己(led = led + 1),在write process 的同时,也写 read process

(7)conduit信号大于1个的,address地址映射方式,必须一一对应

(8)alt寄存器赋值三种方式:

一、

#ifdef    CRAZY_LED_DATA
#define    LED_DATA_ADDR    (LED_DATA_BASE | (1<<31))
#define    LED_DATA    (*(volatile unsigned int*)LED_DATA_ADDR)
#endif

二、用API函数 IOWR,IORD…

三、用结构体

#ifdef    CRAZY_LCD1602
#define    LCD1602_ADDR    (LCD1602_BASE | (1<<31))
typedef struct
{
    alt_u32    LCD_EN        :    32;
    alt_u32    LCD_RW        :    32;
    alt_u32    LCD_RS        :    32;
    alt_u32    LCD_DATA    :    32;
}LCD1702_T;
#define    LCD1602    (*(LCD1602_T)LCD1602_ADDR)

 

个人推荐用第一种,比较直观整洁

 

(9)我发现,用sopc里面的component,至少pio,生成的verilog代码,看起来很变扭,而且反过去生成IP,会错误,由此推断是不是Altera写戳了

(10)以后慢慢补充……