數(shù)字IC手撕代碼-兆易創(chuàng)新筆試真題

題目描述:
????????有一隨機產(chǎn)生的pulse,其最小脈寬大于5ns?,F(xiàn)有一時鐘周期為20ns的時鐘,他們的關(guān)系如下圖所示,請寫出計算該脈沖個數(shù)的verilog代碼。
解決思路:
????????這道題的解決思路就是將pulse信號轉(zhuǎn)換到clk域來進行處理。
????????首先,每次檢測到pulse的上升沿,我們就對Q1進行取反。這是在pulse域下改變Q1的值。

????????其次,在每一次的時鐘上升沿,我們對Q1數(shù)據(jù)進行打兩拍。將Q1賦給Q2,將Q2賦給Q3,然后檢測pulse的信號為:edge_dect = Q2 ^ Q3;

????????最后,對edge_dect 進行計數(shù),數(shù)字就是pulse的個數(shù)。
????????這樣做的原理其實就是延長pulse的寬度,讓pulse能夠被clk采樣,接著再利用雙邊沿檢測的方法(打兩拍取異或,edge_dect?= Q2 ^ Q3)得到clk域的pulse,再對其進行計數(shù)即可。
????????約束:這種方法使用的前提是相鄰兩個pulse之間的距離要大于clk一個時鐘周期,否則會出現(xiàn)漏采樣的現(xiàn)象。
????????針對本題pulse之間的距離均大于一個clk周期,所以可以采用該方案。

? ?????ps:如果有人有更好的方案相鄰1ns的兩個5ns pulse都能檢測到的話,可以在評論區(qū)講解自己的方法。(倍頻方法就算了)

代碼:


testbench:


波形圖

ps:由于b站截圖顯示不全,up將完整代碼傳至網(wǎng)盤自取,總計代碼量35行左右,總體難度:簡單。
代碼自取
鏈接:https://pan.刪除中文baidu.com/s/1qWJrw刪除中文_OwGIHhUamXdElFJQ?
提取碼:sh4p?