一个简单的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 ...
随机推荐
- 你好,C++(5)如何输出数据到屏幕、从屏幕输入数据与读写文件?
2.2 基本输入/输出流 听过HelloWorld.exe的自我介绍之后,大家已经知道了一个C++程序的任务就是描述数据和处理数据.这两大任务的对象都是数据,可现在的问题是,数据不可能无中生有地产生 ...
- Extjs之遍历Store内的数据
Store作为数据的载体,通过下面的方法可以获得Store内的数据; Ext.define('haomlGeimjTongjGrid_store_data', { extend: 'Ext.data. ...
- php中的双引号和单引号的区别?
1.单引号里面的字符串直接全部转义,原样输出(即:单引号内部的变量不会被执行) 2.双引号里面的变量会被替换(即:变量会执行) 例如:$name = 'hello';echo "the $n ...
- $_GLOBALS超全局数组和global定义的全局变量区别?
全局变量:主程序中定义的变量(函数外部),只能在主程序中使用,在函数内部不能调用 背景:解决在函数内部调用全局变量的问题 解决方法: 1.在函数内部声名全局变量 <?php public $va ...
- PHP错误报告级别及调整方法
运行PHP脚本时,PHP解析器会尽其所能能报告它遇到的问题.在PHP中错误报告的处理行为,都是通过PHP的配置文件php.ini中有关的配置指令确定的.另外PHP的错误报告有很多种级别,可以根据不同的 ...
- Apache 相关配置
1. HTTP缓存设置 ExpiresActive On #ExpiresDefault 设置全局缓存时间,将导致一些get请求不能连续执行 #ExpiresDefault "access ...
- A记录、CNAME记录、MX记录
A 记录(Address) (一句话:用来指定域名和服务器IP的对应关系) 是用来指定主机名(或域名)对应的IP地址记录.用户可以将该域名下的网站服务器指向到自己的web server上.同时也可以 ...
- Retrofit2.0+OkHttp设置统一的请求头(request headers)
有时候要求Retrofit2的接口中每个都要增加上headers,又不想做重复的事情,可以使用这种方法来为每个request请求都设置上相同的请求头header. 修改请求头request heade ...
- 转:Node.js异步处理CPU密集型任务的新思路
原文来自于:http://www.infoq.com/cn/articles/new-idea-of-nodejs-asynchronous-processing-tasks?utm_source=i ...
- Linux&shell之如何控制脚本
写在前面:案例.常用.归类.解释说明.(By Jim) Ctrl+C组合键可以生产SIGINT信号Ctrl+Z组合键生产SIGTSTP信号,停止进程后程序仍然留在内存中,能够从停止的地方继续运行. 捕 ...