欢迎来到天天文库
浏览记录
ID:12717052
大小:195.50 KB
页数:32页
时间:2018-07-18
《本科毕业论文-—同步复接器分接器的fpga设计与实现.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、毕业论文同步复接器/分接器的FPGA设计与实现一.复接器的设计本设计采用了将复接器通过软件来实现,尽可能用软件来实现更多的硬件电路[18~19]。在FPGA设计中采用了分层设计,顶层为整个系统的原理框图(见图1),框图中包含了构成同步数字复接器的主要模块,然后按各模块的功能分别进行设计[20]。输出电路时钟分频器内码控制器内码产生器内码产生器内码产生器内码产生器时序发生器图1四路同步复接器的VHDL建模框图图1的四路同步复接器框图由分频器、内码控制器、时序产生器、内码产生器、输出电路等模块组成[2
2、1~22]。分频器模块的作用是用来产生一个256KHZ的时钟信号,内码控制器模块的作用是通过三个地址控制端来控制内码发生器的码字依次输出,时序发生器模块的作用是产生四路时序来控制四路信号的输出,内码产生器模块的作用是将八路并行输入码通过串行输出,输出电路模块的作用是用一个三态门来控制四路信号分时输出,从而实现复接功能。复接器的VHDL设计根据所划分的几大模块分别用VHDL语言去描述,最后用元件调用语句和例化语句将它们连接起来。1.分频器分频器实际是一个计数器,在本设计中,其作用是将由晶体震荡电路产
3、生的4096KHZ的方波信号进行分频,其16分频(即256KHZ时钟)输出端作为内码控制器的控制输入端。其建模流程图如图2所示。时钟CLK输入开始计数=15计数器清零计数器计数图216分频计数器流程图分频器的VHDL描述程序如下:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitycount16isport(clk:instd_logic;d,c,b,a:outstd_logic);endcount
4、16;architecturertlofcount16issignalcount_4:std_logic_vector(3downto0);beginprocess(clk)beginif(clk'eventandclk='1')thenif(count_4="1111")thencount_4<="0000";elsecount_4<=count_4+1;endif;endif;endprocess;d<=count_4(0);c<=count_4(1);b<=count_4(2);a<=cou
5、nt_4(3);endrtl;上述程序在Max+plusII时序仿真波形如图3所示。图3分频器的时序仿真波形图3中,a表示16分频输出,b表示8分频输出,c表示4分频输出,d表示2分频输出。由图中可以看出,实际仿真波形图与理论预期一致。2.内码控制器内码控制器,实际也是一个分频器,一个输出端口输出三位并行信号作为内码产生器的地址控制端,另一输出端作为时序产生器的控制端。内码控制器对内码产生器的控制功能表如表3.1所示。表3.1内码控制器对内码产生器的控制功能表内码控制器的3路输出信号(A2A1A0
6、)内码产生器输出信号位(Y0-Y7中选1)A2A1A0Y000Y0001Y1010Y2011Y3100Y4101Y5110Y6111Y7表3.1中的A2、A1、A0分别表示内码控制器内的二进制分频器的8、4、2分频信号。内码产生器应循环并依次输出从“000”、“001”、一直到“111”。这样,内码发生器每个时钟节拍,输出一位码,通过输出电路送到合路信道上,最终形成一路串行码流。3.时序产生器时序产生器可产生脉宽为8个时钟周期的四路时序信号。具体实现是:将内码控制器的二分频端通过一个32分频器,其
7、16分频和32分频输出端作为2/4译码器的控制端,2/4译码器的四个输出端,在经过反相器后,便得出本设计所要求的四路时序。译码器的建模流程图如图4所示。分频器的两位输出F2&F1F2&F1=11F2&F1=10F2&F1=00F2&F1=01输出=0111输出=1011输出=1110输出=1101图4译码器的VHDL建模流程图译码器的VHDL描述程序如下:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;en
8、tityyimaqiisport(f2,f1:instd_logic;y3,y2,y1,y0:outstd_logic);end;architecturertlofyimaqiissignalindata:std_logic_vector(1downto0);signaly:std_logic_vector(3downto0);beginindata<=f2&f1;process(indata)begincaseindataiswhen"00"=>y<="1110";when"01
此文档下载收益归作者所有