FPGA开发:system verilog 特性和应用

sv 语言的一些特性和适用场景

  • interface struct。interface 和 module 是一个逻辑层级,使用方式也相似。可以用来简化接口
  interface xx_if  (
    input logic clk,
    input logic rst 
  );

  logic rdy;
  logic valid;
  logic [7:0] data;

  modport master (               // 此处只需要定义方向,不需要定义数据类型和位宽
    input clk,rst,rdy,
    output valid ,data
  );
  
  modport slave (               // 此处只需要定义方向,不需要定义数据类型和位宽
    input clk,rst,data,valid,
    output rdy
  );

  ###                           // 可以添加测试信号,测试激励。

  endinterface

  module top (
    input logic clk,
    input logic rst
  );
    ###
  endmodule

  xx_if xx_if_inst(
    .clk          (clk),
    .clk          (rst)
  );

  // 引用方式
  // xx_if_inst.master;
  // xx_if_inst.slave;
  // xx_if_inst.slave.rdy;

  module master(
    interface xx_if.master
  );
    ###
  endmodule

  master master(
    .xx_if.master (xx_if.master)
  );
  • 数组 logic [7:0] rega [256:1]运用
  logic [7:0] rega [5:0]
  ...
  rega[5] <= 8'd9;      //数组类型使用与赋值,index 标号从0开始
  rega[3:0][5] <= 4'd4;  // verilog 版本不支持这种模式,sv可以

  always(*) begin
    for(int i = 0;i<6;i++)begin
      rega[i]    = i;      // 需要用组合逻辑(塞赋值),不需要时间直接赋值成功
    end
  end 

  always(posedge clk , negedge rst) begin
    if (!rst) begin
      for(int i = 0;i<6;i++)begin
        rega[i]    <= i;      // 需要用时序逻辑(非塞赋值),一个时钟后赋值成功
      end
    end else begin
      ...
    end
  end 
  ...
  rega = {8'd0,8'd1,8'd2,8'd3,8'd4,8'd5};
  • for 语句运用,和c语言的for语句有本质的区别,硬件for语言硬件的复制操作,增加硬件面积。
  • 多次生成 generate
  genvar gen_i
  generate 
    for(gen_i = 0;gen_i<100;gen_i++)begin
    ...// 也可以是元器件例化
    end
  endgenerate
  • 多数据量赋值,移位寄存器。
  always(posedge clk , negedge rst) begin
    if (!rst) begin
      for(int i = 0;i<6;i++)begin
        rega[i]    <= i;      // 需要用时序逻辑(非塞赋值),一个时钟后赋值成功
      end
    end else begin
      for(int gen_i = 0;gen_i<9;gen_i++)begin
        reg[i+1]  <= reg[i];
      end
      reg[0]      <= i_reg;
    end
  end 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值