原创 fusion入门笔记

2008-3-1 11:52 3181 5 8 分类: FPGA/CPLD

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


本文通过应用例子,切身处地地描述使用过程中的心得和遇到的困难,希望本人的介绍能够给您带来实实在在的帮助,同时也真诚地希望广大爱好者能够一起交流学习,共同进步。


文章主要介绍本人对周立公公司Fusion StartKitFPGA的初次使用心得,由于是初次接触和使用,文中不乏部分的个人观点和纰漏的地方,如发现错误,望读者见谅,同时期盼您的参与和支持。


阅读本文前,读者最好对Actel FPGA有一点儿认识,浅尝辄止就足够了,同时,如果是FPGA的初学者,最好就先看一下有关Libero软件的使用,至于你想用什么语言,那就各人喜好,本人就偏爱Verilog。当然,如果你以前使用过其他的FPGA和软件的话,那你使用Fusion就能更加得心应手。读者中高手如云,本人在此班门弄斧,恳请指教。


 


                                                         Yicheng


                                                          <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2008-2-18


 

 

 

 

 


第一例


SRAM和串口的应用


1.实验设备


(1)     硬件:PC机,Fusion StartKit 开发板全套


(2)     软件:Libero (Quartus II )


 


2.应用的器件


1SRAMIS61LV25616


2)串口


 


3.实验内容


     通过PC机,利用串口发送数据,保存到SRAM中,然后又把数据返回PC机,整个过程主要为了实现串口通信,阐明SRAM的读写方式和操作流程,加强对实验板上各器件之间的联合应用能力。


<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />


 


4.器件介绍


1IS61LV25616


     IS61LV25616ISSI公司的一款高速静态随机存取存储器,拥有264,144字,总共4,194,304位的存储空间。该芯片采用ISSI公司高性能的CMOS技术,结合先进的电路设计工艺,具有高性能、低功耗等优点的新型器件。快速存取,兼容TTL接口,三态输出等优势都使其倍受市场的青睐,应用日益广泛。


     IS61LV25616有几种不同的封装,用户应因地制宜,求其所好,但无论你的选择如何,芯片的功能引脚毫不例外的都是:地址总线(A0~A17),输入输出总线(I/O0~I/O15),片选(nCE),输出使能端(nOE),输入使能端(nWE),低字节选择端(nLB),高字节选择端(nUB),电源。


     IS61LV25616不但接口简单,控制也比较方便。以下特意从其技术文档中截取了几个时序图来加以说明。


     下图是读时序图,从图中可以看出,器件处于读状态时,nCEnOE为低电平,也就是片选和读操作有效,然后在地址总线有效的情况下输入数据被写入相应的存储空间,整个过程当然不能忽略各信号线的转换时延。由于这是一款16位的存储器,当然少不了高低位选择端nLBnUB,本例一概把数据写到低8位,那么nLB一直为低电平,至于nUB就不作要求。



    


     读写的过程大同小异,在此不再累赘,下图就是写时序图



 


(3)   串口


串口这个词对于广大电子爱好者来说当然是再熟悉不过了,接触过单片机的朋友都知道串口是怎么的一回事,然而这里要介绍的却是有点不同,否则我都不会在此浪费篇幅。


单片机的串口是包含于硬件中,我们只要通过指令控制相应的寄存器,就可以通信无阻,然而FPGA就没有这样的免费午餐。但我们可以通过串口的通信原理,利用硬件语言生成一个拥有串口通信功能的模块,本人为其取名,美其名曰“串口”。


生成的串口模块一定要注意时钟问题,特别是在程序的移植过程中,系统时钟会直接影响串口的通信波特率。同时,串口的波特率也可以在允许的范围内适当修改。



上图是在Q2中的使用例子,只要通过把50M的时钟改为48M的时钟环境,就可以方便地移植到Fusion上来了,当然Fusion套件的例子中也有相应的模块,但在此不敢妄自公开。


程序原码如下:


module UART(rxd,clock,out,end_flag);


 input clock;     //系统时钟


 input rxd;       //接收


 output[7:0] out;    //接收到的8位数据


 output end_flag;


 reg[7:0] out;


 reg end_flag;


 reg recclk;//16倍于9600的时钟


 reg[8:0]divcnt;//分频系数


 reg[9:0]data_buf;    //接收数据缓冲


 reg[3:0]cnt;


 reg[3:0]bitpos;  //串行数据当前位


 reg[7:0]sbuf;


 reg[1:0]state;


 parameter st0=2'b00,             //状态机定义


           st1=2'b01,


           st2=2'b11;


         //  st3=2'b10;


