Chapter 04:要玩国产FPGA,先搞定8051 ip core
0赞要玩国产FPGA,先搞定8051 ip core
8051 ip core以及相关资料下载地址:http://www.chinaaet.com/lib/detail.aspx?id=89010
一、8051 ip core的基本介绍
1. 8051 ip core 特性
1) 可选的1-4个时钟周期
2) 可选的units(256个以内,相关配置可在c8051_p_p.vhd修改参数)
a) Alu(累加器)
b) Multiplier(乘法器)
c) Divider(除法器)
d) Decimal correction(十进制校正)
e) Timer/counter(定时器/计数器)
f) Serial interface(串行接口)
g) External interrupt(外部中断)
3) 结构上与工业标准的8051 微处理器兼容,速度上提升了10倍
4) 256 bytes的内部RAM,最大可配置64Kbytes的RAM,ROM
2. 8051 ip core 结构
3. 8051 ip core 信号定义
4. 8051 ip core rtl架构
Quartus II 编译综合的RTL图如下所示,
可见8051 ip core,大体上有core,rom,以及内部,外部RAM组成
继续分析底层电路,清晰可见ip core大体由算法、移位寄存器、中断定时器,内核控制中心组成。
5. 8051 ip core I/O port
6. 8051 ip core注意事项
1) 8051 ip core 异步复位信号低的时候有效,而FPGA一般logic低复位,因此可加一反相器
2) Rom,ram,ramx可以再block中修改存储深度,以便节省资源
3) Clk
二、8051 ip core的应用范例
1. 知己知彼,了解8051 ipcore
仔细阅读Mc8051_user_guide.pdf,了解Oregano的8051 ip core,分析此内核的架构以及基本组成部分。Orerano公司的8051 ipcore比较灵活,而且比较强大,少说也有万把的代码,而且vhdl应用自如,虽说放弃vhdl很久很久,但还是膜拜。代码写很严谨,而且很巧妙,编译了一下,除了可以忽略的,上万行代码0个警告:
我看了大半个白天,总算一知半解的懂得了怎么使用,恐日后有用,测试一下。
2. 配置寄存器
参照Oregano Syetem的8051 ip core,分析vhdl代码,修改mc8051_p.vhd配置一个最为简单的8051ip core如下:
1) 8位8051 ip core
2) 1个乘法器
3) 1个除法器
4) 1个10进制校准器
5) 1个定时/计数器
6) 1个串行移位器
7) 两个中断
3. 配置Memory
此core能支持最大256 bytes的内部ram,最大64k的内部rom以及外部ram,本例程中配置了64byte的内部ram,以及256byte的内部rom以及外部ram。
4. 综合8051 ipcore block
因为ipcore模块比较多,为了便于修改,看的更加明了,可以子啊block中设计。本例利用P1设计流水灯,来验证8051ipcore,如下所示
5. 配置引脚
由于ipcore所占资源比较多,综合会发费很大的工程,因此为了节约时间,可以用tcl来配置引脚,如下:
set_location_assignment PIN_Y18 -to led_data[7]
set_location_assignment PIN_AA20 -to led_data[6]
set_location_assignment PIN_U17 -to led_data[5]
set_location_assignment PIN_U18 -to led_data[4]
set_location_assignment PIN_V18 -to led_data[3]
set_location_assignment PIN_W19 -to led_data[2]
set_location_assignment PIN_AF22 -to led_data[1]
set_location_assignment PIN_AE22 -to led_data[0]
set_location_assignment PIN_N2 -to clk
set_location_assignment PIN_N25 -to rst_n
6. 编写单片机程序
在Keil C51中建立K80C51的工程,正如一般的51单片机一样,设计一个简单的流水灯程序,并且声称hex,代码如下所示:
void delay_1s()
{
unsigned int j;
unsigned int i = 0xfff;
while(i--)
{
j = 0x30;
while(j--);
}
}
main()
{
unsigned char i ;
while(1)
{
P1 = i++;
delay_1s();
}
}
7. 设定51 ROM的HEX
谁都知道单片机设计时,要下载声称的hex到ROM中,而在基于FPGA的8051IP中,直接在ROM中设计,映射keil声称的hex即可。ROM作为HEX的存档区,如下所示:
8. Quartus II编译综合,下载验证
如果能安装上诉步骤,又保证在设计中不出错误,可以保证一次综合,直接下载验证。尽量减少综合的时间,正如sopc一样,给开发大大节省时间。
此时若出错了,再次修改代码,也可以看RTL了,做好一切准备,让开发变得更明了。
Keil+Quartus II 联调,一次下载成功,看到了漂亮的流水灯,效果如下所示,强大的51内核到手了哈。(直接行了,都没感觉~~~~(>_<)~~~~ )
三、Oregano 8051 ip core与Agate Logic Astro ii的血缘
8051 ip core已经无需多言,且看Astro II的内部架构,多了I2C,SPI,UART等,其他雷同。可见了解了8051内核,自己走过一遍流程,对于Astro ii内部架构的了解,对于此款芯片的使用开发,无疑明了了很多。倘若你写的8051 ip core相当完美,再写一个usb下载hex的接口,也许可以与astro ii媲美了!O(∩_∩)O哈哈~