按键抖动仿真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
卡通儿童图片