原创 MAX II的UFM模块使用实例

2009-2-10 22:55 11572 9 14 分类: FPGA/CPLD

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

 MAX II的UFM模块使用实例


    查看MAX II器件的Chip Planner


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


b556b723-029e-4a48-98e9-b787e1e2a39d.GIF   


其左下角这块黑色区域是用户不可用资源区,而在这片不可用区域里有一块绿色的方块是可用的。这块不可用的黑色区域叫做CFM block(配置Flash存储区),而那个绿色方块叫做UFM(用户可用的Flash存储区)。对于后者是我们今天讨论的重点,先看以下官方对此存储区作用的描述:


    MAX II devices feature a single UFM block, which can be used like a serial EEPROM for storing non-volatile information up to 8,192 bits. The UFM block connects to the logic array through the MultiTrack interconnect,allowing any LE to interface to the UFM block. Figure 2–15 shows the UFM block and interface signals. The logic array is used to create customer interface or protocol logic to interface the UFM block data outside of the device. The UFM block offers the following features:


Non-volatile storage up to 16-bit wide and 8,192 total bits


Two sectors for partitioned sector erase


Built-in internal oscillator that optionally drives logic array


Program, erase, and busy signals


Auto-increment addressing


Serial interface to logic array with programmable interface



点击看大图 


    也就是说,MAX II其实是内嵌了一块8KbitFlash。这个Flash原则上是不占用MAX II的其它可用逻辑资源的,不过这有个大前提:用户读写这块存储区使用altera本身的串行接口(遵循特定的通信协议)。但是这个协议也太繁琐了(个人感觉),因此,对于这块存储区读写接口altera提供了三种通用的接口供用户选择。


I2C


SPI


Parallel


None (Altera Serial Interface)


最后一种就是不需要占用器件额外逻辑资源的接口,上面三种是需要消耗器件逻辑资源的接口。笔者添加了一个并行接口做测试,占用了EMP240内部86LEs,对于资源比较紧张的应用还是很划不来的。


    更多详细的关于UFM的信息请大家参考altera提供的MAX II datasheet。下面介绍一个使用并行接口读写UFM的实例,以及功能仿真。


    新建一个工程,名为ufmtest,顶层模块ufmtest.v,代码如下:


module ufmtest(


           databus,addr,


           nerase,nread,nwrite,


           data_valid,nbusy


       );


 


inout[15:0] databus; //Flash数据总线


 


input[8:0] addr;     //Flash地址总线


input nerase;        //擦除Flash某一扇区信号


input nread;         //Flash信号


input nwrite;        //Flash信号


output data_valid;   //Flash数据输出有效信号


output nbusy;        //Flash忙信号


 


assign databus = nwrite ? dataout:16'hzzzz;   //写信号有效时,Flash数据总线作为输入


assign datain = databus; //写入Flash数据总线连接


 


wire[15:0] datain;       //Flash写入数据


wire[15:0] dataout;      //Flash读出数据


 


//例化UFMFlash)模块


para_ufm   para_ufm_inst (


    .addr ( addr ),


    .datain ( datain ),


    .nerase ( nerase),


    .nread ( nread ),


    .nwrite ( nwrite),


    .data_valid ( data_valid ),


    .dataout ( dataout ),


    .nbusy ( nbusy )


    );


 


endmodule


 


    但是在例化UFM模块之前,大家需要先在MegaWizard Plug-In Manager里添加一个Flash模块。步骤如下:


1,点击菜单栏里的ToolsàMegaWizard Plug-In Manager。弹出如下,点击next



44ade547-dfff-49b9-bb02-4bfe27d4c331.GIF 


2,接着选择Memory Compiler下的Flash Memory,然后在What name do you want for the output file?下路径的最后添加输出文件名为para_ufm,点击next.



点击看大图 


3,接下来一路Next,需要更改设置的地方如下(我也不多废话,大家一看都明白):



点击看大图 


   


点击看大图 


 

 


    完成上面步骤以后编译工程,编写testbench如下:


`timescale 1ns/1ns


module tb_ufmtest();


 


//inout


wire[15:0] databus;      //Flash数据总线


 


//input


wire data_valid;     //Flash数据输出有效信号


wire nbusy;              //Flash忙信号


 


//output


reg[8:0] addr;           //Flash地址总线


reg nerase;              //擦除Flash某一扇区信号


reg nread;           //Flash信号


reg nwrite;              //Flash信号


 


reg[15:0] databus_r; //测试模块数据总线寄存器


reg[15:0] rdback_data;   //测试模块数据总线数据回读寄存器


 


assign databus = nwrite ? 16'hzzzz:databus_r;


 


ufmtest       ufmtest(


              .databus(databus),


              .addr(addr),


              .nerase(nerase),


              .nread(nread),


              .nwrite(nwrite),


              .data_valid(data_valid),


              .nbusy(nbusy)


           );


 


parameter  DELAY_600US   = 600_000,    //600us延时


           DELAY_2US  = 2_000,      //2us延时


           DELAY_5US  = 5_000;      //5us延时


 


initial begin


       nerase = 1;


       nread = 1;


       nwrite = 1;


       addr = 0;


       databus_r = 0;


   


    #DELAY_600US; //0地址写入数据99


       databus_r = 99;


       addr = 9'd0;


       nwrite = 0;


       #DELAY_5US;      


       nwrite = 1;      


       @ (posedge nbusy);


 


          


    #DELAY_5US;   //0地址读出数据,保存到寄存器rdback_data


       databus_r = 16'hff;


       addr = 9'd0;


       nread = 0;


       #DELAY_5US;      


       nread = 1;   


       @ (posedge data_valid);


       rdback_data = databus;


          


    #DELAY_600US;


    $stop;    


end


 


endmodule


 


仿真波形如下:



点击看大图 


达到预期要求。


 


给出工程实例:(该工程使用Quartus II 8.1建立,较低版本的可能打不开,建立按上面的介绍自己新建一个)https://static.assets-stash.eet-china.com/album/old-resources/2009/2/9/4f376825-8ffe-45fe-83c8-8827500c44ea.rar


\simulation\modelsim目录下的tb_ufmtest是该工程的testbench文件。

PARTNER CONTENT

文章评论5条评论)

登录后参与讨论

用户377235 2013-8-19 20:43

大家好!我按照这个仿真,怎么不成功呀!还有按照视频里面修改过的代码都没有成功呀!读不出来数据,请大家帮忙

用户1246041 2011-6-23 14:15

天马我去面试过,后来天马居然成了我的客户故地重游过几次;说起骏龙,我曾经在某家公司做某条产品线的FAE,后来离开,不久这条线全部卖给骏龙了。。。。。世界就是这么普遍联系着

用户1584993 2011-6-22 09:18

天马行空我喜欢这个,很多时候事情就是那么的凑巧的让人不得不感叹吧

用户769837 2011-6-1 20:08

hao

用户1162163 2009-2-28 08:53

谢谢

ilove314_323192455 2009-2-11 18:25

官方标称的最大速率好像是10M,毕竟这只是一个ROM,不能当RAM用啊

用户1014033 2009-2-11 12:41

MAXII这个UFM还是很有用的。其使用也非常简单。仔细看看MAXII的用户手册就会用了。 但是,UFM的读出速度我感觉是有点慢。我用MAXII实现了一个简易的音频DAC测试系统,在UFM里面存放了一段1KHZ正弦波表(48KHZ采样频率,一个周期的数据),在仿真的时候就发现,读出的速度有点慢,只能把读脉冲发出时间往前移,才能够保证连续3个字节的数据被完整读出。这可能与UFM实际是用串行机制读出有关。
相关推荐阅读
特权ilove314 2016-06-30 21:16
例说FPGA连载6:FPGA开发所需的技能
例说FPGA连载6:FPGA开发所需的技能 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   前面的文字已经做了很多铺垫,相信读...
特权ilove314 2016-06-28 21:09
例说FPGA连载5:FPGA的优势与局限性
例说FPGA连载5:FPGA的优势与局限性 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   若要准确评估FPGA技术能否满足开...
特权ilove314 2016-06-28 21:05
例说FPGA连载5:FPGA的优势与局限性
例说FPGA连载5:FPGA的优势与局限性 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   若要准确评估FPGA技术能否满足开...
特权ilove314 2016-06-26 22:11
例说FPGA连载4:FPGA语言与厂商介绍
例说FPGA连载4:FPGA语言与厂商介绍 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   Verilog与VHDL 说到FP...
特权ilove314 2016-06-23 21:26
例说FPGA连载3:FPGA与其它主流芯片的比较
例说FPGA连载3:FPGA与其它主流芯片的比较 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   FPGA、ASIC和ASSP...
特权ilove314 2016-06-21 20:32
例说FPGA连载2:FPGA是什么
例说FPGA连载2:FPGA是什么 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   2015年伊始,Intel欲出资百亿美金收...
我要评论
5
9
关闭 站长推荐上一条 /3 下一条