0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

利用同步fifo實現(xiàn)對輸入序列的檢測

我快閉嘴 ? 來源:達(dá)爾聞?wù)f ? 作者:達(dá)爾聞?wù)f ? 2022-09-14 09:46 ? 次閱讀

今天繼續(xù)為大家解析聯(lián)發(fā)科數(shù)字IC設(shè)計崗的筆試題。

16、【簡答題】請用Verilog寫出以下邏輯

Interface signals如下:

input clk_ck;

input rst_b(async reset);

input req_in;

output req_in_ack;

input [31:0] data_in;

output data_out_vld;

output [31:0] data_out;

模塊功能需求如下:

1)模塊名為:filter_data_store

2)當(dāng)req_inreq_in_ack都為高時,說明本模塊有能力接收data_in的數(shù)據(jù);

3)在data_in的數(shù)據(jù)中找到特殊字符32hA1B9_0000,特殊字符前的數(shù)據(jù)全部丟棄,特殊字符后的資料全部收下來;

4)當(dāng)sync_fifo為非空的時候,將數(shù)據(jù)讀出放到data_out上,并用data_out_vld指示數(shù)據(jù)的有效性。(15分)

解析:本題目主要考察了利用同步fifo實現(xiàn)對輸入序列的檢測

本題是一道關(guān)于同步fifo應(yīng)用的題目,遇到這種類型的題目首先要根據(jù)題目中的要求逐條分析,然后依次在草稿紙上畫出大致的模塊框圖、波形圖,再編寫RTL代碼。

首先根據(jù)Interface signals需求1攜帶的信息,繪制出的模塊框圖如下所示:

15e0afda-335d-11ed-ba43-dac502259ad0.png

然后根據(jù)需求2改進(jìn)模塊框圖如下:

15eb57dc-335d-11ed-ba43-dac502259ad0.png

然后繪制波形圖如下所示:

160e4c88-335d-11ed-ba43-dac502259ad0.png

filter_data_store模塊的HDL代碼如下所示:

//------------------

01modulefilter_data_store(

02inputwireclk_ck,

03inputwirerst_b,

04inputwirereq_in,

05inputwire[31:0]data_in,

06

07outputregreq_in_ack,

08outputwire[31:0]data_out,

09outputregdata_out_vld

10);

11

12regdata_start;

13regdata_start_reg;

14wire[31:0]dout;

15wirefull;

16wireempty;

17

18always@(posedgeclk_ck ornegedgerst_b)

19if(!rst_b)

20req_in_ack <=1'b0;

