閱讀601 返回首頁    go 阿裏雲 go 技術社區[雲棲]


讓沒有晶振的生活成為可能——UFM.[CPLD]

j

傳聞說CPLD有個缺陷,就是內部沒有存儲模塊,所以不能對RAM,ROM等操作,但其實,CPLD內部有8192bits的UFM—Usr Flash Memory,很容易就可以實現RAM、ROM 的功能,能滿足一時的需要。

如上圖所示,MAX II 芯片Chip Planner:

左下角這塊黑色區域是用戶不可用資源區,而在這片不可用區域裏有一塊綠色的方塊是可用的。這塊不可用的黑色區域叫做CFM block(配置Flash存儲區),而那個綠色方塊叫做UFM(用戶可用的Flash存儲區)。

二、 特性(官方描述)

Each UFM array is organized as two separate sectors with 4,096 bits per sector. Each sector can be erased independently 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

UFM Block 官方資料 input output 介紹

MAX II UFM.pdf 第三頁

 

以下是我覺得重要的幾個IO:

 

三、 Oscillator

如上所示,可見MAX II係列CPLD,MAX II其實是內嵌了一塊8Kbit 的Flash。

用戶Flash存儲器可用來存放ASSP和其它易失器件所需的初始化數據。用戶Flash存儲器替代了板子上小型的串行或並行可擦除可編程隻讀存儲器(EEPROM)器件,從而減少了部件數量,降低了板子的成本。

這個Flash原則上是不占用MAX II的其它可用邏輯資源的,不過這有個大前提:用戶讀寫這塊存儲區使用altera本身的串行接口(遵循特定的通信協議)。

下麵是網上的人的一段評論:

“UFM中的OSCar產生13.33~22.22MHz的頻率,經過4分頻後,可以作為ARCLK或DRCLK的輸入,或者可以通過接口輸出到CPLD外部或引入邏輯陣列中,作為CPLD的工作時鍾,4分頻後為3.3MHz~5.5MHz,可以滿足一般應用,雖然不能替代外部精準的晶振,不過在要求不高的場合還是可以使用,這樣省下了外部晶振,節省成本。”

實際測試中,發現對Oscillator的控製有2種方法,直接Oscillator使能拉高或者Oscena Osc連接成反饋電路,具體在下麵描述。

 

四、Altera UFM IP

在Quartus II 對於這塊存儲區讀寫接口altera提供了四種通用的接口供用戶選擇。

  • I2C
  • SPI
  • Parallel
  • None (Altera Serial Interface)

最後一種就是不需要占用器件額外邏輯資源的接口,上麵三種是需要消耗器件邏輯資源的接口,在此我選擇Parallel 並行傳輸模式,一是簡單,而是高速,沒必要去寫SPI、I2C這些在verilog中書寫複雜的協議。

五、Parallel 並行接口訪問UFM ,並實現Water_LED

1. 新建工程
2. 在MegaWizard Plug-In Manager添加FLASH模塊
(1) 編寫Water_LED的mif文件,存取在UFM中讀取以實現流水燈的功能

 

(2) Tool—Megawizard Plug-In Manager

 

(3)接著選擇Memory Compiler下的Flash Memory,然後在What name do you want for the output file?下路徑的最後添加輸出文件名為UFM,點擊next。

 

(4)選擇並行Paralell隻讀模式

 

(5)選擇:

<1>晶振Oscillator:5.56MHZ或者3.33MHZ(再次測試我用的是5.56MHZ)

<2>擦除Flash的時間:默認500000ns

<3>Flash編程時間:默認1600ns

<4>在memory加入Water_LED.mif

 

3. 編寫UFM_Test.v程序

程序見文件UFM_Water_LED

UFM的讀取基本時序為:

(1) nread 1->0;

(2) 判斷data_valid是否變高,變高則鎖存數據do;否則等待;

(3) addr增1;

(4) nread 0->1;

(5)  重複以上操作

UFM接口模塊實際上是在nread信號的上升沿鎖存地址數據,在nread的下降沿開始讀過程

 

4.分配引腳

