存储器模型

以32x256大小的交织器(按行写,按列读)为例描述存储器的基本模型、读写时序、读写技巧

1.语法定义

parameter 					ROM_DEPTH;
parameter 					ROM_WIDTH;
reg		[8:0]				Line;
reg		[8:0]				Column;
reg		[ROM_WIDTH-1:0] 	memory [ROM_DEPTH-1:0];

有点类似于C语言中的二维数组的,但在硬件描述中为存储器模型。
用Line、Column定位到读写中的某一个具体位置,注意Line位宽为ROM_DEPTH,而不是ROM_WIDTH;Column同理。

2.模型例化:传入常参数

//定义module时按以下格式
module ROM_inter
#(
parameter ROM_DEPTH,
parameter ROM_WIDTH
)(
output 	reg	[31:0]	rdata,
input 		[31:0]	wdata
);
//例化模型可以传参
ROM_inter
#(
.ROM_DEPTH 			(9'h08),
.ROM_WIDTH			(9'h08)
//传入参数例化为8行8列的存储器
)int_ins(
.wdata				(dec_signal),
.rdata				(int_dec_sig),
);

3.时序约束

两个相关变量不要在同一个时钟边沿变化。例如addr随时钟驱动自增,输出也随着时钟驱动读取地址对应数据,此时最好选取相反的时钟边沿,更好地满足时序约束。

always@(posedge clk)
begin
	addr	<= addr+8'b1;
end
always@(negedge clk)
begin
	rdata	<= memory[addr];
end

4.时序同步

(1)缓存法:例如挂载在AMBA总线下的外设,总线协议要求地址与命令一拍,随后传输数据一拍。要使地址、命令与数据一 一对应,需要将先到的地址、命令缓存一拍

always@(posedge clk)
begin
	addr_r	<= addr;
	cmd_r	<= cmd;
end
always@(posedge clk)
begin
	memory[addr_r]	<= wdata;
end

(2)放置在同一个时钟周期内。
例如要对同一个数据的不同数据段进行处理

always@(posedge clk)
begin
	case(signal[7:4])
	4'b0000:	begin	decode[27:4] <= 24'h000001;	end
	4'b0001:	begin	decode[27:4] <= 24'h000003;	end
	endcase
	decode[31:28]<= PN_code;
	decode[3:0]	 <=	signal[3:0];
end

5.读写规则与技巧

规则:地址索引只能放后面,即只能按行读不能按列读。

rdata	<= memory[Line][7:0];    √
rdata	<= memory[2:0][Column];  X

技巧:如果确实要同时读入,可以用连接符’ ‘{ }’’,或者在同一个时钟驱动内列举所有连接端

always@(posedge clk)begin
	if(w_r==1'b1)begin 						//read mode
		rdata	<= {memory[2][Column],memory[1][Column],memory[0][Column]}
	end else if(w_r==1'b0)begin 			//write mode
		memory[Line][Column+2'b10]	<= wdata[02];
		memory[Line][Column+2'b01]	<= wdata[01];
		memory[Line][Column+2'b00]	<= wdata[00];
	end else begin
		rdata	<= 3'hx;
	end
end

6.读写时for循环的处理

https://blog.youkuaiyun.com/qq_40946355/article/details/105496865

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值