文章目录

  • 一、关键字的用法
    • 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)的用法相关推荐

  1. linux 内核按键抖动,Tiny4412 Linux驱动之按键(定时器防抖动) | 技术部落

    按键抖动示意图 我们平常所用的按键为机械弹性开关,由于触点的弹性作用,按键在闭合时不会马上稳定的接通,而是有一段时间的抖动,在断开时也不会立即断开.抖动时间由按键的机械特性所决定,一般为5ms~10m ...

  2. 【STM32】按键抖动及消除

    由于按键的抖动会导致一次按键动作被当成多次按键,为确保MCU对按键的一次闭合仅作一次处理,必须消除按键的抖动,在按键处于稳定状态时读取按键的状态. 按键的去抖动,通常有硬件消抖和软件消抖两种方式. ( ...

  3. python 内置模块random_Python3.5内置模块之random模块用法实例分析

    本文实例讲述了Python3.5内置模块之random模块用法.分享给大家供大家参考,具体如下: 1.random模块基础的方法 #!/usr/bin/env python # -*- coding: ...

  4. python random.shuffle用法

    python函数用法 random.shuffle()用于将一个列表中的元素打乱顺序,值得注意的是使用这个方法不会生成新的列表,只是将原列表的次序打乱. python random.shuffle代码 ...

  5. python中的随机函数random的用法示例

    这篇文章主要介绍了python中的随机函数random的用法示例,详细的介绍了python 随机函数random的用法和示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 一.random模块简介 ...

  6. Python中random函数用法整理

    目录 1. random.random(): 返回随机生成的一个浮点数,范围在[0,1)之间 2. random.uniform(a, b): 返回随机生成的一个浮点数,范围在[a, b)之间 3.  ...

  7. python中random模块用法_Python中random模块用法实例分析

    本文实例讲述了Python中random模块用法.分享给大家供大家参考.具体如下: import random x = random.randint(1,4); y = random.choice([ ...

  8. 安卓开发之屏蔽按键抖动,连击,长按事件

    博客: 安卓之家 微博: 追风917 CSDN: 蒋朋的家 简书: 追风917 缘由 今天来个小知识点,也许遇到的人不多,但还是记录下.现在安卓机很少有实体键,老罗的情怀也只剩下一丝丝.但是除去手机, ...

  9. random函数用法_Python函数式编程:从入门到走火入魔

    很多人都在谈论函数式编程(Functional Programming),只是很多人站在不同的角度看到的是完全不一样的风景.坚持实用主义的 Python 老司机们对待 FP 的态度应该更加包容,虽然他 ...

最新文章

  1. python编写爬虫的步骤-如何编写python脚本?教你做简单的爬虫,适合初学者
  2. sudoers配置文件详解
  3. LeetCode算法题7:DFS和BFS
  4. CSS3 Filter详解(改变模糊度 亮度 透明度等方法)
  5. python 文件遍历
  6. springboot 中文文档_还在用 Swagger生成接口文档?我推荐你试试它
  7. tensorflow 保存训练loss_tensorflow2.0保存和加载模型 (tensorflow2.0官方教程翻译)
  8. [JavaWeb基础] 015.Struts2 表单验证框架
  9. JQuery一行搞定当前面所对应的导航菜单变亮效果
  10. MySQL Python教程(1)
  11. python可以做什么工作-学了那么多年python到底可以找什么工作?
  12. java boolean 包_java Boolean包装类工作笔记
  13. 单价数量和总价的公式_总价数量单价的数量关系式
  14. 新手安卓开发详细教程
  15. 终于把PID的原理搞懂了
  16. html5 制作 蝴蝶飞动的动态图片,fireworks制作蝴蝶飞gif动画
  17. 【IJCV2020】【语义编辑】Semantic Hierarchy Emerges in Deep Generative Representations for Scene Synthesis
  18. DES算法代码实现(C语言)
  19. 鸿蒙系统当贝市场,新款华为智慧屏如何安装第三方软件?当贝市场分享最详细的安装教程详解...
  20. vue-simple-uploader上传组件

热门文章

  1. ListView实现分页
  2. Mysql 解压版 安装时候的注意事项
  3. C#中WinForm程序退出方法技巧总结
  4. canvas剪辑区域
  5. 大熊君学习html5系列之------History API(SPA单页应用的必备------重构完结版)
  6. 通过企业分布式缓存共享运行时数据
  7. UA MATH571A ANCOVA简介
  8. 三个基本原理和概念 - 计算机图形学、数据加密、数据挖掘
  9. maven与eclipse连接的配置
  10. 『计算机视觉』YOLO系列总结