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

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

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

FPGA延時(shí)Verilog HDL實(shí)現(xiàn)

ZYNQ ? 來源:ZYNQ ? 2024-11-05 11:26 ? 次閱讀

本章節(jié)簡(jiǎn)介:

可以在任意時(shí)刻啟動(dòng),可以重復(fù)啟動(dòng),延時(shí)時(shí)長(zhǎng)可調(diào),單位可切換(ms/us),在50MHz時(shí)鐘下的延時(shí)范圍是1ms-85899ms/1us-85899us。

源代碼和modelsim仿真代碼:

moduledelay



//#(parameterN)//可以延時(shí)N*1ms/us



(inputclk,rst_n,

inputstart,//start上升沿有效

inputdelay_unit,//延時(shí)單位,high:ms/low:us

outputfinish,finish_pose);//finish上升沿有效

regstart_reg0,start_reg1;//start兩級(jí)緩存,用于邊沿檢測(cè)

regfinish_reg0,finish_reg1;//finish兩級(jí)緩存

reg[31:0]cnt;//固定32位寬計(jì)數(shù)

reg[31:0]cnt_full;

regrestart;//重新開始

wirestart_pose,full;

always@(posedgeclkornegedgerst_n)

begin

if(!rst_n)

begin

cnt<=?32'd0;

???????????????????cnt_full?<=?32'd10;?//避免一開始finish置位

???????????????????restart?<=?1'b0;

???????????????????start_reg0?<=?1'b0;?start_reg1?<=?1'b0;?

???????????????????finish_reg0?<=?1'b0;?finish_reg1?<=?1'b0;

???????????????end

???????????else

??????????????begin

??????????????????start_reg0?<=?start;?start_reg1?<=?start_reg0;

??????????????????finish_reg1?<=?finish_reg0;??

??????????????????/**檢測(cè)計(jì)時(shí)單位**/

??????????????????if(delay_unit)??

?????????????????????cnt_full?<=?32'd50_000*2-32'd2;??//計(jì)時(shí)2ms??實(shí)際例化時(shí)用N代替:?32'd50_000*N-32'd2

??????????????????else

?????????????????????cnt_full?<=?32'd50*2-32'd2;??????//計(jì)時(shí)2us

?????????????????/***************/

????????????????/**是否重新開始**/

????????????????if(start_pose)??//檢測(cè)到起始時(shí)刻?

????????????????????restart?<=?1'b1;??

???????????????/****計(jì)時(shí)完成****/

???????????????else?if(full)??//延時(shí)結(jié)束

??????????????????begin

??????????????????????cnt?<=?32'd0;??//cnt歸零

??????????????????????finish_reg0?<=?1'b1;??//finish響應(yīng)

??????????????????????restart?<=?1'b0;

??????????????????end

?????????????/***************/

?????????????/****計(jì)時(shí)開始****/

?????????????else?if(restart)?

????????????????begin

????????????????????finish_reg0?<=?1'b0;????//新一輪延時(shí)finish復(fù)位

????????????????????cnt?<=?cnt+1'b1;

????????????????end

???????????/***************/

???????????/**等待新一輪計(jì)時(shí)**/

???????????else?

??????????????begin

??????????????????cnt?<=?cnt;

??????????????????finish_reg0?<=?finish_reg0;

??????????????????restart?<=?restart;

??????????????end

????end??

end

?

??assign?start_pose?=?(~start_reg1&start_reg0)?1'b1:1'b0;??//start上升沿檢測(cè)

??assign?finish_pose?=?(~finish_reg1&finish_reg0)?1'b1:1'b0;??//finish上升沿檢測(cè)

??assign?full?=?(cnt_full-cnt==0)?1'b1:1'b0;???//檢測(cè)是否計(jì)滿



??assign?finish?=?finish_reg0;



endmodule



/**************************************************************************************************/?????????????????????????????????????/***************************************modelsim********************************************/??



