fifo读写写测试

2023-10-31

记录学习日常:本实验参考正点原子的实验教程。按照自己的理解来完成实验。四个模块,第一个模块是调用fifo IP核并设计类型,二,写如数据模块,三,读数据模块,四,顶层模块。ip核设置如图:

 二,

写数据模块的输入有时钟、复位、写满、写空,输出有写请求、写出数据,把数据写入fifo核。

读数据模块输入有时钟、复位、读空、读满、从fifo核来的数据,输出有读请求。

写请求与读请求都与fifo核发输入端相连,感觉fifo核像是个存储器,写入数据再读出。

当写空状态与写请求寄存器为1是写请求触发,当读满状态与读请求寄存器为1时读请求触发。

 顶层模块就是把前三个模块整合到一个模块里。上代码“

module fifo_wr(
	input clk,
	input rst_n,
	input wrempty,
	input wrfull,
	output reg[7:0]data,
	output wrreq
);

	reg [1:0]state_cnt;
	reg wrreq_t;

	assign wrreq = ~wrfull & wrreq_t;
	
	always@(posedge clk or negedge rst_n)
		if(!rst_n)begin
			wrreq_t <= 1'b0;
			data <= 8'd0;
			state_cnt <= 2'd0;
		end
		else begin
			case (state_cnt)
				2'd0 : begin
					if(wrempty)begin
						wrreq_t <= 1'b1;
						state_cnt <= state_cnt + 1'b1;
					end
					else
						state_cnt <= state_cnt;
				end
				2'd1 : begin
					if(wrfull)begin
						wrreq_t <= 1'b0;
						data <= 8'd0;
						state_cnt <= 2'd0;
					end
						else begin
							wrreq_t <= 1'b1;
							data <= data +1'b1;
						end
				end
				default :state_cnt <= 2'd0;
				endcase
		end
			
endmodule

module fifo_rd(
	input clk,
	input rst_n,
	input [7:0]data,
	input rdfull,
	input rdempty,
	output  rdreq
);

reg rdreqt;
reg [1:0]state_cnt;
reg [7:0]data_fifo;

assign rdreq = ~rdempty & rdreqt;

	always@(posedge clk or negedge rst_n)
	if(!rst_n)begin
		rdreqt <= 1'b0;
		data_fifo <= 8'd0;
	end
	else begin
			case (state_cnt)
				2'd0 : begin
					if(rdfull)begin
						rdreqt <= 1'b1;
						state_cnt <= state_cnt + 1'b1;
					end
				else
					state_cnt <= state_cnt;
				end
				2'd1 : begin
					if(rdempty)begin
						rdreqt <= 1'b0;
						data_fifo <= 8'd0;
						state_cnt <= 2'd0;
					end
					else begin
						rdreqt <= 1'b1;
						data_fifo <= data;
					end
				end
				default : state_cnt <= 2'd0;
				endcase
		end

endmodule
module fifo(
	input sys_clk,
	input sys_rst_n
);
wire [7:0]  data;

	wire   rdreq;
	
	wire   wrreq;
	wire 	[7:0]  q;
	wire 	  rdempty;
	wire 	  rdfull;
	wire 	[7:0]  rdusedw;
	wire 	  wrempty;
	wire 	  wrfull;
	wire 	[7:0]  wrusedw;

fifo_ip u_fifo_ip (
	.data(data),
	.rdclk(sys_clk),
	.rdreq(rdreq),
	.wrclk(sys_clk),
	.wrreq(wrreq),
	.q(q),
	.rdempty(rdempty),
	.rdfull(rdfull),
	.rdusedw(rdusedw),
	.wrempty(wrempty),
	.wrfull(wrfull),
	.wrusedw(wrusedw)
	);

	

fifo_wr fifo_wr_u(
	.clk(sys_clk),
	.rst_n(sys_rst_n),
	.wrempty(wrempty),
	.wrfull(wrfull),
	.data(data),
	.wrreq(wrreq)
);

fifo_rd fifo_rd_u(
	.clk(sys_clk),
	.rst_n(sys_rst_n),
	.data(q),
	.rdfull(rdfull),
	.rdempty(rdempty),
	.rdreq(rdreq)
);


endmodule

仿真

 这个仿真总觉得有点问题,又说不上来。一起讨论下。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

