当前位置: 首页 > news >正文

品牌网站建设精湛磐石网络备案添加网站

品牌网站建设精湛磐石网络,备案添加网站,产品设计专业就业前景,外贸中东哪些产品好卖流控#xff0c;简单来说就是控制数据流停止发送。常见的流控机制分为带内流控和带外流控。 FIFO的流水反压机制 一般来说#xff0c;每一个fifo都有一个将满阈值afull_value#xff08;almost full#xff09;。当fifo内的数据量达到或超过afull_value时#xff0c;将满…流控简单来说就是控制数据流停止发送。常见的流控机制分为带内流控和带外流控。 FIFO的流水反压机制 一般来说每一个fifo都有一个将满阈值afull_valuealmost full。当fifo内的数据量达到或超过afull_value时将满信号afull从0跳变为1。上游发送模块感知到afull为1时则停止发送数据。在afull跳变成1后fifo需要能够缓存路径上的data以及上游发送模块停止发流之前发出的所有data。这就是fifo的流控机制。下图是fifo流控机制的示意图。 如下图所示数据data和有效信号vld从模块A产生经过N拍延时后输入到FIFOFIFO产生将满信号afull经过M拍延时反馈到模块A。假设模块A接收到afull1时立即停止发送数据。假设FIFO深度为fifo_depth每拍为一个时钟周期。 则我们考虑以下问题 为了保证FIFO不发生溢出将满阈值afull_value至少应该设置成多少为了充分发挥FIFO的性能FIFO深度depth应该为多少 首先考虑第一个问题即FIFO将满阈值如何设置 当FIFO中的数据为afull_value时产生afull1afull1经过M拍到达模块A此时FIFO中至多可以有afull_valueM个数据。afull1到达模块A时模块A立即停止发送数据此时电路中还存在N拍数据将陆续送到FIFO中所以最后FIFO中应该为afull_valueMN个数据。 为了保证数据不会溢出应满足公式fifo_depth afull_valueMN因此将满阈值应该至多为depth_fifo - (MN)。 为了验证上述结论我们编写了如下代码进行实验 delayed.sv module delayed #(parameter N 5,parameter DW 1)(input logic clk,input logic rst_n,input logic [DW-1:0] din,output logic [DW-1:0] dout);logic [N*DW-1:0] data_reg;always_ff(posedge clk or negedge rst_n) beginif(~rst_n) begindata_reg (N*DW)(0);endelse begindata_reg {data_reg[N*DW-DW-1:0], din};end endassign dout data_reg[N*DW-1:N*DW-DW];endmoduletop.sv module top #(parameter DATA_WIDTH 32,parameter DEPTH 32,parameter M 5,parameter N 10,parameter AF_VALUE (MN-1)) ( input logic clk, input logic rst_n, input logic wr_en, input logic [DATA_WIDTH-1:0] wr_data, output logic afull, output logic [DATA_WIDTH-1:0] rd_data, output logic empty, input logic rd_en );logic wr_en_dly; logic [DATA_WIDTH-1:0] wr_data_dly; logic almost_full; logic error; logic full; // delayed # (.N (N ),.DW(1 ) ) wr_en_delay_inst (.clk (clk ),.rst_n(rst_n ),.din (wr_en ),.dout (wr_en_dly) ); // delayed # (.N (N ),.DW (DATA_WIDTH) ) wr_data_delay_inst (.clk (clk ),.rst_n (rst_n ),.din (wr_data ),.dout (wr_data_dly) ); // delayed # (.N (M),.DW(1) ) almost_full_delay_inst (.clk (clk ),.rst_n(rst_n ),.din (almost_full),.dout (afull ) ); // DW_fifo_s1_sf # (.width (DATA_WIDTH ), .depth (DEPTH ), .ae_level(1 ), .af_level(AF_VALUE ), .err_mode(1 ), .rst_mode(0 ) )U (.clk (clk ), .rst_n (rst_n ), .push_req_n (~wr_en_dly ),.pop_req_n (~rd_en ), .diag_n (1 ),.data_in (wr_data_dly ), .empty (empty ),.almost_empty ( ), .half_full ( ),.almost_full (almost_full ), .full (full ),.error (error ), .data_out (rd_data ) );endmoduletb.sv module tb; parameter DATA_WIDTH 32; parameter DEPTH 32; parameter M 5; parameter N 10; parameter AF_VALUE M N;logic rst_n; logic clk; logic rd_en; logic rd_en_r; logic wr_en; logic wr_en_r; logic empty; logic afull; logic [DATA_WIDTH-1:0] wr_data; logic [DATA_WIDTH-1:0] rd_data; logic [DATA_WIDTH-1:0] ref_data; logic error;assign error (rd_en ~empty (ref_data ! rd_data)) ? 1b1 : 1b0;always_ff(posedge clk or negedge rst_n) beginif(~rst_n) beginref_data 0;endelse if(rd_en ~empty) beginref_data ref_data 1b1;end end//rd_en always_ff(posedge clk or negedge rst_n) beginif(~rst_n) beginrd_en_r 1b0;endelse if($urandom % 100 1) beginrd_en_r 1b1;endelse beginrd_en_r 1b0;end endassign rd_en rd_en_r ~empty; //wr_data always_ff(posedge clk or negedge rst_n) beginif(~rst_n) beginwr_data 0;endelse if(wr_en ~afull) beginwr_data wr_data 1b1;end end//wr_en always_ff(posedge clk or negedge rst_n) beginif(~rst_n) beginwr_en_r 1b0;endelse if($urandom % 100 100) beginwr_en_r 1b1;endelse beginwr_en_r 1b0;end endassign wr_en wr_en_r ~afull;//clk initial beginclk 1b0;forever begin#5 clk ~clk;end end//rst initial beginrst_n 1b0;#100rst_n 1b1; end// initial begin#20000$finish; end// initial begin$fsdbDumpfile(./top.fsdb);$fsdbDumpvars(0); end//inst top #(.DATA_WIDTH(DATA_WIDTH),.DEPTH (DEPTH ),.M (M ),.N (N ),.AF_VALUE (AF_VALUE )) U(.*);endmodule以及makefile脚本 all: listfile com sim verdi cleanlistfile:find -name *.sv filelist.fcom:vcs -full64 -cpp g-4.8 -cc gcc-4.8 -LDFLAGS -Wl,--no-as-needed -sverilog -debug_access -timescale1ns/10ps \-f filelist.f -l com.log -kdb -lca -y ${SYNOPSYS}/dw/sim_ver libext.v incdir${SYNOPSYS}/dw/sim_versim:./simv -l sim.logverdi:verdi -sv -f filelist.f -ssf *.fsdb -nologo clean:rm -rf csrc *.log *.key *simv* *.vpd *DVE*rm -rf verdiLog *.fsdb *.bak *.conf *.rc *.f当设置fifo的将满阈值为MN时fifo不会丢失数据流控正确。注dw fifo中的将满阈值afull的定义为当fifo中还有小于等于afull个空位置时拉高afull信号 当设置fifo的将满阈值为MN-1时fifo会丢失数据流控出错。如下图所示 现在考虑第二个问题即FIFO深度depth应该为多少 分析若fifo_depth过小afull有效之后fifo中存储的数据将很快被下游读取而新的数据又无法及时到达FIFO因此会造成流水气泡影响电路的性能。 假设M5, N10且fifo_depth20则afull_value5。在T时刻fifo中存了5个数据后afull1会变为有效在之后的15个周期内会陆续存入15个数据。假设下游模块B每个周期读取FIFO中的一个数据因为当FIFO内的数据data_cnt小于5时afull才会无效为0因此在T15和T30的时刻内下游电路B只能读5个数据从而造成数据断流影响电路性能。 为了保证电路性能在T15到T30这个时间段内应该有15个数据可读因此afull_value应该不小于15MN。故FIFO深度应该不小于2*(MN)。
http://www.hkea.cn/news/14304411/

