Avalon-MM____IP Design 心得体会
0赞终于,我学会了一点点,阿窝龙妹妹,这些天,一直很心烦,苦恼,难耐,都是这个龙妹妹陪我走到了现在,谢谢你。。
在这之间感触最深的,就是“无助”,或者说“不甘心”,有很多人不会,你觉得大家同样傻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)以后慢慢补充……