EDA综合课程设计实验报告

合集下载

EDA综合实验设计报告

EDA综合实验设计报告

Beijing Jiaotong University EDA实验设计报告指导老师:刘彪学院:电子信息工程学院姓名:黄家维学号:13213012班级:电子1301实验地点:电气楼406实验日期:2014年5月29日星期四实验一熟悉QuartusII软件的安装及使用(4学时)我们通过下载及安装,可在电脑上运行Altera Quartus II。

打开软件,新建一个工程,在工程底下新建一个VHDL File,即可实现编程功能。

编完程序后点击Start Compilation可试运行程序,待编写的程序运行无误后,再在此工程下新建一个Vector Waveform File,给程序中的输入变量赋值,保存后点击Start Simulation即可实现程序的仿真。

实验二、组合逻辑电路的设计实验方案设计、实验方法、1.实验方案8-3优先编码器的VHDL描述有多种方法,设计过程中可以根据真值表采用case…when语句、with…select语句、if…then结构等多种手段实现,也可以根据真值表分析输入输出间的逻辑关系,根据逻辑关系写出其布尔表达式,根据布尔代数式调用基本逻辑门元件实现8-3优先编码器。

本实验中根据真值表用if-then结构实现8-3优先编码器2.实验方法首先根据前文所述,对照真值表的列出的不同输入逻辑状态,分情况依次输出于输入的对应关系,而后编译综合,由开发系统自行实现电路功能。

实验步骤1.设计输入利用FILE\New菜单输入VHDL源程序,创建源文件2.设计项目的创建1)原文件存储…..2)利用FILE\Project\Set Project…3.设计编译….4.器件选择及管脚分配…..5.设计仿真…..6.时序分析…..7.编程下载(可选)….LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY ENCODER ISPORT(D:IN STD_LOGIC_VECTOR(0 TO 7);A:OUT STD_LOGIC_VECTOR(0 TO 2));END ;ARCHITECTURE XIANI OF ENCODER IS BEGINPROCESS(D)BEGINIF (D(7)='0')THEN A<="111";ELSIF (D(6)='0')THEN A<="110";ELSIF (D(5)='0')THEN A<="101";ELSIF (D(4)='0')THEN A<="100";ELSIF (D(3)='0')THEN A<="011";ELSIF (D(2)='0')THEN A<="010";ELSIF (D(1)='0')THEN A<="001";ELSIF (D(0)='0')THEN A<="000";ELSE A<="ZZZ";END IF;END PROCESS;END;1用CASE语句设计一个4-16译码器。

EDA综合课程设计实验报告

EDA综合课程设计实验报告

EDA综合课程设计实验报告题目:设计一个全双工UART电路院系:XXXX学院学号:XXXXX姓名:严XX教师:林XX时间:2012.06.021 课程设计的摘要原理 (2)2 设计一个全双工UART电路,具体要求如下: (6)3.UART设计 (7)3.1 UART结构 (7)3.2 UART的帧格式 (8)4 UART的Verilog HDL语言设计 (9)4.1 UART分频器 (9)4.2UART发送模块 (10)4.3 UART的接收模块 (14)4.4 UART的硬件测试 (18)5 课程设计总结 (19)1摘要UART协议是数据通信及控制系统中广泛使用的一种全双工串行数据传输协议,在实际工业生产中有时并不使用UART的全部功能。

只需将其核心功能集成即可。

波特率发生器、接收器和发送器是UART的三个核心功能模块,利用Vefilog-HDL语言对这三个功能模块进行描述并加以整合UART(即Universal AsynchronousReceiver Transmitter 通用异步收发器)是广泛使用的串行数据传输协议。

UART允许在串行链路上进行全双工的通信。

串行外设用到RS232-C异步串行接口,一般采用专用的集成电路即UART实现。

如8250、8251、NS16450等芯片都是常见的UART器件,这类芯片已经相当复杂,有的含有许多辅助的模块(如FIFO),有时我们不需要使用完整的UART的功能和这些辅助功能。

或者设计上用到了FPGA/CPLD器件,那么我们就可以将所需要的UART功能集成到FPGA内部。

使用VHDL或Veriolog -HDL将UART的核心功能集成,从而使整个设计更加紧凑、稳定且可靠。

本文应用EDA技术,基于FPGA/CPLD器件设计与实现UART。

实际应用上,有时我们不需要使用完整的UART的功能和这些辅助功能。

使用Verilog-HDL将所需要的UART的核心功能集成到FPGA/CPLD内部,就可以实现紧凑、稳定且可靠的UART数据传输。

EDA综合设计实验报告

EDA综合设计实验报告

EDA综合设计1、七人表决器2、数字抢答器班级:电信一班姓名:马莎莎学号:2220102802EDA综合设计实验课题一、设计目的1、掌握用VNDL硬件描述语言做数字电路综合设计的方法。

2、熟练掌握程序的编译、仿真、生成模块及芯片引脚号码锁定方法并下载到目标芯片。

二、实验仪器ZY11EDA13BE型试验箱。

三、实验课题(一)、设计一个七人表决器1、流程图2、顶层原理图3、程序清单(1)、biaojueqiLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity biao isport (xin: in std_logic_vector ( 6 downto 0 );xout: out std_logic;xout0,xout1: out std_logic_vector ( 6 downto 0 ));end entity ;architecture bev of biao isbeginprocess ( xin )variable j: integer :=0;beginj:=0;for i in 0 to 6 loopif xin(i)='1' thenj:=j+1;end if;end loop;if j>3 thenxout<='1';else xout<='0';end if;case j isWHEN 0=>xout1<="1111110";WHEN 1=>xout1<="0110000";WHEN 2=>xout1<="1101101";WHEN 3=>xout1<="1111001";WHEN 4=>xout1<="0110011";WHEN 5=>xout1<="1011011";WHEN 6=>xout1<="1011111";WHEN 7=>xout1<="1110000";WHEN OTHERS=>xout1<="0000000";end case;case j isWHEN 7=>xout0<="1111110";WHEN 6=>xout0<="0110000";WHEN 5=>xout0<="1101101";WHEN 4=>xout0<="1111001";WHEN 3=>xout0<="0110011";WHEN 2=>xout0<="1011011";WHEN 1=>xout0<="1011111";WHEN 0=>xout0<="1110000";WHEN OTHERS=>xout0<="0000000";end case;end process;end architecture bev;(2)、mux2LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY mux2 ISPORT(CNTL,CNTH :IN STD_LOGIC_VECTOR(6 DOWNTO 0);CNTOUT:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);SEL:in STD_LOGIC_VECTOR(2 DOWNTO 0));END mux2;ARCHITECTURE BEHA V OF mux2 ISBEGINPROCESS(sel)BEGINCASE sel ISWHEN"000"=>CNTOUT<=CNTL;WHEN"001"=>CNTOUT<=CNTH;WHEN OTHERS=>CNTOUT<="0000000";END CASE;END PROCESS;END BEHA V;(3)、cnt2LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY cnt2 ISPORT(CP,RESET:IN STD_LOGIC;SEL:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END cnt2;ARCHITECTURE BEHA V OF cnt2 ISSIGNAL SEC:STD_LOGIC_VECTOR(2 DOWNTO 0); BEGINPROCESS(RESET,CP)BEGINIF(RESET='0')THENSEC<="000";ELSIF(CP'EVENT AND CP='1')THENIF(SEC="001")THENSEC<="000";ELSESEC<=SEC+1;END IF;END IF;END PROCESS;SEL<=SEC;END BEHA V;4、仿真波形5、引脚号码锁定分布表实验符号对应附录符号管脚Xin[0] K1 PIN_45Xin[1] K2 PIN_46Xin[2] K3 PIN_47Xin[3] K4 PIN_53Xin[4] K5 PIN_54Xin[5] K6 PIN_55Xin[6] K7 PIN_56Sel[0] A PIN_7Sel[1] B PIN_8Sel[2] C PIN_9clk 9 PIN_79clear K8 PIN_57xout LED16 PIN_44Seg[0] a PIN_10Seg[1] b PIN_11Seg[2] c PIN_12Seg[3] d PIN_13Seg[4] e PIN_14Seg[5] f PIN_15Seg[6] g PIN_166、生成模块符号(二)、数字抢答器1、设计方框图2、顶层设计原理图3、程序清单(1)、qiangdajianbelibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity qdjb isport(rst,start,clk2:in std_logic;s0,s1,s2:in std_logic;states:buffer std_logic_vector(3 downto 0);c0,c1,c2 :buffer std_logic;tmp,q,p:out std_logic);end qdjb;architecture one of qdjb isbeginprocess(s0,rst,start,s1,s2,clk2)beginif rst='0' thenq<='0';tmp<='0';states<="0000";elsif start='0' thenp<=s0 or s1 or s2 ;if (s0='1' )then states<="0001";end if ;if (s1='1' ) then states<="0010";end if ;if (s2='1' ) then states<="0011";end if ;elsif clk2'event and clk2='1'and start='1' then if (s0='1' )then states<="0001";c0<='1';c1<='0';c2<='0';end if ;if (s1='1' ) then states<="0010";c0<='0';c1<='1';c2<='0';end if ;if (s2='1' ) then states<="0011";c0<='0';c1<='0';c2<='1';end if ;q<=s0 or s1 or s2 ;tmp<=not(s0 or s1 or s2) ;end if ;end process ;end one;(2)、cnt20library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity CNT20 isport(CLK,EN,CR :in std_logic;co :out std_logic;QH,QL:out std_logic_vector(3 downto 0));end CNT20;architecture a of CNT20 issignal QNH,QNL :std_logic_vector(3 downto 0);beginco<='1'when(QNL=0 and QNH=0 and EN='1')else'0';process(CLK,CR)beginif(CR='0')thenQNH<="0001";QNL<="1001";elsif(CLK'EVENT and CLK='1')thenif(EN='1')thenif QNL=0 and QNH=0 thenQNL<="1001";QNH<="0001";elsif QNL=0 thenQNL<="1001";QNH<=QNH-1;elseQNl<=QNl-1;end if;end if;end if;end process;QH<=QNH;QL<=QNL;end a;(3)、mux2library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity mux2 isport(in1,in2:in std_logic;sel:in std_logic;q:out std_logic);end mux2;architecture arc_mux2 of mux2 isbeginq<=in1 when sel='0'elsein2 when sel='1';end arc_mux2;(4)、dongtaisaomiaolibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity sjxz isport (a,b,c: in std_logic_vector(3 downto 0);clk2,rst: in std_logic;s: out std_logic_vector(2 downto 0);y: out std_logic_vector(3 downto 0) );end sjxz;architecture body_chooser of sjxz issignal count: std_logic_vector (2 downto 0);begins<=count;process(clk2,rst)beginif(rst='0')then count<="000";elsif(clk2'event and clk2='1')thenif(count>="010")thencount<="000";else count<=count+1;end if;end if;case count iswhen "000"=>y<=a;when "001"=>y<=b;when "010"=>y<=c;when others=>null;end case;end PROCESS;end body_chooser;(5)、BCDdecoderLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY YMQ ISPORT(AIN4: IN STD_LOGIC_VECTOR(3 DOWNTO 0);DOUT7: OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END YMQ;ARCHITECTURE ART OF YMQ ISBEGINPROCESS(AIN4)BEGINCASE AIN4 ISWHEN "0000"=>DOUT7<="1111110"; --0 WHEN "0001"=>DOUT7<="0110000"; --1 WHEN "0010"=>DOUT7<="1101101"; --2 WHEN "0011"=>DOUT7<="1111001"; --3 WHEN "0100"=>DOUT7<="0110011"; --4 WHEN "0101"=>DOUT7<="1011011"; --5 WHEN "0110"=>DOUT7<="1011111"; --6 WHEN "0111"=>DOUT7<="1110000"; --7 WHEN "1000"=>DOUT7<="1111111"; --8 WHEN "1001"=>DOUT7<="1111011"; --9 WHEN OTHERS=>DOUT7<="0000000";END CASE;END PROCESS;END ARCHITECTURE ART;4、仿真波形5、引脚号码锁定分布表实验符号对应附录符号管脚rst1 K1 PIN_45Rst3 K3 PIN_47start K2 PIN_58S0 K5 PIN_54S1 K6 PIN_55S2 K7 PIN_56Clk1 9 PIN_79Clk2 7 PIN_80Clk3 8 PIN_183Warn LED16 PIN_44Warn8 LED15 PIN_41dout[0] a PIN_10dout[1] b PIN_11dout[2] c PIN_12dout[3] d PIN_13dout[4] e PIN_14dout[5] f PIN_15dout[6] g PIN_16Sel[0] A PIN_7Sel[1] B PIN_8Sel[2] C PIN_9 6、生成模块符号四、实验总结这次EDA课程设计,学到了很多很多的东西,不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

EDA课程实验设计报告

EDA课程实验设计报告

《EDA课程实验设计报告》洗衣机自动控制器设计一实验要求:1、由一个按键控制洗衣机的启动、暂停。

2、洗衣机洗涤一定时间后,能自动停止,由一个LED灯闪烁提示,并发出报警提示。

3、洗涤时间能用数码管显示,暂停时时间停止,暂停后时间在停止的时间基础上继续计时。

4、用至少四个LED指示灯的流动表示洗衣机的正转和反转。

即当正转20秒时,四个指示灯从右向左循环移动;反转20秒时,四个指示灯从右向左循环移动。

5、暂停10秒时,四个指示灯闪烁来表示电机停止转动。

二.设计总体思路,基本原理1.设计总体思路从课程设计要求来看,要求实现电机的正传、反转、暂停,用四个LED灯的状态来表示,当显示时间前20秒正传、暂停10秒、反转20秒、再暂停10秒,如此一来,周期恰好是60秒,理所当然的分钟计数器、秒计数器是一定要有的。

接下来脉冲是一定的了,但是有分钟计数器和秒钟计数器还要考虑是不是要60分频器,就我们所学过的来说实现循环有移位寄存器;还有个问题,当洗涤时间到了,报警还要一个报警电路,根据要求,报警的蜂鸣器不可以长时间的叫,要有个合理的时间,我们可以用一个单稳态电路来实现。

方案为:直接从数值上进行提取信号来控制一个可以实现循环的74LS194来实现。

2.基本原理首先,从秒脉冲出来的信号,经过一个控制电路后进入秒计数器进行秒计数,进行清零,这时用户置入洗涤时间,并按开始按钮,洗衣机开始工作。

当秒计数器变为零的时候,去分钟计数器上面借数;与此同时,从十秒位转化出来的信号进入移位寄存器后,LED灯表示出电机运转状态;当用户设定的洗涤时间结束后,电路报警并清零。

三.单元电路设计1.一百进制分计数器和六十秒计数器的设计(1)分、秒计数器的设计分、秒计数器我们都用74192片,74192上升沿触发,由UP,DOWN两管脚控制加减计数,有异步置数端LOAR和异步复位端CLR,BO’和CO’分别输出高电平表示加进位和减进位。

由于74192没有保持脚,故需要外围电路实现保持功能。

EDA实验报告(12份).pdf

EDA实验报告(12份).pdf

实验一组合电路的设计1. 实验目的:熟悉MAX + plus II 的VHDL 文本设计流程全过程,学习简单组合电路的设计、多层次电路设计、仿真和硬件测试。

2. 实验内容:设计一个2选1多路选择器,并进行仿真测试,给出仿真波形。

3. 实验程序如下:library ieee;use ieee.std_logic_1164.all; entity mux21a isport(a,b,s:in std_logic;y:out std_logic); end entity mux21a; architecture one of mux21a is beginy<=a when s='0' else b ; end architecture one ;4. 仿真波形(如图1-1所示)图1-1 2选1多路选择器仿真波形5. 试验总结:从仿真波形可以看出此2选1多路选择器是当s为低电平时,y输出为b, 当s为高电平时,y输出为a(y<=a when s='0' else b ;),完成2路选择输出。

实验二时序电路的设计1. 实验目的:熟悉MAX + plus II VHDL文本设计过程,学习简单的时序电路设计、仿真和测试。

2. 实验验内容:设计一个锁存器,并进行仿真测试,给出仿真波形。

3. 实验程序如下:library ieee;use ieee.std_logic_1164.all;entity suocun7 isport(clk: in std_logic;en: in std_logic;D: in std_logic_vector(7 downto 0);B:out std_logic_vector(7 downto 0)); end suocun7;architecture one of suocun7 issignal K: std_logic_vector(7 downto 0); beginprocess(clk,en,D)beginif clk'event and clk='1' thenif en ='0'thenK<=D;end if;end if;end process;B<=K;end one;4.仿真波形(如图2-1所示)图2-1 8位锁存器仿真波形此程序完成的是一个8位锁存器,当时钟上升沿到来(clk'event and clk='1')、使能端为低电平(en ='0')时,输出为时钟上升沿时的前一个数,从仿真波形看,实现了此功能。

EDA实验报告完结版

EDA实验报告完结版

EDA实验报告完结版一、实验目的本次 EDA 实验的主要目的是通过实际操作和设计,深入理解和掌握电子设计自动化(EDA)技术的基本原理和应用。

具体而言,包括熟悉 EDA 工具的使用方法,学会运用硬件描述语言(HDL)进行逻辑电路的设计与描述,以及通过综合、仿真和实现等流程,将设计转化为实际的硬件电路,并对其性能进行评估和优化。

二、实验环境本次实验所使用的 EDA 工具为_____,该工具提供了丰富的功能模块和强大的设计支持,包括原理图编辑、HDL 代码编写、综合、仿真和下载等。

实验所使用的硬件平台为_____开发板,其具备多种接口和资源,便于对设计的电路进行实际验证和测试。

三、实验内容1、基本逻辑门电路的设计与实现使用 HDL 语言(如 Verilog 或 VHDL)设计常见的基本逻辑门电路,如与门、或门、非门等。

通过编写代码,对逻辑门的输入输出关系进行描述,并进行综合和仿真,验证设计的正确性。

2、组合逻辑电路的设计与实现设计并实现较为复杂的组合逻辑电路,如加法器、减法器、编码器、译码器等。

运用 HDL 语言描述电路的功能,进行综合和仿真,确保电路在各种输入情况下的输出结果符合预期。

3、时序逻辑电路的设计与实现设计常见的时序逻辑电路,如计数器、寄存器、移位寄存器等。

在设计过程中,考虑时钟信号、同步复位和异步复位等因素,通过仿真验证时序逻辑的正确性,并对电路的性能进行分析。

4、有限状态机(FSM)的设计与实现设计一个有限状态机,实现特定的功能,如交通信号灯控制器、数字密码锁等。

明确状态转移条件和输出逻辑,通过编写 HDL 代码实现状态机,并进行综合和仿真,验证其功能的准确性。

5、综合与优化对设计的电路进行综合,生成门级网表,并通过优化工具对电路进行面积、速度等方面的优化,以满足特定的设计要求。

6、硬件实现与测试将综合后的设计下载到硬件开发板上,通过实际的输入输出信号,对电路的功能进行测试和验证。

观察电路在实际运行中的表现,对出现的问题进行分析和解决。

EDA课程设计报告

EDA课程设计报告

EDA课程设计报告•相关推荐EDA课程设计报告在我们平凡的日常里,报告的使用成为日常生活的常态,报告中涉及到专业性术语要解释清楚。

那么报告应该怎么写才合适呢?以下是小编为大家整理的EDA课程设计报告,希望对大家有所帮助。

EDA课程设计报告1实训任务:一、实训目的和要求:(1)熟练掌握keil c51集成开发环境的使用方法(2)熟悉keil c51集成开发环境调试功能的使用和dp?51pro。

net单片机仿真器、编程器、实验仪三合一综合开发平台的使用。

(3)利用单片机的p1口作io口,学会利用p1口作为输入和输出口。

(4)了解掌握单片机芯片的烧写方法与步骤。

(5)学会用单片机汇编语言编写程序,熟悉掌握常用指令的功能运用。

(6)掌握利用protel 99 se绘制电路原理图及pcb图。

(7)了解pcb板的制作腐蚀过程。

二、实训器材:pc机(一台)pcb板(一块)520ω电阻(八只)10k电阻(一只)led发光二极管(八只)25v 10μf电容(一只)单片机ic座(一块)at89c51单片机芯片(一块)热转印机(一台)dp?51pro。

net单片机仿真器、编程器、实验仪三合一综合开发平台(一台)三、实训步骤:(2)将流水灯程序编写完整并使用tkstudy ice调试运行。

(4)打开电源,将编写好的程序运用tkstudy ice进行全速运行,看能否实现任务要求。

(6)制板。

首先利用protel 99 se画好原理图,根据原理图绘制pcb图,然后将绘制好的pcb布线图打印出来,经热转印机转印,将整个布线图印至pcb板上,最后将印有布线图的pcb板投入装有三氯化铁溶液的容器内进行腐蚀,待pcb板上布线图外的铜全部后,将其取出,清洗干净。

(7)焊接。

将所给元器件根据原理图一一焊至pcb板相应位置。

(8)调试。

先把at89c51芯片插入ic座,再将+5v电源加到制作好的功能板电源接口上,观察功能演示的整个过程(看能否实现任务功能)。

eda课程设计报告

eda课程设计报告

eda课程设计报告一、课程目标知识目标:1. 学生能理解EDA(电子设计自动化)的基本概念,掌握EDA工具的使用方法。

2. 学生能运用EDA软件进行电路设计与仿真,理解并掌握数字电路的设计原理。

3. 学生了解并掌握基础的硬件描述语言(如VHDL/Verilog),能完成简单的数字系统设计。

技能目标:1. 学生通过EDA软件的操作,培养电子电路设计、仿真与验证的实际操作能力。

2. 学生通过小组合作完成设计项目,提高团队协作与沟通技巧。

3. 学生能够运用所学知识解决实际问题,具备一定的创新意识和动手能力。

情感态度价值观目标:1. 学生在EDA课程学习中,培养对电子科学技术的兴趣和探究精神。

2. 学生通过课程实践,增强自信心和成就感,激发进一步学习的动力。

3. 学生在学习过程中,树立正确的工程伦理观念,认识到技术发展对社会的责任和影响。

课程性质:本课程为电子信息工程及相关专业高年级学生的专业核心课程,旨在通过理论与实践相结合的教学,提高学生的电子设计能力。

学生特点:学生已具备一定的电子技术基础,具有较强的学习能力和实践欲望,对新技术和新工具充满好奇心。

教学要求:结合学生特点,注重培养实际操作能力,鼓励学生创新思维,提高解决实际问题的能力。

通过课程目标分解,确保学生在知识、技能和情感态度价值观方面的全面成长。

后续教学设计和评估将以此为基础,关注学生的学习成果。

二、教学内容根据课程目标,教学内容分为以下三个模块:1. EDA基本概念与工具使用- 教材章节:第一章 EDA技术概述,第二章 EDA工具简介- 内容列举:EDA发展历程,常用EDA软件介绍,软件安装与配置,基本操作流程。

2. 数字电路设计与仿真- 教材章节:第三章 数字电路设计基础,第四章 仿真技术- 内容列举:数字电路设计原理,EDA软件电路设计流程,仿真参数设置,波形分析与验证。

3. 硬件描述语言与数字系统设计- 教材章节:第五章 硬件描述语言,第六章 数字系统设计实例- 内容列举:硬件描述语言基础,VHDL/Verilog语法要点,简单数字系统设计方法,设计实例分析与实操。

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

EDA综合课程设计实验报告题目:设计一个全双工UART电路院系:XXXX学院学号:XXXXX姓名:严XX教师:林XX时间:2012.06.021 课程设计的摘要原理 (2)2 设计一个全双工UART电路,具体要求如下: (6)3.UART设计 (7)3.1 UART结构 (7)3.2 UART的帧格式 (8)4 UART的Verilog HDL语言设计 (9)4.1 UART分频器 (9)4.2UART发送模块 (10)4.3 UART的接收模块 (14)4.4 UART的硬件测试 (18)5 课程设计总结 (19)1摘要UART协议是数据通信及控制系统中广泛使用的一种全双工串行数据传输协议,在实际工业生产中有时并不使用UART的全部功能。

只需将其核心功能集成即可。

波特率发生器、接收器和发送器是UART的三个核心功能模块,利用Vefilog-HDL语言对这三个功能模块进行描述并加以整合UART(即Universal AsynchronousReceiver Transmitter 通用异步收发器)是广泛使用的串行数据传输协议。

UART允许在串行链路上进行全双工的通信。

串行外设用到RS232-C异步串行接口,一般采用专用的集成电路即UART实现。

如8250、8251、NS16450等芯片都是常见的UART器件,这类芯片已经相当复杂,有的含有许多辅助的模块(如FIFO),有时我们不需要使用完整的UART的功能和这些辅助功能。

或者设计上用到了FPGA/CPLD器件,那么我们就可以将所需要的UART功能集成到FPGA内部。

使用VHDL或Veriolog -HDL将UART的核心功能集成,从而使整个设计更加紧凑、稳定且可靠。

本文应用EDA技术,基于FPGA/CPLD器件设计与实现UART。

实际应用上,有时我们不需要使用完整的UART的功能和这些辅助功能。

使用Verilog-HDL将所需要的UART的核心功能集成到FPGA/CPLD内部,就可以实现紧凑、稳定且可靠的UART数据传输。

这样,既可以满足实际的应用,实现所要求的简单的通信和控制,又能够去除更多不需要的繁杂复杂的功能实现。

一、UART的原理串行通信是指外部设备和计算机间使用一根数据线(另外需要地线,可能还需要控制线)进行数据传输的方式。

数据在一根数据线上一位一位传输,每一位数据都占据一个固定的时间长度。

与并行通信方式相比,串行通信方式的传输速度较慢,但这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,因此得到了广泛的应用。

基本的UART只需要发送和接收两条数据线就可以完成数据的全双工通信,其基本功能是在发送端将控制器通过总线传过来的并行数据,以设定的格式,设定的频率串行地传输出去,并同时在接收端将串行接收到的数据,转换成相应的并行数据发送出去。

UART的基本帧格式如图1所示。

其中,起始位总是逻辑O状态,停止位总是逻辑l状态,其持续时间可选为1位、1.5位或2位,其数据位可为5、6、7、8位,校验位可根据需要选择奇校验位,偶校验位或无校验位。

二、URAT整体结构的设计2 设计一个全双工UART电路,具体要求如下:1)支持数据格式:起始位(1bit)+数据(8bit)+奇偶校验位(1bit)+终止位(1bit)2)奇/偶校验可配置3)可配置支持115200以下的常见波特率4)支持115200以下的波特率自适应,自适应过程如下:a.复位后,UART首先接收输入,不断自动调整波特率,直到以一定波特率正确连续接收到3个bytes的0x55b.接着UART以此波特率连续发送3个bytes 0xaac.之后两端以此波特率进行通信d.波特率自适应只在电路复位后进行一次,如欲再次自适应波特率应对电路再次复位e.波特率自适应过程中不能对UART的波特率作任何设置,自适应完成后可以对波特率作设置5)自动计算校验位用于发送数据;对接收到的校验位和数据进行校验,发现错误应设置错误标志,并丢弃数据6)对接收不正常数据(如无终止位、无校验位、数据位数不正确等)应能自动识别并设置错误标志、丢弃3.UART设计通常设计数字电路大都采用自顶向下将系统按功能逐层分割的层次化设计方法,这比传统自下向上的EDA设计方法有更明显的优势(当时的主要设计文件是电路图)。

