首页 > 其他分享 >Verilog代码中if语句判断失效,什么原因?

Verilog代码中if语句判断失效,什么原因?

时间:2023-12-28 20:12:36浏览次数:25  
标签:语句 cnt F4 clk neg pos Verilog rst 失效

一、问题描述

在一个工程中,分别对应[1:0] F4_clk_cnt_pos和[1:0] F4_clk_cnt_neg计数,且计数正常,我使用if语句判断当F4_clk_cnt_pos == 2'b01&&F4_clk_cnt_neg = = 2'b11,从而进行Sample_clk时钟的反转。具体代码如下:

always @(posedge clk or negedge n_rst) 
begin
    if(n_rst==1'b0)
        Sample_clk <=1'b0;
    else if((F4_clk_cnt_neg==2'b11)&&(F4_clk_cnt_pos==2'b01))
        Sample_clk <=~Sample_clk;  
    else
        Sample_clk <=Sample_clk;
end

仿真结果如下:
在这里插入图片描述
在这里插入图片描述

显然存在F4_clk_cnt_pos == 2'b01 F4_clk_cnt_neg == 2'b11的情况,但是Sample_clk未有电平的反转!!!

接着我换了一下判断的值,满足F4_clk_cnt_pos == 2'b10&& F4_clk_cnt_neg == 2'b10进行电平反转,具体代码如下:

always @(posedge clk or negedge n_rst) 
begin
    if(n_rst==1'b0)
        Sample_clk <=1'b0;
    else if((F4_clk_cnt_neg==2'b10)&&(F4_clk_cnt_pos==2'b10))
        Sample_clk <=~Sample_clk;  
    else
        Sample_clk <=Sample_clk;
end

仿真情况如下:

image-20230107170454706

此时仿真正常,我不理解到底是什么原因导致if判断失效,望大佬指点!!

二、偶然仿真正确

起初我使用的modelsim Altera10.1版本进行仿真,后面因为电脑也安装了modelsimSE-64 10.5,联合进行仿真后发现没问题了,我想可能是太老的modelsim版本还有有点bug吧,但是重新打开运行任然会出现上述问题,不知所以。。。。。

标签:语句,cnt,F4,clk,neg,pos,Verilog,rst,失效
From: https://www.cnblogs.com/lgziyan/p/17933451.html

相关文章

  • Postgresql中PL/pgSQL代码块的语法与使用-声明与赋值、IF语句、CASE语句、循环语句
    场景PostGresSQL简介与Windows上的安装教程:PostGresSQL简介与Windows上的安装教程_postgressqlwindows安装免费吗?除了标准SQL语句之外,PostgreSQL还支持使用各种过程语言(例如PL/pgSQL、C、PL/Tcl、PL/Python、PL/Perl、PL/Java等)创建复杂的过程和函数,称为存储过程(StoredPro......
  • 数据库专题--XQuery语句
    XQuery相对于XML的关系,等同于SQL相对于数据库表的关系。XQuery被设计用来查询XML数据-不仅仅限于XML文件,还包括任何可以XML形态呈现的数据,包括数据库。XQuery是用来从XML文档查找和提取元素及属性的语言。这是一个XQuery解决实际问题的例子:“从存储在名为......
  • C 语言中的 switch 语句和 while 循环详解
    C语言中的switch语句替代多重if..else语句,可以使用switch语句。switch语句用于选择多个代码块中的一个来执行switch(表达式){casex://代码块break;casey://代码块break;default://代码块工作原理switch表达式只会被计算一......
  • C 语言中的 switch 语句和 while 循环详解
    C语言中的switch语句替代多重if..else语句,可以使用switch语句。switch语句用于选择多个代码块中的一个来执行switch(表达式){casex://代码块break;casey://代码块break;default://代码块工作原理switch表达式只会被计算一......
  • MYSQL高级SQL语句
    SQL语句----SELECT----显示表格中一个或数个字段的所有数据记录语法:SELECT"字段"FROM"表名";SELECTStore_NameFROMStore_Info;----DISTINCT----不显示重复的数据记录语法:SELECTDISTINCT"字段"FROM"表名";SELECTDISTINCTStore_NameFROMStore_Info;-......
  • verilog代码中为什么要加`default_nettype none
    在Verilog中,default_nettypenone语句用于禁止隐式声明信号类型,这样可以增强代码的可读性和可维护性。Verilog语言允许在使用信号之前不显式声明信号类型,而是根据信号名的前缀来推断信号的类型(比如wire或reg)。然而,这种隐式声明的方式可能会导致一些问题,特别是在大型项目或多人协......
  • Spring Security区分session失效与踢出登录策略
     两种场景简单说明session失效:正常session过期,需要提示用户登录过期等提示,跳回登录页,让用户重新登录。踢出登录:系统只允许设备单一登录,一旦账号在另一个设备如浏览器登录了,则前一个登录账号会被踢出,同时给用户一个账号在另一个地方登录,防止密码泄漏等友好提示。session失效策......
  • Spring事务@Transaction失效原因
    目录1、数据库引擎不支持事务2、事务管理器配置问题3、没有被SpringIOC管理4、非public方法5、内部方法调用(常见)6、异常被捕获(常见)7、非受检异常(常见)1、数据库引擎不支持事务某些数据库引擎不支持事务,如果你使用这些引擎,则不能正确地使用@Transactional注解。2、事务管理器配......
  • 常见verilog与电路的匹配
    1、D触发器modulertl(inputclk,inputrst_n,inputd,outputregq);always@(posedgeclkornegedgerst_n)beginif(!rst_n)q<='b0;elseq<=d;endendmodule 2、ifelse选择mod......
  • FPGA学习笔记---verilog学习(2)--过程块always@(*)
    在Verilog中always@(*)语句的意思是always模块中的任何一个输入信号或电平发生变化时,该语句下方的模块将被执行。1、always语句有两种触发方式。第一种是电平触发,例如always@(aorborc),a、b、c均为变量,当其中一个发生变化时,下方的语句将被执行。2、第二种是沿触发,例如always......