最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

數(shù)字IC手撕代碼-平頭哥技術終面手撕真題

2022-09-17 19:06 作者:不吃蔥的酸菜魚  | 我要投稿

平頭哥的手撕代碼很有意思,平頭哥技術終面手撕真題,題目描述如下:

????????輸入clk,每個時鐘輸入1比特的data_in,然后進來之后的序列是每次左移,也就是如果第一個時鐘data_in=1,第二個時鐘datain=0,第三個時鐘data_in=1;則data_temp=101;然后data_out是在data_temp可以整除3的時候,輸出1,其他時刻輸出0;

????????這道題乍一看,好像是什么移位寄存器的題,似乎不難;但實有點難度,涉及到一些數(shù)學的推導,下面我們來分析一下。

????????首先,要聲明的一點,這道題只能用狀態(tài)機寫,為什么?

????????明確一下我們的需求,我們的需求是知道一條序列,然后要求輸出data_out。

????????有兩種做法,第一種,存儲所有輸入的值,然后對3取余,接著輸出結果。表面可以,實則不行,因為如果要存儲所有的值,在輸入數(shù)據量已知的情況下,你可能提前預設reg [9999:0] data_temp來存儲1w個輸入的結果,那如果是100w個輸入呢?那100M的時鐘跑一秒,1個億的輸入呢?你全存下來,然后對3取余么?顯然不行,因此第一種做法是不行的。

????????第二種做法,考慮所有可能,然后用狀態(tài)機來進行狀態(tài)轉移,每輸入一個數(shù)據1,狀態(tài)機跳轉到對應狀態(tài),再根據對應狀態(tài),選擇輸出data_out是否為1 。下面來分析一下所有可能的情況,進而再畫出狀態(tài)轉移圖:

????????輸入數(shù)據是1bit的,每周期輸入1bit數(shù);

假設當前余數(shù)為0時,那么左移(乘以2)后余數(shù)是0,那么進來1余1,進來0余0;

假設當前余數(shù)為1時,那么左移(乘以2)后余數(shù)是2,那么進來1余0,進來0余2;

假設當前余數(shù)為2時,那么左移(乘以2)后余數(shù)是1,那么進來1余2,進來0余1;

整個題目用有4個狀態(tài)的狀態(tài)機就可描述了,3個狀態(tài)分別表示對3取余后的余數(shù),1個狀態(tài)為初始狀態(tài),輸入為data_in,題目要求data_temp可以整除3的時候,data_out拉高,其他時候data_out拉低。

????????初始狀態(tài)和余數(shù)為0時的狀態(tài)都是進來1余1,進來0余0,兩者的區(qū)別就在于:初始狀態(tài)的data_out為低(其他狀態(tài)),余數(shù)為0時的data_out為高。

狀態(tài)轉移圖

????????畫出狀態(tài)轉移圖后,這道題就變得很簡單了,我們之前專欄手撕過FSM飲料機,這個同理解決即可:數(shù)字IC手撕代碼-有限狀態(tài)機FSM-飲料機 - 嗶哩嗶哩 (bilibili.com)

下面直接上代碼:

狀態(tài)機三段式寫法,第一段:狀態(tài)轉移

第二段:根據當前狀態(tài)和當前輸入,決定下一狀態(tài)

????????狀態(tài)轉移就按照狀態(tài)轉移圖來寫就行了,根據當前狀態(tài)和當前輸出,改變下一周期的狀態(tài)為什么。

第三段:根據當前狀態(tài)和輸入,決定輸出結果

輸出判斷,只有在狀態(tài)為RES_0也就是余數(shù)為0,即對3整除時,data_out才會拉高。

Testbench:

波形:

????????波形和我們分析和思考的一致,我們在tb中將狀態(tài)機的所有狀態(tài)都遍歷了,data_out只在current_state為4‘b0010也就是RES_0狀態(tài)時才拉高,也即滿足題目要求:輸入一串序列,data_out僅在序列能對3整除時拉高。

ps:由于b站截圖顯示不全,up將完整代碼傳至網盤自取,總計代碼量60行左右,題目代碼量不大,但考慮到技術面臨場分析分析及推導問題,總體難度:中等。

代碼自取

鏈接:https://pan.ba刪除中文idu.com/s/1GiT刪除中文SpQek5OKxF6bomNaB_g?

提取碼:oyis?



數(shù)字IC手撕代碼-平頭哥技術終面手撕真題的評論 (共 條)

分享到微博請遵守國家法律
湘西| 三台县| 宁波市| 榆树市| 英吉沙县| 陇川县| 塔城市| 横山县| 新竹市| 东兴市| 故城县| 伊宁市| 大足县| 南澳县| 大丰市| 津南区| 永宁县| 石棉县| 南平市| 延庆县| 榕江县| 蒙阴县| 无极县| 芦山县| 平罗县| 杭州市| 永定县| 台湾省| 北京市| 苏尼特右旗| 霸州市| 秭归县| 永清县| 长春市| 宣恩县| 潼关县| 齐齐哈尔市| 石渠县| 新河县| 太和县| 冷水江市|