日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

按键抖动仿真Testbench(repeat、task、random)的用法

發(fā)布時間:2025/4/5 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 按键抖动仿真Testbench(repeat、task、random)的用法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 一、關(guān)鍵字的用法
    • 1、random的用法
    • 2、task的用法
    • 3、repeat的用法
  • 二、按鍵隨機抖動仿真(testbench訓練)

之前一講,我們是用了簡單的TB的寫法,產(chǎn)生的是固定的抖動。
下面我們要用到隨機函數(shù)、task任務(wù)、repeat函數(shù)來生成隨機的抖動仿真
https://blog.csdn.net/ciscomonkey/article/details/86485111

一、關(guān)鍵字的用法

1、random的用法

$ random這一系列函數(shù)可以產(chǎn)生一個有符號的32bit隨機整數(shù)。一般的用法是$ random %b, 其中b>0; 這樣就會生成一個范圍在(-b+1):(b-1)中的隨機數(shù)。
如果只得到正數(shù)的隨機數(shù),可采用{$random}%b來產(chǎn)生。

比如我們可以用于隨機時間: {$random}%20_000_000 表示的是20_000_000以內(nèi)的隨機數(shù)。

2、task的用法

task和function綜合出來的電路都是組合電路,如果你想在task和function來寫時序功能,那你需要的是module而不是這兩個。

task <任務(wù)名>
<端口及其數(shù)據(jù)類型聲明語句>
<組合語句1>
<組合語句2>
<組合語句n>
endtask

任務(wù)的調(diào)用的語法如下:
<任務(wù)名>(頂層端口1,頂層端口2,。。。頂層端口n)

task只綜合組合邏輯部分。

實際例子如下:

//任務(wù)task使用示例 module test (input [3:0] A, B, input CIN, output [3:0] S, output COUT );reg [1:0] S0, S1, S2, S3;task ADD;input A, B, CIN;output [1:0] C;reg [1:0] C;reg S, COUT;beginS = A ^ B ^ CIN;COUT = (A&B) | (A&CIN) | (B&CIN);C = {COUT, S};end endtaskalways @(A or B or CIN) beginADD (A[0], B[0], CIN, S0);ADD (A[1], B[1], S0[1], S1);ADD (A[2], B[2], S1[1], S2);ADD (A[3], B[3], S2[1], S3);S = {S3[0], S2[0], S1[0], S0[0]};COUT = S3[1]; endendmodule

3、repeat的用法

表示重復(fù)執(zhí)行的次數(shù),不可以綜合
語法結(jié)構(gòu)

repeat(常數(shù)) begin ... end

二、按鍵隨機抖動仿真(testbench訓練)

運用上面講述的三個函數(shù),進行仿真,也就是說,我們隨機的隔一段時間,就把key翻轉(zhuǎn)一次,一共執(zhí)行key翻轉(zhuǎn)50次的65535ns隨機變量的抖動,來模擬的抖動,那么我的最大抖動時間就是random的最大數(shù)*50(假設(shè)每次都隨機數(shù)去取了最大數(shù))

`timescale 1ns/1ns `define clk_period 20module key_filter_tb;reg clk;reg rst_n;reg key;wire key_flag;wire key_state;key_filter key_filter(.clk(clk),.rst_n(rst_n),.key(key),.key_flag(key_flag),.key_state(key_state));initial beginrst_n = 1'b0;#(`clk_period*10) rst_n = 1'b1;#(`clk_period*10 + 1);press_key(39999999,49999999);press_key(59999999,49999999);press_key(159999999,99999999);endinitial clk = 1;always#(`clk_period/2) clk = ~clk;reg [15:0]myrand;task press_key;input [31:0]press_time;input [31:0]release_time;beginrepeat(50)beginmyrand = {$random}%65536;#myrand key = ~key; endkey = 0;#press_time;repeat(50)beginmyrand = {$random}%65536;#myrand key = ~key; endkey = 1;#release_time; end endtaskendmodule

總結(jié)

以上是生活随笔為你收集整理的按键抖动仿真Testbench(repeat、task、random)的用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。