找回密码
 注册
关于网站域名变更的通知
查看: 286|回复: 1
打印 上一主题 下一主题

关于单位时间数脉冲Verilog程序 

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-7-16 11:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

9 [. x6 P9 N% c% R% v4 G$ D   各位大神好,小弟最近刚刚入手Verilog,最近写了小程序。要实现的功能就是在单位时间500ms内数st信号的边沿数目,类似M法测电机转速。
( a  C: t! v; B* K3 d    添加到工程中起初会把,SYS_ret信号锁到CLKBUF,会报错。
+ _; f0 R3 o) ~) S7 q! F    网上 查找,加限制条件 /* synthesis syn_noclockbuf = 1 */,会通过,但是程序烧进去之后运行一段时间会出现异常,输出I/O会乱跳边。
% s8 x. k) ?+ B9 b3 y/ M4 h    以下是我写的程序,请各位大神指导3 S. Q( V6 C3 A( j' P2 S' c& h* V
module MIP_WD(sys_rst,clk,st,en,status,rst);
( L1 g! [0 R5 ^5 a( E+ x& ?& O0 O+ h4 Q! F: e  N! Y
     input        sys_rst;6 n- |8 b& h" m1 ~+ ]
     input        clk;  //10k
& ~9 J2 B, O4 G: a/ i* h' }6 \    input        st;  //喂狗: `/ Q; n4 y+ E! P; Y5 y
    input        en;  //1=Enable;0=Disable
. U; J. V, e. Y& m: C+ x1 p- t    input   status;$ v* n9 F5 y3 n) e' P9 o
    output        rst; //0=Active& m. M! p. N% M  U( t( A6 i7 {
        
& Y6 E. c. @% b: _7 I2 n    parameter TIME_ACTIVE        =13'd5000; //单位100us7 |/ U1 ]7 w$ r9 U0 A
    parameter CNT_FEEDOG        =13'd10;   //单位100us
4 U0 f! H( y7 b. ^% B1 [* e" I1 T        
6 v3 ^( G6 K' S; U9 q. o) S- ^0 n, c    reg                [13:0]Cnt_Timer;      //500ms定时器计数器+ \, i/ U5 q) Y: c$ c1 E
    reg                [13:0]Cnt_Feedog;     //喂狗次数计数器$ c) i2 D+ C& Q0 G* b) k1 i
   reg                wdo;% g  Q0 o& D/ }: U
    reg     sig_r0;( u; {) f% o$ I3 l- I4 X: P, z1 @
    reg     sig_r1;$ V7 c1 Y. L" ^3 s; o8 e" f  ]9 J
    wire    both_edge;
6 H* X) d# H% v# F
1 s2 o5 U: R; U    //检测DSP喂狗时,发送过来信号的边沿
# ~8 X9 N3 c1 B        always @ (negedge sys_rst or posedge clk)
, ~% `" y3 B5 X% v) v    if (!sys_rst) begin   r/ h2 m/ H2 A" P9 _! M0 O+ ~, C
        sig_r0 <= 1'b0;
& d: H3 V5 {* r8 i! n        sig_r1 <= 1'b0;! D, D7 l/ M5 X- @
    end else begin
+ y: S6 @! f; K- h( Q7 v2 q* r2 a1 q        sig_r0 <= st;8 r1 \4 O* l0 @( B( M
        sig_r1 <= sig_r0;
9 X- C$ X% `2 b8 c# H" l2 M    end ' R2 E; I! {/ Q1 B' z; y8 k
    assign both_edge = sig_r1 ^ sig_r0; //(~sig_r1) & (sig_r0);//sig_r1 ^ sig_r0;
' g# s2 l' ?8 X. d2 O5 f4 _2 E           
: S. y. ^% d- p  r( x4 L1 i        //500ms内对DSP喂狗次数进行检测,如果小于等于CNT_FEEDOG,则认为DSP死机8 \& r7 n* y) N- H9 ^+ z6 h
    //判定死机后发送周期为1的方波,复位DSP
. f# L6 T( \5 Q! p- r    always@(negedge sys_rst or posedge clk)% C# X  n6 b' I2 A( p) _
        begin
) R8 p3 I/ O* H# r         if(!sys_rst)0 E' _9 w3 I& J  B" }  f
           begin
# h8 C% S" W* n0 R* e/ H2 T4 Y3 f3 y; }                   wdo<=1;
% X8 b. H& _5 H& o, Z           Cnt_Timer<=0;   
5 u; N  x8 k1 H' b           Cnt_Feedog<=0;     # q9 J* Y( J! c+ P2 Y6 x6 P4 c
              end
/ J+ d2 m" M" d1 q# A          else
: h8 U1 W7 a- C' z3 H, N! W$ v7 r         begin
7 b  {9 [* C& ~5 P! C; @3 L# u3 D          if(Cnt_Timer>=TIME_ACTIVE)       //定时器溢出 2 j" j7 ?: C3 \0 D. v  \8 u: B2 V
                     begin1 c3 r. ?) \1 t0 M
                        Cnt_Timer<=0;
7 l# R, q: y4 U                        Cnt_Feedog<=0;         
) Y$ U  |7 a: m* V/ H                        if(Cnt_Feedog<=CNT_FEEDOG && status) //定时器溢出时,判断喂狗次数,如果小于预
( g& ?# {- @4 o4 a8 \* u                        wdo<=~wdo;            //wdo的初值初始化为了1,通过取反即可产生周期为1的方波信号  2 `+ _, @* y; N& W& g/ A& `* A
             end  //end of 定时器溢出   ( o" o/ M: B# r3 M+ K! K, ^9 m
          else
3 H- D7 N1 J% ~% A+ x1 X7 I             begin( {% J4 }' W: u5 ~
                Cnt_Timer<=Cnt_Timer+1;       //定时器没有溢出的情况下,定时计数器自加
- a' L; L. E; m* w+ R                if(both_edge)                 //检测到DSP发送过来喂狗的边沿信号时0 }/ J+ V: X$ U2 ]+ b
                   Cnt_Feedog<=Cnt_Feedog+1;  //喂狗计数器自加4 W7 H+ o: @5 P6 U& u
             end
% B* b$ C3 v1 A, z. z3 k! ?      end - Q/ ?( j4 p3 K; a
        end ) g2 w) d. d" P  P* `! O
/ F/ p) H& t* W+ W
        assign rst=        (!sys_rst)?0:
7 K9 s# C' O8 k" _# `                                (!en)?1:& {: O2 j/ K% g& E& e1 w0 Q
                                 wdo;/ `9 S1 A  Y- L

. N+ h: ^/ \& b5 Sendmodule
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-12 01:45 , Processed in 0.125000 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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