从 8051 到 CME 之 FPGA
0赞首先是一个8051的最小系统,P1 口的低4个引脚外接共阳极的4个发光二极管。程序源码以及效果如下:
#include <reg51.h>
void delay() { int i = 30000; //最大32767
while( i ) --i; }
main() { unsigned int value=0x0; int i = 0; while(1) { value = 0x0e; delay();//延时程序 for(i = 0; i<4; i++) { P1 = value<<i; delay(); }
} }
|
这个简单功能在京微雅格拥有51内核的FPGA系统中,实现方法如下:
在Keil中如原来那般编译源代码,生成目标文件blinky.hex。
Primace新建工程,指定top module。添加工程文件可以支持VHDL或者verilog 2种文件类型。这里使用verilog类型,新建top.v。
Wizard Manager 添加使用8051模块MyMcu,可以只选择使用P1口,选择已存在的blinky.hex. 然后top.v中对8051模块实例化
module top(clk, in, out); input clk; input in; output [3:0] out;
MyMcu inst( .clkcpu(clk), //clock of 8051 .resetn(1'b1), //resetn of 8051 //.port1i, //8 bit input port, combine with int2-7, ccu, t2, rxd1 .port1o(out[3:0]) //8 bit output port, combine with ccu, txd1 );
endmodule
|
将blinky.hex拷贝到Primace工程.src目录下。
然后跑Flow的综合。上面代码综合结果的形象示意如下,可以理解为把verilog语言翻译成电路图。
然后我们对管脚进行分配。已经知道在Demo板上,
IO155_3 (Pin206) 外接 Led1
IO157_3 (Pin208) 外接 Led2
IO159_3 (Pin210) 外接 Led3
IO161_3 (Pin214) 外接 Led4
所以,把P1的低4位引脚assign到这4个IO上。
然后跑完剩下的Flow(Placement, Router, Bitgen). 生成可下载的.acf文件, 然后下载线连接电脑和Demo板,使用工具Downloader, 使用JTAG下载到开发板中, Led4~1 于是闪烁了起来。
如果使用verilog加入更加复杂的逻辑功能,或者使用更多的IP资源,绕线的结果会更加明显地示意Primace这个EDA工具所做的工作,这里只是简单的连接,用Primace的工具Chip Editor查看的结果很清晰。亮黄色为我们使用的CME3000中的模块资源,蓝色的线为跑完Flow后的连接情况。
FPGA芯片,可以让设计师免去焊接面包板的琐碎。对于想介入嵌入式开发的软件开发人员也是不错的开始。