set_location_assignment PIN_37 -to Water_Led[7]

set_location_assignment PIN_38 -to Water_Led[6]

set_location_assignment PIN_39 -to Water_Led[5]

set_location_assignment PIN_40 -to Water_Led[4]

set_location_assignment PIN_41 -to Water_Led[3]

set_location_assignment PIN_42 -to Water_Led[2]

set_location_assignment PIN_43 -to Water_Led[1]

set_location_assignment PIN_44 -to Water_Led[0]

set_location_assignment PIN_71 -to clk_out

 

5.編譯工程

如上圖,真個工程隻用了89個LE,以及UFM,沒有占用其他讓那個存儲空間,沒有使用晶振時鍾,所有功能都在UFM內部實現。

 

6.JTAG下載

 

7.效果

8個LED燈 向左向右循環流動,但並沒有用外部時鍾。在Oscena Osc反饋電路回避直接Oscena快一倍的流動速度,原因是最後發現恰好倍頻了。

 

六、發現的問題
1. UFM Oscillator

保證UFM內部晶振有2個辦法:

一、給外部時鍾源

二、時鍾輸入Oscena、輸出osc直接接成反饋電路,不需要外部時鍾振蕩

 

三、直接把Oscena拉高

 

結論:

<1>經過再三測試,選擇了第二種模式,可以省去晶振,但與Altera上的pdf講的不一樣,出來的並不是3.3MHZ~~5.5MHZ而是10MHZ左右的時鍾振蕩

<2>Oscena 實際上就是Osc enable ,就是Osc時鍾輸出的使能,官方資料說:

“內部振蕩器有一路輸入OSC_ENA 和一路輸出OSC。輸入引腳OSC_ENA用於激活內部振蕩器。激活後,輸出上將產生頻率為3.3 MHz 到5.5 MHz 的信號。如果振蕩器使能信號OSC_ENA 被驅動為低電平,振蕩器輸出保持低電平不變。”

這樣直接給1,實際始終出來的是5.15MHZ,和官方資料吻合。

一開始我都是直接用上麵第二種反饋的方法的,但比官方說的倍頻,現在想想可能就是剛好使能和osc的結合,恰好高低重返變換了一次,出現了二倍頻吧,官方沒有這種說法,我隻能意會,不能言傳,但出現官方的倍頻確是有事實,而且貌似更穩定一點,又是一片新大陸。好玩!

 

2.IP核Flash與 Oscillator共用

 

實際工作發現這樣不行,一直想不通,最後發現,Flash 和Qscillator兩個IP核都是處理UFM內部模塊的,可能在時序上有重合,不能同時驅動UFM,就像在verilog中,不同的進程中不能同時最同一個變量賦值,否則會出錯

七、感受以及總結

每次編譯CPLD 的工程的時候,最後都有clip_image042,一直都看到,但是一直都不知道這是什麼東西,現在終於明白了,以前一直沒聽說過,Google一下,網上還真有幾個人在玩這個,不過僅僅是去teachbench一下。“哥倫布發現”,實際感受一下,原來那麼好玩。

不管是CPU還是什麼東西,隻要是處理器之類的東西,一般工作都是需要晶振來保證工作的,但CPLD內部神奇的UFM,原來那麼好玩,讓不可能變成了可能,讓沒有晶振的生活成為一種可能,在不需要時鍾高度的精度和高速的時鍾的情況下,可以省略去外部時鍾,直接用內部時鍾,不然,老是讓傳說中的UFM在神秘之中,未免浪費人才了。

利用Oscena反饋Osc,會出現官方5.5MHZ 的二倍頻10MHZ,這個不錯,官方沒有這樣的說法!

本人本次純屬興趣,順便搞清楚這一塊,看看不可能有可能,可能在表達上不是那麼的準確,但我提供的這是一種新思想,對不懂UFM 的人或許有幫助,雖然在實際應用中我們並不會用的太多,但是,物盡其所用吧。

最後更新:2017-04-04 02:25:10

  上一篇:go Altera Qsys使用心得
  下一篇:go Qsys使用心得