`timescale?1ns/1ps

module?delay_tb();

???reg?clk,rst_n;

???reg?start;

???wire?finish,finish_pose;

??

??delay?delay_u0

??(.clk(clk),

???.rst_n(rst_n),

???.start(start),

???.delay_unit(1'b1),

???.finish(finish),

???.finish_pose(finish_pose));

???//defparam?delay_u0.N?=?2;?//延時(shí)2ms

??

??initial

????begin

clk?=?1'b0;

????????rst_n?=?1'b0;

????????start?=?1'b0;

#1000?rst_n?=?1'b1;

#4010?start?=?1'b1;?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????#50?????start?=?1'b0;????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????end



??always?#10?clk?=?~clk;

endmodule

思路:

start端口給上升沿啟動(dòng)延時(shí),延時(shí)結(jié)束端口finish置位(重新啟動(dòng)延時(shí)后復(fù)位)、finish的上升沿檢測(cè)在模塊內(nèi)部已做好(端口finish_pose),直接調(diào)用即可,端口delay_unit置高選擇ms,置低選擇us,#(參數(shù)N )“是計(jì)時(shí)時(shí)長(zhǎng),例如計(jì)時(shí)8ms:”N = 8, .delay_unit(1'b1)“,實(shí)際例化時(shí)只需”defparam 例化名.N = 數(shù)值”。因?yàn)閙odelsim無法識(shí)別這種調(diào)用,所以直接用數(shù)值代替N進(jìn)行測(cè)試。邊沿檢測(cè)會(huì)消耗兩個(gè)時(shí)鐘周期,所以cnt_full需要減2,并且將finish_reg0直接連到finish輸出端口而不是用finish_reg1連接完成。

延時(shí)2ms測(cè)試的起始時(shí)刻(5010ns)和結(jié)束時(shí)刻(2005010ns):

f525039a-98c2-11ef-a511-92fbcf53809c.pngf554772e-98c2-11ef-a511-92fbcf53809c.png

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

    關(guān)注

    1625

    文章

    21619

    瀏覽量

    601150
  • 仿真
    +關(guān)注

    關(guān)注

    50

    文章

    4020

    瀏覽量

    133328
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1343

    瀏覽量

    109918
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4719

    瀏覽量

    68210

原文標(biāo)題:FPGA延時(shí) Verilog HDL 實(shí)現(xiàn)

文章出處:【微信號(hào):ZYNQ,微信公眾號(hào):ZYNQ】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    [推薦]cpld\fpga\verilog hdl視頻教程

    教程目錄: 入門篇:第1講、FPGA設(shè)計(jì)基礎(chǔ)(PDF、視頻)第2講、FPGA設(shè)計(jì)入門(視頻、課后習(xí)題)第3講、VerilogHDL基礎(chǔ)(PDF、視頻、課后習(xí)題)第4講:Verilog HDL
    發(fā)表于 03-09 22:56

    [下載]cpld\fpga\verilog hdl視頻教程

      cpld\fpga\verilog hdl視頻教程入門篇:第1講、FPGA設(shè)計(jì)基礎(chǔ)(PDF、視頻)第2講、FPGA設(shè)計(jì)入門(視
    發(fā)表于 03-26 16:37

    FPGA雙沿發(fā)送之Verilog HDL實(shí)現(xiàn) 精選資料推薦

    1.1 FPGA雙沿發(fā)送之Verilog HDL實(shí)現(xiàn)1.1.1 本節(jié)目錄1)本節(jié)目錄;2)本節(jié)引言;3)FPGA簡(jiǎn)介;4)
    發(fā)表于 07-26 06:20

    FPGA雙沿采樣之Verilog HDL實(shí)現(xiàn) 精選資料分享

    1.1 FPGA雙沿采樣之Verilog HDL實(shí)現(xiàn)1.1.1 本節(jié)目錄1)本節(jié)目錄;2)本節(jié)引言;3)FPGA簡(jiǎn)介;4)
    發(fā)表于 07-26 07:44

    FPGA的編譯之二、Verilog HDL語言的FPGA快速

    This manual describes the Verilog portion of Synopsys FPGACompiler II / FPGA Express application
    發(fā)表于 07-23 10:01 ?79次下載

    基于Verilog HDL語言的FPGA設(shè)計(jì)

    采用 Verilog HDL 語言在Altera 公司的FPGA 芯片上實(shí)現(xiàn)了RISC_CPU 的關(guān)鍵部件狀態(tài)控制器的設(shè)計(jì),以及在與其它各種數(shù)字邏輯設(shè)計(jì)方法的比較下,顯示出使用
    發(fā)表于 08-21 10:50 ?69次下載

    Verilog HDL語言在FPGA/CPLD開發(fā)中的應(yīng)用

    摘 要:通過設(shè)計(jì)實(shí)例詳細(xì)介紹了用Verilog HDL語言開發(fā)FPGA/CPLD的方法,并通過與其他各種輸入方式的比較,顯示出使用Verilog H
    發(fā)表于 06-20 11:51 ?1962次閱讀
    <b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>語言在<b class='flag-5'>FPGA</b>/CPLD開發(fā)中的應(yīng)用

    Verilog HDL與VHDL及FPGA的比較分析

    Verilog HDL與VHDL及FPGA的比較分析. Verilog HDL優(yōu)點(diǎn):類似C語言,上手容易,靈活。大小寫敏感。在寫激勵(lì)和建模方
    發(fā)表于 01-11 10:45 ?1350次閱讀

    PLD/FPGA硬件語言設(shè)計(jì)verilog HDL

    在我國(guó)使用Verilog HDL的公司比使用VHDL的公司多。從EDA技術(shù)的發(fā)展上看,已出現(xiàn)用于CPLD/FPGA設(shè)計(jì)的硬件C語言編譯軟件,雖然還不成熟,應(yīng)用極少,但它有可能會(huì)成為繼VHDL和
    發(fā)表于 03-12 11:21 ?1771次閱讀

    _Verilog_HDL的基本語法

    Verilog_HDL語言的學(xué)習(xí),為FPGA編程打下堅(jiān)實(shí)的基礎(chǔ)
    發(fā)表于 05-19 16:40 ?12次下載

    基于FPGA Verilog-HDL語言的串口設(shè)計(jì)

    基于FPGA Verilog-HDL語言的串口設(shè)計(jì)
    發(fā)表于 02-16 00:08 ?35次下載

    Verilog HDL入門教程之Verilog HDL數(shù)字系統(tǒng)設(shè)計(jì)教程

    本文檔的主要內(nèi)容詳細(xì)介紹的是Verilog HDL入門教程之Verilog HDL數(shù)字系統(tǒng)設(shè)計(jì)教程。
    發(fā)表于 09-20 15:51 ?83次下載
    <b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>入門教程之<b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>數(shù)字系統(tǒng)設(shè)計(jì)教程

    Verilog HDL作為現(xiàn)在最流行的FPGA開發(fā)語言 是入門的基礎(chǔ)

    Verilog HDL作為現(xiàn)在最流行的FPGA開發(fā)語言,當(dāng)然是入門基礎(chǔ)。
    發(fā)表于 02-18 14:47 ?1w次閱讀

    數(shù)字設(shè)計(jì)FPGA應(yīng)用:Verilog HDL語言基本結(jié)構(gòu)

    本課程以目前流行的Xilinx 7系列FPGA的開發(fā)為主線,全面講解FPGA的原理及電路設(shè)計(jì)、Verilog HDL語言及VIVADO的應(yīng)用,并循序漸進(jìn)地從組合邏輯、時(shí)序邏輯的開發(fā)開始
    的頭像 發(fā)表于 12-02 07:10 ?3139次閱讀
    數(shù)字設(shè)計(jì)<b class='flag-5'>FPGA</b>應(yīng)用:<b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>語言基本結(jié)構(gòu)

    Verilog HDL入門教程-Verilog HDL的基本語法

    Verilog HDL入門教程-Verilog HDL的基本語法
    發(fā)表于 01-07 09:23 ?177次下載