个简单的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++之内部类(嵌套类)与外部类及友元

    [转]http://baike.baidu.com/link?url=Md223wQoT5s-3cZ5xRnj1pGmvm310DKAuh-HDrcEdc2l24rwobHrdEc_Mi4Z3BGP0 ...

  2. 【USACO 3.2.1】阶乘

    [描述] N的阶乘写作N!表示小于等于N的所有正整数的乘积.阶乘会很快的变大,如13!就必须用32位整数类型来存储,70!即使用浮点数也存不下了.你的任务是找到阶乘最后面的非零位.举个例子,5!=1* ...

  3. UVA 10285 - Longest Run on a Snowboard (记忆化搜索+dp)

    Longest Run on a Snowboard Input: standard input Output: standard output Time Limit: 5 seconds Memor ...

  4. ONVIF Event消息解析(How to work with gSoap)

    Prepare Requirements ONVIF Event gSoap reference ONVIF Specification 问题描述 Event是ONVIF核心规范中一块, 文档解释了如 ...

  5. KB006: CSS 框模型( Box module )

    框和布局 在 KB005: CSS 层叠 中已经介绍了 CSS 的重要之处.CSS 可以说是页面表现的基础, CSS 可以控制布局,控制元素的渲染. 布局是讲在电影画面构图中,对环境的布置.人物地位的 ...

  6. golang io需要牢记的几个点

    对于Reader比较麻烦需要记住以下: When Read encounters an error or end-of-file condition after successfully readin ...

  7. JQUERY1.9学习笔记 之基本过滤器(十一) 奇数选择器

    奇数选择器jQuery( ":odd" ) 例:匹配表格的奇数行. <!DOCTYPE html><html lang="zh-cn"> ...

  8. DeDe友情链接

    图片 {dede:flink row="} [field:link /] {/dede:flink} 文字 {dede:flink row="} [field:link /] {/ ...

  9. codevs 1198 国王游戏

    传送门 题目描述 Description 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n位 ...

  10. VM虚拟机上 实现CentOS 6.X下部署LVS(DR)+keepalived实现高性能高可用负载均衡

    一.简介 LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一. ...