个简单的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. sql注释

    一般使用数据库客户端软件是navicat,上面写sql用的注释符号一般是“#”或者“/* */”,比如: #我是注释 /*我是注释*/ 记得之前看别人sql里用“--”作为注释符号,结果我今天也试了一 ...

  2. STL中的set容器

    #include <iostream> #include <set> using namespace std; int main() { set<int> s; s ...

  3. 记一次npapi插件无窗口(windowless )化下的妙巧思路然后解决问题的超爽体验过程

     1:问题 集成第三方的ocx控件,用来做pdf显示和签名.如果用窗口化插件做,很简单,加载ocx到窗口中,再显示到网页即可.但这样有个缺点.就是这个窗口会浮动在网页元素的上面,导致遮挡住网页元素.比 ...

  4. UVA 10254 - The Priest Mathematician (dp | 汉诺塔 | 找规律 | 大数)

    本文出自   http://blog.csdn.net/shuangde800 题目点击打开链接 题意: 汉诺塔游戏请看 百度百科 正常的汉诺塔游戏是只有3个柱子,并且如果有n个圆盘,至少需要2^n- ...

  5. 各种开源协议介绍 BSD、Apache Licence、GPL V2 、GPL V3 、LGPL、MIT

    现今存在的开源协议很多,而经过Open Source Initiative组织通过批准的开源协议目前有58种(http://www.opensource.org/licenses /alphabeti ...

  6. Build Android-x86 ICS 4 Virtualbox from Google Virtualbox Target and Intel Kernel 编译体验

    最近一直在研究android源码的编译,应该说研究的很辛苦,最难的是下源码,总是不停的断掉,最后感谢公司的高网速,找到方法后12G的源码只花了1个小时就下完了. 参考以下网址:http://softw ...

  7. PHP添加、更新solr索引

    <?php $options = array ( 'hostname' => 'localhost', 'port' => '8080', 'path'=>'solr/help ...

  8. 我的vimrc配置

    fankcoder@fankcoder:~$ cat ~/.vimrclet Tlist_Auto_Highlight_Tag=1 let Tlist_Auto_Open=1 let Tlist_Au ...

  9. Flask 快速入门

    最简单的flask程序 from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return ...

  10. Rotate List 面试题

    今天做了leetcode的Rotate List,刚开始头脑不清楚,写的乱七八糟的,后来改了下,提交了,能过,把代码贴出来. 做题的时候头脑要清楚,我刚开始做完的时候才发现我把向左向右移动弄反了,后来 ...