【Systemverilog】什么是数据类型(3)

本文介绍了VHDL中的动态数组和队列,动态数组允许在运行时动态分配存储空间,适合处理大小不确定的数据。队列结合了数组和链表的优点,支持快速的元素插入与删除,并遵循FIFO原则。文中详细展示了动态数组和队列的声明、操作以及相关函数的使用,包括插入、删除、推入和弹出等操作。此外,还探讨了一般的队列操作方法,如通过索引访问和修改元素。最后,强调了理解和掌握FIFO概念的重要性。
摘要由CSDN通过智能技术生成

1.3 其他数组类型介绍(1)

1.3.1 动态数组(dynamic array,[])

在前一节,我们简单的介绍了第一种简单的数组------定宽数组,它是指在编译时我们指定数据的宽度,当然,如果对数据预估失误,便会出现越界出错的问题。
设想,如果编译之前我们对于事务(Transaction)大小仍然不确定,盲目的使用定宽数组极有可能发生错误。有没有一种方法能够在程序运行时自动分配存储空间呢,用以匹配事务大小。

1.动态数组的声明

动态数组声明采用空下标[]:

logic exam_1[] , exam_2[] ;        //动态数组声明采用空下标

2.动态数组的操作


logic exam_1[] , exam_2[] ;        //动态数组声明采用空下标
initial begin
			exam_1 = new[3] ;      //**new[]操作给数组分配3个存储空间**
			foreach (exam_1[j] )
				exam_1[j] = j ;	   //初始化
			exam_2 = exam_1 ;      //数组复制操作,类比定宽数组
			exam_1[2] = 3 ;         //更改具体数值
			exam_1 = new[10](exam_2) ;//分配10个元素,将exam_2中元素复制给exam_1			
			exam_1.delete() ; 	//删除操作
end
		

1.3.2 队列(Queue,[$])

1. 队列的声明

介绍了定宽数组与动态数组,接下来介绍队列的知识。队列集合了链表与数组的优点,在增加或者删除元素方面优势十分显著,可以通过下标索引实现任意元素访问
队列声明采用[$]:

  queue1[$] = {0 , 1 , 5} ;     //注意花括号前没有单引号
  queue2[$] = {2 , 3 , 4} ;

2. 队列的函数操作


int  i = 1;
initial begin
	queue1.insert(5,i) ; //插入操作,{0 , 1 ,1 ,5},1之前插入1
	queue2.delete(3) ; //删除操作,{2 , 4},删除元素2
    ......
end
	

接下来的操作,一定要理解,非常重要,是***FIFO(先进先出)***的精髓。


queue1.push_front(3) ; //队列最前方插入3,{3 , 0 , 1 , 1 , 5}
queue2.push_back(9) ; //队尾插入9,{2,4,9}
i = queue2.pop_front ; //取出最前边元素,{4 , 9}, i = 2
i = queue1.pop.back ; //取出最后边元素,{3,0,1,1}, i = 5

3. 队列的一般操作

前利用insert,delete,push_front,push_back,pop_front,pop_back这几个函数对队列进行操作,如果不用函数的话,也是可以对队列进行操作的,具体操作如下:


int  j =1;
  queue1[$] = {0 , 1 , 5} ;     //注意花括号前没有单引号
  queue2[$] = {2 , 3 , 4} ;
initial begin
	q ={queue1[0],queue2[2]} ; //{0,4}
	q={queue[0:2],queue2[1:2]} ; //{0,1,5,3,4}
	q={5,queue1} ; //{5,0,1,5}
	j=q[0] ; // j = 5
	q= {} ;//{},删除所有元素
	

总结:动态数组、队列的声明与操作;队列的函数操作与一般操作;重点掌握FIFO相关函数。希望您能够批评指正!接下来我们将介绍关联数组与数组的操作方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值