sv时序组合和时序逻辑

Posted yuandonghua

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sv时序组合和时序逻辑相关的知识,希望对你有一定的参考价值。

 1 input a;
 2 input b;
 3 input c;
 4 reg d;
 5 wire e;
 6 reg f;
 7 
 8 // 时序逻辑,有寄存器
 9 always@(posedge clk)begin
10     if(a==1b1)begin        
11         d <= b;
12     end else begin
13         d <= c;
14     end
15 end
16 
17 // 组合逻辑
18 assign e = d & a;
19 
20 //时序逻辑
21 always@(posedge clk)begin
22     if(b&&e)begin
23         f <= 1b1;
24     end else begin
25         f <= 1b0;
26     end
27 end

有上面这一段verilog代码有的时候验证为了验证而验证就需要在验证环境或者用例中用systemverilog的while(1)实现上面的这个功能,systemverilog是顺序执行语言,要实现时序逻辑中的寄存器输出是在下一拍的功能,需要对时序逻辑做特殊处理。组合逻辑则不需特殊处理,它的输出就在当拍。

input a;
input b;
input c;
bit d;
bit d_reg;
bit e;
bit f;
bit f_reg;

whlie(1)begin
    @(posedge clk);
    d = d_reg;
    f = f_reg;

    if(a==1b1)begin
       d_reg = b;
    end else begin
       d_reg = c;
    end

    e = d & a;

    if(b&&e)begin
       f_reg = 1b1;
    end else begin
       f_reg = 1b0;
    end
   
end

简单的处理就是对寄存器变量分两个变量来表示,比如上面的d和f,分别用d/d_reg和f/f_reg来表示,其中d_reg和f_reg只是中间变量,不能作为其他语句的输入,只能能在开头将值赋给d和f,这样来模拟数据是在时钟沿输出的效果。d和f才能作为其他语句的输入(用于判断或者赋值语句右边的值)

1、对寄存器变量增加xxx_reg的变量

2、寄存器当前输出值为xxx_reg

3、xxx_reg的值只能在xxx_reg赋值前赋给xxx,一般就放在while(1)中@(posedge clk)的下面。

以上是关于sv时序组合和时序逻辑的主要内容,如果未能解决你的问题,请参考以下文章

数电基础:时序逻辑电路的时序分析

复杂时序逻辑电路

学fpga(组合逻辑和时序逻辑)

实验二 组合逻辑电路设计;实验三 时序逻辑电路设计

2017.0404.数字电路与系统-时序逻辑电路

Verilog使用always块实现时序逻辑