• System Verilog学习笔记(一)


    1.var/reg与bit/logic

    异:
    reg——>在verilog hdl中用来声明寄存器;
    var——>在SV中所有暂存的资源视为变量,即variable;
    同:
    reg和var都会消耗FPGA资源。
    注:
    a.SV中保留了reg关键字,reg与var有等价左右。
    b.SV在声明RAM的时候,也会使用var关键字。
    例子:
    reg [3:0] rLED; //verilog
    var [3:0] rLED; //sysverilog

    2、物理特性寄存器一般有4态,即0,1,x,z
    verilog hdl——>reg关键字默认下都视为4态
    SV——>资源暂存为2态,关键字是bit,即0和1;
    资源暂存为4态,关键字是logic,即0,1,x,z
    (z——>用来驱动IO口,主要是阻隔输出;x——>用来建立选择器)
    例子:
    var bit [3:0] rLED; //sysverilog,2态的暂存资源
    var logic [3:0] rLED; //sysverilog,4态的暂存资源

    注:如果驱动对象是IO就选择logic,如果是暂存数据就选bit

    3、always_ff与always_comb
    在verilog中,有时间点事件和即时事件,分别对应时序逻辑和组合逻辑,声明分别为always@(沿敏感列表) 和 always@(*)
    system verilog中,则分别用always_ff(沿敏感列表) 和 always_comb表示时序逻辑和组合逻辑;

    例子:
    always@(posedge CLK) //verilog
    always_ff@(posedge CLK) //system verilog

    例子:
    always@(*) //verilog
    always_comb //system verilog

    //-------------------------------------------------------------
    var logic [3:0] rLED;

    always_comb //组合逻辑行为声明,输出选择器是组合逻辑
    if(isStart[0]) rLED = LED_U1;
    else if(isStart[1]) rLED = LED_U2;
    else rLED = 4'dx;

    assign LED = rLED;

    //-------------------------------------------------------------


    4、2003 system verilog wire和var一样有bit(2态)和logic(4态),在2005年system verilog将其废除,默认下wire是logic(4态):
    wire DoneSig_U1 //system verilog or verilog等价关系
    wire logic DoneSig_U1 //system verilog 等价关系
    wire bit DoneSig_U1 //错误wire声明

    5、struct与typedef

    注意:与C语言结构体的用法不同
    typedef struct {bit L0,L1,L2,L3;} LED_Struct;//自定义结构,LED_Struct

    var LED_Struct rLED;
    always_ff@(posedge CLK or negedge RSTn)
    if(!RSTn)
    begin
    rLED.L0 = 1'b0;
    rLED.L1 = 1'b0;
    rLED.L2 = 1'b0;
    rLED.L3 = 1'b0;

    ...
    end
    ......
    assign

    6、struct与packed
    5中定义的结构体需要为每个成员单独赋值,当声明自定义结构之际加上packed关键字,该自定义为就按着位操作连接起来,
    LED_Struct的第[0]位是L0,第[1]位是L1:

    tepedef struct packed{bit L3,L2,L1,L0;} LED_Struct;//packed以后的自定义结构

    var LED_Struct rLED; //声明为暂存类型的自定义结构rLED
    var bit [3:0] rLED; //等价关系

    rLED <= 4'd0;

    有packed的自定义结构声明暂存类型时,LED_Struct声明一个名为rLED的暂存类型,而该rLED与"var bit [3:0] rLED"声明方法有等价的关系,rLED可以直接为所有成员赋值。

    7、RAM与packed

    reg [7:0] ram [3:0]; //verilog声明4个8位宽的RAM

    var bit [width][words] name; //声明数组-System Verilog
    var bit name [width][words];//声明内存(ram)-System Verilog

    例子:
    var bit [3:0][3:0] Array; //建立名为Array的二维数组,位宽为4,字为4
    var bit ram [3:0][3:0]; //建立位宽为4,字为4的ram

    var bit [][]Array={4'b1000,4'b0100,4'b0010,4'b0001};//建立数组的时候直接为数组赋值,默认情况下数组初值为0

    always_ff@(...negedge RSTn)
    if(!RSTn)
    begin
    Array <= '{default:0};//整体数组赋值0
    ...
    end

    always_ff@(posedge CLK or negedge RSTn)
    if(!RSTn)
    begin
    Array[0]= 4'b0001; //成员逐个赋值
    Array[1]= 4'b0010;
    Array[2]= 4'b0100;
    Array[3]= 4'b1000;
    ...
    end

    var bit [3:0][3:0] Array
    var bit [15:0] rData //两者为等价关系,二维Array可以用一维rData看待

    System Verilog的数组声明是消耗寄存器资源而不是内存资源。对于FPGA来说,寄存器资源非常宝贵,不适合用来大量存储数据,因此使用时要注意。

  • 相关阅读:
    Android两级嵌套ListView滑动问题的解决
    关于Android适配华为等带有底部虚拟按键的解决方案
    更加成熟的领导力素质和学习敏感度
    完美解决ScollView内嵌ListView的问题
    Gson序列化问题导致的内存溢出,tip:Background sticky concurrent mark sweep GC freed
    从功能实现到实现设计
    iOS面试题汇总
    2017计算机专业大学排名
    Buffer.from()
    Buffer.isBuffer()详解
  • 原文地址:https://www.cnblogs.com/loves6036/p/5365061.html
Copyright © 2020-2023  润新知