diff --git a/fifo/r波形图.png b/fifo/r波形图.png new file mode 100644 index 0000000..3af57c5 Binary files /dev/null and b/fifo/r波形图.png differ diff --git a/fifo/tb_fifo.v b/fifo/tb_fifo.v index f941d55..5bd4cda 100644 --- a/fifo/tb_fifo.v +++ b/fifo/tb_fifo.v @@ -1,5 +1,5 @@ `timescale 1ns/1ns -module tb_fifo() +module tb_fifo(); reg sys_clk; reg sys_rst; diff --git a/fifo/test_fifo.v b/fifo/test_fifo.v index 8dec416..5d600fa 100644 --- a/fifo/test_fifo.v +++ b/fifo/test_fifo.v @@ -2,27 +2,28 @@ // 写模块: 在写功能可用之后, 判断是否是空的, 如果是空的, 就持续写直到写满 // 读模块: 写功能写满之后, 取数据, 只到获取完毕 // 注意本实验 读和写实不同的时钟域, 是否可读写, 需要通过打拍判断外部时钟域的值 -// 判断即将写满/即将为空时, 要注意时钟周期, 能给出状态1, 说明上上个周期的一次写入导致快满/空了 +// 判断即将写满/即将为空时(is_full/is_empty), 要注意时钟周期, 能给出状态1, 说明上上个周期的一次写入导致满/空了 +// is_empty在fifo_wr_data写入到03的时候才拉低, 是因为 is_empty是在读时钟域同步的,而写是写时钟域, 有一定的延迟 // 上个周期再当前周期如果继续进行操作, 虽然 这个标志位还没转变为0, 但是他实际内部已经是full或者emtpy了, 再写就溢出了 module test_fifo( - input wire sys_clk, // U18 + (*mark_debug="true"*)input wire sys_clk, // U18 input wire sys_rst //J15 ); -wire clk_100m; -wire clk_50m; -wire locked; +(*mark_debug="true"*)wire clk_100m; +(*mark_debug="true"*)wire clk_50m; +(*mark_debug="true"*)wire locked; wire logic_rst; assign logic_rst = sys_rst && locked; // 需要在高电平(按下并弹开按钮) 之后且 时钟稳定之后对子模块进行逻辑复位 -wire is_empty; -wire is_almost_full; -wire is_wr_rst_busy; -wire fifo_wr_en; -wire fifo_wr_data; +(*mark_debug="true"*)wire is_empty; +(*mark_debug="true"*)wire is_almost_full; +(*mark_debug="true"*)wire is_wr_rst_busy; +(*mark_debug="true"*)wire fifo_wr_en; +(*mark_debug="true"*)wire [7:0]fifo_wr_data; fifo_wr u_fifo_wr( .wr_clk(clk_50m), @@ -34,11 +35,11 @@ fifo_wr u_fifo_wr( .fifo_wr_data(fifo_wr_data) ); -wire is_full; -wire is_almost_empty; -wire is_rd_rst_busy; -wire fifo_rd_en; -wire fifo_rd_data; +(*mark_debug="true"*)wire is_full; +(*mark_debug="true"*)wire is_almost_empty; +(*mark_debug="true"*)wire is_rd_rst_busy; +(*mark_debug="true"*)wire fifo_rd_en; +(*mark_debug="true"*)wire [7:0]fifo_rd_data; fifo_rd u_fifo_rd( @@ -58,8 +59,8 @@ clk_wiz_0 u_clk_wiz_0( .locked(locked) ); -wire [7:0]rd_data_count; -wire [7:0]wr_data_count; +(*mark_debug="true"*)wire [7:0]rd_data_count; +(*mark_debug="true"*)wire [7:0]wr_data_count; fifo_generator_0 u_fifo_generator_0( .rst(~logic_rst), // 该ip核内是高电平时钟信号有效, 平时需要低电平, 我们取logic_rst(这个是高电平)反 .wr_clk(clk_50m), @@ -69,7 +70,9 @@ fifo_generator_0 u_fifo_generator_0( .rd_en(fifo_rd_en), .dout(fifo_rd_data), .full(is_full), - .almost_full(is_almost_empty), + .almost_full(is_almost_full), + .empty(is_empty), + .almost_empty(is_almost_empty), .rd_data_count(rd_data_count), .wr_data_count(wr_data_count), .wr_rst_busy(is_wr_rst_busy), diff --git a/fifo/w波形图.png b/fifo/w波形图.png new file mode 100644 index 0000000..0e1c6a0 Binary files /dev/null and b/fifo/w波形图.png differ diff --git a/fifo/配置.png b/fifo/配置.png new file mode 100644 index 0000000..f31e6d3 Binary files /dev/null and b/fifo/配置.png differ diff --git a/fifo/配置2.png b/fifo/配置2.png new file mode 100644 index 0000000..9bee142 Binary files /dev/null and b/fifo/配置2.png differ diff --git a/fifo/配置3.png b/fifo/配置3.png new file mode 100644 index 0000000..60b94de Binary files /dev/null and b/fifo/配置3.png differ