信号源FPGA概要设计0528.docx
《信号源FPGA概要设计0528.docx》由会员分享,可在线阅读,更多相关《信号源FPGA概要设计0528.docx(45页珍藏版)》请在冰豆网上搜索。
信号源FPGA概要设计0528
信号源系统FPGA概要设计
北京阿格思科技有限公司
2010-4-11
历史记录:
版本
设计
审核
说明
V0.1
肖晖
肖晖
初次设计
V0.2
周福刚
补充系统框图(模拟和数字),时钟域分析图,模块端口信号图以及主状态图。
目录:
1.系统简要说明
1.1设计目的
为实现在FCT200-HD系统中,完成对于不同厂家与不同类型的数字电视主板测试的测试信号驱动。
1.2设计平台
使用ISE11.4开发环境,使用Verliog语言进行设计。
1.3设计输入输出及参考文档
设计输入:
《FCT200-HD平台信号源系统概要设计》。
设计输出:
指导详细FPGA逻辑设计。
1.4系统框图及工作模式说明
1.4.1整体系统框图描述
下图为系统总体框图(数字部分):
下图为系统总体框图(模拟部分):
1.4.2整体系统时钟域分析
●模拟部分时钟域
●数字部分时钟域
1.4.3整体系统顶层外端口定义
系统顶层TOP外端口信号定义:
1.4.4系统工作模式描述
FPGA内部有以下3种主要工作模式:
A.数据下载模式
数据下载模式是指在外部主机的控制下,将图形数据文件下载到FLAH芯片中。
按以下步骤进行:
STEP1:
主机接口模块在外部主机控制下填充数据RAM。
STEP2:
主机接口模块在外部主机控制下填充指令RAM。
STEP3:
主机接口模块在外部主机控制下启动中心控制模块。
STEP4:
中心控制模块读指令RAM,获取FLASH目的地址以及数据长度。
STEP5:
中心控制模块传递地址及数据信息到FLASH接口模块,并启动FLASH接口模块的写进程。
STEP6:
中心控制模块监测FLASH写进程(判断超时)。
STEP7:
中心控制模块将FLASH写进程结果写回到指令状态RAM,并通知主机接口模块FLASH写进程结束。
特别注意:
外部主机必须处理并记录FPGA芯片中数据信息,包括数据长度、数据地址等,为后续的数据加载模式服务。
B.数据加载模式
数据加载模式是指在外部主机的控制下,将FLASH中的有效数据搬移到外部的DDR2内存中,按以下步骤进行:
STEP1:
主机接口模块在外部主机控制下填充指令RAM。
STEP2:
主机接口模块在外部主机控制下启动中心控制模块。
STEP3:
中心控制模块读指令RAM,获取FLASH目的地址以及数据长度以及DDR2内存的地址。
STEP4:
中心控制模块传递地址及数据信息到FLASH接口模块,并启动FLASH接口模块的读进程。
STEP5:
中心控制模块监测FLASH读进程(判断超时),并实时将FLASH中读出数据填充到数据RAM中。
STEP6:
FLASH读进程结束(无错误),中心控制模块将启动DDR2内存写进程,并将DDR2地址信息传递给外存接口模块,并交出数据RAM的控制权给外存接口模块。
FLASH读进程结束(有错误),则进程跳转到“STEP8”。
STEP7:
中心控制模块监测外存接口模块写进程(判断超时)。
STEP8:
中心控制模块将运行结果信息写回到指令状态RAM,,并通知主机接口模块操作结束。
特别注意:
外部主机必须将以前记录的FLASH中的正确信息传递给FPGA,FPGA并不进行数据的合法性与有效性的判断。
C.数据输出模式
数据输出模式是指在外部主机的控制下,将外部DDR2存储芯片中的数据,依照一定的格式,周期性的输出到外部的显示输出芯片中去,按以下步骤操作:
STEP1:
主机接口模块在外部主机控制下填充指令RAM。
STEP2:
主机接口模块在外部主机控制下启动中心控制模块。
STEP3:
中心控制模块读指令RAM,获取输出显示模式等信息以及数据长度和DDR2内存的地址。
STEP4:
中心控制模块启动数据输出进程(与数据输出接口模块使用FIFO进行数据对接)。
STEP6:
一次数据输出进程结束后,重复“STEP4”步骤直到中心控制模块启动新的操作为止。
●下图为数据下载FLASHOP操作模式相关工作模块在系统总体框图中的位置(图中红色标出)。
●下图为数据加载模式RELOAD相关工作模块在系统总体框图中的位置(图中红色标出)。
●下图为数据显示模式VOUT相关工作模块在系统总体框图中的位置(图中红色标出)。
1.5设计指标
外部使用200MHz的工作频率的DDR2芯片(16bit数据总线宽度,实现DDR2-400性能)。
内部状态使用200MHz的工作频率。
外部数据输出接口模块使用可编程PLL控制输出与工作频率,工作频率范围为35~200MHz。
使用SPARTAN-6XC6SLX16芯片实现上述设计。
1.6系统资源消耗评估
待定。
2.主机接口模块功能详细描述
2.1基本规格描述
主机接口模块的主机端使用SPI接口进行控制,使用局部时钟。
2.2主机接口模块端口信号描述
2.2.1信号说明
信号名
信号说明
SPI时钟信号
SPI数据输出通道,对于FPGA来说为输入
SPI片选信号
地址选择信号,用于选择RAM(指令/状态RAM和数据RAM);
系统复位信号;
系统清除当前状态信号
系统工作的起始信号,高有效
FLASH写进程判断(超时)
用于与ARM通信,为高时不接收数据,为低时接收ARM数据
系统请求向ARM发送数据
SPI数据线,ARM数据输入通道,FPGA数据输出
2.3状态机描述
2.3.1主状态图
1.信号说明
信号名
信号说明
指令写开始信号,CMDW_START=(SPI_CS==0&&ADDR==CMDW);
指令读开始信号,CMDW_START=(SPI_CS==0&&ADDR==CMDR)
数据写开始信号,DATAW_START=(SPI_CS==0&&ADDR==DATAW)
数据写开始信号,DATAR_START=(SPI_CS==0&&ADDR==DATAR)
读(或写)RAM的基地址,不同前缀(*)表示不同状态
判断ADDR信号为指令写的参数
判断ADDR信号为数据写的参数
判断ADDR信号为指令读的参数
判断ADDR信号为数据读的参数
RAM读和写的停止信号,STOP=SPI_CS;
2.状态说明
1)IDLE状态:
上电或复位后状态,BUSY信号为低,当满足条件SPI_CS==0&&ADDR==X时,则进入X状态(X分别CMD_RAM_WR,CMD_RAM_RD,DATA_RAM_WR,DATA_RAM_RD)
2)CMD_RAM_WR状态:
指令RAM写状态,向指令RAM中写入指令数据,给出完成该状态的控制信号CMDW_START,CMDW_BASE_ADDR,BUSY信号为低,当信号SPI_CS==1时,状态结束,跳回IDLE状态;
3)DATA_RAM_WR状态:
指令RAM写状态,向数据RAM中写入指令数据,给出完成该状态的控制信号DATAW_START,CMDW_BASE_ADDR,BUSY信号为低,当信号SPI_CS==1时,状态结束,跳回IDLE状态;
4)CMD_RAM_RD状态:
指令RAM读状态,从指令RAM中读出指令数据,给出完成该状态的控制信号CMDR_START,CMDR_BASE_ADDR,并将BUSY信号拉高,当信号SPI_CS==1时,状态结束,跳回IDLE状态;
5)DATA_RAM_WR状态:
指令RAM写状态,从数据RAM中读指令数据,给出完成该状态的控制信号DATAR_START,DATAR_BASE_ADDR,并将BUSY信号拉高,当信号SPI_CS==1时,状态结束,跳回IDLE状态;
2.3.2子状态图
子模块A:
1.信号说明
信号名
信号说明
2.状态说明
子模块B:
1.信号说明
信号名
信号说明
2.状态说明
2.4主要输入输出信号规格描述
1)根据主状态机可以将这个模块分为四个独立模块,分别是指令RAM写模块,数据RAM写模块,指令RAM读模块,数据RAM读模块,其中指令RAM写模块和数据RAM写模块功能相同,仅仅是数据位数不同,读模块也是一样,下面各取一个进行说明;
顶层模块主要内部信号:
信号名
信号说明
DATAR_BASE_ADDR
将数据从RAM中读出的基地址
STOP
RAM读和写状态的停止信号
SPI_CLK_R
系统时钟MCLK检测到的SPI_CLK上升沿标志信号
SPI_CLK_F
系统时钟MCLK检测到的SPI_CLK下降沿标志信号
2)指令RAM写模块内部结构
上面结构包括了整个写模块的输入输出和内部连接信号
a)输入信号
信号名
信号说明
CLK
系统时钟
RST
复位信号,由信号RESET和CLEAR产生,RST=RESET||CLEAR
SPI串行数据输入,SPI_DOUT
写模块启动信号(*代表CMD和DATA,即CMDW_START和DATAW_START)
移位使能信号,WR_SHIFT=SPI_CLK_F
向RAM中写数据的基地址,CMDW_BASE_ADDR
b)输出信号
信号名
信号说明
CMDW_D[N-1:
0]
向RAM中写的数据(指令N=32,数据N=8)
CMDW_WE
RAM的写使能信号,1为写,0为读
CMDW_EN
RAM使能信号,只有该信号有效时,向RAM发送的读写命令才有效
CMDW_ADDR
向RAM发送的读写地址
c)内部信号
信号名
信号说明
写RAM模块数据输入端口,接收移位模块的并行输出
将串行数据转为并行的数据输出,由移位模块发送给写模块
写模块加载新的数据使能信号
移位模块产生,通知写模块在写完最后一个数据后结束写进程
移位计数器,用于控制数据有效位数(指令为32位,数据为8位)
地址偏移量,初始值为0,每完成一次写RAM操作加1
3)指令RAM读模块内部结构
上面结构包括了整个读模块的输入输出和内部连接信号
a)输入信号
信号名
信号说明
CLK
系统时钟MCLK
RST
复位信号,由信号RESET和CLEAR产生,RST=RESET||CLEAR
DIN[N-1:
0]
从RAM中读取的数据输入端口(指令N=32,数据N=8)
*R_START
读模块启动信号,(*表示指令或数据,即分别为CMDR_START或DATA_START)
RD_SHIFT
移位使能信号,RD_SHIFT=SPI_CLK_R
BASE_ADDR
向RAM中读数据的基地址
b)输出信号
信号名
信号说明
SDOUT
串行输出,输出个外部接口SPI_DIN
CMDR_WE
RAM的写使能信号,1为写,0为读
CMDR_EN
RAM使能信号,该信号有效时,向RAM发送的读写命令才有效
CMDR_ADDR
向RAM发送的读写地址
c)内部信号
信号名
信号说明
DOUT[N-1:
0]
读模块将RAM中读取的数据发送给移位输出模块的端口,(指令N=32,数据N=8)
PDIN[N-1:
0]
移位模块并行输入数据端口,(指令N=32,数据N=8)
REQ
读模块向移位输出模块发送的读取新的数据的请求信号
ACK
移位输出模块读取新的信息时回应读模块的信号
*R_CNT
移位计数器,用于控制移位有效数据(*分别表示指令和数据,指令为32位,数据位8位)
OFFSET
地址偏移量,初始值为0,数据被移位输出模块加载后(ACK==1),加1
3.FLASH接口模块功能详细描述
3.1基本规格描述
使用现成的FLASH接口控制完成FLASH接口控制设计(详见“新数据采集板FPGA逻辑设计”文档)。
下图为flash模块端口信号定义block图:
3.2信号描述
信号名
信号说明
3.3状态机描述
3.4主要输入输出信号规格描述
4.外存接口模块功能详细描述
4.1基本规格描述
使用IP生成工具生成现成的DDR2控制IP核,围绕现成IP核进行后续设计。
4.2IP信号及整体外存模块层次描述
4.2.1IP接口信号
上图为使用IP生成的DDR2SDRAM控制器端口及模块,下面将对用户接口信号做说明;
用户接口信号说明
信号名
I/O
信号说明
sys_clkandsys_clkb
I
系统时钟的差分时钟对,这里可以选择单端时钟信号,则只需要sys_clk信号
reset_in_n
I
复位信号,默认情况下低有效
cntrl0_burst_done
I
用于终止读或写命令,在给出最后一个地址后将信号拉高4个周期(若burst长度为4,为2个周期)
cntrl0_user_command_register
I
用户命令,user_command[2:
0]
user_command[2:
0]
user_commandDescription
000
无操作
010
初始化
100
写命令
110
读命令
other
预留
cntrl0_user_data_mask
I
写入数据掩码
cntrl0_user_input_data
I
DDR2SDRAM输入数据
cntrl0_user_input_address
I
写入数据地址,由bankaddress,columnaddress,rowaddress组成
cntrl0_init_done
O
初始化结束标志信号
cntrl0_ar_done
O
自动刷新结束标志信号
cntrl0_auto_ref_req
O
DDR2SDRM自动刷新请求信号
cntrl0_user_cmd_ack
O
确认用户读写命令信号,在这个信号给出前,用户不能给出新的命令
cntrl0_clk_tb
O
输出0°相移时钟信号,用于与用户同步
cntrl0_clk90_tb
O
输出90°相移时钟信号,用于与用户同步
cntrl0_sys_rst_tb
O
通过系统复位输入生成b
cntrl0_sys_rst90_tb
O
通过系统复位输入生成的90度相移复位
cntrl0_sys_rst180_tb
O
通过系统复位输入生成的180度相移复位
cntrl0_sys_user_data_valid
O
输出数据有效标志信号
cntrl0_user_output_data
O
输出数据
4.2.2外存模块整体框图
1)DDR2_TOP模块为顶层,接收外部读写控制信号,地址信号,控制内部各模块工作;
1)DATA_IN模块,控制FIFO_IN模块的读取,完成向SDRAM中输入数据;
2)ADDR&&CMD模块,给出读写地址和读写命令;
3)DATA_OUT模块,将DDR2中读出的数据写入FIFO_OUT;
4)FIFO_IN模块,DDR2和FLASH之间数据接口;
5)FIFO_OUT模块,DDR2和输出模块数据接口;
6)WRITE模块,产生写的地址和命令;
7)READ模块,产生读的地址和命令;
4.3状态机描述
4.3.1DDR2模块主状态图
1.信号说明
信号名
信号说明
RST_F
DDR2SDRAM复位结束标志信号,
RST_F=sys_rst_tb&&sys_rst90_tb&&sys_rst180_tb
INIT_DONE
初始化结束标志信号
WRITE_STR
写过程开始信号
READ_STR
读过程开始信号
BUSY
DDR2模块在进行读写时为高,不接受外部指令;在READY时为低,可以接受外部指令
WR_BASE_ADDR
每一次写数据的起始地址
RD_BASE_ADDR
每一次读数据的起始地址
REQ
外部输入读或写命令前发请求信号
ACK
回应外部请求信号,当DDR2未进行读写时回应请求
WR_FINISH
写结束标志信号
RD_FINISH
读结束标志信号
2.状态说明
1)IDLE状态:
上电或复位后状态,当所有复位操作完成后进入INIT状态
2)INIT状态:
对DDR2SDRAM进行初始化,发送初始化命令,等待初始化完成(INIT_DONE=1)后进入READY状态
3)READY状态:
根据外部读写命令和地址,判断进入相应状态,并给出起始地址;
4)WRITE状态:
向DDR2中写入数据状态,当WR_FINISH有效后进入READY状态;
5)READ状态:
向DDR2中读取数据状态,当RD_FINISH有效后进入READY状态;;
4.3.2DDR2写过程的地址写入状态图
1.信号声明
信号名
信号说明
WRITE_STR
写开始信号,主状态机给出的写DDR2开始信号
USER_CMD_ACK
用户命令确认信号,DDR2SDRAM给出
OFFSET
写地址偏移量,用于控制写地址增加,可通过设置其最大值来确定DDR2一次写入数据包的大小
ADDR
写地址ADDR=WR_BASE_ADDR+OFFSET;
WR_BASE_ADDR
外部给出的写起始地址;
CLK0_TB
时钟信号,由DDR2SDRAM的IP接口给出,用于同步
FINISHADDR
写入地址的最大值,WR_BASE_ADDR+OFFSET_MAX
OFFSET_MAX
OFFSET最大值,设置后可以确定DDR一次写数据包大小
BURST_DONE
用于终止读或写命令,在给出最后一个地址后将信号拉高保持4个周期(若burst长读为4,则保持2个周期)
BURST_CNT
BURST_DONE命令计数器,通过计数保证BURST_DONE保持足够的有效时间
STOP
写数据模块停止信号,当完成一个数据包写入后,将信号置1,令写数据模块停止工作;
2.状态说明
1)IDLE状态:
上电或复位后初始状态,当WRITE_STR信号为1,同时USER_CMD_ACK信号为0时进入ADDR状态,否则在IDLE状态;
2)ADDR状态:
给出写命令和当前地址,当USER_CMD_ACK为1时进入WAIT1状态;
3)WAIT1状态:
一个周期进入BURST_DONE状态;
4)BURST_DONE状态:
给出BURST_DONE命令,进入WAIT2状态;
5)WAIT2状态:
计数器BURST_CNT计数,当BURST_CNT=2时,将BURST_DONE信号拉低,进入JUDGE状态;
6)JUDGE状态:
判断OFFSET的值,是否完成2K数据写入,完成进入IDLE状态,并将STOP信号拉高,同时发送写结束标志信号WR_FINISH,控制写数据模块停止,否则将OFFSET加1,进入WAIT3状态;
7)WAIT3状态:
当FIFO中数据量足够完成一次写操作,并且USER_CMD_ACK=0时,进入ADDR状态继续写过程,否则在WAIT3状态等待满足上述条件;
4.3.3DDR2写过程的数据写入状态图
1.信号声明
信号名
信号说明
WRITE_STR
写开始信号,主状态机给出的写DDR2开始信号
DATA_CNT
数据计数器,控制数据满足一个BURST长度
CLK90_TB
数据写入时钟信号
STOP
写地址模块产生,表示已经完成一个数据包的写入
2.状态说明
1)IDLE状态:
上电或复位后状态,当WRITE_STR信号为1并且USER_CMD_ACK=0时,进入FIRST_DATA状态
2)FIRST_DATA状态:
向FIFO发送读使能信号,读出第一个要写入的数据,一个周期进入WAIT1状态;
3)WAIT1状态:
检测USER_CMD_ACK信号,保持第一个数据,并不再读取新的数据,当信号为1时,进入DATA_WR状态;
4)DATA_WR状态:
:
进入连续写入状态,令FIFO读使能有效,开始连续读出数据,同时数据计数器DATA_CNT开始计数,当计数器DATA_CNT=1时,将FIFO读使能拉低,当计数器DATA_CNT=2时进入WAIT2状态;
5)WAIT2状态:
检测USER_CMD_ACK信号,当信号为低,且FIFO中数据满足一次写过程,进入FIRST_DATA状态,若信号STOP为高,则表示完成一个数据包的写入,进入IDLE状态;
4.3.3DDR2读过程的状态图
1.信号说明
信号名
信号说明
READ_STR
读开始信号,主状态机给出的读DDR2开始信号
USER_CMD_ACK
用户命令确认信号,DDR2SDRAM给出
OFFSET
写地址偏移量,用于控制写地址增加,可通过设置其最大值来确定DDR2一次读取数据包的大小
ADDR
读地址ADDR=RD_BASE_ADDR+OFFSET;
RD_BASE_ADDR
外部给出的读起始地址;
BURST_CNT
BURST_DONE命令计数器,保证BURST_DONE命令保持足够的有效时间
FINISHADDR
读取地址的最大值,RD_BASE_ADDR+OFFSET_MAX
OFFSET_MAX
OFFSET最大值,设置后可以确定DDR2一次读取数据包的大小
2.状态说明
1)IDLE状态:
上电或复位后初始状态,当WRITE_STR信号为1,进入ADDR状态;
2)ADDR状态:
给出写命令和当前地址,当USER_CMD_ACK为1时进入WAIT1状态;
3)WAIT1状态:
一个周期进入BURST_DONE状态;
4)BURST_DONE状态:
给出BURST_DONE命令,进入WAIT2状态;
5)WAIT2状态:
计数器BURST_CNT计数,当BURST_CNT=2时,将BURST_DONE信号拉低,进入JUDGE状态;
6)JUDGE状态:
判断是否完成数据读取,完成进入IDLE状态,同时发送读结束标志信号RD_FINISH,否则进入WAIT3状态;
7)WAIT3状态: