EDA/IC设计
管脚名称 | 管脚功能 |
CLK38 | 并串模块工作时钟 |
HF | 输入FIFO半满信号 |
Q[8..0] | TS流并行数据信号 |
P_CLK | TS流串行数据包同步信号 |
S_DATA | TS流串行数据信号 |
S_CLK | TS流串行数据时钟信号 |
FIFO_R_CLK | 输入FIFO读时钟信号 |
CLK_CONTROL | 输入FIFO读时钟控制信号 |
由于MAX+PLUSII的老式宏函数中只提供了作4、5、8位和16位并串变换的移位寄存器 ,而此处系统完成的是9位并串变换(8位数据位加1位包同步位),因此必须自己编写tdf文件,而不能直接调用宏函数。具体的功能实现为:
选择使用9个D触发器,将它们相互连通组成9位的移位寄存器。一旦产生输入FIFO的半满信号(HF),模块开始工作,将输入FIFO中的9位并行数据读入移位寄存器中,在CLK38的工作时钟控制下,将9位数据顺序串行移出产生S_DATA(TS流串行数据)。并且,在模块中还设置了一个4位计数器A。计数器A同样在CLK38的工作时钟控制下,整体模块开始工作时开始同步计数。每计数到9时计数器清0,并输出一个高电平信号。而在其他计数值时,该信号输出为低电平。那么,产生的这个信号就是TS流的串行数据包同步信号(P_CLK)。而TS流串行数据的时钟信号(S_CLK),很显然就是CLK38。
此外,将CLK38时钟进行8分频作为输入FIFO的读时钟信号(FIFO_R_CLK)。而输入FIFO读时钟的控制信号(CLK_CONTROL),则由模块中设置的另外一个计数器B来产生,确保输入FIFO一次半满后,FPGA只从其中读取该FIFO最大容量之一半的数据。例如:在本系统中,输入FIFO的最大容量为512个字节。那么,设置的计数器B就必须是一个9位计数器。计数器的计数时钟为FIFO_R_CLK,从输入FIFO半满,FPGA启动读数时开始计数。每计数到256(输入FIFO容量的一半)时计数器清0,并将输入FIFO读时钟的控制信号(CLK_CONTROL)置为低电平,从而禁止再产生输入FIFO读时钟信号。
3、PCR补偿计数模块
根据MPEGII标准,TS流中的PCR域共有42位有效码字,由两部分组成:一部分以系统参考时钟的1/300(90KHZ)为单位,称为program_clock_reference_base,33字段;另一部分称为program_clock_reference_extension, 以系统参考时钟(27MHz)为单位的9位字段。
因此,整个PCR补偿计数模块分为两大部分:一部分是9位字段(E0~E8)的PCR域补偿计数模块,由一个8位计数器(调用宏函数8COUNT)和一个4位计数器(调用宏函数74161)组成。其中,8COUNT的计数时钟为27MHz时钟(由硬件电路中的27MHz晶振提供);而74161的计数时钟则为8COUNT提供的最高位进位时钟(由8COUNT中的最高位E7取反后得到);另一部分为33位字段(Q32~Q0)的PCR域补偿计数模块,由4个8位计数器(调用宏函数8COUNT)和一个4位计数器(调用宏函数74161)组成。其中,74161的计数时钟为27MHz时钟300分频后得到的90KHZ时钟,它只对33位字段中的最低位Q0进行补偿计数。第一个8COUNT的计数时钟为74161的Q0位的进位时钟(由Q0取反后得到);而其他3个8COUNT的计数时钟则分别为前一个8COUNT的进位时钟(即分别由Q8,Q16,Q24取反后得到)。
4、复用系统FPGA逻辑设计中一些技巧
在该系统FPGA逻辑设计过程中,由于系统结构比较复杂,整个FPGA逻辑设计也比较大,所以在作逻辑设计时,一般应有一个整体的考虑。具体作设计时,应该采用层次化的结构设计。另外,还必须结合整个系统的特点,有意识的对FPGA中逻辑设计进行优化和精简。例如:检测TS数据流的包同步字0X47,由于该同步头字节并不是唯一的,中间可能有码字也恰为其值。因此,一般情况下,FPGA搜索同步码字的逻辑如下:首先找到第一个0X47,然后进行计数,计到187字节后,再检测是否为0X47,如果是,输出包同步信号;接着每隔187检测一次,如是0X47,则继续输出包同步信号,如不是,则从事开始搜索0X47。
而在该系统的设计中,并没有采用这种方法,而是利用了I/O FIFO的9比特特性,FPGA直接搜索9位包同步字节0X147。另外,在PCR域补偿计数的模块中,也存在一个PCR域确认的问题。PCR域的长度为6个字节48位码字(42位有效码字加6位保留位),在FPGA已经装载PCR域的初值后,完全可以将PCR域中的6个字节改为预先设定好的协议码字(当然,它们必须对于码流而言是唯一的)。这样,在TS码流输出端进行将补偿计数后的PCR数值重新装载进PCR域的工作时,FPGA不仅能够很方便的识别出PCR域的具体位置,而且还可以从这些协议码字中读出较多的复用信息。
简洁而有效的FPGA逻辑设计,可以使系统运行的稳定性得到很大的改善。
全部0条评论
快来发表一下你的评论吧 !