OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3953|回复: 2

[其他] verilog程序问题,十进制可逆计数器

[复制链接]

2

主题

6

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2022-2-2
在线时间
2 小时
发表于 2022-3-1 19:17:36 | 显示全部楼层 |阅读模式
有没有老哥知道这个 verilog 程序哪里出错了
Error (10200): Verilog HDL Conditional Statement error at Re_cont_10.v(6): cannot match operand(s) in the condition to the corresponding edges in the enclosing event control of the always construct


module Re_cont_10 (CLK,RST,EN,Re,Q3_Q0);
input CLK,RST,EN,Re;      //输入时钟,复位,计数使能,可逆使能
output reg[3:0]        Q3_Q0;  //输出
//output reg                         C;      //进位
        always @ (posedge CLK,negedge RST)
         if(!Re) begin     //加1十进制计数器
            if(!RST) Q3_Q0 <= 4'b0000;
            else if(EN) begin
                  if(Q3_Q0<4'b1001) Q3_Q0 <= Q3_Q0+1'b1;
                  else   
                          Q3_Q0<=4'b0000;
            end
         end
         else begin         //减1十进制计数器
            if(!RST) Q3_Q0=4'b1001;
            else if(EN) begin
                  if(Q3_Q0>4'b0000) Q3_Q0<=Q3_Q0-1'b1;
                  else      
                          Q3_Q0<=4'b1001;
            end
         end
endmodule

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

14

主题

821

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2013
金钱
2013
注册时间
2021-7-17
在线时间
628 小时
发表于 2022-3-2 10:33:47 | 显示全部楼层
回复 支持 反对

使用道具 举报

2

主题

101

帖子

0

精华

高级会员

Rank: 4

积分
640
金钱
640
注册时间
2021-8-3
在线时间
151 小时
发表于 2022-3-3 09:51:27 | 显示全部楼层
敏感列表里的RST是异步复位信号,优先级最高的,你代码里放到了Re信号的后面,改成下面写法就不会报错了

module Re_cont_10 (CLK,RST,EN,Re,Q3_Q0);
input CLK,RST,EN,Re;      //输入时钟,复位,计数使能,可逆使能
output reg[3:0]        Q3_Q0;  //输出
//output reg                         C;      //进位
//always @ (posedge CLK,negedge RST)
// if(!Re) begin     //加1十进制计数器
//    if(!RST) Q3_Q0 <= 4'b0000;
//    else if(EN) begin
//          if(Q3_Q0<4'b1001) Q3_Q0 <= Q3_Q0+1'b1;
//          else   
//                  Q3_Q0<=4'b0000;
//    end
// end
// else begin         //减1十进制计数器
//    if(!RST) Q3_Q0=4'b1001;
//    else if(EN) begin
//          if(Q3_Q0>4'b0000) Q3_Q0<=Q3_Q0-1'b1;
//          else      
//                  Q3_Q0<=4'b1001;
//    end
// end

always @ (posedge CLK,negedge RST)
  if(!RST)
      Q3_Q0 <= 4'b0000;
  else if(!Re)
      begin
                    if(EN)
                             if(Q3_Q0<4'b1001)
                                      Q3_Q0 <= Q3_Q0+1'b1;
                                  else
                                      Q3_Q0<=4'b0000;
                end
  else
      begin
                    if(EN)
                            if(Q3_Q0>4'b0000)
                                     Q3_Q0<=Q3_Q0-1'b1;
                                 else
                                     Q3_Q0<=4'b1001;
                end

endmodule
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-10-4 00:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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