精华内容
下载资源
问答
  • 通过在quartus中仿真并分析综合后的RTL图,分析了多个else_if级联对综合结果的影响,说明了为什么我们要避免这样的代码风格。提出了解决办法,包括使用多个if_else来代替else_if的多级级联,还有用casex语句来代替多...
  • 1、if else: (1)if(表达式)语句; (2)if(表达式) 语句一 else 语句二 (3)if(表达式1) 语句一; else if(表达式2) 语句2; else if(表达式3) 语句3; else if(表达式4) 语句4; #...

    1、if else:

    (1)if(表达式)语句;

    (2)if(表达式)

         语句一
    
         else
    
         语句二
    

    (3)if(表达式1)

              语句一;
    
         else if(表达式2)  语句2;
    
         else if(表达式3)  语句3;
    
         else if(表达式4)  语句4;
    

    #语句使用要点:

    (1)条件语句必须在过程块中使用。所谓过程块语句是指由initial、always引导的执行语句集合。

            出了这两个语句块引导的begin end块中可以编写条件语句外,模块中的其他地方都不能编写。
    
    (2)if语句中的表达式一般为逻辑表达式或者关系表达式。系统对表达式的值进行判断;
    
            若为0,z,X;按照假处理;若为1按照真处理,执行指定的语句;
    
     (3)if(a)等价于if(a == 1);
    
    (4)if语句可以·嵌套·使用
    
    (5)end总是与离它最近的一份else配对。
    

    如果if语句使用不当可能会综合出来意想不到的锁存器,具体请看下面例子:

    在这里插入代码片
    ```always@(al or b)
              begin
                 if(a)q <= d;
              end
     
    
    
    上述的代码,只写出了a==1时q应该的取值,a==0时的情况并不知道
     在always块里面,如果在给定的条件下变量没有被赋值,这个变量将会保持原来的值,也就是说会生成一个锁存器。
     另外一种情况会生成意想不到的锁存器时当case语句中没有default语句时的情况。
    
    
    3、case语句
    语句格式:
    case(表达式)
              分支表达式1:   语句1;
              分支表达式2:   语句2;
              分支表达式3:   语句3;
              分支表达式4:   语句4;
              分支表达式5:   语句5;
              default:            语句6;
    endcase
    使用注意事项:
    (1)每一个分支表达式的值必须互不相同,否则就会出现问题,即对表达式的同一个值出现多种执行方案,产生矛盾;
    (2)执行完一个case的分支语句之后跳出该case语句体结构中止此case语句的执行;
    (3)case语句表达式的比较过程中的表达式值必须相同(位宽、数值)才能正确;
             例如:‘bx。‘bz与n‘bx,n‘bz比较,‘bx。‘bz默认计算机位宽,一般为32位,n不等于32时就会出现错误。
     4、casez:
            casez语句的分支表达式在与表达式比较时不考虑高阻值z
            casex语句的分支表达式在与表达式比较时不考虑高阻值z  和不定值x    
              
                
    
    
    展开全文
  • Verilog 条件语句if else

    千次阅读 2021-04-29 15:04:02
    注意 生成latch 在时序逻辑中,不完整的 ifelse… 结构并不会生成锁存器,而组合逻辑中不完整的 ifelse… 结构就会生成锁存器。

    注意

    1. 只能在initial或always过程块语句中使用。

    2. 生成latch
      在时序逻辑中,不完整的 if…else… 结构并不会生成锁存器,而组合逻辑中不完整的 if…else… 结构就会生成锁存器。
      所以时序逻辑可以没有最后的else,默认保持;组合逻辑必须有else

    3. 组合逻辑中为了保持不变出现赋值语句:a =a,会出现锁存器。

    4. (这条有问题,后面再看)同一个变量的不同条件,用:

    if
    else if 
    else
    

    不同变量的条件,需要嵌套:

    if
    	if
    	else
    else
    

    例.(背景详见“基于FPGA的AD7928驱动”)
    第一个计数器,生成sclk1MHz,基于FPGA系统clk50MHz,计数50次。第二个计数器,用来控制片选信号的时长,基于sclk,计数18次。

    always @(posedge clk or negedge rst_n)begin
        if(!rst_n)
        cnt0 <= 0;
        else
    	cnt0 <= cnt0_n;
    end
    always@(*)
    begin
    	if(cnt0 == 50-1)
    	cnt0_n = 0;
    	else
    	cnt0_n = cnt0 + 1;
    end
    
    always @(posedge clk or negedge rst_n)begin
        if(!rst_n)
        cnt1 <= 0;
        else
    	cnt1 <= cnt1_n;
    end
    //分析要点在这段
    always@(*) begin
    	if(cnt0 == 50-1) begin //一个sclk
    		if(cnt1 == 18-1)
    		cnt1_n = 0;
    		else
    		cnt1_n = cnt1 + 1;
    	end
    	else 
    	cnt1_n = cnt1;
    end
    

    在这里插入图片描述

    如果把cnt1的组合逻辑模块改成:

    always@(*) begin
    	if(cnt0 == 50-1)
    	cnt1_n = cnt1 + 1;
    	else if(cnt1 == 18-1)
    	cnt1_n = 0;
    	else 
    	cnt1_n = cnt1;
    end
    

    逻辑上就是错的,当cnt1_n=17,下一个clk来,cnt1=17,立刻更新组合逻辑,虽然cnt0还未计数到49,但满足cnt1=17的条件,cnt1_n更新为0。再下一个clk,cnt1=0.
    在这里插入图片描述

    展开全文
  • module tb( input clk, input rst, input case_A, input case_B, input idata, output reg odata ); ...always@(posedge clk ... else if(case_A) odata<=0; else if(case_B) odata<=1; end endmodule ..
    module tb(
    input  clk,
    input  rst,
    input  case_A,
    input  case_B,
    input  idata,
    output reg odata
    );
    
    
    always@(posedge clk or posedge rst ) begin 
    	if(rst)
    	    odata<=0;
    	else if(case_A)
    		odata<=0;
    	else if(case_B)
    		odata<=1;
    end
    
    endmodule

    如果两个

    else if

    else if

    展开全文
  • Verilogifelse if的各种用法总结

    千次阅读 2019-01-03 20:36:00
    当全部使用if判断时,优先级从上到下(往下优先级越高),如果在某一级(设为第n级)的if下加入了else,则当第n级不成立时,则执行else中的语句,前面的n-1级中的判断即使成立也将无效。 当使用if /else if判断时,第...

    当全部使用if判断时,优先级从上到下(往下优先级越高),如果在某一级(设为第n级)的if下加入了else,则当第n级不成立时,则执行else中的语句,前面的n-1级中的判断即使成立也将无效。

    当使用if /else if判断时,第一级优先级最高,当第n级结果成立后,后面的n+1,n+2...等即使成立也不再进行判断。

    转载于:https://www.cnblogs.com/lightmonster/p/10216776.html

    展开全文
  • Verilog支持ifelse ifelse…的判断语法结构,与C语言类似,且也支持判断语句嵌套,支持某判断分支下执行多条语句。虽然与C语言类似,但以为它没有大括号{}的说法,使得在书写较为复杂的逻辑时显得乱糟糟,看上去...
  • Verilog不完整if else,case锁存

    千次阅读 2020-03-24 21:38:33
    1前提 仅在逻辑电路(电平触发)中产生锁存, 因时序电路本身具有...2.1 ifelse module latchOrDff( clk, data, enable, q ); input clk,data,enable; output q; reg q; always @(posedge clk) begin if (enable) ...
  • if else嵌套

    2016-04-27 08:23:53
    学习笔记
  • 在用verilog做设计时,经常会用到if-else语句,对于复杂逻辑采用该语句,经常嵌套很多if-elseif-else嵌套过深,会导致很多危害,其中之一就是两个D触发器之间的组合逻辑过多。导致时序的Tsu建立时间紧张。以下面的...
  • 单if语句(if-elseif-…elseif-else)综合出来的电路没有优先级,从电路的角度来说,单if语句综合出来的电路类似于数据选择器,else路选通的条件是前面所有的if条件都不满足。 always@(*) begin z = 0; if(sel1) ...
  • 对于`define,`ifdef,`else和`endif首先要注意的是加在字母前面的是一个反向单引号。具体用法和matlab语法比较相似。他们的作用是条件编译。条件编译的意思就是,在编译工程中只编译满足条件的部分,不满足条件的,...
  • if-else和case都是有优先级的,其中case可以通过synthesis parallel_case综合约束命令取消优先级;eg:case(sel)// synthesis parallel_case 在组合逻辑中若分支没写全则都会综合出锁存器,其中case可以通过...
  • Verilogif..else和case语句分析

    万次阅读 多人点赞 2017-06-03 00:01:11
    本文主要讨论一下Verilogif...else...与case..语句的比较。 先看几个图: if...else.. case语句实现与上述一样的功能 发现RTL视图差别很大,而且从RTL视图也能看出if..else...有明显的优先级,case...
  • verilogif-else和case的比较

    千次阅读 2018-06-10 10:25:39
    比较if-else_if-else和case:1、if(a==2'b00) 语句1; else if(a==2'b01) 语句2; else 语句3; case(a) 2'b00: 语句1; 2'b01: 语句2; default: 语句3; ...
  • (23)Verilog HDL条件语句:if-else语句 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL条件语句:if-else语句 5)结语 1.2 FPGA简介 FPGA(Field Programmable Gate Array)是在PAL、...
  • 第一种: always @(posedge clk or negedge rst_n) begin if(!rst_n) counter_ndl <= 16'd0; else if(cs==WR_SEQ) if(fifo_pop_req) ...
  • 对于if-else和case()的设计在静态时序中对设计最大时钟频率的影响。 代码: if-else对时序的影响: 当用Timequest做静态时序分析时,查看if-else对设计最大时钟的影响,发现最大时钟只能到97.54M。PLL...
  • Verilog——if语句的优先级问题

    千次阅读 2018-07-27 21:54:20
    if..else if.. else if … …else..语句中是有优先级的,第一个if具有最高优先级,最后一个else优先级最低。Quartus综合出的RTL图认为,最高优先级的电路靠近电路的输出,输入到输出的延时较短;最低优先级的电路...
  • if语句优先级由上而下,越靠近下面的输入在综合时越靠近输出...注:不推荐上述写法是因为没有else容易产生latch。同时,如果条件并非互斥,则可能会有意想不到的结果; 上述写法可以修改为如下可以避免latch:(Lint L
  • assert一般用与检查函数参数的合法性(有效性)而不是正确性,但是合法的程序并不见得就是正确的程序。
  • 语法规则: // Style #1: Only single `ifdef `ifdef // Statements `endif // Style #2: `ifdef with `else part `ifdef // Statements `else // Statements `endif // Style #3: `ifdef with additional ifdefs `...
  • Verilog语言入门

    千次阅读 多人点赞 2019-10-20 19:53:17
    基础 #号后面加延迟时间,单位为一个单位时间 ...Verilog 数值集合由:0 代表逻辑 0 或假状态,1 代表逻辑 1 或真状态,X 代表逻辑不定态,Z 代表高阻态 表示格式:<位宽>’<基数><数值&...
  • 先做一句话总结,if语句和组合逻辑下的case语句,他们的条件是有优先级的,从上到下优先级递减,每多一个条件就会多消耗一个二选一多路器,很... else if(sel=2'b10) d=b; else d=c; endcase always_comb ca
  • 在很多地方都能看到,verilogif与case语句必须完整,即if要加上else,case后要加上default语句,以防止锁存器的发生,接下来就来说说其中原因。
  • verilog if语句

    千次阅读 2018-11-01 13:39:00
    a.基本形式 1) if(表达式) 语句1; 2)if(表达式) ...else ...3) if(表达式1) ...else if(表达式2) ...else if(表达式3) ...else if(表达式m) ...if语句是有优先级的,第一个if优先级最高,最后一个else...
  • if else 多分支 与for循环

    千次阅读 2017-09-09 17:29:22
    if else语句,多分支结构if(表达式1){语句块1} else if(表达式2)(语句块2) ...如果表达式1成立执行语句块1,再如者,表达式2成立则执行2 练习题 由用户输入一个数,判断是基数偶数 System.out
  • Verilogif-else和case的区别

    千次阅读 2013-08-25 19:12:00
    今天在eetop上看到一个帖子,讨论这个问题,链接在这里click。在这总结下if-else和case的区别。...通常if-else结构速度较慢,但占用的面积小,如果对速度没有要求但对面积有较高要求,则可用if-else结构完成编
  • 减少 if-else 嵌套的几种方法

    千次阅读 2018-03-05 09:24:52
    减少该死的 if else 嵌套:https://www.jianshu.com/p/57c065b124c4
  • Verilog 边沿检测电路

    千次阅读 2019-11-21 21:42:24
    边沿检测电路是 Verilog 数字电路设计中较为常用的电路,主要作用是在 clk 的驱使下,检测另一个信号的上升/下降沿电路; 检测的原理是记录指定信号前一个时钟和当前时钟的信号,并做对比,看看是否存在 1->0 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,082
精华内容 6,432
关键字:

elseifverilog