因为由自顶向下的设计过程可以看出,从总体行为设计开始到最终逻辑综合,形成网络表为止。

每一步都要进行仿真检查,这样有利于尽早发现系统设计中存在的问题,从而可以大大缩短系统硬件的设计周期。

UART(即Universal Asynchronous Receiver Transmitter 通用异步收发器)是一种应用广泛的短距离串行传输接口。

UART允许在串行链路上进行全双工的通信。

串行外设用到的RS232-C异步串行接口,一般采用专用的集成电路即UART实现。

如8250、8251、NS16450等芯片都是常见的UART器件,这类芯片已经相当复杂,有的含有许多辅助的模块(如FIFO),有时我们不需要使用完整的UART的功能和这些辅助功能。

或者设计上用到了FPGA/CPLD器件,那么我们就可以将所需要的UART功能集成到FPGA内部。

使用VHDL 将UART的核心功能集成,从而使整个设计更加紧凑、稳定且可靠。

本文应用EDA技术,基于FPGA/CPLD器件设计与实现UART。

3.1 UART结构UART主要有由数据总线接口、控制逻辑、波特率发生器、发送部分和接收部分等组成。

本设计主要设计UART中最重要的发送部分和接收部分,结构如下图13.2 UART的帧格式UART的帧格式如图2所示。

