bat从数组中找出相同数字并删除_systemverilog中几种数组类型的基础知识

在开始今天的内容之前,先来一个小玩具,一条用来删除文件的bat语句。我发现questasim跟vim同时对文本进行修改的时候,同目录下会产生很多很多很多的中间文件,所以很久不用的bat又要搬出来了。语法非常简单,几秒钟就完事了。

del /a /f /q C:UsersfoxxyDesktopsv_test*.un~
del /a /f /q C:UsersfoxxyDesktopsv_test*.swp
del /a /f /q C:UsersfoxxyDesktopsv_test*.mpf
del /a /f /q C:UsersfoxxyDesktopsv_test*.mti
del /a /f /q C:UsersfoxxyDesktopsv_test*.bak
del /a /f /q C:UsersfoxxyDesktopsv_test*.sv~
del /a /f /q C:UsersfoxxyDesktopsv_test*.cr.mti
del /a /f /q C:UsersfoxxyDesktopsv_test*.wlf

bat常用的词缀倒是值得记录一下:

/p

提示您确认是否删除指定的文件。

/f

强制删除只读文件

/s

从当前目录及其所有子目录中删除指定文件。显示正在被删除的文件名。

/q

指定静音状态。不提示您确认删除。

/a

根据指定的属性删除文件。


接下来是今天的正戏:

今儿复习一下systemverilog的几种数组类型的使用,分别是1固定数组:填充和非填充,2多维数组,3动态数组,4联合数组,5队列。具体语法解释网上大把,我这里就纯当提供一个现成的代码供小伙伴们快速跑一跑,我觉得是重点的地方也在代码里注释出来了。

module packed_unpacked_multi_dynamic_queue();
//可以这么理解[数字:数字]总是跟着修饰它前面的东西的。所以在中间的[数字]是修饰元素占了几位空间的。最后的[数字]是修饰名字的,所以是表示这个名字代表由几个元素组成的数组。
//固定数组:packed和unpacked两种
// 1.packed array
bit [7:0] packed_array = 8'h01; //一个元素叫packed_array
bit [0:7] packed_array_1 = 8'h01;

// 2-1.unpacked array,有了[数组修饰]之后,就会带来空间浪费
reg unpacked_array [7:0] = '{0,0,0,0,0,0,0,1}; //一个数组,分别为unpacked_array[0]-[7]
reg unpacked_array_1 [0:7] = '{4{0,1}}; 
reg unpacked_array_2 [0:7] = '{0,0,0,0,0,0,0,1}; 

//2-2sv允许[数组修饰]简便表达一样的,下面俩等效。
int i[0:15];
int i_1[16]; 

//3.同理,多维数组也能简便表达。
int multi_unpack[3][2] = '{ '{0,1}, '{2,3}, '{4,5}};//这是比较推荐的

//4.混合数组,通过在[元素修饰]中多填充一个描述来让内存的占用紧凑起来,实质还是元素修饰加数组修饰
bit [3:0][7:0] mixed_array[0:2];//为了让看起来好区分,一般[元素修饰]从大到小[数组修饰]从小到大,这样也比较符合习惯

//5.动态数组
int dynamic_array[];  //no space assign now
//6.联合数组
bit [7:0]age[string];
string tom = "tom";
//7.队列
integer queue[$] = { 0, 1, 2, 3, 4 };//注意队列的赋值不需要在前面加'了,这是与固定数组区别的地方
integer container;

task print_queue;
	integer i;
	$write("Queue contains ");
	for (i = 0; i < queue.size(); i ++) begin
		$write (" %g", queue[i]);
	end
	$write("n");
endtask


initial begin
	//1.2.两种固定数组
	$display ("print_packed_unpacked:");
	$display ("packed array      = %b", packed_array);//整体
	$display ("packed array_1     = %b", packed_array);//[元素修饰]从大到小和从小到大没区别,都是默认最右边是第0位
	$display ("packed array[0]   = %b", packed_array[0]);//显示某个位数
	$display ("unpacked array[0] = %b", unpacked_array[0]);
	$display ("unpacked array[7] = %b", unpacked_array[7]);
	$display ("unpacked array_1[0] = %b", unpacked_array[0]);
	$display ("unpacked array_1[7] = %b", unpacked_array[7]);//[数组修饰]从大到小和从小到大没区别,都是默认最右边是第0个。

	//3.多维数组:两种用循环来赋值的方式
	//3-1.for赋值
	$display ("array_assignment_in_FOR_method:");
	for (int i=0;i<$size(multi_unpack);i++)
	begin
		for (int j=0;j<$size(multi_unpack);j++)
		begin
			multi_unpack[i][j]=i+j;
			$display ("multi_unpack[i][j] = %b", multi_unpack[i][j]);
		end
	end

	//3-2.foreach赋值,跟tcl里面的foreach一样的,唯一要注意的是这里用的是[i,j],而不是[i][j]
	$display ("array_assignment_in_FOREACH_method");
	//automatic int i = 2;
	foreach (multi_unpack[i,j])
	begin
		multi_unpack[i][j]=1;
		$display("multi_unpack[i,j]:%0d", multi_unpack[i][j]);
	end
	
	//4.混合数组,就是把packed和unpacked组合了起来,这样可以达到解决unpacked数组浪费内存空间的情况,但代价是写起下标来麻烦一丢丢
	$display ("mixed_array:");
	mixed_array[2][7][3]=1;//注意混合数组的赋值是先[数组修饰],再[元素修饰],而在这两个部分内部都是从左到右的
	$display ("mixed_array[2][7][3] = %b", mixed_array[2][7][3]);

	//5.联合数组,就类似python中的dict
	$display ("associate_array:");
	age[tom] = 21;
	age["joe"] = 32;
	$display("%s is %d years of age ",tom, age[tom]);
	$display("%s is %d years of age ","joe", age["joe"]);

	//6.动态数组赋值
	$display ("dynamic_array:");
	dynamic_array = new[10];
	foreach(dynamic_array[i]) 
	begin
		dynamic_array[i]=i;
		$display ("dynamic_array[i] = %b", dynamic_array[i]);
	end
	dynamic_array.delete();//跟C一样,new的东西要自己delete

	//7.队列操作
	$display ("Initial value of queue:");
	print_queue;
	// Insert new element at begin of queue
	queue = {5, queue};
	$display ("new element added using concate");
	print_queue;
	// Insert using method at begining
	queue.push_front(6);
	$display ("new element added using push_front");
	print_queue;
	// Insert using method at end
	queue.push_back(7);
	$display ("new element added using push_back");
	print_queue;
	// Using insert to insert, here 4 is index
	// and 8 is value
	queue.insert(4,8);
	$display ("new element added using insert(index,value)");
	print_queue;
	// get first queue element method at begining
	container = queue.pop_front();
	$display ("element poped using pop_front");
	print_queue;
	// get last queue element method at end
	container = queue.pop_back();
	$display ("element poped using pop_end");
	print_queue;
	// Use delete method to delete element at index 4 in queue
	queue.delete(4);
	$display ("deleted element at index 4");
	print_queue;
	#1 $finish;
end

endmodule

结果

6f0901cd48cd8d14da8e9fe9e1bf0def.png

6f0901cd48cd8d14da8e9fe9e1bf0def.png

就酱,拜。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值