System Verilog 语法简介(一)

 本文是已经学完verilog语言后,拓展学习常用System Verilog 语法 。

参考:《systemVerilog测试平台编写指南》

1.logic类型

任何使用线网的地方均可以使用logic类型,但要求logic类型不能有多个结构性驱动,例如,在对双向总线建模的时候。此时,需要使用线网类型wire 。

2.双状态数据类型 

bit  b ;                                //双状态,单比特

bit  [31:0]   b32 ;                    //双状态,32比特无符号整数

int unsigned ui ;                      //双状态,32比特无符号整数

int   i ;                              //双状态,32比特有符号整数

byte  b8 ;                              //双状态,8比特有符号整数

shortint  s ;                           //双状态,16比特有符号整数

longint l ;                             //双状态,64比特有符号整数

integer i4 ;                            //四状态,32比特有符号整数

time t ;                               //四状态,64比特无符号整数

real r ;                               //双状态,双精度浮点数

3.定宽数组

bit [15:0] mem [8] 或 bit [15:0] mem [0:7]

8 个 16比特数 的数组

int array2 [0:7] [0:3] ;   //完整的声明

int array3 [8] [4]     ;   //紧凑的声明

array2[7][3] = 1       ;   //设置最后一个元素

4.数组操作


bit       [7:0]  array1 [8] ;

integer    i  ;

 
for ( i = 0 ; i < 8 ; i++ )    array1[i] <=  0  ;

例子:

module byte_8_average(
    
    input   logic             clk,
    input   logic             rst_n,
    input   logic             rx_flag,
    input   logic   [7:0]     rx_data,
    output  logic             tx_flag,
    output  logic   [7:0]     tx_data  
    );
 

bit       [7:0]  array1 [8] ;
bit       [2:0]  rx_cnt     ;
logic     [10:0] sum        ;

integer i ,j; 

assign  tx_data = sum[10:3] ;
assign  tx_flag = rx_flag&& (rx_cnt == 7)  ;
 
    
always_ff @(posedge clk or negedge rst_n)begin
     
     if(~rst_n)begin
         for ( i = 0 ; i < 8 ; i++ )    array1[i] <=  0  ;
         rx_cnt   <= 0 ;      

     end
     else begin
          if(rx_flag)begin
          array1[rx_cnt]  <=  rx_data ;
              if(rx_cnt == 7)begin       
                 rx_cnt <= 0 ;
              end 
              else begin
                 rx_cnt <= rx_cnt + 1 ;
              end  
          end  

     end

end

always_comb begin
     if(rx_cnt == 0)begin
         sum = 0  ;
         for ( j = 0 ; j < 8 ; j++ )    sum += array1[j] ;
     
 
     end
     else begin 
         sum  = 0 ;

     end

end





    
endmodule 
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值