Task - queue设计说明文档

更新时间:2024-06-12 04:52:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

机械学院硕2006班

Task Queue 设计说明文档

题目(Title): 分组(Group): 版本(Version):

TASK QUEUE

SDRAM Bridge公共模块 Version1.00,2012,08,26

集成(Integration): Cyclone FPGA:EP1C12Q240C8

参考(References): Vijay A.Nebhrajani的《异步FIFO结构》

1 模块设计目的及其功能

本项目的设计属于SDRAM Bridge中的一个电路模块,目的是为SDRAM访问的申请者提供一个任务队列管理器,使得SDRAM访问申请者的任务申请和实际的与SDRAM的数据传输能够并行工作,提高SDRAM的访问效率,增加SDRAM的访问带宽,能够实现:

(1)响应SDRAM访问者的申请,将访问者的访问命令存储于任务队列中; (2)向SDRAM Controller传送队列中存储的各个访问者的访问命令。

drq_ldack_lcmd_dataclkreset TASK QUEUE sys_clkPLLsdram_clksdram_ckesdram_we_lparameteref_stateaddresst_selp_a_completesdram_ras_lsc_requestsc_readysc_parametersc_addresssc_data_insc_data_outSDRAMINTERFACEsdram_cas_l sdram_cs_lsdram_dqmsdram_addxsdram_addxsdram_datadenseldata_inDATA-FLOW CONTROLLER

data_outWRITE BUFFERDATA TRANSFER MANAGEMENTSDRAMCONTROLLER图1 TASK QUEUE模块在实际中的应用

1

机械学院硕2006班

具体功能包括:

(1)(转述上一级模块的行为描述)SDRAM访问申请者的访问请求由TASK QUEUE响应受理,其行为是缓冲反映访问请求者全部信息的命令字:CMD0[31…0]、CMD1[31…0],同时,访问请求者在访问被受理后处于通信的等待状态,本设计定义的等待状态是无条件等待状态,意味着一旦被启动访问任务,访问请求者能够立即进入访问状态,即两个含义:A、访问请求者的访问模式是从动模式;B、访问请求者的数据通道一直处于打开状态,可以用简单的传输协议实现数据传输,如RDEN/WDEN、TRDY、IRDY。

(2)(转述上一级模块的行为描述)SDRAM Controller在有能力处理新的访问请求时,从TASK QUEUE的任务队列中取出新的访问请求。通过解释请求命令,启动相应的SDRAM访问时序,发出访问请求通道选择信号,利用FIFO的模式开始SDRAM器件和访问请求者之间的数据传输。 (3)上述的描述的关系见图2

CMD_IN外围设备提出的访问请求最多支持8个外设32bitDRQ8bitACK8bitTASK_QUEUE含 优先级选择SEL3bitCMD_OUT32bitSDRAM控制器含总线仲裁用其他逻辑实现外围设备对SDRAM的实际访问

图2 TASK QUEUE与其他模块的关系

(4)最多达8个的SDRAM访问的申请者向TASK QUEUE发出访问请求DRQ[7…0]时,TASK QUEUE根据任务缓冲队列的空满状况给出响应信号ACK[7…0],访问申请者在收到响应信号ACK[7…0]后连续两个时钟周期送出访问请求命令CMD0[31…0]、CMD1[31…0],而TASK QUEUE同时将这两个请求命令字保存在任务缓冲队列中。

(5)多个SDRAM访问的申请者同时向TASK QUEUE发出访问请求DRQ[7…0]时,TASK QUEUE采用一种预先定义的优先顺序选择相应的访问请求者,本设计要求TASK QUEUE平均地响应每一个访问请求者。

(6)TASK QUEUE根据任务队列缓冲器的空满程度、以及SDRAM Controller的任务忙/闲状态来启动传输任务队列的访问请求命令到SDRAM Controller中,这意味着,TASK QUEUE是命令字传输的发起者。 (7)任务队列的管理采用先进先出方式。

2

机械学院硕2006班

2 模块设计要求

本项目设计的要求如下:

(1)本设计用于Cyclone系列的FPGA器件,设计仿真要求Fit的器件是Cyclone系列的EP1C12Q240C8。

