计数器,FPGA设计中最常用的设计,然而有些地方需要多加注意。

一、勿要多计

  打算计10下,所以我计数器就写计到10:cnt==10,程序如下所示。

1、设计文件

 module jsq
//========================< 端口 >==========================================
(
input wire clk ,
input wire rst_n ,
input wire en ,
output reg [ :] cnt
);
//========================< 信号 >==========================================
reg en_flag ;
wire add_cnt ;
wire end_cnt ; //========================< 程序 >==========================================
always @(posedge clk or negedge rst_n) begin
if(!rst_n) begin
en_flag <= ;
end
else if(en) begin
en_flag <= ;
end
else if(end_cnt) begin
en_flag <= ;
end
end always @(posedge clk or negedge rst_n) begin
if(!rst_n)
cnt <= ;
else if(add_cnt) begin
if(end_cnt)
cnt <= ;
else
cnt <= cnt + ;
end
end assign add_cnt = en_flag;
assign end_cnt = add_cnt && cnt== ; //我想计10下 endmodule

2、仿真文件

 `timescale 1ns/1ps  //时间精度
`define Clock //时钟周期 module jsq_tb; //========================< 端口 >==========================================
reg clk ; //时钟,50Mhz
reg rst_n ; //复位,低电平有效
reg en ;
wire [ :] cnt ; //==========================================================================
//== 模块例化
//==========================================================================
jsq u_jsq
(
.clk (clk ),
.rst_n (rst_n ),
.en (en ),
.cnt (cnt )
); //==========================================================================
//== 时钟信号和复位信号
//==========================================================================
initial begin
clk = ;
forever
#(`Clock/) clk = ~clk;
end initial begin
rst_n = ; #(`Clock*+);
rst_n = ;
end //==========================================================================
//== 设计输入信号
//==========================================================================
initial begin
en = ;
#(`Clock*+); //初始化完成
en = ;
#(`Clock*);
en = ;
#(`Clock*);
$stop;
end endmodule

3、Modelsim仿真图像

  观察图像可以看到,计数器 cnt 计到了 cnt==10 这里,可是当我仔细数数时却发现,计数是从 0 开始计的,从 0 到 10,所以实际计了 11 下!和我之前写代码时脑中所想不一致!所以,如果只想计10下,那实际写代码应该写 9 才对。

  总结:计数器想计 n 下,那写代码只能写 cnt==n-1。

二、勿要少记

  数据 data 和数据使能 data_en 同时来,我想数一下到底来了多少个数据。

1、代码设计

 module jsq
(
input wire clk ,
input wire rst_n ,
input wire [ :] data ,
input wire data_en ,
output reg [ :] cnt
); always @(posedge clk or negedge rst_n) begin
if(!rst_n) begin
cnt <= ;
end
else if(data_en) begin
cnt <= cnt + ;
end
else begin
cnt <= ;
end
end endmodule

2、仿真设计

 `timescale 1ns/1ps  //时间精度
`define Clock //时钟周期 module jsq_tb; //========================< 端口 >==========================================
reg clk ; //时钟,50Mhz
reg rst_n ; //复位,低电平有效
reg [ :] data ;
reg data_en ;
wire [ :] cnt ; //==========================================================================
//== 模块例化
//==========================================================================
jsq u_jsq
(
.clk (clk ),
.rst_n (rst_n ),
.data (data ),
.data_en (data_en ),
.cnt (cnt )
); //==========================================================================
//== 时钟信号和复位信号
//==========================================================================
initial begin
clk = ;
forever
#(`Clock/) clk = ~clk;
end initial begin
rst_n = ; #(`Clock*+);
rst_n = ;
end //==========================================================================
//== 设计输入信号
//==========================================================================
initial begin
data_en = ;
data = ;
#(`Clock*+); //初始化完成 data_en = ;
data = ;
#(`Clock);
data = ;
#(`Clock);
data = ;
#(`Clock);
data = ;
#(`Clock);
data = ;
#(`Clock);
data = ;
#(`Clock);
data = ;
#(`Clock);
data = ;
#(`Clock);
data = ;
#(`Clock);
data = ;
#(`Clock);
data = ;
data_en = ; #(`Clock*);
$stop;
end endmodule

3、Modelsim仿真图像

  观察图像可以看到,计数器 cnt 计到了 cnt==10 这里,而我的 data_en 确实是维持了 10 个周期的。这种情况下,cnt 计到多少就是多少,第0下是不作数的。如果按照上面的情况,以为真实计数是 10-1=9下,反而是错的了。当然如果其他信号需要用到 cnt来搞事情,那还是需要写 cnt==n-1的,这就又回到上面第一种情况了。

  此外 cnt 较 data_en 延后了一个周期,当 data_en 都拉低了,而后 cnt 才计到 cnt==10,这是时序逻辑的特点,并非出错。

  总结:计数器计算一段波形的持续时间,最终即到 cnt==n,那波形时间就是n,不需要 -1。