fifo读写写测试 的相关文章

  • Quartus II 安装

    本次介绍使用的 Quartus 版本为 10 1 目前 Quartus II 官网已经没有 13 1 以下版本的安装包 大家可以安装 13 1 以上版本的软件 功能都是大同小异 下载地址 FPGA Software Download Cen
  • zynq之petalinux安装和编译

    首先下载petalinux v2015 4 final installer dec run 去xilinx官网或者我的网盘下载http pan baidu com s 1gf11UGr mkdir opt pkg petalinux v20
  • Xilinx ISE系列教程(9):LabTools下载、安装、使用教程(独立的下载工具)

    文章目录 1 ISE Vivado LabTools简介 2 ISE 14 7 Lab Tools下载 安装 3 Vivado 2018 3 LabTools下载 安装 1 ISE Vivado LabTools简介 Xilinx LabT
  • 【Xilinx】SynchronousInterruptHandler错误排查笔记

    SynchronousInterruptHandler错误排查笔记 一 ArmV8的异常处理 二 64位lscript ld的修改 三 asm vectors S的修改 四 SynchronousInterruptHandler函数解析 五
  • HDLBits刷题_Verilog Language_Procedures_Alwaysblock1

    学习内容 Since digital circuits are composed of logic gates connected with wires any circuit can be expressed as some combin
  • 采用Vivado 配置xilinx GTX的SATA设计

    从Vivado开始 配置GTX的时候 多了一个SATA协议支持 但有些小地方还需要自己另外设置 整理了一下 分享给大家 首先打开Transceivers wizard 打开页签 线速率和参考时钟选择 在协议里面选择SATA2或者SATA3
  • xilinx xdma PCIe中断bug

    xilinx xdma PCIe中断存在bug bug1 此中断虽然是msi或者msx中断 但是不中断cpu bug2 此中断不是边沿中断 而是电平中断 在驱动层需要不断地轮训查询中断事件 bug3 此中断持续时间必须长 而且在收到中断应答
  • FPGA Xilinx 7系列高速收发器GTX通信

    Xilinx 7系列高速收发器GTX 说明 FPGA TX端 zynq 7z035 RX端 zynq 7z100 两个FPGA通过SFP 光纤 接口相连进行GTX的通信 环境 Vivado2018 2 IP核 7 Series FPGAs
  • 基于FPGA的AHT10传感器温湿度读取

    文章目录 一 系统框架 二 i2c接口 三 i2c控制模块 状态机设计 状态转移图 START INIT CHECK INIT IDLE TRIGGER WAIT READ 代码 四 数据处理模块 串口 代码 五 仿真 testbench设
  • Spartan-3E 上的随机数生成

    我需要在 Spartan 3E FPGA 上为我的遗传算法生成伪随机数 并且我想在 verilog 中实现它 您能给我任何关于此的指示吗 当然 Adam 的随机生成器是不可合成的 您必须显式创建一个LFSR 以下示例可能会有所帮助 它是一个
  • 用python接收高速率的UDP数据包

    我正在使用 python 来从 FPGA 接收 UDP 数据包流 并尝试丢失尽可能少的数据包 数据包速率从大约 5kHz 到一些 MHz 我们希望在特定时间窗口 代码中的 acq time 内获取数据 我们现在有这样的代码 BUFSIZE
  • VHDL:按钮去抖动(或不去抖动,视情况而定)

    我已阅读其他帖子 但似乎无法修复我的 我是 VHDL 新手 所以我确信这是一个简单的修复 简而言之 按钮没有防抖 代码编译和比特流程序 在测试台中 按下按钮可以工作 但输出 LED 不会改变 在板上 按下按钮会使随机 LED 亮起 我猜是因
  • 基于FPGA的简易BPSK和QPSK

    1 框图 2 顶层 3 m generator M序列的生成 输出速率为500Kbps 4 S2P是串并转换模块 将1bit的m序列转换到50M时钟下的2bit M序列数据 就有4个象限 5 my pll是生成256M的时钟作为载波 因为s
  • 使用 VHDL 实例化 FPGA 中的 RAM

    我试图按照中的指导实现双端口 RAM这篇优秀的博文 http danstrother com 2010 09 11 inferring rams in fpgas 然而 ModelSim 在编译时给出以下警告 Warning fifo ra
  • PyOpenCL 中的时间测量

    我正在 FPGA 和 GPU 中使用 PyOpenCL 运行内核 为了测量执行所需的时间 我使用 t1 time event mykernel queue c width c height block size block size d c
  • 使用双寄存器方法解决亚稳态问题

    为了解决Verilog中不同时钟域引起的亚稳态 采用双寄存器方法 但据我所知 亚稳态的最终输出尚未确定 输出独立于输入 那么 我的问题是如何保证使用双寄存器方法输出的正确性 Thanks 您不能完全确定您避免了亚稳态 正如您所提到的 亚稳态
  • 您可以使用类 C 语言对 FPGA 进行编程吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 在大学里 我用类似 C 的语言编写了 FPGA 不过 我也知道人们通常使用 Verilog 或 VHD
  • 如何使用 Verilog 和 FPGA 计算一系列组合电路的传播延迟?

    我是 FPGA 和 HDL 的新手 但我正在尝试学习 但无法弄清楚这一点 如何通过多个级别的组合逻辑来计算或估计传播延迟 我可以仅凭经验确定这一点 还是可以在设计时弄清楚 在这种情况下 我使用 FPGA 来实现奇偶校验设置和检查电路 该电路
  • FPGA 有哪些实际应用?

    我对我的程序为一个小型七段显示器提供动力感到非常兴奋 但是当我向不在现场的人展示它时 他们总是说 那么你能用它做什么 我永远无法给他们一个简洁的答案 谁能帮我吗 第一 它们不需要具有易失性存储器 事实上 大厂商 Xilinx Altera
  • verilog $readmemh 对于 50x50 像素 RGB 图像花费太多时间

    我正在尝试编译用于 FPGA 编程的 verilog 代码 我将在其中实现 VGA 应用程序 我使用 QuartusII 和 Altera 我正在尝试正确使用 readmemh 来逐像素获取图片 现在 我已经使用 matlab 将图片转换为

随机推荐