(2)要求的工作频率是133MHZ。 (3)最多处理的访问请求者数量为8个。

(4)任务队列缓冲器要求采用16×32的FIFO结构,用FPGA的EAB单元实现,以降低LE单元的使用数量。

(5)要求做改变时钟频率的仿真,保证不出现时序设计错误。为了保证模块具有一定的时序余量,提高可靠性,最高仿真频率达到150MHz。

3 系统模块端口I/O信号的定义

3.1 Source/Destination与Task Queue连接信号(48): A. 输入信号(40):

CMD_IN[31…0],DRQ[7…0] B. 输出信号(8):

ACK[7…0] C. 双向信号(0):

3.2 SDRAM Controller与Task Queue连接信号(34): A.输入信号(1):

ACTIVE

B.输出信号(33):

CMD_OUT[31…0],TQR C.双向信号(0):

3.3 全局公共信号(2): A.输入信号(2):

CLK,RESET B.输出信号(0):

C.双向信号(0):

3

机械学院硕2006班

4 系统模块及其子模块设计

4.1 子模块的划分见图3:

CMD_IN32bitTask_Queue BufferSIDI读Buffer时序ACTIVE32bitCMD_OUT含通道信息

DRQ8bitACK写Buffer时序写Buffer读Buffer地址地址读写Buffer空满判断8bitTQR优先级控制器CLKRESET图3 子模块划分情况

4.2 各子模块具体设计 (1)Task_Queue Buffer模块:

功能:提供一先进先出队列(FIFO),供命令字排队。

具体实现:由Quartus II 的Megawizard Plug-In中的RAM 2-PORT生成。其大小要容纳8组32bit的CMD0和CMD1,由于Buffer两端读写不同步需要加入读使能信号,读写时钟频率相同,采用同一时钟信号控制。 (2)优先级控制器模块:

功能:提供符合需求的优先级规则,对8个通道的外设访问请求进行选择。 具体实现:采用轮询的方法进行设计。每次从不同的起点开始,采用轮询方式查看各个通道是否有请求,优先响应先查到的设备。由于起点是依次变化的,所以每个设备总体来说具有相同优先级。

设计程序流程见图4:

起点计数器计数值加1从该起点开始查询各通道是否有请求起点计数器从起点计数器读取本次轮询的起点有通道提出请求 响应首先查询到的通道请求图4 优先级控制器模块程序流程

4

机械学院硕2006班

该子模块端口定义见表1: 端口名称 方向 reset clk in in 位宽 1 1 全局复位信号。 全局时钟信号。 从写Buffer时序控制模块得到的标志信号,用 s_drq in 1 于控制起点计数器计数,并产生sel_en,意思 是从何时起开始产生sel,这里是由drq和full 的合成产生的。 drq sel sel_en in out out 8 3 1 8通道访问请求信号,低有效。 经优先级选择的通道编号。 用于标识sel信号有效与否,低有效,属于告 知信号,便于模块自由替换。 说明 表1 优先级控制器模块端口定义

(3)写Buffer时序控制模块:

功能:根据优先级控制模块对通道的选择结果,产生相应的响应信号,并控制向Buffer中写入相应的命令字。

具体实现:时序关系采用状态机实现,状态转移图见图5:

图5 写Buffer时序控制模块的状态转移情况

每次ack_en信号使能之后(低电平有效),持续两个时钟周期,分别写入CMD0和CMD1。

该子模块端口定义见表2: 端口名称 方向 位宽 reset in 1 全局复位信号。 5

AckDelay1AckBeginAckDelay2resetIdledrqn = `0` and full = `1`AckReadysel_en = `0`说明

机械学院硕2006班

clk drq Buffer_full sel sel_en s_drq ack ack_en in in in in in out out out 1 8 1 3 1 1 8 1 全局时钟信号。 8通道访问请求信号,低有效。 Buffer满标志,低有效。 经优先级选择的通道编号。。 用于标识sel信号有效与否,低有效。 写Buffer时序控制模块的标志信号,低电平标志一次响应请求、向Buffer中写入命令字的过程。 对8通道访问请求的响应信号,低有效。 DLY1 or ACKn的结果,用于控制Buffer的写使能信号和写Buffer计数器进行计数。 表2 写Buffer时序控制模块端口定义

