module ex_case

`timescale lns/1ns

module ex_case(
input wire rst_n,
input wire sclk,
output reg [7:0] o_dv,
output reg [7:0] o_data,
//数据输入
input wire [9:0] i_data,
input wire [7:0] i_addr
);
//
reg [2:0] cnt_7; //不同功能的寄存器分开always来写,这样代码的可维护性强,可读性强
always@(posedge sclk or negedge rst_n)
if(rst_n == 1'b0)
cnt_7 <= 3'd0;
else
cnt_7 <= cnt_7 + 1'b1;
/*
//时序逻辑
always@(posedge sclk or negedge rst_n)
if(rst_n == 1'b0)
begin
o_data <= 8'd0;
end
else
begin
case(cnt_7)
3'd0:
begin
o_data <= 3'd7;//给寄存器 非阻塞赋值 当cnt_7等于3'd0执行此条语句
o_dv <= 1'b1;
end
3'd1:
begin
o_data <= 3'd0;
o_dv <= 1'b0;
end
3'd2:
begin
0_data <= 3'd5;
o_dv <= 1'b1;
end
default:
begin
o_data <= 3'd0;
o_dv <= 1'b0;
end
endcase
end
*/ //组合逻辑
//消除锁存器
//1.消除敏感列表,case条件,在赋值语句的右边变量
//2.所有条件分支写全
always@(cnt_7) case(cnt_7)
3'd0:
begin
o_data <= 3'd7;//给寄存器 非阻塞赋值 当cnt_7等于3'd0执行此条语句
o_dv <= 1'b1;
end 3'd1:
begin
o_data <= 3'd0;
o_dv <= 1'b0;
end
3'd2:
begin
o_data <= 3'd5;
o_dv <= 1'b1;
end default:
begin
o_data <= 3'd0;
o_dv <= 1'b0;
end
endcase endmodule

module tb_ex_case

`timescale lns/1ns

module tb_ex_case;
reg sclk,rst_n;
wire [7:0] data;
wire dv;
reg [7:0] i_addr;
reg [9:0] i_data; initial begin
sclk = 0;
rst_n = 0;
#200
rst_n = 1;
end initial
begin
i_data = 0;
i_addr = 0;
#500
send_data(255);
end always #10 sclk <= ~sclk;//周期20ns的时钟 ex_case ex_case_inst(
.rst_n (rst_n),
.sclk (sclk),
.o_dv (dv),
.o_data (data),
.i_data (i_data),
.i_addr (i_addr)
); task send_data(len);//任务的声明
integer len,i;//变量声明区
begin//必须加begin和end
for(i = 0;i <= len;i = i + 1)//循环语句
begin
@(posedge sclk);//上升沿时进行赋值 按照节拍的动作来
i_addr <= i[7:0];//这里阻塞赋值 非阻塞赋值都可以
i_data <= i[7:0];
end
i_addr <= 0;
i_data <= 0; end
endtask 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. css样式--表格

    1.示例源码 <!DOCTYPE html><html><head><meta charset="utf-8"> <title ...

  2. 在实训时做的项目出现的ajax json数据传送的问题

    json数据在前后端数据交互的时候非常常见,但是大部分人对json都么有系统的学习过,所以就会出现一些很简单的问题却要非很大劲去解决. 在用json传递数据的时候属性必须用双引号括住,一般如果在进行字 ...

  3. 【BZOJ1009】GT考试(KMP算法,矩阵快速幂,动态规划)

    [BZOJ1009]GT考试(KMP算法,矩阵快速幂,动态规划) 题面 BZOJ 题解 看到这个题目 化简一下题意 长度为\(n\)的,由\(0-9\)组成的字符串中 不含串\(s\)的串的数量有几个 ...

  4. 【Luogu3919】可持久化数组(主席树)

    题面戳我 题解 放一个板子在这里 用主席树维护一下每个版本就可以啦... #include<iostream> #include<cstdio> #include<cst ...

  5. Spring Boot Security 基于角色的访问控制

    @Override protected void configure(HttpSecurity http) throws Exception { //如果配置为需要登录 if (needLogin) ...

  6. 如何使用mysqldump备份数据库

    一.背景 在开发项目中,数据库是核心资产.除了做主备冗余增加可靠性外,定期备份数据也是必须的. 使用mysqldump备份数据具有操作简单,备份和恢复时间短的优点(mysqldump备份数据生成的是批 ...

  7. 在hive下使用dual伪表

    [hive@nn1 ~]$ touch dual.txt[hive@nn1 ~]$ echo 'X' >dual.txt hive> load data local inpath '/ho ...

  8. mysql压缩包安装方式

    从官网https://dev.mysql.com/downloads/mysql/上下载mysql-5.6.31-winx64.zip,将其解压,接下来的安装是通过命令来安装MySQL数据库的.(P. ...

  9. API网关系列之Kong的介绍以及安装

    一.API网关产生背景 在微服务的架构中,一个大的应用会被拆分成多个小的单一的服务提供出来,这些小的服务有自己的处理,有自己的数据库(也可以共用),也许语言也是不一样的,他们可以部署在一个或多个服务器 ...

  10. gnuplot画图中文标注相关问题

    gnuplot是一个基于命令行的开源跨平台画图工具包,画图功能非常丰富.不过最近在考虑如何在gnuplot图中添加中文标注的过程中遇到了一些问题,记录如下. gnuplot支持多种的输出格式,比如pn ...