Windows状态栏图标显示异常的更多相关文章

  1. Win32项目生成的程序exe图标显示异常的问题

    问题 如图: 用VS2013生成exe执行文件时发现的问题,起初以为是没添加ico图像的最小尺寸,后来查看ico并不是这个问题. Baidu.Google了半天找到原因:文件资源管理器的图标缓存bug ...

  2. PC上图标显示异常 白色框框处理方案

    步骤如下: 1.打开360安全卫士,点击图标显示异常的立即修复 2.修复完,图标就正常了 3.分析原因: 可能是我用了魔方优化大师(TweakerCube)优化了桌面快捷方式(去掉箭头)引起的,而且是 ...

  3. thinkphp使后台的字体图标显示异常

    thinkphp使后台的字体图标显示异常 相似问题 1.thinkPHP的这些图标都不显示了-CSDN论坛https://bbs.csdn.net/topics/391823415 解答: 发现在别的 ...

  4. WIN10图标显示异常

    1.打开控制面板,右上边查看方式选择边小图标显示 2.打开显示里面的自定义缩放级别 3.设置级别为125%  然后点击 应用 4.注销或者重启,然后将异常的快捷方式点击打开,就会恢复正常,至少我的是回 ...

  5. win7记事本txt图标显示异常解决方法

    链接:https://zhidao.baidu.com/question/2076205353435701108.html                                       ...

  6. WIN7下重建图标缓存(解决MFC.exe桌面图标显示异常问题)

    WIN7下重建图标缓存 使用WIN7时,MFC工程生成的应用程序图标,如果更改为自定义的ICON图标之后可能在桌面上显示的依旧是上一次的图标,改个名或换个路径都能恢复正常,说明在WIN7系统下图标的缓 ...

  7. office word excel等图标显示异常

    1.查看注册表:查看参数对应的路径被删除,计算机搜索新的文件路径更改路径即可.以此类推~ 计算机\HKEY_CLASSES_ROOT\Excel.Sheet.12\DefaultIcon 正常exce ...

  8. Windows右下角图标显示不正常

    我的win7系统,右下角图标透明,分不清哪个是哪个.点击也没有任何反应. 解决办法: 点击运行输入cmd,在命令提示符下输入下列命令即可恢复. taskkill /im explorer.exe /f ...

  9. Windows 托盘区域显示图标

    NOTIFYICONDATA structure 这个结构体包含了向通知区域(底部任务栏右下角区域,下面都称为托盘)显示的信息.需要使用函数Shell_NotifyIcon. 结构体成员 typede ...

随机推荐

  1. A*G#C001

    AGC001 A BBQ Easy 贪心. https://agc001.contest.atcoder.jp/submissions/7856034 B Mysterious Light 很nb这个 ...

  2. 自建 ca 及使用 ca 颁发证书

    创建CA: 一.安装openssl [root@localhost ~]# yum install -y openssl 二.创建CA的相关文件及目录 mkdir /opt/root_ca & ...

  3. Windows版:Nginx部署React项目并访问Spring Boot后台数据

    一, 打包react项目 1,在工作空间目录下create-react-app test-arrange 创建项目test-arrange 2,在新建的项目中写好请求与页面 3,打包, 在项目目录下 ...

  4. 声源定位之2精读《sound localization based on phase difference enhancement using deep neuarl networks》

    2.1.1 题目与摘要 1.为什么要增强IPD? The phase differences between the discrete Fourier transform (DFT) coeffici ...

  5. RabbitMQ C#客户端自动重连

    重要参考文章来源:http://gigi.nullneuron.net/gigilabs/resilient-connections-with-rabbitmq-net-client/ 参考代码:ht ...

  6. MyBatis(十):Mybatis 几种批量操作的对比

    本章主要讲解几种批量处理的用法及对别,批量处理一般用法包含以下几种: 1)普通foreach处理(没循环一次执行一次与mysql服务器交互操作),实际上也是采用的ExecutorType.SIMPLE ...

  7. vmware ubuntu16 启动蓝屏屏幕闪

    vmware ubuntu16 启动蓝屏屏幕闪 虚拟机安装了ubuntu16 desktop,没有关闭自动更新: 结果关机虚拟机时出现等5秒更新,类似win10关机更新: 再开机发现就蓝屏了,多次重启 ...

  8. ROC曲线 VS PR曲线

    python机器学习-乳腺癌细胞挖掘(博主亲自录制视频)https://study.163.com/course/introduction.htm?courseId=1005269003&ut ...

  9. supervisor配置进程

    具体配置见此页面:https://www.jianshu.com/p/ac6c84a2f415 设置开机启动:https://blog.csdn.net/xyang81/article/details ...

  10. linux删除文件的前n行

    需求描述: 今天看了一个系统的临时文件,有5.6G的大小,这个文件也没有用了,想要将大部分的文件都删除掉. 在此记录下删除的过程.删除前n行的记录. 操作过程: 对于数据量比较大的情况(本例5800万 ...