module ex_case

  1. `timescale lns/1ns
  2. module ex_case(
  3. input wire rst_n,
  4. input wire sclk,
  5. output reg [7:0] o_dv,
  6. output reg [7:0] o_data,
  7. //数据输入
  8. input wire [9:0] i_data,
  9. input wire [7:0] i_addr
  10. );
  11. //
  12. reg [2:0] cnt_7;
  13. //不同功能的寄存器分开always来写,这样代码的可维护性强,可读性强
  14. always@(posedge sclk or negedge rst_n)
  15. if(rst_n == 1'b0)
  16. cnt_7 <= 3'd0;
  17. else
  18. cnt_7 <= cnt_7 + 1'b1;
  19. /*
  20. //时序逻辑
  21. always@(posedge sclk or negedge rst_n)
  22. if(rst_n == 1'b0)
  23. begin
  24. o_data <= 8'd0;
  25. end
  26. else
  27. begin
  28. case(cnt_7)
  29. 3'd0:
  30. begin
  31. o_data <= 3'd7;//给寄存器 非阻塞赋值 当cnt_7等于3'd0执行此条语句
  32. o_dv <= 1'b1;
  33. end
  34. 3'd1:
  35. begin
  36. o_data <= 3'd0;
  37. o_dv <= 1'b0;
  38. end
  39. 3'd2:
  40. begin
  41. 0_data <= 3'd5;
  42. o_dv <= 1'b1;
  43. end
  44. default:
  45. begin
  46. o_data <= 3'd0;
  47. o_dv <= 1'b0;
  48. end
  49. endcase
  50. end
  51. */
  52. //组合逻辑
  53. //消除锁存器
  54. //1.消除敏感列表,case条件,在赋值语句的右边变量
  55. //2.所有条件分支写全
  56. always@(cnt_7)
  57. case(cnt_7)
  58. 3'd0:
  59. begin
  60. o_data <= 3'd7;//给寄存器 非阻塞赋值 当cnt_7等于3'd0执行此条语句
  61. o_dv <= 1'b1;
  62. end
  63. 3'd1:
  64. begin
  65. o_data <= 3'd0;
  66. o_dv <= 1'b0;
  67. end
  68. 3'd2:
  69. begin
  70. o_data <= 3'd5;
  71. o_dv <= 1'b1;
  72. end
  73. default:
  74. begin
  75. o_data <= 3'd0;
  76. o_dv <= 1'b0;
  77. end
  78. endcase
  79. endmodule

module tb_ex_case

  1. `timescale lns/1ns
  2. module tb_ex_case;
  3. reg sclk,rst_n;
  4. wire [7:0] data;
  5. wire dv;
  6. reg [7:0] i_addr;
  7. reg [9:0] i_data;
  8. initial begin
  9. sclk = 0;
  10. rst_n = 0;
  11. #200
  12. rst_n = 1;
  13. end
  14. initial
  15. begin
  16. i_data = 0;
  17. i_addr = 0;
  18. #500
  19. send_data(255);
  20. end
  21. always #10 sclk <= ~sclk;//周期20ns的时钟
  22. ex_case ex_case_inst(
  23. .rst_n (rst_n),
  24. .sclk (sclk),
  25. .o_dv (dv),
  26. .o_data (data),
  27. .i_data (i_data),
  28. .i_addr (i_addr)
  29. );
  30. task send_data(len);//任务的声明
  31. integer len,i;//变量声明区
  32. begin//必须加begin和end
  33. for(i = 0;i <= len;i = i + 1)//循环语句
  34. begin
  35. @(posedge sclk);//上升沿时进行赋值 按照节拍的动作来
  36. i_addr <= i[7:0];//这里阻塞赋值 非阻塞赋值都可以
  37. i_data <= i[7:0];
  38. end
  39. i_addr <= 0;
  40. i_data <= 0;
  41. end
  42. endtask
  43. endmodule

