异步、同步数据接口设计

上传人:pu****.1 文档编号:562195952 上传时间:2024-01-05 格式:DOCX 页数:14 大小:274.79KB
返回 下载 相关 举报
异步、同步数据接口设计_第1页
第1页 / 共14页
异步、同步数据接口设计_第2页
第2页 / 共14页
异步、同步数据接口设计_第3页
第3页 / 共14页
异步、同步数据接口设计_第4页
第4页 / 共14页
异步、同步数据接口设计_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《异步、同步数据接口设计》由会员分享,可在线阅读,更多相关《异步、同步数据接口设计(14页珍藏版)》请在金锄头文库上搜索。

1、异步数据接口设计一、设计要求1、输入数据以学号重复循环组成,学号的每一位以一个字节(8bi t) 表示,以字节串行方式,高位字节先输入,低位字节后输入。字节输 入时钟频率30MHz,频率初始相位自定义。2、输出数据:以字节串行方式输出学号,高位字节先输出,低位 字节后输出。学号的输出必须连续不间断地完整输出一个学号,相邻 学号间可插入多个H“FF”字节。字节输出时钟频率100MHz,频率初 始相位自定义。3、分别以同步FIFO和异步FIFO实现上述接口设计。完成硬件描 述语言设计、综合、时序仿真验证。分别对以上两种实现方案进行性 能分析并比较各自的优缺点。二、设计分析1、同步FIFO由同一个时

2、钟控制FIFO的读写操作,所以设计相对 简单,对于实现上述接口设计,可以简单划分为读控制单元、写控制 单元、数据转存单元实现。其中读控制单元为简单的逻辑控制单元, 主要用于产生读信号,写控制单元类似于读控制单元,主要用于产生 写状态信号,数据转存单元主要由存储器组成,当写信号有效,将 8bit 的输入数据写入存储器(存储器未满情形下),当读信号有效, 从存储器中读出 8bit 的数据(存储器未空情形下)。结构图如图1 所示:图 1 、同步 FIFO 的接口设计结构图2、异步FIFO分别利用读时钟和写时钟控制FIFO的读写操作,因 为涉及到跨时钟域设计,相对于同步FIFO时序要复杂。如图2结构

3、图所示,设计划分为数据通道单元、控制单元、状态控制单元。数据 通道单元类似于数据转存单元,控制数据的流入流出存储器。控制单 元根据输入产生读写控制标志,从而控制其他两个模块的读写。状态 控制单元主要用于产生标志存储器当前状态(空、满等)的各个标志 位,同时产生读写时访问存储器需要的指针。其基本结构图如图 2 所示:图2、异步FIFO的接口设计结构图三、设计实现1、基于上述同步 FIFO 接口设计的分析,分模块对电路进行 HDL建模,HDL描述如下:(1) 读操作控制模块:module read_control (input clock,reset,input stk_empty,output

4、reg read);always (posedge clock or posedge reset)if(reset)read=1b0;else if(!stk_empty)read=1b1;else read=1b0;endmodule(2) 写操作控制模块:module write_control (input clock,reset,input stk_full,output reg write );always (posedge clock or posedge reset)if(reset)write=1b0;else if(!stk_full)write=1b1;else write

5、=1b0;endmodule(3) 数据转换模块:module fifo_syn #(parameterstk_width=8,half_stk_depth=8,stk_depth=16,ptr_width=4)(clock,reset,data_in,write,read,data_out,stk_full,stk_almost_full,stk_h alf_full,stk_almost_empty,stk_empty);input clock,reset,write,read;input stk_width-1:0 data_in;output stk_full,stk_almost_f