发送数据过程:空闲状态,线路处于高电位;当收到发送数据指令后,拉低线路一个数据位的时间T,接着数据按低位到高位依次发送,数据发送完毕后,接着发送奇偶校验位和停止位(停止位为高电位),一帧资料发送结束。

接收数据过程:空闲状态,线路处于高电位;当检测到线路的下降沿(线路电位由高电位变为低电位)时说明线路有数据传输,按照约定的波特率从低位到高位接收数据,数据接收完毕后,接着接收并比较奇偶校验位是否正确,如果正确则通知后续设备准备接收数据或存入缓存。

UART是异步传输,没有传输同步时钟。

为了能保证数据传输的正确性,UART采用16倍数据波特率的时钟进行采样。

每个数据有16个时钟采样,取中间的采样值,以保证采样不会滑码或误码。

一般UART一帧的数据位数为8,这样即使每个数据有一个时钟的误差,接收端也能正确地采样到数据。

UART的接收数据时序为:当检测到数据的下降沿时,表明线路上有数据进行传输,这时计数器CNT开始计数,当计数器为24=16+8时,采样的值为第0位数据;当计数器的值为40时,采样的值为第1位数据,依此类推,进行后面6个数据的采样。

如果需要进行奇偶校验,则当计数器的值为152时,采样的值即为奇偶位;当计数器的值为168时,采样的值为“1”表示停止位,一帧数据接收完成。

