寫在前面
這篇文章主要是對(duì)過去對(duì)于亞穩(wěn)態(tài)以及跨時(shí)鐘域傳輸問題的一次總結(jié)民晒,作為這個(gè)系列博文的一次梳理吧。
注:微信公眾號(hào)也會(huì)更新锄禽,歡迎大家關(guān)注潜必,我有了新文章會(huì)通過微信公眾號(hào)推送通知大家,讓你有選擇的看到我的最新動(dòng)態(tài)沃但。
- 個(gè)人微信公眾號(hào): FPGA LAB
正文
FPGA或ASIC中的傳播延遲
在以前秋招的時(shí)候磁滚,我常常遇到時(shí)序分析的題目,其中全英文的題目中出現(xiàn)過傳播延遲這個(gè)單詞宵晚,即:Propagation Delay恨旱!
當(dāng)然 ,如果你讀慣了中文的表達(dá)坝疼,例如我們常常遇到這樣的說法搜贤,門延遲,布線延遲等等钝凶,這時(shí)當(dāng)你遇到了Propagation Delay的時(shí)候也許會(huì)不確定是什么東西仪芒,是Tco?還是Tlogic耕陷?還是什么掂名?等等,F(xiàn)orget it 哟沫!這就會(huì)影響你分析問題的狀態(tài)饺蔑!
今天這里給出明確的定義:
Propagation Delay is the amount of time it takes for a signal to travel from a source to a destination.
意思是傳播延遲是信號(hào)從源觸發(fā)器到目的觸發(fā)器所需要的時(shí)間!這一看不就是邏輯延遲加上布線延遲嗎嗜诀?
確實(shí)如此猾警!
在FPGA或ASIC內(nèi)部孔祸,到處都有成千上萬的細(xì)線。 當(dāng)您實(shí)際將電線的物理長(zhǎng)度加在一起時(shí)发皿,它們很容易超過一英尺長(zhǎng)( 經(jīng)驗(yàn)法則是崔慧,信號(hào)可以在一納秒內(nèi)傳輸一英尺的導(dǎo)線。)穴墅,考慮到芯片有多小惶室,這非常驚人。 此外玄货,您的代碼執(zhí)行的每個(gè)邏輯都需要一定的延遲時(shí)間皇钞。 由于確實(shí)存在這些延遲,因此數(shù)字設(shè)計(jì)人員需要了解它們?nèi)绾斡绊慒PGA或ASIC松捉。
如下圖為傳播延遲示意圖:
傳播延遲對(duì)時(shí)序邏輯至關(guān)重要鹅士。 我們知道,時(shí)序邏輯是由時(shí)鐘驅(qū)動(dòng)的邏輯惩坑。 在上圖中掉盅,有兩個(gè)觸發(fā)器,它們之間通過一些邏輯和布線(電線)連接在一起以舒。第一個(gè)觸發(fā)器的輸出傳播到第二個(gè)觸發(fā)器的輸入所花費(fèi)的時(shí)間為傳播延遲趾痘。 這兩個(gè)觸發(fā)器相距越遠(yuǎn),或者中間的組合邏輯越多蔓钟,則它們之間的傳播延遲就越長(zhǎng)永票。 傳播延遲時(shí)間越長(zhǎng),時(shí)鐘的運(yùn)行速度就越慢滥沫。
這樣做的原因是兩個(gè)觸發(fā)器使用相同的時(shí)鐘侣集。 第一個(gè)觸發(fā)器在時(shí)鐘沿1處驅(qū)動(dòng)其輸出。第二個(gè)觸發(fā)器直到時(shí)鐘沿2才看到第一個(gè)觸發(fā)器的輸出變化兰绣,此時(shí)它驅(qū)動(dòng)其輸出世分。 如果信號(hào)可以在一個(gè)時(shí)鐘周期內(nèi)安全地從觸發(fā)器1傳輸?shù)接|發(fā)器2,則您的設(shè)計(jì)很好缀辩! 如果沒有臭埋,您將遇到問題。
例如臀玄,考慮兩個(gè)觸發(fā)器相距10納秒(ns)的情況瓢阴。 如果您使用的時(shí)鐘頻率為50 MHz(周期為20 ns),則將是安全的健无。 您還有10 ns的空閑時(shí)間荣恐。 但是,如果使用200 MHz時(shí)鐘(周期為5 ns),則設(shè)計(jì)將無法進(jìn)行時(shí)序分析叠穆,并且無法按預(yù)期方式工作少漆。
FPGA或ASIC工具中任何時(shí)序分析器的目的都是告訴您在時(shí)序方面是否存在問題。 如果您的設(shè)計(jì)太慢而無法以所需的時(shí)鐘頻率運(yùn)行痹束,則會(huì)出現(xiàn)時(shí)序錯(cuò)誤,并且您的設(shè)計(jì)可能無法正常工作讶请。
這是解決高傳播延遲的方法:
- 降低時(shí)鐘頻率
- 將您的邏輯分解為多個(gè)階段(流水線)
降低時(shí)鐘頻率是最明顯的事情祷嘶。 如果您能夠較慢地運(yùn)行FPGA,那么您的時(shí)序?qū)?huì)改善夺溢。 將您的邏輯分解成多個(gè)階段是更可靠的解決方案论巍。 如果在兩個(gè)觸發(fā)器之間邏輯較少,則傳播延遲將減小风响,并且您的設(shè)計(jì)將滿足時(shí)序要求嘉汰。(回顧下retiming是不是也需要這么做呢?)
示意圖如下:
在上圖中状勤,兩個(gè)觸發(fā)器之間存在大量邏輯鞋怀。 如此之多,以至于設(shè)計(jì)的傳播延遲太大持搜,并且導(dǎo)致時(shí)序不滿足密似。 如果設(shè)計(jì)人員在三個(gè)觸發(fā)器之間分解邏輯,則邏輯的一半可以在前兩個(gè)觸發(fā)器之間完成葫盼,邏輯的另一半可以在后兩個(gè)觸發(fā)器之間完成残腌。 現(xiàn)在,這些工具將在一個(gè)時(shí)鐘周期內(nèi)完成所需工作的時(shí)間幾乎增加了一倍贫导。 這就是所謂的流水線抛猫,對(duì)于成為一名優(yōu)秀的數(shù)字設(shè)計(jì)師來說非常重要。 當(dāng)你使用流水線的方式設(shè)計(jì)電路時(shí)孩灯,在高時(shí)鐘頻率下滿足時(shí)序的機(jī)會(huì)會(huì)更大闺金。
建立和保持時(shí)間是什么?
建立時(shí)間和保持時(shí)間峰档,是數(shù)字設(shè)計(jì)師最基礎(chǔ)的問題掖看,他是時(shí)序分析的核心,或者說時(shí)序分析其實(shí)就是圍繞著建立時(shí)間以及保持時(shí)間來分析的面哥,你的設(shè)計(jì)滿足建立時(shí)間要求以及保持時(shí)間要求哎壳,就能通過時(shí)序檢測(cè),否則就會(huì)違例尚卫!
下面就詳細(xì)講解他們归榕!
我們都知道,傳播延遲是信號(hào)在兩個(gè)觸發(fā)器之間通過所花費(fèi)的時(shí)間吱涉。 當(dāng)信號(hào)沿導(dǎo)線傳輸時(shí)刹泄,它可以從0-> 1或1-> 0改變外里。 觸發(fā)器的輸入必須穩(wěn)定(不變),以使FPGA設(shè)計(jì)正常工作特石。 在時(shí)鐘采樣之前盅蝗,輸入必須穩(wěn)定一小段時(shí)間。 該時(shí)間量稱為建立時(shí)間姆蘸。 建立時(shí)間是指在時(shí)鐘沿之前墩莫,輸入到觸發(fā)器穩(wěn)定所需的時(shí)間。 保持時(shí)間類似于建立時(shí)間逞敷,但是它在時(shí)鐘沿發(fā)生后處理事件狂秦。 保持時(shí)間是在時(shí)鐘沿之后輸入到觸發(fā)器穩(wěn)定所需的最短時(shí)間。
如下示意圖:
在圖中推捐,綠色區(qū)域代表tsu或Setup Time裂问。 藍(lán)色區(qū)域代表時(shí)間或保持時(shí)間。 在這些區(qū)域中牛柒,觸發(fā)器中的數(shù)據(jù)必須為穩(wěn)定的0或1堪簿,否則會(huì)發(fā)生不良情況。
建立和保持時(shí)間與傳播延遲和時(shí)鐘頻率有何關(guān)系皮壁?
建立時(shí)間戴甩,保持時(shí)間和傳播延遲都會(huì)影響您的FPGA設(shè)計(jì)時(shí)序。FPGA工具將檢查以確保您的設(shè)計(jì)滿足時(shí)序要求闪彼,這意味著時(shí)鐘的運(yùn)行速度不超過邏輯允許的速度甜孤。可以計(jì)算出FPGA時(shí)鐘所允許的最短時(shí)間(其周期畏腕,由T表示)缴川。從中可以找到時(shí)鐘的頻率,因?yàn)轭l率是周期的倒數(shù)(F = 1 / T)描馅。
就以下圖為例吧:
假設(shè)Tco表示觸發(fā)器時(shí)鐘有效到數(shù)據(jù)輸出的時(shí)間把夸;Tpd表示傳播延遲,Tsu表示建立時(shí)間铭污,不考慮時(shí)鐘偏斜恋日,那么最小時(shí)鐘周期為:
Tmin = Tco + Tpd + Tsu;
通常嘹狞,在您的FPGA設(shè)計(jì)中岂膳,t su和t h對(duì)于觸發(fā)器是固定的,因此磅网,您可以控制的唯一變量是t p或傳播延遲谈截。這種延遲代表了多少東西,你想在一個(gè)時(shí)鐘周期內(nèi)完成。您嘗試做的事情越多簸喂,t p越長(zhǎng)毙死,t clk(min)越高,這意味著您將無法盡快對(duì)FPGA設(shè)計(jì)進(jìn)行計(jì)時(shí)喻鳄。這是FPGA設(shè)計(jì)的基本權(quán)衡扼倘。您需要權(quán)衡一個(gè)時(shí)鐘周期內(nèi)可以為時(shí)鐘頻率執(zhí)行多少操作。這兩個(gè)是相反的關(guān)系……沒有免費(fèi)的午餐除呵!
思考:參考資料中把最小時(shí)鐘周期Tmin寫成如下的形式:
這是為什么呢再菊?
如果違反建立和保持時(shí)間會(huì)發(fā)生什么?
如果您的設(shè)計(jì)違反設(shè)置或保持時(shí)間竿奏,則不能保證觸發(fā)器輸出穩(wěn)定袄简⌒确牛可能為零泛啸,可能為一,可能在中間的某個(gè)地方秃症,未知候址。這稱為亞穩(wěn)態(tài)。FPGA內(nèi)部的亞穩(wěn)定性不是所希望的种柑,它可能導(dǎo)致您的FPGA表現(xiàn)異常岗仑。
FPGA設(shè)計(jì)人員發(fā)現(xiàn)他們是否違反設(shè)置或保持時(shí)間的主要方法是通過布局布線(Place and Route)運(yùn)行FPGA時(shí)。布局布線(Place and Route)是將VHDL或Verilog代碼放入FPGA時(shí)發(fā)生的情況聚请。作為此過程的一部分荠雕,F(xiàn)PGA工具將帶您進(jìn)行設(shè)計(jì)并進(jìn)行時(shí)序分析。在此時(shí)序分析中,您將看到任何時(shí)序錯(cuò)誤,這些錯(cuò)誤實(shí)際上只是違反設(shè)置時(shí)間或保持時(shí)間涡扼。如何解決這些錯(cuò)誤將在后面給出皮璧!
總之,建立時(shí)間和保持時(shí)間是FPGA設(shè)計(jì)人員要理解的重要概念拧粪。如果違反這些時(shí)間,F(xiàn)PGA將無法達(dá)到預(yù)期的效果!
FPGA中的亞穩(wěn)定是什么五续?
上面也說了,如果設(shè)計(jì)放到FPGA中(ASIC一致)龄恋,違反了建立時(shí)間或保持時(shí)間疙驾,則輸出會(huì)處于亞穩(wěn)態(tài)!
那亞穩(wěn)態(tài)是什么呢郭毕?
如下圖:
如上圖所示荆萤, 紅色區(qū)域代表tsu或Setup Time。 如您所見,在觸發(fā)器建立期間链韭,輸入到觸發(fā)器的數(shù)據(jù)從低到高偏竟。如果數(shù)據(jù)在時(shí)鐘上升沿的建立時(shí)間內(nèi)發(fā)生跳變,則會(huì)產(chǎn)生亞穩(wěn)態(tài)輸出敞峭,即輸出值在短時(shí)間內(nèi)處于不確定態(tài)踊谋,有可能是1,有可能是0旋讹,也可能什么都不是殖蚕,處于中間態(tài)!之后穩(wěn)定為0或1沉迹。但是我們?nèi)匀徊恢垒敵鲆阅姆N狀態(tài)結(jié)束睦疫。有時(shí)可能是0,有時(shí)其他情況會(huì)發(fā)生 再次為1.鞭呕。這不是理想的行為蛤育。 您必須始終知道您的FPGA在做什么葫松。
為了更清晰說明瓦糕,我們參考資料提出一個(gè)類似的例子 :
下圖說明了亞穩(wěn)信號(hào)咕娄。當(dāng)時(shí)鐘信號(hào)變化時(shí)旁趟,輸入信號(hào)從低電平轉(zhuǎn)換為高電平,這違反了寄存器的tsu(建立時(shí)間)要求夏跷。數(shù)據(jù)輸出信號(hào)示例從低電平開始亲雪,然后變?yōu)閬喎€(wěn)態(tài)贞让,在高電平和低電平之間徘徊制跟。信號(hào)輸出A解析為輸入數(shù)據(jù)的新邏輯1狀態(tài)排监,而輸出B返回?cái)?shù)據(jù)輸入的原始邏輯0狀態(tài)谷暮。在這兩種情況下蒿往,輸出到定義的1或0狀態(tài)的轉(zhuǎn)換的延遲都超過寄存器的指定tco(寄存器時(shí)鐘到輸出時(shí)間)。
上面所說的是建立時(shí)間不足導(dǎo)致的亞穩(wěn)態(tài)湿弦,其實(shí)導(dǎo)致亞穩(wěn)態(tài)還有可能是保持時(shí)間不足熄浓!
亞穩(wěn)態(tài)何時(shí)會(huì)導(dǎo)致設(shè)計(jì)失敗省撑?
如果在下一個(gè)寄存器捕獲數(shù)據(jù)之前數(shù)據(jù)輸出信號(hào)穩(wěn)定為有效狀態(tài)赌蔑,則亞穩(wěn)信號(hào)不會(huì)對(duì)系統(tǒng)操作產(chǎn)生負(fù)面影響。但是竟秫,如果亞穩(wěn)態(tài)信號(hào)在到達(dá)下一個(gè)設(shè)計(jì)寄存器之前未穩(wěn)定為低電平或高電平狀態(tài)娃惯,則可能導(dǎo)致系統(tǒng)故障。
同步寄存器
大多數(shù)亞穩(wěn)態(tài)條件以下列兩種方式之一發(fā)生:
- 您正在采樣FPGA外部的信號(hào)
- 您正在跨時(shí)鐘域傳輸數(shù)據(jù)
這兩種情況都可以用相同的方式解決肥败。 每當(dāng)遇到可能引入亞穩(wěn)定性的情況時(shí)趾浅,您都可以簡(jiǎn)單地“double-flop”您的數(shù)據(jù)(兩級(jí)觸發(fā)器采樣)。
在左圖中馒稍,第一個(gè)觸發(fā)器正在采樣與時(shí)鐘異步的信號(hào)皿哨。 這將在輸出處創(chuàng)建一個(gè)亞穩(wěn)態(tài)條件。 如果再次采樣此輸出纽谒,則現(xiàn)在可以修復(fù)亞穩(wěn)態(tài)事件证膨。 第二個(gè)觸發(fā)器的輸出將保持穩(wěn)定。
當(dāng)然這只是最簡(jiǎn)單的處理方式鼓黔,當(dāng)考慮到跨時(shí)鐘域信號(hào)處理時(shí)央勒,還需具體情況具體分析。
跨時(shí)鐘域傳輸
在FPGA內(nèi)部跨越時(shí)鐘域是一項(xiàng)常見的任務(wù)澳化,但這是許多數(shù)字設(shè)計(jì)人員遇到的麻煩崔步。如果數(shù)字設(shè)計(jì)人員不了解從一個(gè)時(shí)鐘域轉(zhuǎn)換到另一個(gè)時(shí)鐘域所涉及的所有細(xì)節(jié),則可能會(huì)出現(xiàn)問題缎谷。
下面對(duì)跨時(shí)鐘域處理可能出現(xiàn)的問題進(jìn)行總結(jié)井濒!
從較慢的時(shí)鐘域過渡到較快的時(shí)鐘域
最簡(jiǎn)單的跨時(shí)鐘域傳輸類型是從一個(gè)時(shí)鐘域到一個(gè)更快的時(shí)鐘域。在這種類型的傳輸中列林,您仍然會(huì)受到Metastability的影響瑞你,但是該文章中描述的解決方案在這種情況下非常有效。您需要做的就是將數(shù)據(jù)“兩級(jí)同步”席纽,如下圖所示捏悬。
較慢的時(shí)鐘是您的源時(shí)鐘域,更快的時(shí)鐘是您的目標(biāo)時(shí)鐘域润梯。在較快的時(shí)鐘域中过牙,第一個(gè)觸發(fā)器具有亞穩(wěn)態(tài)輸出甥厦。發(fā)生這種情況的原因是,在執(zhí)行此跨時(shí)鐘域傳輸操作時(shí)寇钉,會(huì)違反設(shè)置和保持時(shí)間刀疙,這是造成亞穩(wěn)性的原因。我們可以通過在較快的時(shí)鐘域中簡(jiǎn)單地重新采樣數(shù)據(jù)或?qū)?shù)據(jù)進(jìn)行兩次寄存來解決此問題扫倡,如上圖所示谦秧。第二個(gè)觸發(fā)器的輸出將保持穩(wěn)定,現(xiàn)在可以在更快的時(shí)鐘域中使用數(shù)據(jù)撵溃。
下面的Verilog設(shè)計(jì)顯示了當(dāng)從慢速時(shí)鐘域過渡到快速時(shí)鐘域時(shí)疚鲤,如何尋找信號(hào)的上升沿。請(qǐng)注意缘挑,用于邊緣檢測(cè)的邏輯必須在快速時(shí)鐘域中完成集歇。
// Verilog Example:
reg r1_Data, r2_Data, r3_Data, trig_pos=0;
always @(posedge i_Fast_Clock)
begin
// r1_Data is METASTABLE, r2_Data and r3_Data are STABLE
r1_Data <= i_Slow_Data;
r2_Data <= r1_Data;
r3_Data <= r2_Data;
if (r3_Data == 1'b0 && r2_Data == 1'b1)
begin
// Positive Edge Condition
trig_pos <= 1;
end
end
注 :這里說明的是提取采樣信號(hào)的上升沿,如果你不需要這樣语淘,就直接兩級(jí)同步即可得到非亞穩(wěn)態(tài)的采樣信號(hào)诲宇。
從較快的時(shí)鐘域過渡到較慢的時(shí)鐘域
這種情況比前一種情況稍微復(fù)雜一些。在這里惶翻,我們正在從快速時(shí)鐘域轉(zhuǎn)向較慢的時(shí)鐘域姑蓝。在這種情況下,很容易想到一個(gè)示例吕粗,其中快速時(shí)鐘域中的數(shù)據(jù)可能在慢速時(shí)鐘域甚至沒有看到之前就發(fā)生了變化纺荧。例如,考慮一個(gè)在100 MHz時(shí)鐘域中發(fā)生1個(gè)時(shí)鐘周期的脈沖溯泣,您正在嘗試在25 MHz時(shí)鐘域中進(jìn)行采樣虐秋。如果僅使用25 MHz時(shí)鐘對(duì)數(shù)據(jù)進(jìn)行采樣榕茧,則很有可能永遠(yuǎn)不會(huì)看到此脈沖垃沦! 為了將信號(hào)從快速時(shí)鐘域傳輸?shù)铰贂r(shí)鐘域,您必須擴(kuò)展信號(hào)用押。請(qǐng)參見下圖肢簿,以直觀的方式查看。
當(dāng)您將脈沖或數(shù)據(jù)延長(zhǎng)足夠長(zhǎng)的時(shí)間以確保慢時(shí)鐘域有機(jī)會(huì)對(duì)其進(jìn)行采樣時(shí)蜻拨,就會(huì)發(fā)生數(shù)據(jù)拉伸池充。在上面的示例中,您需要擴(kuò)展數(shù)據(jù)以確保無論何時(shí)采樣數(shù)據(jù)都滿足建立和保持時(shí)間缎讼。為了正確保證滿足建立時(shí)間和保持時(shí)間收夸,我建議延長(zhǎng)脈沖,使它們?cè)诼贂r(shí)鐘域中至少占用2個(gè)時(shí)鐘周期血崭。因此卧惜,在上面的示例中厘灼,您應(yīng)該將100 MHz脈沖擴(kuò)展到至少8個(gè)時(shí)鐘周期(您可以隨時(shí)增加)。
這種從快時(shí)鐘域到慢時(shí)鐘域的信號(hào)傳輸咽瓷,其設(shè)計(jì)可以參考我之前的博文:談?wù)効鐣r(shí)鐘域傳輸問題(CDC)
博文里給出了設(shè)計(jì):
module Sync_Pulse(
input clka,
input clkb,
input rst_n,
input pulse_ina,
output pulse_outb,
output signal_outb
);
//-------------------------------------------------------
reg signal_a;
reg signal_b;
reg signal_b_r;
reg signal_b_rr;
reg signal_a_r;
reg signal_a_rr;
//-------------------------------------------------------
//在clka下设凹,生成展寬信號(hào)signal_a
always @(posedge clka or negedge rst_n)begin
if(rst_n == 1'b0)begin
signal_a <= 1'b0;
end
else if(pulse_ina == 1'b1)begin
signal_a <= 1'b1;
end
else if(signal_a_rr == 1'b1)
signal_a <= 1'b0;
else
signal_a <= signal_a;
end
//-------------------------------------------------------
//在clkb下同步signal_a
always @(posedge clkb or negedge rst_n)begin
if(rst_n == 1'b0)begin
signal_b <= 1'b0;
end
else begin
signal_b <= signal_a;
end
end
//-------------------------------------------------------
//在clkb下生成脈沖信號(hào)和輸出信號(hào)
always @(posedge clkb or negedge rst_n)begin
if(rst_n == 1'b0)begin
signal_b_r <= 'b0;
signal_b_rr <= 'b0;
end
else begin
signal_b_rr <= signal_b_r;
signal_b_r <= signal_b;
end
end
assign pulse_outb = ~signal_b_rr & signal_b_r;
assign signal_outb = signal_b_rr;
//-------------------------------------------------------
//在clka下采集signal_b_rr,生成signal_a_rr用于反饋拉低signal_a
always @(posedge clka or negedge rst_n)begin
if(rst_n == 1'b0)begin
signal_a_r <= 'b0;
signal_a_rr <= 'b0;
end
else begin
signal_a_rr <= signal_a_r;
signal_a_r <= signal_b_rr;
end
end
endmodule
如何理解茅姜,可以參照仿真圖或者波形圖:
異步FIFO
上面所說的還都是單比特信號(hào)闪朱,對(duì)于多比特信號(hào),我們可以使用異步FIFO來處理跨時(shí)鐘域傳輸問題钻洒,至于異步FIFO的設(shè)計(jì)奋姿,我是真的沒必要在贅余了,見博客:FPGA基礎(chǔ)知識(shí)極簡(jiǎn)教程(4)從FIFO設(shè)計(jì)講起之異步FIFO篇
這是我最新寫的比較好理解的一種設(shè)計(jì)版本素标。
時(shí)序錯(cuò)誤和跨時(shí)鐘域
通常胀蛮,當(dāng)您跨時(shí)鐘域時(shí),會(huì)遇到計(jì)時(shí)錯(cuò)誤糯钙。這個(gè)是正常的粪狼!這是告訴您的情況,您的設(shè)置和保持時(shí)間將無法保持任岸,并且您將處于亞穩(wěn)狀態(tài)再榄。如前所述,亞穩(wěn)定是這項(xiàng)工作的常識(shí)享潜,因此困鸥,只要您了解并可以圍繞它進(jìn)行設(shè)計(jì),就可以了剑按。
總之疾就,作為FPGA設(shè)計(jì)人員,您將遇到跨時(shí)鐘域的情況艺蝴。您需要清楚地了解在這些情況下發(fā)生的常見陷阱猬腰。如果跨時(shí)鐘域的情況足夠簡(jiǎn)單,則可以將數(shù)據(jù)兩級(jí)寄存器采樣或執(zhí)行脈沖展寬猜敢。在大多數(shù)情況下姑荷,您可能需要使用支持兩個(gè)時(shí)鐘的FIFO(異步FIFO),一個(gè)用于讀取缩擂,一個(gè)用于寫入鼠冕。
參考資料
交個(gè)朋友
個(gè)人微信公眾號(hào):FPGA LAB
知乎:李銳博恩