(4)读Buffer时序控制模块:

功能:响应SDRAM Controller读取新命令字的请求,从Buffer中取出相应的命令字。

具体实现:由于读模块和写模块时序相似,所以其实现参见写buffer模块。 该子模块端口定义见表3: 端口名称 reset clk active Buffer_empty tqr 方向 位宽 in in in in out 1 1 1 1 1 全局复位信号。 全局时钟信号。 由SDRAM Controller提供,用以标识SDRAM Controller是否空闲。 Buffer空标志,低有效。 Task_Queue Read信号,用于控制Buffer的读使 能信号和读Buffer计数器进行计数。 说明 表3 读Buffer时序控制模块端口定义

(5)读/写Buffer地址控制模块:

功能:提供读/写Buffer的地址,和读/写Buffer时序控制模块配合工作。 具体实现:需访问的读/写Buffer地址均为16个,可分别例化一个16进制计数器来实现。在每个读/写周期内需要提供2个读/写地址,分别对应于CMD0和CMD1,所以引入一个使能信号(写Buffer地址的使能信号应选用ack_en,读Buffer地址的使能信号应选用tqr)对计数器进行控制,用clk触发计数。

6

机械学院硕2006班

该子模块端口定义见表4: 端口名称 方向 位宽 reset clk control number in in in out 1 1 1 4 全局复位信号。 全局时钟信号。 计数使能信号,低有效。(写Buffer地址的使能 信号应选用ack_en,读Buffer地址的使能信号应 选用tqr)。 计数器输出,提供读/写Buffer地址。 说明 表4 读/写Buffer地址控制模块端口定义

(6)Buffer满空标志判断模块: 功能:判断Buffer的空满情况。

具体实现:Buffer空满标志判断属本模块难点,本设计未采用老师提示方法,而采用如下方法来判断空满情况:

给读/写指针地址增加一位,当指针的二进制码中最高位不同而其他各位均相等时Buffer为满;当指针的二进制码中所有位均相等时Buffer为空。

该子模块端口定义见表5: 端口名称 reset number_w number_r ack 方向 位宽 in in in in 1 5 5 8 1 全局复位信号 写Buffer地址 读Buffer地址 对8个通道访问请求的响应,低有效 Buffer空标志,低有效。判断条件: number_w= number_r → buffer_empty = 0 Buffer满标志,低有效。判断条件: buffer_full out 1 number_w(5)/= number_r(5) and number_w[4..0]= number_r[4..0] → buffer_empty = 0 表5 Buffer满空标志判断模块端口定义

(7)命令字合成模块(图3中橙色框表示):

功能:将命令字存入Buffer之前,在原CMD0和CMD1的保留位中填入sel信息,尽量减少模块之间的耦合。其中,CMD0和CMD1命令字结构见下表:

7

说明 buffer_empty out 机械学院硕2006班

CMD0命令字: Bit位 名称 解释 Bit31 WR 1/0:读/写Bit30 DI 1/0:访问地Bit17-15 SEL 申请访问Bit14-12 PT Bit11-0 BL 写SDRAM外突发传输长部数据传输延度,单位是迟时钟数 32 SDRAM 址递减/递增 SDRAM的通道 CMD1命令字: 用于定义访问SDRAM的起始地址。 表6 CMD0和CMD1命令字结构

具体实现:只需要利用一个D触发器将sel的信息在时钟上升沿到来时写入 CMD0中即可。

5 模块系统仿真及其子模块仿真

(1) 优先级控制器模块仿真结果(100MHz)

(2) 命令字合成模块的仿真结果(100MHz)

(3) 写Buffer时序控制模块仿真结果(100MHz)

8

机械学院硕2006班

(4) 读Buffer时序控制模块仿真结果(100MHz)

(5) 读/写Buffer地址控制模块仿真结果(100MHz)

(6) Buffer满空标志判断模块设计仿真结果(100MHz)

(7) 整体仿真(50MHz,仅一个通道有请求)

(8) 整体仿真(100MHz,仅一个通道有请求)

9

机械学院硕2006班

