计数器,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. Linux 系统管理——系统安全及应用

    chagen -d 0 ____用户名:下次登录时必须修改密码 ctrl+R:查看历史记录 history:查看历史记录 清除历史记录: >.bash _history echo“”>.b ...

  2. YAML语法基础(K8s基础)

    对于YAML语言,网上有很多将YAML转换为JSON格式的在线转换器,以下内容都可直接验证,另外若有兴趣更深入学习YAML,可到其官方站点去学习,下面介绍的仅仅是比较常用的内容,并非YAML语法的全部 ...

  3. Spatiotemporal continuous estimates of PM2.5 concentrations in China, 2000–2016: A machine learning method with inputs from satellites, chemical transport model, and ground observations

    写在前面 首先,看完查了一下这个期刊 Environment International,是1区的文章,影响因子7.297!不愧是优秀的期刊,文章质量很高,内容很丰富. 内容 主要是PM25反演,利用 ...

  4. DELPHI开始支持LINUX DOCKER

    DELPHI开始支持LINUX DOCKER 本方翻译自Marco Cantu的文章. 在过去的几年中,将服务器端解决方案(实际上是任何类型的应用程序)部署到轻量级容器而不是物理机器或虚拟机已经变得越 ...

  5. Mac OSX下增加TCP连接数

    查看 max files: $ sysctl -a | grep files kern.maxfiles = 12288 kern.maxfilesperproc = 10240 修改: $ sudo ...

  6. 修改 ulimit 时 需要注意的问题

  7. Linux文件系统被占用,磁盘使用量与实际不一致【转】

    用lsof检查后才发现原因是,有文件被删除,而进程还活着,因而造成还占用空间的现象 [root@/]# lsof |grep delete 根据lsof列出的进程号,kill这些进程后,空间就释放出来 ...

  8. HTTPS原理分析

    引言 随着互联网安全意识的普遍提高,对安全要求稍高的应用中,HTTPS的使用是很常见的,所以,无论是即时通讯IM还是其它应用,在网络安全意识增强的今天,很多场景下使用HTTPS是肯定没错的.对于即时通 ...

  9. tp的增删改查的结果判断?

    参考: https://blog.csdn.net/qq_27930635/article/details/78853908 总之, 要用 全等 来判断, = = = 注意, 不要再用 mysql_a ...

  10. 支付宝小程序开发——获取位置API没有城市区号的最佳处理方案

    前言: 需要对城市区号进行判断,但是支付宝小程序提供的my.getLocation() API返回的数据中只有6位的城市行政代码,诸如:深圳(440300),并没有区号(0755),那么怎么办呢? 需 ...