计数器,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. Android 系统Action大全

    常用Action说明: String ADD_SHORTCUT_ACTION 动作:在系统中添加一个快捷方式.. “android.intent.action.ADD_SHORTCUT” String ...

  2. javascript利用canvas解析图片中的二维码

    本方法两种应用方式:一种使用canvas解析本站图片中的二维码,canvas有同源策略限制,只能处理本站图片.另一种处理文件选择中的图片二维码. 第一种使用场景可以换成像微信中一样,长按图片识别二维码 ...

  3. 如何设置网站的robots.txt

    做过网站优化的朋友都知道,搜索引擎蜘蛛爬行抓取网站时首先会去访问根目录下的robots.txt文件,如果robots文件存在,则会根据robots文件内设置的规则进行爬行抓取,如果文件不存在则会顺着首 ...

  4. java项目里classpath具体指哪儿个路径

    一.classpath路径指什么 只知道把配置文件如:mybatis.xml.spring-web.xml.applicationContext.xml等放到src目录(就是存放代码.java文件的目 ...

  5. Mongoose 入门以及实现数据的增、删、改、查

    mongoose 介绍 Mongoose 是在 node.js 异步环境下对 mongodb 进行便捷操作的对象模型工具.Mongoose 是 NodeJS 的驱动,不能作为其他语言的驱动. Mong ...

  6. 数据结构Java版之基数排序(四)

    基数排序: 基数排序分为两种:第一种是LSD ,从最低位开始排序, 第二种是 MSD 从最高位开始排.这里介绍第一种LSD排序算法. 首先,我们先了解什么是基数.基数是根据具体的排序情况而定的,比如我 ...

  7. 使用List中remove方法时需要注意的问题

    String str1 = new String("1"); String str2 = new String("2"); String str3 = new ...

  8. Java 内存排查,慢慢收集总结

    Java堆外内存排查小结: https://mp.weixin.qq.com/s?__biz=MzA4MTc4NTUxNQ==&mid=2650518612&idx=2&sn= ...

  9. Mysql 查询今天,这周,这个月,今年的数据

    今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ...

  10. Cookie的Secure属性和HttpOnly属性

    基于安全的考虑,需要给cookie加上Secure和HttpOnly属性,HttpOnly比较好理解,设置HttpOnly=true的cookie不能被js获取到,无法用document.cookie ...