对数组的“reg [7:0] a_tmp[32:0]”理解

数组

在verilog中,对数组reg [7:0] a_tmp[32:0]进行操作时,分不清楚先对[32:0]进行操作还是先对 [7:0]进行操作,为此进行下面的实验。进一步加深对数组的理解。

实验1:

reg [7:0] a_tmp[32:0];

遍历的方式:
integer i;
always@(posedge clk or negedge rst_n)begin
	if(rst_n==1'b0)begin
		for(i=0;i<8;i=i+1)
            a_tmp[i]<='d0;//遍历了8次,a_tmp[i]<='d0与a_tmp[i][7:0]<='d0的结果一样
	end 
	else begin
		for(i=0;i<8;i=i+1)
			a_tmp[i]<=data_out;
	end 
	
end

image-20230612083309361

image-20230612083742692

image-20230612083812789

实验2:

reg [7:0] a_tmp[32:0];
integer i;
always@(posedge clk or negedge rst_n)begin
	if(rst_n==1'b0)begin
		for(i=0;i<8;i=i+1)
			a_tmp[i][7:0]<='d0;//将a_tmp[i]修改为a_tmp[i][7:0]。
	end 
	else begin
		for(i=0;i<8;i=i+1)
			a_tmp[i][7:0]<=data_out;
	end 
	
end

image-20230612084441593

image-20230612084542605

两个实验的出的结论:

数组数据的遍历a_tmp[i]<='d0与a_tmp[i][7:0]<='d0的结果一样

实验3:

module array(
	input clk,
	input rst_n,
	input reg [7:0] data_in,
	
	output reg [7:0] data_out

);
reg [7:0] a_tmp[32:0];
reg [7:0] b_tmp[32:0];
always@(posedge clk or negedge rst_n)begin
	if(rst_n==1'b0)begin
		data_out <= 'b0;
	end 
	else
		data_out <= data_in*data_in;
	
end 	
integer i;
always@(posedge clk or negedge rst_n)begin
	if(rst_n==1'b0)begin
        for(i=0;i<33;i=i+1)//将i=8改为i=33
			a_tmp[i][7:0]<='d0;
	end 
	else begin
		for(i=0;i<8;i=i+1)
			a_tmp[i][7:0]<=data_out;
	end 
	
end 

endmodule

得到的结果:

image-20230612085154448

最后得出的结论:

“reg [7:0] a_tmp[32:0]”代码中,对数组的操作先对[32:0]进行操作,再对[7:0]进行操作。[32:0]为深度,[7:0]为位宽。
reg [7:0] a_tmp[32:0];

image-20230612090541426

image-20230612090748941

	--晓凡	2023年6月12日于桂林书
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值