园薇

从 8051 到 CME 之 FPGA

0
阅读(2354)

ZUO bshu书用手首先是一个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芯片,可以让设计师免去焊接面包板的琐碎。对于想介入嵌入式开发的软件开发人员也是不错的开始。