6、ull,stk_half_full,stk_almost_empty,stk_empty;output stk_width-1:0 data_out;/reg stk_full,stk_almost_full,stk_half_full,stk_almost_empty,stk_empty;reg stk_width-1:0 data_out;reg ptr_width-1:0write_ptr,read_ptr;reg ptr_width:0ptr_gap;reg stk_width-1:0stackstk_depth-1:0;assign stk_full=(ptr_gap=stk_dep

7、th)?1b1:1b0;assign stk_almost_full=(ptr_gap=(stk_depth-2)?1b1:1b0;assign stk_half_full=(ptr_gap=half_stk_depth)?1b1:1b0;assign stk_almost_empty=(ptr_gap=2)?1b1:1b0;assign stk_empty=(ptr_gap=0)?1b1:1b0;always (posedge clock or posedge reset)if(reset)beginwrite_ptr=1b0;read_ptr=1b0;ptr_gap=1b0;endelse

8、beginif(write)&(!stk_full)&(!read)beginstackwrite_ptr=data_in;write_ptr=write_ptr+1b1;ptr_gap=ptr_gap+1b1;endelse if(read)&(!stk_empty)&(!write)begindata_out=stackread_ptr; read_ptr=read_ptr+1b1; ptr_gap=ptr_gap-1b1;endelse if(write)&(read)&(stk_full)&(!stk_empty)begindata_out=stackread_ptr; read_pt

9、r=read_ptr+1b1; ptr_gap=ptr_gap-1b1;endelse if(write)&(read)&(stk_empty)&(!stk_full)beginstackwrite_ptr=data_in;write_ptr=write_ptr+1b1;ptr_gap=ptr_gap+1b1;endelse if(write)&(read)&(!stk_full)&(!stk_empty) beginstackwrite_ptr=data_in;write_ptr=write_ptr+1b1;data_out=stackread_ptr;read_ptr=read_ptr+1

10、b1;endendendmodule(4) 顶层例化:module top_fifo #(parameter stk_width=8)(clock,reset,data_in,data_out,stk_full,stk_almost_full,stk_half_full, stk_almost_empty,stk_empty);input clock,reset;input stk_width-1:0 data_in;output stk_full,stk_almost_full,stk_half_full,stk_almost_empty,stk_empty;output stk_width

11、-1:0 data_out;wire write_net,read_net;write_control U1(clock,reset,stk_full,write_net);read_control U2( clock,reset,stk_empty,read_net);fifo_synU3(clock,reset,data_in,write_net,read_net,data_out,stk_full,stk_almost_full ,stk_half_full,stk_almost_empty,stk_empty);endmodule(5) test bench 模块:timescale

12、1ns/1nsmodule tb_top_fifo #(parameter stk_width=8);reg clock,reset;reg stk_width-1:0 data_in;wire stk_full,stk_almost_full,stk_half_full,stk_almost_empty,stk_empty;wire stk_width-1:0 data_out;top_fifoU(clock,reset,data_in,data_out,stk_full,stk_almost_full,stk_half_full,stk_almost_empty,stk_empty);in

13、itialbeginclock=0;reset=0;data_in=0;endalways #5 clock=clock;initialbegin#10 reset=1;#10 reset=0;endinitialbegin#20repeat(10)begin#10 data_in=8d2;#10 data_in=8d0;#10 data_in=8d1;#10 data_in=8d3;#10 data_in=8d2;#10 data_in=8d2;#10 data_in=8d2;#10 data_in=8d4;#10 data_in=8d0;#10 data_in=8d2;#10 data_i

14、n=8d3;#10 data_in=8d2;#10 data_in=8d15;#10 data_in=8d15;endendinitial #1000 $stop;endmodule2、基于上述异步 FIFO 接口设计的分析,分模块对电路进行 HDL建模,HDL描述如下:(1) 控制单元module control_unit(inout read,input write,input stk_empty,input stk_full,output read_fr_stk,output write_to_stk);assign write_to_stk=(write & (!stk_full);a

15、ssign read_fr_stk=(read & (!stk_empty);endmodule(2) 数据通道单元Module datapath_unit #(parameter stack_width=8,stack_depth=16,poiter_width=4)(input clk_write,input clk_read,input rst,input read_fr_stk,input write_to_stk,input poiter_width-1:0write_ptr, input poiter_width-1:0read_ptr, inputstack_width-1:0 dat

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号