最新同步复接器分接器的FPGA设计与实现

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

同步复接器分接器的F P G A设计与实现

毕业论文

同步复接器/分接器的FPGA设计与实现

一. 复接器的设计

本设计采用了将复接器通过软件来实现,尽可能用软件来实现更多的硬件电路[18~19]。在FPGA设计中采用了分层设计,顶层为整个系统的原理框图(见图1),框图中包含了构成同步数字复接器的主要模块,然后按各模块的功能分别进行设计[20]。

图1 四路同步复接器的VHDL建模框图

图1的四路同步复接器框图由分频器、内码控制器、时序产生器、内码产生器、输出电路等模块组成[21~22]。分频器模块的作用是用来产生一个256KHZ的时钟信号,内码控制器模块的作用是通过三个地址控制端来控制内码发生器的码字依次输出,时序发生器模块的作用是产生四路时序来控制四路信号的输出,内码产生器模块的作用是将八路并行输入码通过串行输出,输出电路模块的作用是用一个三态门来控制四路信号分时输出,从而实现复接功能。复接器的VHDL设计根据所划分的几大模块分别用VHDL语言去描述,最后用元件调用语句和例化语句将它们连接起来。

1. 分频器

分频器实际是一个计数器,在本设计中,其作用是将由晶体震荡电路产生的4096KHZ的方波信号进行分频,其16分频(即256KHZ时钟)输出端作为内码控制器的控制输入端。其建模流程图如图2所示。

图2 16分频计数器流程图

分频器的VHDL描述程序如下:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity count16 is

port

(clk: in std_logic;

d,c,b,a: out std_logic);

end count16;

architecture rtl of count16 is

signal count_4:std_logic_vector(3 downto 0);

begin

process(clk)

begin

if(clk'event and clk='1') then

if(count_4="1111") then

count_4<="0000";

else

count_4<=count_4+1;

end if;

end if;

end process;

d<=count_4(0);

c<=count_4(1);

b<=count_4(2);

a<=count_4(3);

end rtl;

上述程序在Max+plus II时序仿真波形如图3所示。

图3 分频器的时序仿真波形

图3中,a表示16分频输出,b表示8分频输出,c表示4分频输出,d表示2分频输出。由图中可以看出,实际仿真波形图与理论预期一致。

2. 内码控制器

内码控制器,实际也是一个分频器,一个输出端口输出三位并行信号作为内码产生器的地址控制端,另一输出端作为时序产生器的控制端。内码控制器对内码产生器的控制功能表如表3.1所示。

表3.1 内码控制器对内码产生器的控制功能表

表3.1中的A2、A1、A0分别表示内码控制器内的二进制分频器的8、4、2分频信号。内码产生器应循环并依次输出从“000”、“001”、一直到“111”。这样,内码发生器每个时钟节拍,输出一位码,通过输出电路送到合路信道上,最终形成一路串行码流。

3. 时序产生器

时序产生器可产生脉宽为8个时钟周期的四路时序信号。具体实现是:将内码控制器的二分频端通过一个32分频器,其16分频和32分频输出端作为2/4译码器的控制端,2/4译码器的四个输出端,在经过反相器后,便得出本设计所要求的四路时序。译码器的建模流程图如图4所示。

图4 译码器的VHDL建模流程图

译码器的VHDL描述程序如下:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity yimaqi is

port

(f2,f1: in std_logic;

y3,y2,y1,y0 : out std_logic );

end ;

architecture rtl of yimaqi is

signal indata:std_logic_vector(1 downto 0);

signal y:std_logic_vector(3 downto 0);

begin

indata<=f2&f1;

process(indata)

begin

case indata is

when"00"=>y<="1110";

when"01"=>y<="1101";

when"10"=>y<="1011";

when"11"=>y<="0111";

when others=>y<="0000";

end case;

end process;

y3<=y(3);

y2<=y(2);

y1<=y(1);

y0<=y(0);

end architecture rtl;

其时序仿真波形如图5所示。

图5 2/4译码器的时序仿真波形图

图5中,f2表示分频器的32分频输出端,f1表示16分频输出端,y0为第1路译码输出,y1为第二路译码输出,y2为第3路译码输出,y3为第4路译码输出。

时序发生器的仿真波形及相位关系图如图6所示。

相关文档
最新文档