相关文章:

  • 瀚钦科技网站建设有网站可以接设计的单子做吗
  • 和君网站建设池州专业网站建设怎么样
  • 门户网站需要多少费用很多域名301定重到另一网站
  • 去国外做非法网站吗wordpress hsts
  • 做华为网站的还有哪些功能吗wordpress数据库容量
  • 小游戏网页版在线玩纯静态网站页面优化
  • 学电脑零基础怎样才可以快速学外贸网站优化推广
  • 设计类网站排名延吉网站网站建设
  • 湘潭建网站兰州网站建设招聘最新
  • 台州外贸网站建设服务器搭建网站打不开
  • iis网站连接数毕业作品是做网站的答辩会问什么
  • 公司网站换服务器怎么做传奇游戏
  • 网站不备案访问做网站编辑需要会什么
  • 磁县网站建设广州市学校安全教育平台官网
  • 国外酷站收录网站wordpress 应用主题
  • 网站优缺点58同城做网站要钱吗
  • 什邡门户网站wordpress手动上传图片
  • 大同网站建设熊掌号qq建设网站首页
  • 网站建设教程突宜春做网站公司怎么样
  • 泾阳做网站招标网官网登录
  • 石狮网站建设费用海珠区居家办公
  • 做外贸的网站平台有哪些内容wordpress主题修改头部
  • 苏州网站关键词推广支部建设杂志官方网站
  • 万户做网站好不好广东高职一流专业建设专题网站
  • 国内做AI视频网站免费观看网络公司名字怎么取
  • 杭州的网站设计廊坊网站建设团队
  • 什么网站权重快建网站用html
  • asp网站和php网站的区别重庆自助建站系统哪家好
  • python做网站好处合肥科技网站建设
  • oss做静态网站客户关系管理的看法