21elseif(full ==1'b0)

22req_in_ack <=1'b1;

23elseif(empty ==1'b1)

24req_in_ack <=1'b0;

25

26always@(posedgeclk_ck ornegedgerst_b)

27if(!rst_b)

28data_start <=1'b0;

29elseif(req_in ==1'b1&&req_in_ack ==1'b1&&data_in ==32'hA1B9_0000)

30data_start <=1'b1;

31elseif(req_in ==1'b0)

32data_start <=1'b0;

33

34always@(posedgeclk_ck ornegedgerst_b)

35if(!rst_b)

36data_start_reg <=1'b0;

37else

38data_start_reg <=data_start;

39

40//-------sync_fifo_inst-------

41sync_fifo sync_fifo_inst(

42.clk_ck(clk_ck),//input clk_ck

43.rst_b (rst_b),//inputrst_b

44.wr_en (data_start),//inputwr_en

45.din (data_in),//input [31:0] din

46.rd_en (~empty),//input rd_en

47

48.dout (dout),//output [31:0] dout

49.full (full),//output full

50.empty (empty)//output empty

51);

52

53assigndata_out =dout;

54

55always@(posedgeclk_ck ornegedgerst_b)

56if(!rst_b)

57data_out_vld <=1'b0;

58elseif(data_start ==1'b0&&data_start_reg ==1'b1)

59data_out_vld <=1'b0;

60elseif(data_start_reg ==1'b1)

61data_out_vld <=1'b1;

62

63endmodule

//----------------還需要一個同步fifo模塊,如果有時間建議自己用邏輯手寫一個同步fifo。同步fifo模塊的HDL代碼如下所示://----------------01modulesync_fifo(02inputwireclk_ck,03inputwirerst_b,04inputwirewr_en,05inputwire[31:0]din,06inputwirerd_en,0708outputwire[31:0]dout,09outputwirefull,10outputwireempty11);1213reg[4:0]wr_cnt;14reg[4:0]rd_cnt;15reg[31:0]mem [15:0];16reg[31:0]dout_r;1718wire[3:0]wr_p;19wire[3:0]rd_p;2021assignwr_p =wr_cnt[3:0];22assignrd_p =rd_cnt[3:0];23assigndout =dout_r;24assignfull=(wr_cnt[4]!=rd_cnt[4]&&wr_p ==rd_p)?1'b1:1'b0;25assignempty =(wr_cnt ==rd_cnt)?1'b1:1'b0;2627always@(posedgeclk_ck ornegedgerst_b)28if(!rst_b)29begin30wr_cnt <=5'd0;31rd_cnt <=5'd0;32end33else34begin35if(!full &&wr_en)36begin37 mem[wr_p]<=din;38 wr_cnt <=wr_cnt +1'b1;39end40if(!empty &&rd_en)41begin42dout_r <=mem[rd_p];43rd_cnt <=rd_cnt +1'b1;44end45end4647endmodule//------------------Testbench如下所示:

//------------------

01moduletb_filter_data_store();0203regclk_ck;04regrst_b;05regreq_in;06reg[31:0]data_in;0708wirereq_in_ack;09wire[31:0]data_out;10wiredata_out_vld;1112//初始化系統(tǒng)時鐘、全局復(fù)位13initialbegin14clk_ck =1'b1;15rst_b <=1'b0;16req_in <=1'b0;17data_in <=32'h0000_0000;18#2019rst_b <=1'b1;20@(posedgeclk_ck)21req_in <=1'b1;22data_in <=32'h0000_0001;23@(posedgeclk_ck)24data_in <=32'h0000_0002;25@(posedgeclk_ck)26data_in <=32'h0000_0003;27@(posedgeclk_ck)28data_in <=32'h0000_0004;29@(posedgeclk_ck)30data_in <=32'h0000_0005;31@(posedgeclk_ck)32data_in <=32'hA1B9_0000;33@(posedgeclk_ck)34data_in <=32'h0000_0006;35@(posedgeclk_ck)36data_in <=32'h0000_0007;37@(posedgeclk_ck)38data_in <=32'h0000_0008;39@(posedgeclk_ck)40data_in <=32'h0000_0009;41@(posedgeclk_ck)42req_in <=1'b0;43data_in <=32'h0000_0000;44req_in <=1'b0;45#100046$finish;47end4849always#10clk_ck =~clk_ck;5051//------filter_data_store_inst-------52filter_data_store filter_data_store_isnt(53.clk_ck(clk_ck),//inputclk_ck54.rst_b(rst_b),//inputrst_b55.req_in(req_in),//inputreq_in56.data_in(data_in),//input [31:0] data_in5758.req_in_ack(req_in_ack ),//output req_in_ack 59.data_out (data_out ),//output [31:0] data_out 60.data_out_vld(data_out_vld)//output data_out_vld 61);6263endmodule//----------------QuestaSim仿真出的波形如下所示:

162a4dac-335d-11ed-ba43-dac502259ad0.png

審核編輯:湯梓紅


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • fifo
    +關(guān)注

    關(guān)注

    3

    文章

    388

    瀏覽量

    43684
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1351

    瀏覽量

    110107
  • HDL
    HDL
    +關(guān)注

    關(guān)注

    8

    文章

    327

    瀏覽量

    47392

原文標(biāo)題:求職攻略| 一題解決同步FIFO設(shè)計難題

文章出處:【微信號:達(dá)爾聞?wù)f,微信公眾號:達(dá)爾聞?wù)f】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    基于CAZAC序列的OFDM時頻同步方案解析

    本文提出了一種基于CAZAC序列的OFDM時頻同步方案,給出了方案各部分的FPGA實現(xiàn)框圖和硬件電路實測效果。首先利用時域同步參考符號進(jìn)行分
    的頭像 發(fā)表于 12-17 13:24 ?3252次閱讀
    基于CAZAC<b class='flag-5'>序列</b>的OFDM時頻<b class='flag-5'>同步</b>方案解析

    同步FIFO設(shè)計詳解及代碼分享

    FIFO (先入先出, First In First Out )存儲器,在 FPGA 和數(shù)字 IC 設(shè)計中非常常用。 根據(jù)接入的時鐘信號,可以分為同步 FIFO 和異步 FIFO 。
    發(fā)表于 06-27 10:24 ?2108次閱讀
    <b class='flag-5'>同步</b><b class='flag-5'>FIFO</b>設(shè)計詳解及代碼分享

    握手型接口的同步FIFO實現(xiàn)

    按照正常的思路,在前文完成前向時序優(yōu)化和后向時序優(yōu)化后,后面緊跟的應(yīng)該是雙向時序優(yōu)化策略了,不過不急,需要先實現(xiàn)一下握手型同步FIFO
    的頭像 發(fā)表于 12-04 14:03 ?726次閱讀
    握手型接口的<b class='flag-5'>同步</b><b class='flag-5'>FIFO</b><b class='flag-5'>實現(xiàn)</b>

    如何利用FPGA實現(xiàn)準(zhǔn)單輸入調(diào)變序列生成器的設(shè)計?

    本文針對一種產(chǎn)生準(zhǔn)單輸入跳變測試序列的低功耗測試生成器的缺點(diǎn)提出了改進(jìn)設(shè)計方案,并且利用EDA技術(shù)在FPGA芯片上進(jìn)行了設(shè)計實現(xiàn)。
    發(fā)表于 04-29 06:13

    基于VHDL和FPGA的非對稱同步FIFO設(shè)計實現(xiàn)

    本文采用VHDL描述語言,充分利用Xilinx公司Spartan II FPGA的系統(tǒng)資源,設(shè)計實現(xiàn)了一種非對稱同步FIFO,它不僅提供數(shù)據(jù)緩沖,而且能進(jìn)行數(shù)據(jù)總線寬度的轉(zhuǎn)換。
    發(fā)表于 01-13 11:33 ?1963次閱讀

    利用VHDL語言和格雷碼對地址進(jìn)行編碼的異步FIFO的設(shè)計

    FIFO (先進(jìn)先出隊列)是一種在電子系統(tǒng)得到廣泛應(yīng)用的器件,通常用于數(shù)據(jù)的緩存和用于容納異步信號的頻率或相位的差異。FIFO實現(xiàn)通常是利用雙口RAM和讀寫地址產(chǎn)生模塊來
    的頭像 發(fā)表于 08-02 08:10 ?2237次閱讀
    <b class='flag-5'>利用</b>VHDL語言和格雷碼對地址進(jìn)行編碼的異步<b class='flag-5'>FIFO</b>的設(shè)計

    利用ISE的SDRAM設(shè)計的FIFO實驗

    利用ISE的SDRAM設(shè)計的FIFO實驗(嵌入式開發(fā)轉(zhuǎn)后端開發(fā))-利用ISE的SDRAM設(shè)計的FIFO實驗,適合感興趣的學(xué)習(xí)者學(xué)習(xí),可以提高自己的能力,大家可以多交流哈
    發(fā)表于 08-04 12:14 ?18次下載
    <b class='flag-5'>利用</b>ISE的SDRAM設(shè)計的<b class='flag-5'>FIFO</b>實驗

    同步FIFO之Verilog實現(xiàn)

    FIFO的分類根均FIFO工作的時鐘域,可以將FIFO分為同步FIFO和異步FIFO。
    的頭像 發(fā)表于 11-01 09:57 ?1999次閱讀

    異步FIFO之Verilog代碼實現(xiàn)案例

    同步FIFO的意思是說FIFO的讀寫時鐘是同一個時鐘,不同于異步FIFO,異步FIFO的讀寫時鐘是完全異步的。
    發(fā)表于 11-01 09:58 ?1677次閱讀

    基于寄存器的同步FIFO

    ? FIFO 是FPGA設(shè)計中最有用的模塊之一。FIFO 在模塊之間提供簡單的握手和同步機(jī)制,是設(shè)計人員將數(shù)據(jù)從一個模塊傳輸?shù)搅硪粋€模塊的常用選擇。 在這篇文章中,展示了一個簡單的 RTL
    的頭像 發(fā)表于 06-14 09:02 ?768次閱讀

    FPGA學(xué)習(xí)-序列檢測

    點(diǎn)擊上方 藍(lán)字 關(guān)注我們 一、前言 在數(shù)字電路中,序列檢測器(Sequence Detector)是指一種特殊類型的電路,用于尋找輸入信號中一定模式的子序列。該模式可以是任意模式,包括
    的頭像 發(fā)表于 08-29 10:20 ?1503次閱讀
    FPGA學(xué)習(xí)-<b class='flag-5'>序列</b><b class='flag-5'>檢測</b>器

    基于Verilog的同步FIFO的設(shè)計方法

    同步FIFO的設(shè)計主要包括讀寫地址的產(chǎn)生、數(shù)據(jù)的讀寫、以及狀態(tài)的控制。下面我們將分別介紹這三個方面的設(shè)計。
    發(fā)表于 08-31 12:53 ?886次閱讀

    同步FIFO設(shè)計分析

    模塊雖小但是要有新意,首先寫一個同步FIFO,這是一個爛大街的入門級項目,但是我肯定不會寫的那么簡單
    的頭像 發(fā)表于 09-11 17:11 ?620次閱讀
    <b class='flag-5'>同步</b><b class='flag-5'>FIFO</b>設(shè)計分析

    同步FIFO和異步FIFO的區(qū)別 同步FIFO和異步FIFO各在什么情況下應(yīng)用

    簡單的一種,其特點(diǎn)是輸入和輸出都與時鐘信號同步,當(dāng)時鐘到來時,數(shù)據(jù)總是處于穩(wěn)定狀態(tài),因此容易實現(xiàn)數(shù)據(jù)的傳輸和存儲。 而異步FIFO則是在波形的上升沿和下降沿上進(jìn)行處理,在
    的頭像 發(fā)表于 10-18 15:23 ?1698次閱讀

    利用AD7616靈活的可編程序列器和突發(fā)模式實現(xiàn)準(zhǔn)同步采樣

    電子發(fā)燒友網(wǎng)站提供《利用AD7616靈活的可編程序列器和突發(fā)模式實現(xiàn)準(zhǔn)同步采樣.pdf》資料免費(fèi)下載
    發(fā)表于 11-24 14:53 ?4次下載
    <b class='flag-5'>利用</b>AD7616靈活的可編程<b class='flag-5'>序列</b>器和突發(fā)模式<b class='flag-5'>實現(xiàn)</b>準(zhǔn)<b class='flag-5'>同步</b>采樣