4 UART的Verilog HDL语言设计4.1 UART分频器假设数据的波特率为p,则所需时钟的频率为16*p。

以波特率p为115200为例,系统时钟为50MHz,则分频系数为50000000/(16*115200) = 27.127,取整为27。

分频器V erilog HDL语言代码如下:module clkdiv(clk, clkout);input clk; //系统时钟output clkout; //采样时钟输出reg clkout;reg [15:0] cnt;always @(posedge clk) //分频进程beginif(cnt == 16'd12)beginclkout <= 1'b1;cnt <= cnt + 16'd1;endelse if(cnt == 16'd26)beginclkout <= 1'b0;cnt <= 16'd0;endelsebegincnt <= cnt + 16'd1;endendendmodule对此进行仿真,加入输入输出信号,设置系统时钟信号clk的周期为20ns。

仿真波形图如下图3:4.2UART发送模块UART发送模块的功能:接收到发送指令后,把数据按UART协议输出,先输出一个低电平的起始位,然后从低到高输出8个数据位,接着是可选的奇偶校验位,最后是高电平的停止位。

Verilog HDL语言代码如下:module uarttx(clk, datain, wrsig, idle, tx);input clk; //UART时钟input [7:0] datain; //需要发送的数据input wrsig; //发送命令,上升沿有效output idle; //线路状态指示,高为线路忙,低为线路空闲output tx; //发送数据信号reg idle, tx;reg send;reg wrsigbuf, wrsigrise;reg presult;reg[7:0] cnt; //计数器parameter paritymode = 1'b0;//检测发送命令是否有效always @(posedge clk)beginwrsigbuf <= wrsig;wrsigrise <= (~wrsigbuf) & wrsig;endalways @(posedge clk)beginif (wrsigrise && (~idle)) //当发送命令有效且线路为空闲时,启动新的数据发送进程beginsend <= 1'b1;endelse if(cnt == 8'd176) //一帧资料发送结束beginsend <= 1'b0;endendalways @(posedge clk)beginif(send == 1'b1)begincase(cnt) //产生起始位8'd0:begintx <= 1'b0;idle <= 1'b1;cnt <= cnt + 8'd1;end8'd16:begintx <= datain[0]; //发送数据0位presult <= datain[0]^paritymode; idle <= 1'b1;cnt <= cnt + 8'd1;end8'd32:begintx <= datain[1]; //发送数据1位presult <= datain[1]^presult;idle <= 1'b1;cnt <= cnt + 8'd1;end8'd48:begintx <= datain[2]; //发送数据2位presult <= datain[2]^presult;idle <= 1'b1;cnt <= cnt + 8'd1;end8'd64:begintx <= datain[3]; //发送数据3位presult <= datain[3]^presult;idle <= 1'b1;cnt <= cnt + 8'd1;end8'd80:begintx <= datain[4]; //发送数据4位presult <= datain[4]^presult;idle <= 1'b1;cnt <= cnt + 8'd1;end8'd96:begintx <= datain[5]; //发送数据5位presult <= datain[5]^presult;idle <= 1'b1;cnt <= cnt + 8'd1;end8'd112:begintx <= datain[6]; //发送数据6位presult <= datain[6]^presult;idle <= 1'b1;cnt <= cnt + 8'd1;end8'd128:begintx <= datain[7]; //发送数据7位presult <= datain[7]^presult;idle <= 1'b1;cnt <= cnt + 8'd1;end8'd144:begintx <= presult; //发送奇偶校验位presult <= datain[0]^paritymode; idle <= 1'b1;cnt <= cnt + 8'd1;end8'd160:begintx <= 1'b1; //发送停止位idle <= 1'b1;cnt <= cnt + 8'd1;end8'd176:begintx <= 1'b1;idle <= 1'b0; //一帧资料发送结束cnt <= cnt + 8'd1;enddefault:begincnt <= cnt + 8'd1;endendcaseendelsebegintx <= 1'b1;cnt <= 8'd0;idle <= 1'b0;endendendmodule为了测试UART发送模块的正确性,需要编写一个测试模块来测试UART发送模块,Verilog HDL语言代码如下:module testuart(clk, dataout, wrsig);input clk;output[7:0] dataout;output wrsig;reg [7:0] dataout;reg wrsig;reg [7:0] cnt;always @(posedge clk)beginif(cnt == 254)begindataout <= dataout + 8'd1; //每次数据加“1”wrsig <= 1'b1; //产生发送命令cnt <= 8'd0;endelsebeginwrsig <= 1'b0;cnt <= cnt + 8'd1;endendendmodule将发送模块和测试模块生成原理图模块和频率长生模块连接成发送模块电路图,如下图4:得到的仿真图如下图5波形仿真报告说明:对图,当发送命令wrsig的上升沿有效时,启动发送数据。

相关文档
最新文档