个简单的Verilog计数器模型

功能说明:

  • 向上计数
  • 向下计数
  • 预装载值

一、代码

1.counter代码(counter.v)

 module counter(
input clk,
input rstn,
input go, //使能启动信号
input [:] data, //预装载数据
input load, //预装载信号
input dir, //计数方向 output reg [:] cnt, //计数输出值
output overfloat, //向上溢出
output downfloat //向下溢出
); reg [:] cnt_next;
reg [:] data_shadow; always@(posedge clk,negedge rstn)
begin
if(!rstn)
data_shadow <= 'b0;
else
data_shadow <= data;
end always@(posedge clk,negedge rstn)
begin
if(!rstn)
cnt <= 'b0;
else
cnt <= cnt_next;
end always@(*)
begin
if(go)
begin
if(load && overfloat)
cnt_next = 'b0;
else if(load && downfloat)
cnt_next = data_shadow;
else
if(dir)
cnt_next = cnt + 'b1;
else
cnt_next = cnt - 'b1;
end
else
cnt_next = cnt;
end assign overfloat = (dir && (cnt == data_shadow));
assign downfloat = (!dir && (cnt == 'b0)); endmodule

2、testbench(counter_tb.v)

 module counter_tb;

 reg             clk;
reg rstn;
reg go;
reg [:] data;
reg load;
reg dir; wire [:] cnt;
wire overfloat;
wire downfloat; initial
begin
clk = ; rstn = ;
repeat() @(posedge clk);
rstn = ;
repeat() @(posedge clk);
rstn = ; go = ;
data = 'b0000;
load = ;
dir = ; @(posedge clk);
data = 'b0000;
load = ;
dir = ;
go = ; repeat() @(posedge clk);
data = 'b0000;
load = ;
dir = ;
go = ; repeat() @(posedge clk);
data = 'b1001;
load = ;
dir = ;
go = ; repeat() @(posedge clk);
data = 'b1001;
load = ;
dir = ;
go = ; repeat() @(posedge clk);
$finish;
end always # clk = ~clk; counter u_counter(
.clk(clk),
.rstn(rstn),
.go(go),
.data(data),
.load(load),
.dir(dir),
.cnt(cnt),
.overfloat(overfloat),
.downfloat(downfloat)
); endmodule

二、仿真结果

向下计数

向上计数

预装载向下计数

预装载向上计数

一个简单的Verilog计数器模型的更多相关文章

  1. 一个简单例子:贫血模型or领域模型

    转:一个简单例子:贫血模型or领域模型 贫血模型 我们首先用贫血模型来实现.所谓贫血模型就是模型对象之间存在完整的关联(可能存在多余的关联),但是对象除了get和set方外外几乎就没有其它的方法,整个 ...

  2. 使用队列queue实现一个简单的生产者消费者模型

    一.生产者消费者模型 我们去超市商店等地购买商品时,我们大部分人都会说自己是消费者,而超市的各大供货商.工厂等,自然而然地也就成了我们的生产者.如此一来,生产者有了,消费者也有了,那么将二者联系起来的 ...

  3. 一个简单的js计数器(web储存)。

    <span id="countspan"></span> <a href="#" onclick="countNumbe ...

  4. three.js 制作一个简单的圆柱体模型

    <!DOCTYPE html> <html lang="en"> <head> <title>three.js webgl - or ...

  5. 2-1. Creating a Simple Model 使用图形界面设计器创建一个简单的模型

    一.创建新项目 二.添加模型文件 三.添加完后,在设计面板空白处右击,创建一个实体 实体集(B) 这里的名称会是对应的数据库表名称!!! ,开始不知道这是什么,生成后才知道表名是这个,以后注意点就行. ...

  6. 简单的Verilog测试模板结构

    这里记录一下曾经用到的简单的测试模板,如下所示: //timescale `timescale 1ns/1ns module tb_module(); //the Internal motivatio ...

  7. Python创建一个简单的区块链

    区块链(Blockchain)是一种分布式账本(listributed ledger),它是一种仅供增加(append-only),内容不可变(immutable)的有序(ordered)链式数据结构 ...

  8. 《Entity Framework 6 Recipes》翻译系列 (3) -----第二章 实体数据建模基础之创建一个简单的模型

    第二章 实体数据建模基础 很有可能,你才开始探索实体框架,你可能会问“我们怎么开始?”,如果你真是这样的话,那么本章就是一个很好的开始.如果不是,你已经建模,并在实体分裂和继承方面感觉良好,那么你可以 ...

  9. iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序

    iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序 一.plist文件和项目结构图 说明:这是一个嵌套模型的示例 二.代码示例: YYcarsgroup.h文件代码: // // YYcar ...

随机推荐

  1. 你好,C++(9)坐216路公交车去买3.5元一斤的西红柿——C++中如何表达各种数值数据 3.3 数值数据类型

    3.3  数值数据类型 从每天早上睁开眼睛的那一刻开始,我们几乎每时每刻都在与数字打交道:从闹钟上的6点30分,到上班坐的216路公共汽车:从新闻中说的房价跌到了100元每平米到回家买菜时的西红柿3. ...

  2. Java获取昨天的时间

    Calendar   cal   =   Calendar.getInstance();  cal.add(Calendar.DATE,   -1);  String yesterday = new ...

  3. 你真的了解console吗?

    对于前端开发者来说,在开发过程中需要监控某些表达式或变量的值的时候,用 debugger 会显得过于笨重,取而代之则是会将值输出到控制台上方便调试.最常用的语句就是console.log(expres ...

  4. JavaScript-学习一

    JavaScript 对大小写是敏感的. 当编写 JavaScript 语句时,请留意是否关闭大小写切换键. 函数 getElementById 与 getElementbyID 是不同的. 同样,变 ...

  5. jQuery 做好七件事帮你提升jQuery的性能

    1. Append Outside of Loops 凡是触及到DOM都是有代价的.如果你向DOM当中附加大量的元素,你会想一次性将它们全部附加进来,而不是分多次进行.当在循环当中附加元素就会产生一个 ...

  6. MVC视图中Html.DropDownList()辅助方法的使用

    我们先在控制器中准备好一个SelectList类型,然后通过ViewBag.List传入视图中.SelectList类型是ASP.NET MVC专门为列表有关的HTML辅助方法提供选项的,例如,Htm ...

  7. memcpy函数的使用方法

    c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中. 1.函数原型 void *memcpy(void * ...

  8. poj Pie

    http://poj.org/problem?id=3122 #include<cstdio> #include<cstring> #include<cmath> ...

  9. JAVA之序列化A

    package SwingGui.sky.com; import java.io.*; public class GameSaverTest { public static void main(Str ...

  10. 科通芯城:用B2C的方式做B2B

    上线两年,科通芯城的年收入有望突破50亿,一个传统分销商用2c的方式做b2b,也能进行自我革命. 文 | 王海天 这个网站的名字叫科通芯城,于2011年下半年在深圳正式上线,卖的商品是IC元器件,包括 ...