⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sram-pingpang.txt

📁 超声视频图像需要实时地采集并在处理后在显示器上重建
💻 TXT
字号:
设置乒乓转换信号pi_pa;
片0的读信号rd0和写信号wr0,
片1的读信号rd1和写信号wr1;
片0的读地址指针addr0_rd和写地址指针addr0_wr,
片1的读地址指针addr1_rd和写地址指针addr1_wr;
片0的读结束信号rd0_over,
片1的读结束信号rd1_over。

//以下实现乒乓模式转换
always @(negedge clkin or negedge rst)
begin
	if (!rst) pi_pa <= 0;
	else 
	begin
		if (wr0 == 0 && addr0_wr == ADDRLEN) pi_pa <= ~pi_pa;
//当SRAM 0写完最后一个单元后,转换
		if (wr1 == 0 && addr1_wr == ADDRLEN) pi_pa <= ~pi_pa;
//当SRAM 1写完最后一个单元后,转换
	end
end

//以下实现两片SRAM读写的互锁功能
assign rd0 = pi_pa;    //when rd0==0, read sram 0
assign wr1 = pi_pa;    //when wr1==0, write sram 1
assign rd1 = ~pi_pa;   //when rd1==0, read sram 1
assign wr0 = ~pi_pa;   //when wr0==0, write sram 0

//对SRAM 0的控制
assign oe[0] = slwr || rd0; //当片0位于读模式时,slwr控制片0的读
assign we[0] = clkin || wr0; //当片0位于写模式时,clkin控制片0的读
assign srmaddr0 = rd0? addr0_wr: addr0_rd; 
assign srmdata0 = wr0? 16'hzzzz: {indata+1,indata};
//当片0位于读模式时,片0的地址线赋读指针,数据线赋高阻
//当片0位于写模式时,片0的地址线赋写指针,数据线赋生成数据
//对SRAM 1的控制
assign oe[1] = slwr || rd1;
assign we[1] = clkin || wr1;
assign srmaddr1 = rd1? addr1_wr: addr1_rd;
assign srmdata1 = wr1? 16'hzzzz: {indata+10,indata};

//SRAM的读结束信号
always @(negedge slwr or negedge rst)
begin
	if (!rst) 
	begin
		rd0_over <= 1;
		rd1_over <= 1;
	end
	else
	begin
		if (addr0_rd == ADDRLEN) rd0_over <= 0; 
		else if (wr0 == 0) rd0_over <= 1;
//读完SRAM 0的最后一个单元后,片0的读结束信号置为无效,终止片0的读过程,等待SRAM 1的写过程结束,再置片0的读结束信号为有效,从而不至于影响下一次片0的读
 		if (addr1_rd == ADDRLEN) rd1_over <= 0;
		else if (wr1 == 0) rd1_over <= 1;
	end
end

//SRAM的读指针操作,即读完一个单元后指向下一单元
always @(negedge slwr or negedge rst)
begin
	if (!rst) 
	begin
		addr0_rd <= 0;
		addr1_rd <= 0;
	end
	else
	begin
		if (rd0 == 0 && rd0_over == 1) 
		begin
			addr0_rd <= addr0_rd + 1;
		end
		if (rd1 == 0 && rd1_over == 1)
		begin
			addr1_rd <= addr1_rd + 1;
		end
	end
end

//SRAM的写指针操作,即写完一个单元后指向下一单元
always @(negedge clkin or negedge rst)
begin
	if (!rst)
	begin
		addr0_wr <= 0;
		addr1_wr <= 0;
	end
	else
	begin
		if (wr0 == 0) 
		begin
			addr0_wr <= addr0_wr + 1;
		end
		if (wr1 == 0)
		begin
			addr1_wr <= addr1_wr + 1;
		end
	end
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -