同步复接器分接器的FPGA设计与实现 精品好文档,推荐学习交流
仅供学习与交流,如有侵权请联系网站删除 谢谢3 毕业论文 同步复接器/分接器的FPGA设计与实现 精品好文档,推荐学习交流
仅供学习与交流,如有侵权请联系网站删除 谢谢3 一. 复接器的设计 本设计采用了将复接器通过软件来实现,尽可能用软件来实现更多的硬件电路[18~19]。在FPGA设计中采用了分层设计,顶层为整个系统的原理框图(见图1),框图
中包含了构成同步数字复接器的主要模块,然后按各模块的功能分别进行设计[20]。
图1 四路同步复接器的VHDL建模框图 图1的四路同步复接器框图由分频器、内码控制器、时序产生器、内码产生器、输出电路等模块组成[21~22]。分频器模块的作用是用来产生一个256KHZ的时钟信号,内码控制器模块的作用是通过三个地址控制端来控制内码发生器的码字依次输出,时序发生器模块的作用是产生四路时序来控制四路信号的输出,内码产生器模块的作用是将八路并行输入码通过串行输出,输出电路模块的作用是用一个三态门来控制四路信号分时输出,从而实现复接功能。复接器的VHDL设计根据所划分的几大模块分别用VHDL语言去描述,最后用元件调用语句和例化语句将它们连接起来。
时钟 分频器 内码控制器 内码产生器 内码产生器 内码产生器 内码产生器
输出电路
时序发生器 精品好文档,推荐学习交流
仅供学习与交流,如有侵权请联系网站删除 谢谢3 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
时钟CLK输入 开始计数
=15 计数器计数 计数器清零 精品好文档,推荐学习交流
仅供学习与交流,如有侵权请联系网站删除 谢谢3 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分频输出。由图中可以看出,实际仿真波形图与理论预期一致。 精品好文档,推荐学习交流
仅供学习与交流,如有侵权请联系网站删除 谢谢3 2. 内码控制器
内码控制器,实际也是一个分频器,一个输出端口输出三位并行信号作为内码产生器的地址控制端,另一输出端作为时序产生器的控制端。内码控制器对内码产生器的控制功能表如表3.1所示。 表3.1 内码控制器对内码产生器的控制功能表 内码控制器的3路输出信号(A2A1A0) 内码产生器输出信号位(Y0-Y7中选1) A2 A1 A0 Y 0 0 0 Y0 0 0 1 Y1 0 1 0 Y2 0 1 1 Y3 1 0 0 Y4 1 0 1 Y5 1 1 0 Y6 1 1 1 Y7
表3.1中的A2、A1、A0分别表示内码控制器内的二进制分频器的8、4、2分频信号。内码产生器应循环并依次输出从“000”、“001”、一直到“111”。这样,内码发生器每个时钟节拍,输出一位码,通过输出电路送到合路信道上,最终形成一路串行码流。精品好文档,推荐学习交流
仅供学习与交流,如有侵权请联系网站删除 谢谢3 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
分频器的两位输出F2&F1
F2&F1=00 F2&F1=01 F2&F1=10 F2&F1=11 输出=1110 输出=1101 输出=1011 输出=0111 精品好文档,推荐学习交流
仅供学习与交流,如有侵权请联系网站删除 谢谢3 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所示。 精品好文档,推荐学习交流 仅供学习与交流,如有侵权请联系网站删除 谢谢3 图6 时序发生器的仿真波形及相位关系图 图6为译码器输出经过一个反向器处理后得出的仿真结果,图中S0、S1、S2、S3分别为四路的时序输出,由图中可以看出四路时序刚好组成一个完整的时序,仿真结果与理论预期一致。
4. 内码产生器 四个内码产生器可生产四路独立的八位数码,并在内码控制器的控制下输出相应的数码,例如:C、B、A为三个地址控制端,Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0为八位码的输出,则二者的关系表3.2所示: 表2 3/8控制关系图 C B A 输出
0 0 0 Y0 0 0 1 Y1 0 1 0 Y2 0 1 1 Y3 1 0 0 Y4 1 0 1 Y5 1 1 0 Y6 1 1 1 Y7
一个内码产生器的VHDL描述程序如下: library ieee; use ieee.std_logic_1164.all; 精品好文档,推荐学习交流 仅供学习与交流,如有侵权请联系网站删除 谢谢3 entity neimacs0 is port (in0_8,in0_7,in0_6,in0_5,in0_4,in0_3,in0_2,in0_1,k3,k2,k1,sx0: in std_logic; out0: out std_logic); end entity neimacs0 ; architecture nm0 of neimacs0 is component mux8_0 port (d7,d6,d5,d4,d3,d2,d1,d0,d,c,b: in std_logic; y : out std_logic); end component; component tri_gate0 port(din0,en: in std_logic; dout0:out std_logic); end component; signal l0: std_logic; begin u1:mux8_0 port map (d7=>in0_8,d6=>in0_7,d5=>in0_6,d4=>in0_5,d3=>in0_4,d2=>in0_3,d1=>in0_2,d0=>in0_1,d=>k3,b=>k2,c=>k1,y=>l0); u2:tri_gate0 port map(din0=>l0,en=>sx0,dout0=>out0); end architecture nm0 ; library ieee; use ieee.std_logic_1164.all; entity mux8_0 is port(d7,d6,d5,d4,d3,d2,d1,d0:in std_logic; d,c,b:in std_logic; y :out std_logic ); end mux8_0;