异步FIFO(二)——手撕代码

承接上一篇,FIFO的基础理论,理论基础参考《VerilogHDL高级数字设计》,Clifford的论文Simulation and Synthesis Techniques for Asynchronous FIFO Design以及张波的硕士论文:基于SOC异步FIFO的设计与形式验证。
代码为自己独立完成。
顶层代码:

module (
	clk_w,rst_w,b_w,full_w,
	clk_r,rst_r,b_r,empty_r,
	data_in,data_out,rst_n
	);
parameter WIDTH_A=8;	
parameter WIDTH_D=16;
parameter DEPTH=256;


input clk_w,rst_w,b_w;
input clk_r,rst_r,b_r;
input [WIDTH_D-1:0] data_in;
input rst_n;
output empty_r;
output full_w;
output [WIDTH_D-1:0]data_out;

//write wire
wire [WIDTH_A:0] addr_w,addr_w_g;
wire [WIDTH_A:0] syn_data_w,addr_w_syn;

//read
wire [WIDTH_A:0] addr_r,addr_r_g,syn_data_r,addr_r_syn;

//RAM
wire en_r,en_w;

write_controll #(
	.WIDTH_A(WIDTH_A)
)write_control(	.clk_w(clk_w),
	.rst_w(rst_w),
	.b_w(b_w),
	.addr_r_syn(addr_r_syn),
	.addr_w(addr_w),
	.full_w(full_w));
	
b2g #(
	.WIDTH_A(WIDTH_A)
)bin_gray_w(.bin(addr_w),
	.gray(addr_w_g));
	
generate
genvar i;
for (i=0;i<=WIDTH_A;i=i+1) begin:
	fast_syn_slow write_syn_read(
		.vcc(1'b1),
		.data_in(addr_w_g[i]),
		.clk_s(clk_r),
		.rst_s(rst_r),
		.syn_data
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
异步FIFO的时序验证代码可以按照以下思路进行编写: 1. 定义时钟和复位信号: - 定义写入时钟(wr_clk)和读取时钟(rd_clk),用于模拟异步FIFO中的不同时钟域。 - 定义异步复位信号(async_reset)用于初始化异步FIFO的状态。 2. 生成输入数据和控制信号: - 定义写入使能信号(wr_en)和读取使能信号(rd_en),用于控制数据的写入和读取操作。 - 生成写入数据(wr_data)和读取数据(rd_data),可以通过随机生成、指定模式或者读取预设的数据文件等方式产生。 3. 实例化异步FIFO模块并连接信号: - 根据设计规格实例化异步FIFO模块,将时钟、复位和数据信号连接到相应的输入端口。 - 确保时钟和复位信号与测试环境中的时钟和复位信号保持一致。 4. 编写验证逻辑: - 在每个时钟周期中,根据使能信号控制数据的写入和读取操作。 - 在写入操作后,检查FIFO的状态是否正确,包括空状态、满状态和有效数据的个数等。 - 在读取操作后,检查读取的数据是否与预期结果一致,同时检查FIFO的状态是否正确。 5. 编写主程序: - 在主程序中,初始化时钟和复位信号,并设置仿真时长或循环次数。 - 在仿真过程中,根据时钟和复位信号的变化,不断更新输入数据和控制信号,并执行验证逻辑。 - 在仿真结束后,检查验证结果并输出相应的信息。 需要注意的是,根据具体的异步FIFO设计规格和验证需求,上述代码思路可能会有所不同。因此,在编写时序验证代码时,需要根据具体情况进行相应的调整和补充。同时,可以借助现有的验证框架和工具,如SystemVerilog、UVM等,来简化和加速异步FIFO的时序验证过程。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值