(9) 整体仿真(100MHz,多个通道有请求)

(10)整体仿真(100MHz,多个通道有请求)

(11)整体仿真(150MHz,仅一个通道有请求)

(12)整体仿真(150MHz,多个通道有请求)

10

机械学院硕2006班

6 模块资源利用率情况

7 附录

TASK QUEUE模块整体原理图:

clkresetINPUTVCCINPUTVCC commandclkresetsel_ensel[2..0]cmd_in[31..0]inst1INPUTVCCcmd_gen[31..0]cmd_gen[31..0]TK_bufferclkcmd_gen[31..0]number_r[3..0]tqrnumber_w[3..0]ack_eninstcmd_out[31..0]buffer_fullbuffer_emptytqrack_ensel_ensel[2..0]number_r[3..0]number_w[3..0]s_drqcmd_gen[31..0]OUTPUTOUTPUTOUTPUTOUTPUTnumber_r[3..0]tqrack_enNOTsel_ensel[2..0]cmd_in[31..0]INPUTVCCnumber_w[3..0]inst4NOTOUTPUTOUTPUTOUTPUTOUTPUTinst8OUTPUTOUTPUTOUTPUTactivecmd_out[31..0]buffer_fullbuffer_emptytqrack_ensel_ensel[2..0]number_r[3..0]number_w[3..0]s_drqcmd_gen[31..0]priorityclkresets_drqdrq[7..0]inst0sel[2..0]sel_ensel[2..0]sel_entqrr_w_buffer2clkresettqrinst2number_r[4..0]number_r[4..0]r_bufferclkresetactivebuffer_emptyinst6number_w[4..0]number_w[4..0]empty_full_buffertqrtqrs_drqdrq[7..0]INPUTVCCbuffer_emptyr_w_buffer1clkresetack_eninst3w_bufferclkresetbuffer_fullsel_endrq[7..0]sel[2..0]inst9s_drqack_enack[7..0]number_w[4..0]number_r[4..0]number_w[4..0]number_r[4..0]resetinst5buffer_emptybuffer_fullbuffer_emptybuffer_fulls_drqack_enOUTPUTbuffer_fullsel_ensel[2..0]ack[7..0]11

机械学院硕2006班

6 模块资源利用率情况

7 附录

TASK QUEUE模块整体原理图:

clkresetINPUTVCCINPUTVCC commandclkresetsel_ensel[2..0]cmd_in[31..0]inst1INPUTVCCcmd_gen[31..0]cmd_gen[31..0]TK_bufferclkcmd_gen[31..0]number_r[3..0]tqrnumber_w[3..0]ack_eninstcmd_out[31..0]buffer_fullbuffer_emptytqrack_ensel_ensel[2..0]number_r[3..0]number_w[3..0]s_drqcmd_gen[31..0]OUTPUTOUTPUTOUTPUTOUTPUTnumber_r[3..0]tqrack_enNOTsel_ensel[2..0]cmd_in[31..0]INPUTVCCnumber_w[3..0]inst4NOTOUTPUTOUTPUTOUTPUTOUTPUTinst8OUTPUTOUTPUTOUTPUTactivecmd_out[31..0]buffer_fullbuffer_emptytqrack_ensel_ensel[2..0]number_r[3..0]number_w[3..0]s_drqcmd_gen[31..0]priorityclkresets_drqdrq[7..0]inst0sel[2..0]sel_ensel[2..0]sel_entqrr_w_buffer2clkresettqrinst2number_r[4..0]number_r[4..0]r_bufferclkresetactivebuffer_emptyinst6number_w[4..0]number_w[4..0]empty_full_buffertqrtqrs_drqdrq[7..0]INPUTVCCbuffer_emptyr_w_buffer1clkresetack_eninst3w_bufferclkresetbuffer_fullsel_endrq[7..0]sel[2..0]inst9s_drqack_enack[7..0]number_w[4..0]number_r[4..0]number_w[4..0]number_r[4..0]resetinst5buffer_emptybuffer_fullbuffer_emptybuffer_fulls_drqack_enOUTPUTbuffer_fullsel_ensel[2..0]ack[7..0]11

本文来源:https://www.bwwdw.com/article/qtp6.html

Top