關(guān)于gray code冗余的思考帶來了一個(gè)全新方案,這個(gè)方案將為異步時(shí)鐘間的數(shù)據(jù)傳輸提供一個(gè)普遍的解決方案。 問題是:數(shù)據(jù)從一個(gè)時(shí)鐘wr_clk,其件數(shù)據(jù)有效用valid來指示,怎樣將數(shù)據(jù)傳遞到另外的一個(gè)時(shí)鐘rd_clk域?這里不對時(shí)鐘頻率做任何假設(shè)。 這個(gè)問題有以下這么幾個(gè)關(guān)鍵點(diǎn): 1. 異步輸入亞穩(wěn)態(tài)。 2. 無法用一個(gè)時(shí)鐘采樣一個(gè)寬度小于一個(gè)周期(包括等于,還需要考慮建立保持時(shí)間) 的信號(hào)。 3. 在將一組信號(hào)從一個(gè)時(shí)鐘傳遞到另外一個(gè)時(shí)鐘的時(shí)候,需要考慮各個(gè)信號(hào)通路上的延遲不同以及信號(hào)上的毛刺這兩個(gè)問題。 4. 必須保證數(shù)據(jù)的不能夠丟失。 5.解決方案: 基本思想是首先將數(shù)據(jù)緩沖起來,然后挨個(gè)的讀取數(shù)據(jù)。具體方法包括: 1。有一組緩沖區(qū)n個(gè)。n必須足夠大,以便緩沖區(qū)不會(huì)溢出。 2。讀寫雙方都維護(hù)一個(gè)指針,表示將要存取的緩沖區(qū),這個(gè)指針在數(shù)據(jù)讀寫 之后將增加1,并循環(huán)。 3。寫方通過gray code將信息傳遞到讀的一方,其gray code每寫一個(gè)數(shù)據(jù)增加 1,讀方維護(hù)自己的gray code,每次讀取數(shù)據(jù)之后增加1,并比較自己 的gray code和寫方的gray code ,如不相等,表示可以進(jìn)行一次讀取。 并反復(fù)進(jìn)行下去。 討論 : 1. 需要多少個(gè)緩沖區(qū)?這需要由數(shù)據(jù)有效頻率和讀取速度和延遲來確定。一般的答案依賴于wr_clk的頻率,rd_clk的頻率,valid的模式,為了消除亞穩(wěn)態(tài)和其他附加的延遲。 2.為什么需要采用gray code ? 采用gray code是為了滿足面的要求3。 3.gray code需要多少位? 一般的考慮上面的要求2。至少需要的位數(shù)將是保證gray code 每一位的寬度可滿足要求2的最小值。 4.還有其他么? 如果gray code的個(gè)數(shù)小于了緩沖區(qū)的個(gè)數(shù)(一些情況下發(fā)生),可以簡單的將gray code多一些位,來避免復(fù)雜的控制操作。 5.在wr_clk頻率大于rd_clk得時(shí)候情況如何?這個(gè)電路可以很好的工作,并代替原來的將valid信號(hào)接入觸發(fā)器時(shí)鐘端和異步復(fù)位的辦法,并具有更簡單的靜態(tài)時(shí)序。 6,還有其他么?如果這個(gè)方法屬于原創(chuàng)的話,建議把它叫做 PPL方法,或者PPL電路。 PPL(皮皮魯),是陪伴了我10年以上《童話大王》里的主人公。相信很多人都看過。 |