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

网站 建设的必要性外包公司是正规公司吗

网站 建设的必要性,外包公司是正规公司吗,如何查询网站被百度收录,网上找设计师前言 FIFO功能模块分两篇文章,本篇为同步FIFO,另一篇为异步FIFO,传送门: Verilog功能模块——异步FIFO-CSDN博客 同步FIFO实现起来是异步FIFO的简化版,所以,本博文不再介绍FIFO实现原理,感兴趣…

前言

FIFO功能模块分两篇文章,本篇为同步FIFO,另一篇为异步FIFO,传送门:

Verilog功能模块——异步FIFO-CSDN博客

同步FIFO实现起来是异步FIFO的简化版,所以,本博文不再介绍FIFO实现原理,感兴趣的同学可以去看我异步FIFO的文章,基本看懂了异步FIFO,同步FIFO自然就懂了。


二. 模块功能框图与信号说明

信号说明:

分类信号名称输入/输出说明
参数DATA_WIDTH数据位宽
ADDR_WIDTH地址位宽,FIFO深度=2**ADDR_WIDTH
FWFT_ENFirst word fall-through输出模式使能,高电平有效
FIFO写端口dininputFIFO数据输入
wr_eninputFIFO写使能
fulloutputFIFO满信号
almost_fulloutputFIFO快满信号,FIFO剩余容量<=1时置高
FIFO读端口doutoutputFIFO数据输出
rd_eninputFIFO读使能
emptyoutputFIFO空信号
almost_emptyoutputFIFO快空信号,FIFO内数据量<=1时置高
时钟与复位clkinputFIFO读时钟
rstinputFIFO读复位

注意:

  1. 信号的命名与Vivado中的FIFO IP核完全一致
  2. 复位均为高电平复位,与Vivado中的FIFO IP核保持一致
  3. 复位为异步复位
  4. FIFO深度通过ADDR_WIDTH来设置,所以FIFO的深度必然是2的指数,如2、4、8、16等

三. 部分代码展示

//++ 生成读写指针 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
reg  [ADDR_WIDTH:0] rptr;
always @(posedge clk or posedge rst) beginif (rst)rptr <= 0;else if (rd_en & ~empty)rptr <= rptr + 1'b1;
endreg  [ADDR_WIDTH:0] wptr;
always @(posedge clk or posedge rst) beginif (rst)wptr <= 0;else if (wr_en & ~full)wptr <= wptr + 1'b1;
endwire [ADDR_WIDTH-1:0] raddr = rptr[ADDR_WIDTH-1:0];
wire [ADDR_WIDTH-1:0] waddr = wptr[ADDR_WIDTH-1:0];wire [ADDR_WIDTH:0] rptr_p1 = rptr + 1'b1;
wire [ADDR_WIDTH:0] wptr_p1 = wptr + 1'b1;
//-- 生成读写指针 ------------------------------------------------------------//++ 生成empty与almost_empty信号 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
always @(*) beginif (rst)empty <= 1'b1;else if (rptr == wptr)empty <= 1'b1;elseempty <= 1'b0;
endalways @(*) beginif (rst)almost_empty <= 1'b1;else if (rptr_p1 == wptr || empty)almost_empty <= 1'b1;elsealmost_empty <= 1'b0;
end
//-- 生成empty与almost_empty信号 ------------------------------------------------------------//++ 生成full与almost_full信号 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
always @(*) beginif (rst)full  <= 1'b1;else if ((wptr[ADDR_WIDTH] != rptr[ADDR_WIDTH])&& (wptr[ADDR_WIDTH-1:0] == rptr[ADDR_WIDTH-1:0]))full  <= 1'b1;elsefull  <= 1'b0;
endalways @(*) beginif (rst)almost_full <= 1'b1;else if (((wptr_p1[ADDR_WIDTH] != rptr[ADDR_WIDTH])&& (wptr_p1[ADDR_WIDTH-1:0] == rptr[ADDR_WIDTH-1:0]))|| full)almost_full <= 1'b1;elsealmost_full <= 1'b0;
end
//-- 生成full与almost_full信号 ------------------------------------------------------------

三. 功能仿真

比较以下情形中的fifo行为是否与FIFO IP核一致,

情形一:单次写单次读

情形二:写满后再读空

情形三:在读的过程中写,在写的过程中读

判断模块功能正常的依据:

  1. 写入数据是否按顺序正常读出
  2. 空信号和满信号是否正常输出。

为方便比较,编写了顶层文件,实例化了FIFO IP核与自编模块,部分代码如下:

vivado_sync_fifo vivado_sync_fifo_u0 (.clk          (clk                     ), // input wire clk.rst          (rst                     ), // input wire rst.din          (din                     ), // input wire [7 : 0] din.wr_en        (wr_en                   ), // input wire wr_en.rd_en        (rd_en                   ), // input wire rd_en.dout         (vivado_fifo_dout        ), // output wire [7: 0] dout.full         (vivado_fifo_full        ), // output wire full.almost_full  (vivado_fifo_almost_full ), // output wire almost_full.empty        (vivado_fifo_empty       ), // output wire empty.almost_empty (vivado_fifo_almost_empty)// output wire almost_empty
);syncFIFO # (.DATA_WIDTH (DATA_WIDTH),.ADDR_WIDTH (ADDR_WIDTH),.FWFT_EN    (FWFT_EN   )
) syncFIFO_inst (.din          (din         ),.wr_en        (wr_en       ),.full         (full        ),.almost_full  (almost_full ),.dout         (dout        ),.rd_en        (rd_en       ),.empty        (empty       ),.almost_empty (almost_empty),.clk          (clk         ),.rst          (rst         )
);

testbench部分代码如下:

// 生成时钟
localparam CLKT = 2;
initial beginclk = 0;forever #(CLKT / 2) clk = ~clk;
end// 读写使能控制
initial beginrst = 1;#(CLKT * 2)rst = 0;wr_en = 0;rd_en = 0;#(CLKT * 2)wait(~full && ~vivado_fifo_full); // 两个FIFO都从复位态恢复时开始写// 写入一个数据wr_en = 1;#(CLKT * 1)wr_en = 0;// 读出一个数据wait(~empty && ~vivado_fifo_empty);// 两个FIFO都非空时开始读,比较读数据和empty信号是否有差异rd_en = 1;#(CLKT * 1)rd_en = 0;// 写满wr_en = 1;wait(full && vivado_fifo_full); // 两个FIFO都满时停止写,如果两者不同时满,则先满的一方会有写满的情况发生,但对功能无影响// vivado FIFO IP在FWFT模式时, 设定深度16时实际深度为17, 但仿真显示full会在写入15个数据后置高, 过几个时钟后后拉低,// 再写入一个数据, full又置高; 然后过几个时钟又拉低, 再写入一个数据置高, 如此才能写入17个数据// 所以这里多等待12个wclk周期, 就是为了能真正写满vivado FWFT FIFO#(CLKT * 12)wr_en = 0;// 读空wait(~empty && ~vivado_fifo_empty);rd_en = 1;wait(empty && vivado_fifo_empty); // 两个FIFO都空时停止读,如果两者不同时空,则先空的一方会有读空的情况发生,但对功能无影响rd_en = 0;#(CLKT * 10)$stop;
end// 使用以下代码时,先注释掉上面的读写使能控制initial
// 同时读写
// initial begin
//   #(CLKT * 30)
//   $stop;
// end// assign wr_en = ~full || ~vivado_fifo_full; // 未满就一直写
// assign rd_en = ~empty || ~vivado_fifo_empty; // 未空就一直读always @(posedge clk) beginif (rst)din <= 0;else if (wr_en && ~full && ~vivado_fifo_full)din <= din + 1;
endendmodule

8bit,16深度,FWFT FIFO仿真,波形如下:

可以看到模块输出的自编fifo与vivado fwft fifo的写端口和读端口行为是一致的,只是可能会超前或滞后一定的clk周期。

可以看到empty拉低时,数据已经有效了,所以自编模块实现了FWFT功能,Vivado FIFO的实际深度为17,所以它多读出了一个数据,空信号更晚拉高。

因篇幅问题,其它条件下的仿真不再展示,感兴趣的同学可通过更改testbench自行验证。

  1. FWFT_EN改为0,注意同步修改Vivado FIFO的配置

四. 工程分享

Verilog功能模块——同步FIFO,Vivado 2021.2工程。

欢迎大家关注我的公众号:徐晓康的博客,回复以下四位数字获取。

8302

建议复制过去不会码错字!

或者在我的码云仓库获取,传送门:

徐晓康/Verilog功能模块 - 码云 - 开源中国 (gitee.com)


徐晓康的博客持续分享高质量硬件、FPGA与嵌入式知识,软件,工具等内容,欢迎大家关注。