always@(posedge clock) //时钟分频325 产生9600  16倍的频率


begin                  //时钟分频162 产生19200 16倍的频率


 if(divcnt<9'd162)


  begin


   divcnt=divcnt+1'b1;


   recclk=1'b0;


  end


 else


  begin


   divcnt=1'b0;


   recclk=1'b1;


  end


end


 


always@(posedge recclk)//16倍于9600的时钟


begin


  case(state)


   st0:begin


 //       end_flag=1'b1;


        end_flag=1'b0;


        if(rxd==1'b1)


         begin


          cnt=4'h0;


          state=st0;//进入空闲状态


         end


        else


         begin


          cnt=cnt+1'b1;


         end


        if(cnt==4'h2)


         begin


          state=st1;


          cnt=4'h0;


          bitpos=0;


         end


       end


   st1:begin


        if(cnt==4'hf)


         begin


          cnt=4'h0;


          data_buf[bitpos]=rxd;


          bitpos=bitpos+1'b1;


          if(bitpos==4'd9)//9个数据


           begin


            bitpos=4'd0;


            state=st2;


           end


         end


        else


         begin


          cnt=cnt+1'b1;


         end


       end


   st2:begin//进入数据传送状态


  //      end_flag=1'b0;   //下降


        end_flag=1'b01;//接收完产生一个上降沿


        sbuf=data_buf[7:0];


        out=sbuf;


        state=st0;


        end


   default:state=st0;


 endcase


end


endmodule


以上程序中重点部分都均以注析,究其原理比较通俗,因此蜻蜓点水,一带而过,不再深入剖析。


5.软件编程


首先我要从新说明一下,我用的是Fusion StartKit板,所以编译和下载都非使用其相应的软件Libero,但我介绍过程中的流程和思想并不局限于此。


当我们对器件的性能和操作都有所了解后,我们就可以结合应用方案进行程序的构思,我想再强调一下,不一定要局限于应用的平台,因此,刚开始写程序时,我会使用自己相对比较熟练的Q2


程序的构思给了我们一个程序的骨架,接下来就是程序的编写以及因人而异的编译次数。


当我们把几个模块的程序都在Q2中编译通过后,就可以移植到Libero中,至于移植后是否会产生错误,本人暂时还没遇到,警告就会因约束条件而异,但是这种方法只是权宜之计,长远来说还是熟练掌握Libero为妙。


下面就针对Libero软件来介绍一下工程的流程。


(1)     打开Libero软件,选择器件,新建工程这些都是在所难免。这些都不想罗嗦了,但不要用中文名字。


(2)     把刚才在Q2中编好的程序导入工程中,文件会立刻出现在工程菜单下。如图中红线圈内:



 


(3)     接下来就可以进行综合了,如果你不到下面的界面怎么来的话,可以先按图中1位置的按键,然后眼前一亮,当然就会看到下图。然后再按2位置的图标,进入综合的界面。



4)综合的界面也不复杂,随手按下5位置的RUN键就可以了,直到6位置变成如图就预示离成功不远了。`



(5)返回工程界面,可以看见2的位置变绿色了,同时A位置也多了一个勾,也就是可以进行下面的步骤了,点击3位置,布局和布线的界面如下:



      如果是第一次进入Design,那么需要先进行一些设置,如芯片型号,封状,速度等级等,只要选择跟你板相符合的选项就可以一直按OK键了,最后就看到上图界面,按照箭头方向和数值一路点击。


点击7:进行编译


点击8;进行引脚配置(如果引脚没有更改就可以进入9


点击9:布局布线


点击10:生成编程文件


    其中7910的菜单中如没有特殊要求就可以一路回车。


(6)在此特别提醒一下,生成编程文件前会有一个菜单,其中的选项要格外小心,事关你的芯片的命运。同时有的朋友可能不能生成编程文件,而且还会出现如下的错误。


E1:原因是没有连接网络。


E2:本人的经验所得就是因为上一次下载后没有把下载软件关闭,编程文件还被占用导致不能更改。关闭下载软件后问题将可迎刃而解。



 


7)问题解决后回到Libero软件中,可以看到前面的步骤都变绿色了,剩下来就可以下载进行硬件验证。


     FlsahPro软件中有几个地方值得注意:


1.                            如果P位置没有找到下载器,那么可以通过C位置的菜单来尝试寻找,同时一定要确保下载器和实验板已经正确连接。


2.                            点击PROGRAM键就可以开始下载了,虽然下载的时间比较长,但期间切勿断电。



6.上电实验


     经过一番折腾之后终于可以上电验证程序了,首先确保实验板的串口UART2与延长线正确连接。剩下来的就是自由发挥了。



    在串口通信的时候值得注意的就是波特率和数据格式的设置。


 


7.实验总结


实验虽然比较简单,但经过独立的设计,不但加深了对教程上例子的理解,更重要的是能过对器件的灵活应用。


 


 


 


 


下例预告:


标题:PS/2键盘和LCD的应用


语言:Verilog HDL


实验内容:


    了解PS/2LCD的工作原理,实验主要通过PS/2键盘输入字母或数字,然后在LCD上显示出来。

文章评论3条评论)

登录后参与讨论

用户158260 2008-9-17 21:15

是英语的资料,虽然看起来费力,不过还是多谢了。

用户1532875 2008-8-21 15:47

(1)首先我想知道你的电路有没有问题,暂且认为正确的, (2)用什么SRAM,要保证正确的读写时序。 如果你是买实验板的话,应该有例子的啊。

用户1359586 2008-8-13 22:50

写是地址和数据在we的上升沿给出。oe=0,ce=0. assign we=inclk; always @ (posedge we) begin SRAM_add<= 100; SRAM_data<=100; end 读就是we=1,oe=0,ce=0 always @ (posedge inclk) begin SRAM_add<= 100; data<=SRAM_data; end

用户1359586 2008-8-13 22:46

为什么我总是对SRAM操作不对呢?可否指教一下?

用户1373845 2008-4-9 22:57

xiexie

用户39683 2008-4-8 11:39

不错的东东,嘿嘿,顶一下~~

xxmlyt 2008-4-4 17:32

好东西,谢了!顶!

用户21270 2008-3-25 22:28

帅呆了

Cybershu 2008-3-14 17:57

简单介绍一下嘛 ,

用户113790 2008-3-13 21:16

是很不错啊 不过是英语的啊
相关推荐阅读
用户1532875 2010-09-08 09:34
2010IIC秋季展-让我失望的盛会
    怀着兴奋的心情踏上2010IIC秋季展会征途,却抱着失落的心情而回,包括IIC展和LED展,好不容易度过了3个小时,我觉得必须通过这个总结来弥补今天的付出,好让我记忆此刻半导体的现状,所以其中...
用户1532875 2010-07-16 22:24
改版
ps:不好意思,忘记了如何把图弄上来,所以大家可以到以下链接去看图。方便大家浏览。   http://blog.ednchina.com/yicheng/0/gallery.aspx  全文再续书接上...
用户1532875 2010-07-16 22:16
CAT4238(LED升压DC-DC)调试记录
近来买了一个4.3寸的TFT屏,本来以为是编程可能会有点麻烦,没想到背光就是第一道门槛,背光电压要达到30V左右,电流大概是25MA,内部是10个串联的LED,对于一个3.3V的系统,不可能为了这个T...
用户1532875 2010-04-25 22:47
DIY烧写工具
        前些日子,接到朋友的使用要求,特然冒出一个点子,倒不如自己做这个相关工具,然后凑些世博路费都不错。于是想到就做。        刚开始,想用万用板简单了事,但后来发觉那样太“山寨”了,...
用户1532875 2010-04-10 14:58
国产化的反思
        近来在调试一个项目的时候,发现了原来的下载工具竟然在下载的时候出现了问题,开始的时候以为是板子的问题,于是又重新焊接了一个新的板子,没想到问题依然存在,于是就找了一个以前的板子,意外地...
用户1532875 2010-03-22 17:25
2010深圳IIC展会
      上周连续两天跑了两个展会,分别是广州的灯光展和深圳的IIC展,今天终于有时间来回顾和总结一下。灯光展就没有什么好说的了,无非今年以及未来几年的重点就是LED照明以及LED广告屏,这些不是我...
我要评论
3
5
关闭 站长推荐上一条 /2 下一条