搜索
bottom↓
回复: 6

麻烦指点一下Verilog写的可清零计数器程序错误

[复制链接]

出390入22汤圆

发表于 2023-5-31 20:51:27 | 显示全部楼层 |阅读模式
本帖最后由 liudingding 于 2023-5-31 22:11 编辑

Verilog只知道点毛而不知皮,不要笑话我不懂,
Quartus13,EPM240,写了个可清零计数器,时钟20M,LED几秒钟闪烁一次,有些不规律,除掉清零部分程序,LED闪烁极快的,麻烦指点一下怎么改,
我的本意是计数器计数到10M(10M=0x989680,二进制24位),清零,重新计数,

reg [23:0]jz;                  
always @(posedge ckz or negedge l8)
begin                       
if(ckz)   jz[23:0]<=jz[23:0]+1;  
else      jz[23:0]<=0;
end

wire    l8;
assign l8=(jz[23:0]==10000000)?0:1;

assign led=jz[20];

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入90汤圆

发表于 2023-5-31 22:53:45 | 显示全部楼层
l8直接用jz[23]取反就行了,计数的时候先判断一下l8再加1

出0入442汤圆

发表于 2023-6-1 01:03:18 来自手机 | 显示全部楼层
一般的,verilog我记得复位要写到前面。此外,逻辑的组合逻辑不应直接作为异步复位输入,这会带来毛刺并会造成意外的复位。

出390入22汤圆

 楼主| 发表于 2023-6-1 08:19:24 | 显示全部楼层
wye11083 发表于 2023-6-1 01:03
一般的,verilog我记得复位要写到前面。此外,逻辑的组合逻辑不应直接作为异步复位输入,这会带来毛刺并会 ...
(引用自3楼)

谢谢啊,复位在前正常了,你说的“逻辑的组合逻辑不应直接作为异步复位输入”我都不知什么意思,我说了,我只知道毛,而不知皮,

出0入25汤圆

发表于 2023-6-1 08:34:10 | 显示全部楼层
wire ckz;
wire led;
wire l8;
reg [23:0]jz;
always @(posedge ckz or negedge l8)
    begin                       
    if(!l8)
        jz <= 24'd0;
    else
        jz <= jz + 1'b1;  
    end

assign l8 = jz != 24'd10000000;

assign led = jz[20];

出0入22汤圆

发表于 2023-6-2 20:13:54 | 显示全部楼层
本帖最后由 zxq6 于 2023-6-2 20:18 编辑

我一般这么写的,更接近c语言的理解,运行正常。
我属于野生V程序猿,也没考究过资源占用和运行效率的情况。
  1. `timescale 1 ps / 1 ps
  2. module dbgLed(
  3.                 input    wire      sysClk,//100Mhz,10ns
  4.                
  5.                 output reg         [11:0]  led
  6.         );

  7. reg [31:0] ledTimer;
  8. always @ (posedge sysClk)begin
  9.         if(ledTimer>=100_000_000)begin
  10.                 ledTimer<=1'b0;
  11.         end
  12.         else begin
  13.                 ledTimer<=ledTimer+1'b1;
  14.         end
  15.        
  16.         if(ledTimer==10_000_000)begin
  17.                 led<=12'hfff;
  18.         end
  19.         else if(ledTimer==60_000_000) begin
  20.                 led<=1'b0;
  21.         end
  22. end

  23. endmodule
复制代码

出0入22汤圆

发表于 2023-6-2 20:17:26 | 显示全部楼层
liudingding 发表于 2023-6-1 08:19
谢谢啊,复位在前正常了,你说的“逻辑的组合逻辑不应直接作为异步复位输入”我都不知什么意思,我说了, ...
(引用自4楼)

我的理解如下:
这个话的意思是,
jz 是模块里面的变量
l8 来源于 jz
而 i8 又作为模块的输入去影响 jz
这样蛇头咬蛇尾的方式容易出问题。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-15 18:10

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表