完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
module FIFO_TOP(datain, rd, wr, rst, clk, dataout, full, empty);
input [7:0] datain;//输入数据 input rd, wr, rst, clk; //读,写,复位,时钟 output [7:0] dataout;//数据输出 output full, empty;//满,空 wire [7:0] dataout; reg full_in, empty_in;//满空标记寄存器 reg [7:0] mem [15:0];//宽7深度16 reg [3:0] rp, wp;//读地址,写地址 assign full = full_in; assign empty = empty_in; // memory read out数据输出 assign dataout = mem[rp]; // memory write in数据输入 always@(posedge clk) begin if(wr && ~full_in) mem[wp]<=datain; end // memory write pointer increment 顺序写 always@(posedge clk or negedge rst) begin if(!rst) wp<=0; else begin if(wr && ~full_in) wp<= wp+1'b1; end end // memory read pointer increment 顺序读 always@(posedge clk or negedge rst)begin if(!rst) rp <= 0; else begin if(rd && ~empty_in) rp <= rp + 1'b1; end end // Full signal generate 满标志 always@(posedge clk or negedge rst) begin if(!rst) full_in <= 1'b0; else begin if( (~rd && wr)&&((wp==rp-1)||(rp==4'h0&&wp==4'hf))) full_in <= 1'b1; else if(full_in && rd) full_in <= 1'b0; end end // Empty signal generate 空标志 always@(posedge clk or negedge rst) begin if(!rst) empty_in <= 1'b1; else begin if((rd&&~wr)&&((rp==wp-1) || (rp==4'hf&&wp==4'h0))) empty_in<=1'b1; else if(empty_in && wr) empty_in<=1'b0; end end endmodule 这是我修改的FIFO程序,但是输出不受读使能影响,看了半天不知道哪里错了。 |
|
相关推荐
1 个讨论
|
|
只有小组成员才能发言,加入小组>>
877个成员聚集在这个小组
加入小组4466 浏览 0 评论
特权同学 Verilog边码边学 Lesson01 Vivado下载与安装
2582 浏览 1 评论
玩转Zynq连载50——[ex69] FIR滤波器IP仿真实例
4256 浏览 2 评论
玩转Zynq连载49——[ex68] MT9V034摄像头的图像FFT滤波处理
5203 浏览 1 评论
玩转Zynq连载48——[ex67] Vivado FFT和IFFT IP核应用实例
5164 浏览 0 评论
1894浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-20 14:36 , Processed in 0.654718 second(s), Total 64, Slave 47 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号