一个简单的Verilog计数器模型
一个简单的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计数器模型的更多相关文章
- 一个简单例子:贫血模型or领域模型
转:一个简单例子:贫血模型or领域模型 贫血模型 我们首先用贫血模型来实现.所谓贫血模型就是模型对象之间存在完整的关联(可能存在多余的关联),但是对象除了get和set方外外几乎就没有其它的方法,整个 ...
- 使用队列queue实现一个简单的生产者消费者模型
一.生产者消费者模型 我们去超市商店等地购买商品时,我们大部分人都会说自己是消费者,而超市的各大供货商.工厂等,自然而然地也就成了我们的生产者.如此一来,生产者有了,消费者也有了,那么将二者联系起来的 ...
- 一个简单的js计数器(web储存)。
<span id="countspan"></span> <a href="#" onclick="countNumbe ...
- three.js 制作一个简单的圆柱体模型
<!DOCTYPE html> <html lang="en"> <head> <title>three.js webgl - or ...
- 2-1. Creating a Simple Model 使用图形界面设计器创建一个简单的模型
一.创建新项目 二.添加模型文件 三.添加完后,在设计面板空白处右击,创建一个实体 实体集(B) 这里的名称会是对应的数据库表名称!!! ,开始不知道这是什么,生成后才知道表名是这个,以后注意点就行. ...
- 简单的Verilog测试模板结构
这里记录一下曾经用到的简单的测试模板,如下所示: //timescale `timescale 1ns/1ns module tb_module(); //the Internal motivatio ...
- Python创建一个简单的区块链
区块链(Blockchain)是一种分布式账本(listributed ledger),它是一种仅供增加(append-only),内容不可变(immutable)的有序(ordered)链式数据结构 ...
- 《Entity Framework 6 Recipes》翻译系列 (3) -----第二章 实体数据建模基础之创建一个简单的模型
第二章 实体数据建模基础 很有可能,你才开始探索实体框架,你可能会问“我们怎么开始?”,如果你真是这样的话,那么本章就是一个很好的开始.如果不是,你已经建模,并在实体分裂和继承方面感觉良好,那么你可以 ...
- iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序
iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序 一.plist文件和项目结构图 说明:这是一个嵌套模型的示例 二.代码示例: YYcarsgroup.h文件代码: // // YYcar ...
随机推荐
- 【USACO 1.4.3】等差数列
[题目描述] 一个等差数列是一个能表示成a, a+b, a+2b,..., a+nb (n=0,1,2,3,...)的数列. 在这个问题中a是一个非负的整数,b是正整数.写一个程序来找出在双平方数集合 ...
- storm接入metaq时类不兼容错误 无法初始化MonitorLog
在实际的项目中,需要storm从metaq中读取数据,一开始就有日志问题,查到是storm/lib中的log4j-over-slf4j和slf4j-api.jar包的不兼容导致的,这些日志包使用时必须 ...
- 如何利用PowerPoint2013制作阶梯流程图?
制作阶梯流程图有哪些窍门呢?下面我们一起来看看吧: ①启动PowerPoint2013,单击菜单栏--插入--形状,选择方角矩形,在图中画出来. ②画好矩形,摆放到合适的位置,如下图所示. ③然后再次 ...
- Memcached-1.4.4启动参数——手动设置chunk大小的上限
最近在看memcached的源代码,源码包是memcached-1.4.22,一开始看memcached.c的main函数的时候发现了和1.2.8的不同之处. 可能在1.4.22版本之前就已经添加了这 ...
- PHP之intval()
Title:PHP之intval() --2014-02-26 13:57 <?php ...... $a='0x2720616e6420313d3220756e696f6e2073656c6 ...
- Scala开启之旅
嘿嘿,公司最近需要测试SPARK性能,赶上了.. 那LUA之后,SCALA也简单看看,,, 其实,我三月时买了本129元的SPARK的书,,全国只那一本哈. package com.hengheng. ...
- elk 发送zabbix告警
- 【模拟】XMU 1054 Hacker
题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1054 题目大意: 多组数据,n=0结束.给定n(n<=1 000 000)和n个 ...
- 关于oledb对Excel的读取
这两天项目需求要检索excel的内容,于是就研究了一下,话不多说,我就直接贴代码1.首先是连接excel. public DataTable SearchSheetToDT(string strSea ...
- cppunit官方文档浅析
使用doxygen生成官方文档 cppunit使用了doxygen作为它的文档建设工具,所以我们要找的“官方文档”,其实就在cppunit的代码里面. 请先参考博文<下载doxygen>( ...