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

更新时间:2023-07-31 18:33:50 阅读: 评论:0

按键抖动仿真Testbench(repeat、task、random)的⽤法
老歌歌词
⽂章⽬录
之前⼀讲,我们是⽤了简单的TB的写法,产⽣的是固定的抖动。
下⾯我们要⽤到随机函数、task任务、repeat函数来⽣成随机的抖动仿真
⼀、关键字的⽤法
蘑菇房1、random的⽤法
$ random这⼀系列函数可以产⽣⼀个有符号的32bit随机整数。⼀般的⽤法是$ random %b, 其中b>0; 这样就会⽣成⼀个范围在(-b+1):(b-1)中的随机数。
如果只得到正数的随机数,可采⽤{$random}%b来产⽣。
⽐如我们可以⽤于随机时间: {$random}%20_000_000 表⽰的是20_000_000以内的随机数。
2、task的⽤法
果园的英文
task和function综合出来的电路都是组合电路,如果你想在task和function来写时序功能,那你需要的是module⽽不是这两个。
task <;任务名>
<;端⼝及其数据类型声明语句>
<;组合语句1>
<;组合语句2>
<;组合语句n>空姐丝巾系法
endtask
任务的调⽤的语法如下:
<;任务名>(顶层端⼝1,顶层端⼝2,。。。顶层端⼝n)
task只综合组合逻辑部分。如何美白皮肤
实际例⼦如下:
3、repeat 的⽤法
表⽰重复执⾏的次数,不可以综合
语法结构
⼆、按键随机抖动仿真(testbench 训练)
北大刘媛媛运⽤上⾯讲述的三个函数,进⾏仿真,也就是说,我们随机的隔⼀段时间,就把key翻转⼀次,⼀共执⾏key翻转50次的65535ns随机变量的抖动,来模拟的抖动,那么我的最⼤抖动时间就是random的最⼤数*50(假设每次都随机数去取了最⼤数)//任务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;    begin        S = A ^ B ^ CIN;        COUT = (A&B) | (A&CIN) | (B&CIN);        C = {COUT, S};    end endtask always @(A or B or CIN)begin    ADD (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];end endmodule
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
言情小說18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34repeat (常数)begin ...end
1
2
3
4
`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 begin    rst_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);    end  initial clk = 1; always#(`clk_period/2) clk = ~clk; reg [15:0]myrand;  task press_key;  input [31:0]press_time;  input [31:0]relea_time;  begin    repeat(50)begin    myrand = {$random}%65536;    #myrand key = ~key;      end    key = 0;  #press_time;      repeat(50)begin    myrand = {$random}%65536;    #myrand key = ~key;      end    key = 1;  #relea_time;    end  endtask  endmodule 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
卡通儿童图片

本文发布于:2023-07-31 18:33:50,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1103369.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:抖动   组合   综合   正数
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图