出售本站【域名】【外链】

万仟 - 轻松建站从此开始!

智能冰箱

当前位置: 智能冰箱 > 冰箱咨询 > 文章页

FIFO存储深度(容量)计算

时间:2024-09-17 15:05来源: 作者:admin 点击: 16 次
文章浏览阅读7.9k次,点赞5次,收藏25次。如果数据流连续不断则FIFO深度无论多少,只要读写时钟不同源同频则都会丢数;FIFO用于缓冲块数据流,一般用在写快读慢时,FIFO深度 / (写入速率 - 读出速率) = FIFO被填满时间 应大于 数据包传送时间= 数据量 / 写入速率例:A/D采

### 回覆1: 我可以给你一些对于如何运用xerilog编写一个异步FIFO的辅导方针: 1.运用xerilog的形态机模块,界说FIFO的形态,并设置输入和输出信号; 2.运用xerilog的模拟模块,界说FIFO的读写收配; 3.运用xerilog的时序模块,界说FIFO的时序控制,真现异步FIFO罪能; 4.运用xerilog的测试模块,界说FIFO的测试代码,验证FIFO的准确性。 ### 回覆2: 正在xerilog中,可以运用信号的回升边沿来真现一个简略的异步FIFO(First-In First-Out)。 首先,咱们须要界说FIFO的一些参数,如数据宽度、深度等。如果咱们界说FIFO的数据宽度为8位,深度为16。 接下来,咱们可以界说FIFO的输入和输出端口。输入蕴含数据输入d_in和写入使能信号wr_en。输出蕴含数据输出d_out和读与使能信号rd_en。 而后,咱们须要界说一个数据存储区域,用于存储来自输入端口的数据。那可以通过界说一个大小为深度乘以数据宽度的数组来真现。 接着,咱们可以初步编写模块中的逻辑。首先,咱们须要真现写收配。当wr_en为1时,将数据d_in写入数组的下一个可用位置。 而后,咱们须要真现读收配。当rd_en为1时,从数组的下一个可读位置输出数据d_out,并将该位置的数据清零。 最后,咱们须要办理一些边界状况。当FIFO已满时,写收配应当被疏忽。同样,当FIFO为空时,读收配应当被疏忽。 须要留心的是,异步FIFO的真现须要思考时序问题。xerilog供给了多种办法来办理时序逻辑,如运用always块大概运用非阻塞赋值语句。详细的真现方式可以依据需求和个人喜好选择。 总之,通过编写适当的逻辑代码,咱们可以真现一个简略的异步FIFO模块。那个模块可以接管并存储来自输入端口的数据,并依照先进先出的顺序将数据输出到输出端口。 ### 回覆3: 异步 FIFO 是一种罕用的数字电路设想,用于处置惩罚惩罚差异速度的数据传输问题。下面我会用300字的篇幅来回覆如何用 xerilog 语言编写一个异步 FIFO。 异步 FIFO 由读指针、写指针和存储器构成。咱们首先须要界说那三局部正在 xerilog 中的形容。读指针和写指针由计数器真现,存储器可以运用 xerilog 中的 reg 数组来默示。 module fifo (input wire c1, c2, reset, // 输入时钟信号 input wire d, // 输入数据信号 output reg r, // 读信号 output wire almost_empty, // 非彻底空形态信号 output wire almost_full); // 非彻底满形态信号 reg [7:0] FIFO [0:255]; // 存储器,那里如果容质为256,每个存储单元8位 reg [7:0] read_ptr, write_ptr, count; // 读写指针和计数器 always @(posedge c1 or posedge reset) begin // 对读指针、写指针和计数器停行收配 if (reset) begin // 复位 read_ptr <= 8'b0; write_ptr <= 8'b0; count <= 0; end else if (c1) begin // 正在时钟回升沿停行收配 if (r == 1'b1) read_ptr <= read_ptr + 8'b1; // 读指针加1 if (count < 255 && d == 1'b1) begin // 假如计数器小于255且无数据输入,则写入存储器 FIFO[write_ptr] <= d; write_ptr <= write_ptr + 8'b1; // 写指针加1 count <= count + 1; // 计数器加1 end end end always @(posedge c2 or posedge reset) begin // 计较非彻底空形态和非彻底满形态信号 if (reset) begin almost_empty <= 1'bz; almost_full <= 1'bz; end else if (c2) begin almost_empty <= (count <= 0) ? 1'b1 : 1'b0; almost_full <= (count >= 255) ? 1'b1 : 1'b0; end end assign r = (count > 0) ? 1'b1 : 1'b0; // 依据计数器判断能否有可读数据 endmodule 上述 xerilog 代码中的异步 FIFO 模块真现了读信号的输出、非彻底空形态和非彻底满形态的计较,并正在 c1 和 c2 时钟信号回升沿时对读写指针以及计数器停行收配,真现了异步 FIFO 的罪能。

(责任编辑:)

------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
发布者资料
查看详细资料 发送留言 加为好友 用户等级: 注册时间:2025-02-03 21:02 最后登录:2025-02-03 21:02
栏目列表
推荐内容