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

wamp配置多个网站玉田县住房和城乡建设局网站

wamp配置多个网站,玉田县住房和城乡建设局网站,前端网站开发框架,wordpress生成静态地图前言 FIFO功能模块分两篇文章#xff0c;本篇为同步FIFO#xff0c;另一篇为异步FIFO#xff0c;传送门#xff1a; Verilog功能模块——异步FIFO-CSDN博客 同步FIFO实现起来是异步FIFO的简化版#xff0c;所以#xff0c;本博文不再介绍FIFO实现原理#xff0c;感兴趣… 前言 FIFO功能模块分两篇文章本篇为同步FIFO另一篇为异步FIFO传送门 Verilog功能模块——异步FIFO-CSDN博客 同步FIFO实现起来是异步FIFO的简化版所以本博文不再介绍FIFO实现原理感兴趣的同学可以去看我异步FIFO的文章基本看懂了异步FIFO同步FIFO自然就懂了。 二. 模块功能框图与信号说明 信号说明 分类信号名称输入/输出说明参数DATA_WIDTH–数据位宽ADDR_WIDTH–地址位宽FIFO深度2**ADDR_WIDTHFWFT_EN–First word fall-through输出模式使能高电平有效FIFO写端口dininputFIFO数据输入wr_eninputFIFO写使能fulloutputFIFO满信号almost_fulloutputFIFO快满信号FIFO剩余容量1时置高FIFO读端口doutoutputFIFO数据输出rd_eninputFIFO读使能emptyoutputFIFO空信号almost_emptyoutputFIFO快空信号FIFO内数据量1时置高时钟与复位clkinputFIFO读时钟rstinputFIFO读复位 注意 信号的命名与Vivado中的FIFO IP核完全一致复位均为高电平复位与Vivado中的FIFO IP核保持一致复位为异步复位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 1b1; endreg [ADDR_WIDTH:0] wptr; always (posedge clk or posedge rst) beginif (rst)wptr 0;else if (wr_en ~full)wptr wptr 1b1; 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 1b1; wire [ADDR_WIDTH:0] wptr_p1 wptr 1b1; //-- 生成读写指针 ------------------------------------------------------------// 生成empty与almost_empty信号 always (*) beginif (rst)empty 1b1;else if (rptr wptr)empty 1b1;elseempty 1b0; endalways (*) beginif (rst)almost_empty 1b1;else if (rptr_p1 wptr || empty)almost_empty 1b1;elsealmost_empty 1b0; end //-- 生成empty与almost_empty信号 ------------------------------------------------------------// 生成full与almost_full信号 always (*) beginif (rst)full 1b1;else if ((wptr[ADDR_WIDTH] ! rptr[ADDR_WIDTH]) (wptr[ADDR_WIDTH-1:0] rptr[ADDR_WIDTH-1:0]))full 1b1;elsefull 1b0; endalways (*) beginif (rst)almost_full 1b1;else if (((wptr_p1[ADDR_WIDTH] ! rptr[ADDR_WIDTH]) (wptr_p1[ADDR_WIDTH-1:0] rptr[ADDR_WIDTH-1:0]))|| full)almost_full 1b1;elsealmost_full 1b0; end //-- 生成full与almost_full信号 ------------------------------------------------------------三. 功能仿真 比较以下情形中的fifo行为是否与FIFO IP核一致 情形一单次写单次读 情形二写满后再读空 情形三在读的过程中写在写的过程中读 判断模块功能正常的依据 写入数据是否按顺序正常读出空信号和满信号是否正常输出。 为方便比较编写了顶层文件实例化了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; endendmodule8bit16深度FWFT FIFO仿真波形如下 可以看到模块输出的自编fifo与vivado fwft fifo的写端口和读端口行为是一致的只是可能会超前或滞后一定的clk周期。 可以看到empty拉低时数据已经有效了所以自编模块实现了FWFT功能Vivado FIFO的实际深度为17所以它多读出了一个数据空信号更晚拉高。 因篇幅问题其它条件下的仿真不再展示感兴趣的同学可通过更改testbench自行验证。 FWFT_EN改为0注意同步修改Vivado FIFO的配置 四. 工程分享 Verilog功能模块——同步FIFOVivado 2021.2工程。 欢迎大家关注我的公众号徐晓康的博客回复以下四位数字获取。 8302 建议复制过去不会码错字 或者在我的码云仓库获取传送门 徐晓康/Verilog功能模块 - 码云 - 开源中国 (gitee.com) 徐晓康的博客持续分享高质量硬件、FPGA与嵌入式知识软件工具等内容欢迎大家关注。
http://www.hkea.cn/news/14521431/

相关文章:

  • 织梦网站代码国家建设协会工程质量分会网站
  • 做一个营销型网站需要多少钱在上海做兼职在哪个网站
  • 东莞网站搭建找哪里公司网页制作h5
  • 大连比较好的的网站建设公司天天传媒有限公司网站
  • 保定网站优化哪家好北京保障房建设网站
  • 韩国时尚网站欣赏青海网站设计高端
  • 国家中管局官方网站研究所建设要求网站建设合同属于购销吗
  • 顶尖网站建设网站开发使用软件有哪些
  • 做淘宝要网站网站建设技术公司排名
  • 张家港网站制作网络推广深圳制作网站培训
  • wordpress esc html eseo关键词排名技术
  • 微信订阅号不认证可以做网站吗做网站公司牛鼻子
  • 做shopify网站谷德设计网案例设计
  • 新泰网站制作公司网站开发的职业分析
  • 网站优化工具阳江市网站备案幕布
  • 舞阳专业做网站陕西住房和城乡建设厅网站6
  • 深圳移动网站建设公wordpress获取文章id
  • 360建筑网是什么网站自己做商城网站能卖服装吗
  • 在网站制作意见征集是怎么做的wordpress 头条号
  • 贵州网站建设培训网站头像有啥做会清晰
  • 做推广网站的文章术语一站式网站建设公司
  • 手机怎样做自己的网站初学seo网站推广需要怎么做
  • 做网站怎么买断源码ionic做网站
  • 服装行业网站建设方案怎么制作自己的网页
  • 襄阳网站建设哪个好中国建筑网官网证书查询
  • 网站展示怎么做团队合作网站
  • 做淘宝图标网站中国做民宿的网站
  • 网站开发网页设计北京师范大学出版社重庆市网站编辑
  • 深圳网站建设公司信息大连零基础网站建设培训哪里有
  • 大岭山建设网站宝安网站优化