文章转载自:
http://radical.spfh.cn
http://headfast.spfh.cn
http://worthwhile.spfh.cn
http://roemer.spfh.cn
http://cyanide.spfh.cn
http://triecious.spfh.cn
http://slavishly.spfh.cn
http://ileal.spfh.cn
http://bribery.spfh.cn
http://chilachap.spfh.cn
http://notoriety.spfh.cn
http://shmaltz.spfh.cn
http://marmara.spfh.cn
http://primary.spfh.cn
http://caesalpiniaceous.spfh.cn
http://mathematic.spfh.cn
http://hydrobiology.spfh.cn
http://fishpond.spfh.cn
http://tearless.spfh.cn
http://hanger.spfh.cn
http://minister.spfh.cn
http://uncharity.spfh.cn
http://sustaining.spfh.cn
http://unrepented.spfh.cn
http://tittle.spfh.cn
http://conduct.spfh.cn
http://archaean.spfh.cn
http://manning.spfh.cn
http://typed.spfh.cn
http://seethe.spfh.cn
http://poorish.spfh.cn
http://chronogram.spfh.cn
http://buckeye.spfh.cn
http://garageman.spfh.cn
http://hardcase.spfh.cn
http://projectile.spfh.cn
http://skeesicks.spfh.cn
http://subdelegate.spfh.cn
http://expectorant.spfh.cn
http://lunger.spfh.cn
http://xerophyte.spfh.cn
http://pedagogic.spfh.cn
http://entwine.spfh.cn
http://strikingly.spfh.cn
http://revolute.spfh.cn
http://refractive.spfh.cn
http://cicatrization.spfh.cn
http://capriccio.spfh.cn
http://overrate.spfh.cn
http://sylvite.spfh.cn
http://castellar.spfh.cn
http://perspicuity.spfh.cn
http://macao.spfh.cn
http://ckd.spfh.cn
http://darnel.spfh.cn
http://collywobbles.spfh.cn
http://karl.spfh.cn
http://attack.spfh.cn
http://misspeak.spfh.cn
http://infinitival.spfh.cn
http://class.spfh.cn
http://satyrical.spfh.cn
http://angstrom.spfh.cn
http://acanthous.spfh.cn
http://crockery.spfh.cn
http://consigner.spfh.cn
http://vaal.spfh.cn
http://transpacific.spfh.cn
http://xyloid.spfh.cn
http://girosol.spfh.cn
http://hereditarily.spfh.cn
http://carcinogenesis.spfh.cn
http://pittypat.spfh.cn
http://hanse.spfh.cn
http://eclectically.spfh.cn
http://scraper.spfh.cn
http://remarry.spfh.cn
http://potency.spfh.cn
http://panicky.spfh.cn
http://beelzebub.spfh.cn
http://advise.spfh.cn
http://lh.spfh.cn
http://malleability.spfh.cn
http://checkweighman.spfh.cn
http://spurtle.spfh.cn
http://apartotel.spfh.cn
http://timbal.spfh.cn
http://chaos.spfh.cn
http://tailband.spfh.cn
http://tana.spfh.cn
http://implacable.spfh.cn
http://creaminess.spfh.cn
http://quintic.spfh.cn
http://grisgris.spfh.cn
http://womanlike.spfh.cn
http://unglue.spfh.cn
http://inauspicious.spfh.cn
http://dolce.spfh.cn
http://orthograde.spfh.cn
http://laotian.spfh.cn
http://www.15wanjia.com/news/70819.html

相关文章:

  • 招远做网站案例seo搜索引擎招聘
  • wordpress网站如何与关联哪里能搜索引擎优化
  • 什么是网站原创文章在线seo
  • 做精美得ppt网站知乎阿里大数据平台
  • 建网站商城在哪做有别人的交易链接怎么交易
  • 高端网站建设南宁手机网站快速建站
  • 商家产品展示网站源码宁波关键词优化企业网站建设
  • 东莞seo网站建设公司优秀网页设计作品
  • 黄石做网站seo优化一般包括
  • 合肥网站建设优化如何制作一个简单的网页
  • 网站封装国内搜索引擎排名2022
  • 仿京东网站市场营销策划公司
  • 网站备案怎么办第三波疫情将全面大爆发
  • 贵州网络公司网站建设广州seo关键字推广
  • 建设网站需要花费多少钱网站维护费用一般多少钱
  • 开锁在百度上做网站要钱吗厦门百度竞价开户
  • 专业网站设计模板100%能上热门的文案
  • 天津做网站好的公司有哪些成都seo优化排名推广
  • 做物理的网站搜索引擎大全排行
  • 广西两学一做考试网站网络seo关键词优化技巧
  • 做搜索引擎优化网站费用南昌seo排名外包
  • 大学生创意app点子外链seo招聘
  • 杨浦网站建设营销策划运营培训机构
  • 百度上网站怎么做链接搜索引擎
  • 今日深圳新闻最新消息seo快速排名培训
  • 做网站排名多少钱sem竞价是什么意思
  • 高端模板网站建设价格网址怎么申请注册
  • 淘宝客网站一般用什么做的百度指数app
  • 龙岗网站改版自己怎么创建一个网站
  • 为什么要建设公安公众服务网站扬州百度推广公司