收藏 分销(赏)

巴克码检测器课程设计.doc

上传人:Fis****915 文档编号:553195 上传时间:2023-12-07 格式:DOC 页数:26 大小:752.78KB 下载积分:6 金币
下载 相关 举报
巴克码检测器课程设计.doc_第1页
第1页 / 共26页
巴克码检测器课程设计.doc_第2页
第2页 / 共26页


点击查看更多>>
资源描述
武汉理工大学《EDA课程设计》说明书 课程设计任务书 学生姓名: 专业班级:电子科学与技术0803班 指导教师: 工作单位: 信息工程学院 题 目: 巴克码检测器 课题要求: (1)学会在QuartusⅡ环境中运用VHDL语言设计方法构建具有一定逻辑功能的模块,并能运用图形设计方法完成顶层原理图的设计。 (2)掌握巴克码检测器的主要功能与在CPLD中的实现方法。 课题内容: (1)设计一个七位巴克码(X1110010)代码检测器,当识别到一组代码时,输出一个高电平脉冲。 (2)运用QuartusⅡ软件中的仿真功能对所设计的巴克码检测器的各个模块及顶层电路的功能进行仿真分析。 时间安排: 学习VHDL语言的概况 第1天 学习VHDL语言的基本知识 第2、3天 学习VHDL语言的应用环境,调试命令 第4、5天 课程设计 第6-9天 答辩 第10天 指导教师签名: 年 月 日 系主任(或责任教师)签名: 年 月 日 目录 摘要 I ABSTRACT II 1绪论 1 2 巴克码简介 2 3 QUARTERS Ⅱ设计软件介绍 3 3.1 VHDL发展史及特点 3 3.2 Quarters Ⅱ应用 4 4方案选择及论证 6 5 设计原理 7 5.1 巴克码发生器 7 5.2 巴克码检测器 9 6 编译与仿真 13 6.1 程序编译 13 6.2 实验仿真 18 7 小结 20 参考文献: 21 摘要 本课程设计主要是利用QUARTERSⅡ设计一个七位巴克码(X1110010)代码检测器,当识别到一组代码时,输出一个高电平脉冲。 巴克码主要用于通信系统中的帧同步,其特点是具有尖锐的自相关函数,便于与随机的数字信息相区别,易于识别,出现伪同步的可能性小。巴克码是一种具有特殊规律的二进制码组,它是一种非周期序列。 关键词:QUARTERSⅡ,巴克码,信号检测器,序列 21 Abstract This course is designed using QUARTERS Ⅱ design a seven buck code (X1110010) code detector, when to recognize a set of code, and the output pulse a high level. Buck code is mainly used for communication system of frame synchronization, characterized by a sharp autocorrelation, facilitate and random digital information to distinguish, easy to identify, appear the possibility of pseudo synchronous small. Buck code is one kind has the special law of binary code group, it is a non-periodic sequence. Keywords: QUARTERS Ⅱ, buck yards, signal tester, sequence 1绪论 在通信系统中,同步技术起着相当重要的作用。通信系统能否有效地、可靠地工作,很大程度上依赖于有无良好的同步系统。通信系统中的同步可分为载波同步、位同步、帧同步等几大类。当采用同步解调或相干检测时,接收端需要提供一个与发射端调制载波同频同相的相干载波,获得此相干载波的过程称为载波提取,或称为载波同步。而在数字通信中,消息是一串连续的信号码元序列,解调时常须知道每个码元的起止时刻。因此,就要求接收端必须能产生一个用作定时的脉冲序列,以便与接收的每一个码元的起止时刻一一对齐。在接收端产生与接收码元的重复频率和相位一致的定时脉冲序列的过程称为码元同步或位同步。数字通信中的消息数字流总是用若干码元组成一个“字”,又用若干“字”组成一“句”。因此,在接收这些数字流时,同样也必须知道这些“字”、“句”的起止时刻,在接收端产生与“字”、“句”起止时刻相一致的定时脉冲序列,统称为群同步或帧同步。当通信是在两点之间进行时,完成了载波同步、位同步和帧同步之后,接收端不仅获得了相干载波,而且通信双方的时标关系也解决了,这时,接收端就能以较低的错误概率恢复出数字信息。在数字通信系统中,实现帧同步的方法通常有两种:起止式同步法和集中式插入同步法。起止式同步比较简单,一般是在数据码元的开始和结束位置加入特定的起始和停止脉冲来表示数据帧的开始和结束。另外在计算机RS232串口通信中通常也使用类似方法。而在集中式插入同步法中,要求插入的同步码在接收端进行同步识别时出现伪同步的概率尽可能小,并且要求该码组具有尖锐的自相关函数以便于识别。同时接收机端的同步码识别器要尽量简单。目前用得比较广泛的是性能良好的巴克(Barker)码。 2 巴克码简介 巴克码主要用于通信系统中的帧同步,其特点是具有尖锐的自相关函数,便于与随机的数字信息相区别,易于识别,出现伪同步的可能性小。巴克码是一种具有特殊规律的二进制码组,它是一种非周期序列。一个n位的巴克码组为{ , :, ,. ,},其中 的取值是+1或一1,其局部自相关函数为: 目前已发现的所有巴克码组如表1: 表1 已发现的巴克码组 其中,“+”表示取值为高电平1,“一”表示取值为低电平0。依要求及上面的巴克码组可知,8位的巴克码发生器应在输入时钟信号作用下依次产生“01110010”的码元序列。 3 Quarters Ⅱ设计软件介绍 3.1 VHDL发展史及特点 VHDL诞生于1982年。随后各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准的硬件描述语言。1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本,(简称93版)。现在,VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。有专家认为,在新的世纪中,VHDL于Verilog语言将承担起大部分的数字系统设计任务。 VHDL的英文全写是:VHSIC(Very High Speed Integrated Circuit)Hardware Descriptiong Language.翻译成中文就是超高速集成电路硬件描述语言。因此它的应用主要是应用在数字电路的设计中。目前,它在中国的应用多数是用在FPGA/CPLD/EPLD的设计中。当然在一些实力较为雄厚的单位,它也被用来设计ASIC。VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。 VHDL语言特点 (1)VHDL语言功能强大、设计灵活。VHDL具有功能强大的语言结构,可以用简洁明确的源代码来描述复杂的逻辑控制。它具有多层次的设计描述功能,层层细化,最后可直接生成电路级描述。VHDL支持同步电路、异步电路和随机电路的设计,这是其他硬件描述语言虽不能比拟的。VHDL还支持各种设计方法,既支持自底向上的设计,又支持自顶向下的设计;既支持模块化设计,又支持层次化设计。 (2)支持广泛、易于修改。由于VHDL已经成为IEEE标准所规范的硬件描述语言,目前大多数EDA工具几乎都支持VHDL,这为VHDL的进一步推广和广泛应用奠定了基础。在硬件电路设计过程中,主要的设计文件是用VHDL编写的源代码,因为VHDL易读和结构化,所以易于修改设计。 (3)强大的系统硬件描述能力。VHDL具有多层次的设计描述功能,既可以描述系统级电路,又可以描述门级电路。而描述既可以采用行为描述、寄存器传输描述或结构描述,也可以采用三者混合的混合级描述。另外,VHDL支持惯性延迟和传输延迟,还可以准确地建立硬件电路模型。VHDL支持预定义的和自定义的数据类型,给硬件描述带来较大的自由度,使设计人员能够方便地创建高层次的系统模型。 (4)独立于器件的设计、与工艺无关。设计人员用VHDL进行设计时,不需要首先考虑选择完成设计的器件,就可以集中精力进行设计的优化。当设计描述完成后,可以用多种不同的器件结构来实现其功能。 (5)很强的移植能力。VHDL是一种标准化的硬件描述语言,同一个设计描述可以被不同的工具所支持,使得设计描述的移植成为可能。 (6)易于共享和复用。VHDL采用基于库(Library)的设计方法,可以建立各种可再次利用的模块。这些模块可以预先设计或使用以前设计中的存档模块,将这些模块存放到库中,就可以在以后的设计中进行复用,可以使设计成果在设计人员之间进行交流和共享,减少硬件电路设计。 (7)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。 (8)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。 (9)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。 总之,由于VHDL语言有这么多优点和特点,因此它被广泛的应用在电路系统的设计和器件的设计仿真中。 3.2 Quarters Ⅱ应用 Quarters Ⅱ是Altera公司推出的新一代开发软件,适合于大规模逻辑电路设计,是Altera公司的第4代可编程逻辑器件集成开发环境,提供了从设计输入到器件编程的全部功能,与Max+plus Ⅱ相比,Quarters Ⅱ设计软件增加了网络编辑功能,提升了调试能力,解决了潜在的设计延迟,同时其强大的设计能力和直观易用的接口,受到数字系统设计者的普遍欢迎。 Quarters Ⅱ开发系统具有以下主要特点: Quarters Ⅱ可以产生并识别EDIF网表文件、VHDL网表文件和Verilog HDL网表文件,为第三方EDA工具提供了方便的接口。 Quarters Ⅱ支持一个工作组环境下的设计要求,包括支持基于Internet的协作设计,与Cadence,ExemplarLogic,MentorGraphics,Synopsys和Synplicity等EDA 供应商的开发工具相兼容。 Quarters Ⅱ作为一种设计环境,除支持Altera的APEX 20KE,APEX 20KC,APEXⅡ,ARM的Excalibur嵌入式处理器方案,Mercury,FLEX10KE和ACEX1K之外,还支持MAX3000A和MAX7000系列乘积项器件。 Quarters Ⅱ增加了一个新的快速适配编译选项,可缩短50%的编译时间。快速适配功能保留了最佳性能的设置,加快了编译过程,编译速度更快,对设计性能的影响最小[3]境,或宣布自己的设计工具可以和VHDL接口。此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准的硬件描述语言。Quarters Ⅱ设计软件界面如图3.1所示。 图3.1 Quarters Ⅱ设计软件界面 4方案选择及论证 方案一:在状态连续变化的数字系统设计中,采用状态机的设计思想有利于提高设计效率,增加程序的可读性,减少错误的发生几率。同时,状态机的设计方法也是数字系统中一种常用的设计方法,其输出仅仅是当前状态值的函数,并且在时钟上升沿到来时才发生变化。米立机的输出则是当前状态值、当前输出值和当前输入值的函数。本实验要从一串二进制码中检测出一个已预置的7位二进制码,每增加一位二进制相当于增加一个状态,用7个状态可以实现。 方案二:利用移位寄存器实现序列检测:上面检测的原理是:逐位检测,的那个检测到信号时则转入下一个状态。 这种检测的原理清晰,但缺点是当检测到序列比较长时就非常麻烦,而且检测的灵活性差。利用移位寄存器能实现简便快速,可移植的序列检测器。 通过比较可以看出方案一比较容易实现,因此本次课程设计我选择的是方案一。 5 设计原理 序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。在检测过程中,任何一位不相等都将回到初始状态重新开始检测。在本次设计中首先要设计一个巴克码发生器,然后再设计巴克码检测器。 5.1 巴克码发生器 发生器原理:N位触发器构成的计数器可产生M个代码。 原理图: 图5.1巴克码发生器原理图 当计数脉冲不断进入由Q3Q2Q1组成的三位二进制异步计数器时,3-8译码器的8个输出经反相器后顺序输出高电平。其中五路信号经“或非”后再和其中3路“或”,在Y端便可顺序产生11000100代码序列。 代码序列发生: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity bak1 is port( clk,reset: in std_logic; dout:out std_logic); end bak1; architecture a of bak1 is signal count :std_logic_vector(2 downto 0); signal tmp1:std_logic; begin dout<=tmp1; process(clk,reset) begin if reset='0' then count<=(others=>'0'); elsif rising_edge(clk) then count<=count+1; case count is when "000"=>tmp1<='1' ; when "001"=>tmp1<='1' ; when "010"=>tmp1<='1' ; when "011"=>tmp1<='0' ; when "100"=>tmp1<='0' ; when "101"=>tmp1<='1' ; when "110"=>tmp1<='0' ; when "111"=>tmp1<='1' ; when others=>tmp1<='0'; end case; end if; end process; end a; 5.2 巴克码检测器 序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。在检测过程中,任何一位不相等都将回到初始状态重新开始检测。 图5.2 巴克码检测器状态图 用状态机设计的巴克码检测器总设计程序如下所示: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity create is port( CLR : in std_logic; CLK_1S : in std_logic; SIG_OUT : out std_logic; CODE : in std_logic_vector(6 downto 0) ); end entity; architecture behave of create is type states is(st0,st1,st2,st3,st4,st5,st6,st7); signal current_state : states; begin process(CLK_1S,CLR,CODE) begin if CLR = '0' then current_state <= st0; SIG_OUT <= '0'; elsif rising_edge(CLK_1S) then case current_state is when st0 => SIG_OUT <= CODE(0); current_state <= st1; when st1 => SIG_OUT <= CODE(1); current_state <= st2; when st2 => SIG_OUT <= CODE(2); current_state <= st3; when st3 => SIG_OUT <= CODE(3); current_state <= st4; when st4 => SIG_OUT <= CODE(4); current_state <= st5; when st5 => SIG_OUT <= CODE(5); current_state <= st6; when st6 => SIG_OUT <= CODE(6); current_state <= st7; when st7 => SIG_OUT <= '0'; current_state <= st0; when others => current_state <= st0; end case; end if; end process; end behave; 本次课程设计所用的频率是由实验箱pin16提供20M的频率,但我们实际中不会用到那么高的频率,因此我们需要一个分频器将此20M的频率分频到我们所需的频率,分频器原程序如下所示: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity div is port( CLK_IN : in std_logic; CLK_OUT : buffer std_logic; DIV_TIME : in std_logic_vector(15 downto 0) ); end entity; architecture behave of div is signal data1: integer range 0 to 10000000; signal data2: integer range 0 to 10000000; begin process(CLK_IN,DIV_TIME) begin if rising_edge(CLK_IN) then if data1 = DIV_TIME then data1 <= 0; if data2 = 1000 then data2 <= 0; CLK_OUT <= not CLK_OUT; else data2 <= data2 + 1; end if; else data1 <= data1 + 1; end if; end if; end process; end behave; 6 编译与仿真 6.1 程序编译 按要求安装好Quarters Ⅱ,打开已安装好的软件并新建一个工程 图6.1 新建工程 完成后选择芯片,由于本次设计要求用到EP1C3T144C8芯片,因此如图5.2中选择该芯片。 图6.2 选择芯片 由于本次设计要用到多种模块,应此要考虑元件例化或画连接图,为了编程简单我们选择画连接图,如图所示在新建文档里选择“Block Diagram/Schematic File”进入画图界面,如图6.3所示: 图6. 3 画图界面 课程设计总程序如下所示: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity design is port( CLK : in std_logic; KEY_CLR : in std_logic; KEY_IN : in std_logic_vector(6 downto 0); BELL : out std_logic; LED : out std_logic; LED_7 : out std_logic_vector(6 downto 0) ); end entity; architecture behave of design is component div is port( CLK_IN : in std_logic; CLK_OUT : buffer std_logic; DIV_TIME : in std_logic_vector(15 downto 0) ); end component; component create is port( CLR : in std_logic; CLK_1S : in std_logic; SIG_OUT : out std_logic; CODE : in std_logic_vector(6 downto 0) ); end component; type states is(st0,st1,st2,st3,st4,st5,st6,st7); signal current_state : states; signal clk_1s : std_logic; signal clk_1k : std_logic; signal code_in : std_logic; signal BELL1 : std_logic; begin process(clk_1s,KEY_CLR) begin if KEY_CLR = '0' then current_state <= st0; LED <= '0' ; LED_7 <= (others => '0'); BELL1 <= '0'; else LED <= clk_1s; if rising_edge(clk_1s) then case current_state is when st0 => if code_in = '1' then current_state <= st1; else current_state <= st0; end if; LED_7(0)<=code_in; BELL1 <= '0'; when st1 => if code_in = '1' then current_state <= st2; else current_state <= st0; end if; LED_7(1)<=code_in; when st2 => if code_in = '1' then current_state <= st3; else current_state <= st0; end if; LED_7(2)<=code_in; when st3 => if code_in = '0' then current_state <= st4; else current_state <= st3; end if; LED_7(3)<=code_in; when st4 => if code_in = '0' then current_state <= st5; else current_state <= st1; end if; LED_7(4)<=code_in; when st5 => if code_in = '1' then current_state <= st6; else current_state <= st0; end if; LED_7(5)<=code_in; when st6 => if code_in = '0' then current_state <= st7; else current_state <= st2; end if; LED_7(6)<=code_in; when st7 => current_state <= st0; BELL1 <= '1'; when others => current_state <= st0; end case; end if; end if; end process; process(BELL1) begin if BELL1 = '1' then BELL <= clk_1k; else BELL <= '0'; end if; end process; DIV1 : div port map(CLK_IN => CLK, CLK_OUT => clk_1s, DIV_TIME => "0010011100010000" ); DIV2 : div port map(CLK_IN => CLK, CLK_OUT => clk_1k, DIV_TIME => "0000000000001010" ); CREATE1 : create port map(CLR => KEY_CLR, CLK_1S => clk_1s, SIG_OUT => code_in, CODE => KEY_IN ); end behave; 6.2 实验仿真 运行程序直至调试到无错误后生成实验总图如下所示 图6.4 总原理图 在总体电路图界面中选择“new”中的 “vector waveform file”在processing中选择simulator tool,进行仿真 图6.5 新建vector waveform file 在编辑好波形输入文件后,在Process中的simulator tool中选择仿真类型为功能仿真,并生成仿真网表。如图所示。 图 6.6 选择仿真工具 巴克码发生器波形仿真器如下所示: 图6.7 巴克码(01110010代码)发生器仿真波形图 巴克码检测器仿真图如下所示 图6.8 巴克码检测器仿真波形图 用过波形仿真以及在实验箱上演示可以验证此次设计达到了预期的要求 7 小结 为期近一周的EDA课程设计已经接近尾声。通过这次课程设计首先对EDA课程的到了复习和应用。并且对所学的知识的到了应用。使得理论与实践相结合,对知识的掌握更佳的熟练。 拿到题目后我首先在网上收索了该题目的相关知识,并且对相关知识进行分析,发现网上的资料不是很全,于是又到图书馆里借了相关的资料。并且对其进行了选择和筛选。 之后利用QuartusII9.0进行程序的编辑,并且在自己的电脑上进行调试和相关的波形仿真。编写程序时我编写了两个程序,以便在试验箱调节时多一种选择的余地。然后到试验箱上调节。由于有一个程序的实验效果不是很明显,就将这个程序给舍去了。在进行试验调试之前需要对一些端口进行一些相关的设置和注意一些事项。并且对另外一个程序做了适当的修改时实验现象更加的明显。最初我没有接时钟输出端口。之后为了观察现象明显,最后我接了一个时钟输出端口以便观察。 这次课程设计,在调试时还是比较的顺利的。通过这次课程设计对word也更佳的熟悉。 这次课程设计业使我明白了在知识的领域里我还有很多很多的不足,并且再一次的深深的体会到理论和实践之间还有很到的差别。在以后的学习中应该多多的注意实践知识的训练和积累。在以后的学习生活中要不断的开拓自己的动手能力,不断的训练自己的动手能力。这次课程设计让我深深的明白了自己以后该做什么,该怎么去做。 参考文献: [1]朱明程,董尔令.可编程逻辑器件原理与应用[M].西安电子科技大学出版社,2004. [2]沈保锁,侯椿萍.现代通信原理[M].国防工业出版社,2002. [3]罗卫兵.SystemView动态系统分析及通信系统仿真设计 [4]张亦华,延明.北京邮电大学出版社,2003. [5] 夏路易.《基于EDA的电子技术课程设计》.电子工艺出版社,2009. [6] 王金明.《数字系统设计Verilog HDL》. 电子工艺出版社,2009. 本科生课程设计成绩评定表 姓 名 性 别 男
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 行业资料 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服