按键抖动仿真Testbench(repeat、task、random)的用法
文章目录
- 一、关键字的用法
- 1、random的用法
- 2、task的用法
- 3、repeat的用法
- 二、按键随机抖动仿真(testbench训练)
之前一讲,我们是用了简单的TB的写法,产生的是固定的抖动。
下面我们要用到随机函数、task任务、repeat函数来生成随机的抖动仿真
https://blog.csdn.net/ciscomonkey/article/details/86485111
一、关键字的用法
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只综合组合逻辑部分。
实际例子如下:
//任务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的用法
表示重复执行的次数,不可以综合
语法结构
repeat(常数)
begin
...
end
二、按键随机抖动仿真(testbench训练)
运用上面讲述的三个函数,进行仿真,也就是说,我们随机的隔一段时间,就把key翻转一次,一共执行key翻转50次的65535ns随机变量的抖动,来模拟的抖动,那么我的最大抖动时间就是random的最大数*50(假设每次都随机数去取了最大数)
`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
按键抖动仿真Testbench(repeat、task、random)的用法相关推荐
- linux 内核按键抖动,Tiny4412 Linux驱动之按键(定时器防抖动) | 技术部落
按键抖动示意图 我们平常所用的按键为机械弹性开关,由于触点的弹性作用,按键在闭合时不会马上稳定的接通,而是有一段时间的抖动,在断开时也不会立即断开.抖动时间由按键的机械特性所决定,一般为5ms~10m ...
- 【STM32】按键抖动及消除
由于按键的抖动会导致一次按键动作被当成多次按键,为确保MCU对按键的一次闭合仅作一次处理,必须消除按键的抖动,在按键处于稳定状态时读取按键的状态. 按键的去抖动,通常有硬件消抖和软件消抖两种方式. ( ...
- python 内置模块random_Python3.5内置模块之random模块用法实例分析
本文实例讲述了Python3.5内置模块之random模块用法.分享给大家供大家参考,具体如下: 1.random模块基础的方法 #!/usr/bin/env python # -*- coding: ...
- python random.shuffle用法
python函数用法 random.shuffle()用于将一个列表中的元素打乱顺序,值得注意的是使用这个方法不会生成新的列表,只是将原列表的次序打乱. python random.shuffle代码 ...
- python中的随机函数random的用法示例
这篇文章主要介绍了python中的随机函数random的用法示例,详细的介绍了python 随机函数random的用法和示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 一.random模块简介 ...
- Python中random函数用法整理
目录 1. random.random(): 返回随机生成的一个浮点数,范围在[0,1)之间 2. random.uniform(a, b): 返回随机生成的一个浮点数,范围在[a, b)之间 3. ...
- python中random模块用法_Python中random模块用法实例分析
本文实例讲述了Python中random模块用法.分享给大家供大家参考.具体如下: import random x = random.randint(1,4); y = random.choice([ ...
- 安卓开发之屏蔽按键抖动,连击,长按事件
博客: 安卓之家 微博: 追风917 CSDN: 蒋朋的家 简书: 追风917 缘由 今天来个小知识点,也许遇到的人不多,但还是记录下.现在安卓机很少有实体键,老罗的情怀也只剩下一丝丝.但是除去手机, ...
- random函数用法_Python函数式编程:从入门到走火入魔
很多人都在谈论函数式编程(Functional Programming),只是很多人站在不同的角度看到的是完全不一样的风景.坚持实用主义的 Python 老司机们对待 FP 的态度应该更加包容,虽然他 ...
最新文章
- python编写爬虫的步骤-如何编写python脚本?教你做简单的爬虫,适合初学者
- sudoers配置文件详解
- LeetCode算法题7:DFS和BFS
- CSS3 Filter详解(改变模糊度 亮度 透明度等方法)
- python 文件遍历
- springboot 中文文档_还在用 Swagger生成接口文档?我推荐你试试它
- tensorflow 保存训练loss_tensorflow2.0保存和加载模型 (tensorflow2.0官方教程翻译)
- [JavaWeb基础] 015.Struts2 表单验证框架
- JQuery一行搞定当前面所对应的导航菜单变亮效果
- MySQL Python教程(1)
- python可以做什么工作-学了那么多年python到底可以找什么工作?
- java boolean 包_java Boolean包装类工作笔记
- 单价数量和总价的公式_总价数量单价的数量关系式
- 新手安卓开发详细教程
- 终于把PID的原理搞懂了
- html5 制作 蝴蝶飞动的动态图片,fireworks制作蝴蝶飞gif动画
- 【IJCV2020】【语义编辑】Semantic Hierarchy Emerges in Deep Generative Representations for Scene Synthesis
- DES算法代码实现(C语言)
- 鸿蒙系统当贝市场,新款华为智慧屏如何安装第三方软件?当贝市场分享最详细的安装教程详解...
- vue-simple-uploader上传组件