- 1、本文档共114页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Xilinx FPGA设计与实践教程第5章
d2_next = d2_reg + 1; else //计数达到 999 d2_next = 4b0; end end end //输出逻辑 assign d0 = d0_reg; assign d1 = d1_reg; assign d2 = d2_reg; endmodule 3.验证电路 为了验证秒表电路,可以采用前面学过的动态七段数码管扫描电路来显示秒表的输出。具体代码如程序5-19所示。注意:开始时的数码管值为0;另外,go和clr信号需要映射到开发板的按键上去。 【程序5-19】 秒表验证电路。 module stop_watch_test ( input wire clk, input wire [1:0] btn, output wire [3:0] an, output wire [7:0] sseg ); //信号声明 wire [3:0] d2, d1, d0; //初始化七段数码管显示模块 disp_hex_mux disp_unit (.clk(clk), .reset(1b0), .hex3(4b0), .hex2(d2), .hex1(d1), .hex0(d0), .dp_in(4b1101), .an(an), .sseg(sseg)); //例化秒表模块 stop_watch_if counter_unit (.clk(clk), .go(btn[1]), .clr(btn[0]), .d2(d2), .d1(d1), .d0(d0) ); endmodule 5.5.3 FIFO缓冲器设计 FIFO(First-In-First-Out)缓冲器是两个子系统之间数据交换的一个弹性存储空间,常用于不同时钟域之间的数据异步交换。如图5-12所示为FIFO缓冲器的读写结构图。FIFO缓冲器由两个控制信号rd和wr控制读写操作。当wr有效时,输入数据写入缓冲器,而FIFO缓冲器的指针头部经常处于有效状态,所以可以随时读取;rd信号也可以理解为一个“移除”信号,当它有效时,当前FIFO缓冲器单元的数据被移除,下一个单元数据有效。 图5-12 FIFO缓冲器的读写结构图 1.基于队列操作的应用 实现FIFO缓冲器的一种方法是针对寄存器文件增加一个FIFO控制电路以完成FIFO的构建。在寄存器文件中,寄存器排列成带有读写指针的队列,写指针指向队列的开头,读指针指向队列的末尾。每次读写操作都会使指针加1。8个存储单元的队列操作如图5-13所示。 图5-13 FIFO缓冲器读写时序图 FIFO缓冲器通常包含两个状态信号:full和empty,用来指示FIFO处于满状态(不能再进行写操作)和空状态(不能再进行读操作)。然而不管哪种情况发生,读写指针值都会相同,那么对于控制器来说,最大的困难在于分辨到底是哪种情况发生了。可以采用两个寄存器来追踪空和满状态,初始化时寄存器分别设置为1和0,然后通过wr和rd信号来修改其值。具体代码如程序5-20所示。 【程序5-20】 FIFO控制器。 module fifo #( parameter B=8, //数据位宽 W=4 //地址位宽 ) ( input wire clk, reset, input wire rd, wr, input wire [B-1:0] w_data, output wire empty, full, output wire [B-1:0] r_data ); //信号声明 reg [B-1:0] array_reg [2**W-1:0]; //寄存器数组 reg [W-1:0] w_ptr_reg, w_ptr_next, w_ptr_succ; reg [W-1:0] r_ptr_reg, r_ptr_next, r_ptr_succ; reg fu
文档评论(0)