verilog学习笔记(3)_task/case小例子及其tb的更多相关文章

  1. verilog学习笔记(2)_一个小module及其tb

    module-ex_cnt module ex_cnt( input wire sclk, input wire rst_n, output wire[9:0] cnt ); reg [9:0] cn ...

  2. 【Unity 3D】学习笔记29:游戏的例子——简单的小制作地图

    无论学习.只看不练是坏科学. 因此,要总结回想这怎么生产MMROPG小地图的游戏.于MMROPG游戏类,在游戏世界中行走时导致各地,通常在屏幕的右上角,将有一个区域,以显示当前的游戏场景微缩.在游戏世 ...

  3. verilog学习笔记(1)_两个小module

    第一个小module-ex_module module ex_module( input wire sclk,//声明模块的时候input变量一定是wire变量 input wire rst_n,// ...

  4. Verilog学习笔记简单功能实现(三)...............同步有限状态机

    在Verilog中可以采用多种方法来描述有限状态机最常见的方法就是用always和case语句.如下图所示的状态转移图就表示了一个简单的有限状态机: 图中:图表示了一个四状态的状态机,输入为A和Res ...

  5. Verilog学习笔记

    作者:桂. 时间:2017-06-24  11:07:40 链接:http://www.cnblogs.com/xingshansi/p/7039237.html 前言 Verilog是硬件描述语言, ...

  6. Verilog学习笔记基本语法篇(十一)········ 常用系统函数

    1)系统任务:$monitor   格式: $monitor(p1,p2,p3...pn); $monitor; $monitoron; $monitoroff; 任务$monitor提供了监控输出列 ...

  7. Verilog学习笔记简单功能实现(六)...............计数分频电路

    在分频器电路中最重要的概念有两个:1)奇分频/偶分频:2)占空比. A)其中最简单的就是二分频电路,占空比为50%,其Verilog程序为 module half_clk(clr,clk_in,clk ...

  8. Verilog学习笔记简单功能实现(五)...............序列检测设计

    这里采用夏宇闻教授第十五章的序列检测为例来学习; 从以上的状态转换图可以写出状态机的程序: module seqdet(x,out,clk,rst); input x,clk,rst; output ...

  9. Verilog学习笔记设计和验证篇(三)...............同步有限状态机的指导原则

    因为大多数的FPGA内部的触发器数目相当多,又加上独热码状态机(one hot code machine)的译码逻辑最为简单,所以在FPGA实现状态机时,往往采用独热码状态机(即每个状态只有一个寄存器 ...

随机推荐

  1. json数组本地获取,以及根据字段排序【部分摘录】

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  2. [CF932E]Team Work & [BZOJ5093]图的价值

    CF题面 题意:求\(\sum_{i=0}^{n}\binom{n}{i}i^k\) \(n\le10^9,k\le5000\) 模\(10^9+7\) BZOJ题面 题意:求\(n*2^{\frac ...

  3. [BZOJ3110][ZJOI2013]K大数查询(整体二分)

    BZOJ Luogu sol 整体二分,其实很简单的啦. 对所有询问二分一个答案mid,把所有修改操作中数字大于mid的做一个区间覆盖(区间加1) 查询就是区间查询 然后左右分一分即可 注意是第k大 ...

  4. NOIP提高组 2013货车运输

    觉得题目水的离开 不屑的大佬请离开 不会图论的请离开 ……. 感谢您贡献的访问量 ————————————华丽的分割线———————————— 题面: 题目描述 A 国有 n 座城市,编号从 1 到 ...

  5. [BZOJ1010] [HNOI2008] 玩具装箱toy (斜率优化)

    Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1... ...

  6. .NET Core 配置Configuration杂谈

    前言 .NET Core 在配置文件的操作上相对于.NET Framework做了不少改变,今天来聊一聊.关于Configuration的Package都是以Microsoft.Extensions. ...

  7. 【Spring源码分析】非懒加载的单例Bean初始化过程(下篇)

    doCreateBean方法 上文[Spring源码分析]非懒加载的单例Bean初始化过程(上篇),分析了单例的Bean初始化流程,并跟踪代码进入了主流程,看到了Bean是如何被实例化出来的.先贴一下 ...

  8. 关系型数据库工作原理-数据库查询器(翻译自Coding-Geek文章)

    本文翻译自Coding-Geek文章:< How does a relational database work>.原文链接:http://coding-geek.com/how-data ...

  9. MyBatis的三层级联和二层缓存

           我们这里说的三层级联和二级缓存其实也是MyBatis映射器的知识点,只是因为比较难理解,所以单独拿出来讲解,下面是三层级联的内容:        我们知道,在数据库中包含着一对一,一对多 ...

  10. 与JavaWeb有关的故事(web请求与Java I/O)

    作为一名后端屌丝程序员,对算法.并发.性能乐此不疲.但是,随着年龄和阅历的增加,显然叶落而不知秋的心态是不太能混了.尤其是,某T面试官在明知我是后端,且明确表示对HTTP协议不太熟的情况下,强行让我解 ...