VHDL与数字系统EDA设计_第1页
VHDL与数字系统EDA设计_第2页
VHDL与数字系统EDA设计_第3页
VHDL与数字系统EDA设计_第4页
VHDL与数字系统EDA设计_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、vhdl与数字系统eda设计姓名: 李 勃 学号: 0800030014 班级: 代培生班 2009年6月20日目录实验一1实验二5实验三8实验四10实验五14作业18vhdl与数字系统eda设计李勃 0800030014实验一1. 用if语句设计一个四十六译码器;2. 用case语句设计一个四十六译码器;3. 用generate语句构造一个串行的十六进制计数器。实验目的:学会使用相关eda软件进行vhdl代码的输入、仿真,会用vhdl实现一些简单的组合逻辑和时序逻辑。1. 用if语句设计一个四十六译码器实验方案:接口信号的定义如下:port(a : in std_logic;b : in s

2、td_logic;c : in std_logic;d : in std_logic;y : out std_logic_vector(15 downto 0);end decoder;关键部分代码:process(a,b,c,d) variable comb: std_logic_vector(3 downto 0); begincomb:=a&b&c&d;if comb=0000 then y=0000000000000001;elsif comb=0001 then y=0000000000000010;elsif comb=0010 then y=0000000000000100;el

3、sif comb=0011 then y=0000000000001000;elsif comb=0100 then y=0000000000010000;elsif comb=0101 then y=0000000000100000; elsif comb=0110 then y=0000000001000000;elsif comb=0111 then y=0000000010000000; elsif comb=1000 then y=0000000100000000;elsif comb=1001 then y=0000001000000000; elsif comb=1010 the

4、n y=0000010000000000;elsif comb=1011 then y=0000100000000000;elsif comb=1100 then y=0001000000000000;elsif comb=1101 then y=0010000000000000;elsif comb=1110 then y=0100000000000000;elsif comb=1111 then y=1000000000000000; else y y y y y y y y y y y y y y y y yy=xxxxxxxxxxxxxxxx ;end case ;end proces

5、s;仿真验证:仿真软件: active hdl 7.13. 用generate语句构造一个串行的十六进制计数器实验方案:接口信号的定义如下:entity counter is port( clk : in std_logic; clr : in std_logic; q : out std_logic_vector(3 downto 0) );end counter;关键部分代码:architecture rtl of counter iscomponent dff port( d : in std_logic; clr : in std_logic; clk : in std_logic;

6、q : out std_logic; qb : out std_logic );end component ; signal q_in: std_logic_vector (4 downto 0) ;begin q_in(0) q_in(i+1),clk=q_in(i),clr=clr,q=q(i),qb=q_in(i+1);end generate;end rtl;仿真验证:仿真软件: active hdl 7.1实验二设计一个两位二进制的加法器实验目的: 学会设计简单的组合逻辑,并进行功能仿真。实验方案:先用基本逻辑门设计一个半加器,再用两个半加器组合成全加器,再用全加器设计成二进制加法器

7、。接口定义如下:entity twobit_adder is port( cin : in std_logic; a : in std_logic_vector(1 downto 0); b : in std_logic_vector(1 downto 0); co : out std_logic; s : out std_logic_vector(1 downto 0) );end twobit_adder;关键部分代码:半加器部分:architecture half_adder of half_adder issignal c,d:std_logic ;begin c=a or b;d=a

8、 nand b;co= not d;s=c and d;end half_adder;全加器部分代码:u0: half_adder port map (a,b,u0_s,u0_co); u1: half_adder port map (u0_s,cin,s,u1_co); coa(0),b=b(0),cin=cin,s=s(0),co=u0_co); u1: full_adder port map (a=a(1),b=b(1),cin=u0_co,s=s(1),co=co);仿真软件: active hdl 7.12. 设计一个两位的bcd计数器实验目的:学会设计简单的时序逻辑,并进行仿真。实

9、验方案:先设计一个一位带进位的bcd计数器,再以它的进位输出作为十位计数器的时钟输入。接口定义:entity bcd_counter isport(clk : in std_logic;clr : in std_logic;q0 : out std_logic_vector(3 downto 0);q1 : out std_logic_vector(3 downto 0);end bcd_counter;关键部分代码:architecture rtl of bcd_counter is signal co: std_logic ;signal in_q0,in_q1: std_logic_ve

10、ctor(3 downto 0);begin q0= in_q0;q1= in_q1;process(clk,clr)beginif (clr=1) thenin_q0=0000;elsif (clkevent and clk=1) thenif (in_q0=1001) thenin_q0=0000;co=1;else in_q0=in_q0+1; co=0;end if;end if;end process;process(co,clr) begin if (clr=1) thenin_q1=0000;elsif (coevent and co=1) then if (in_q1=1001

11、) thenin_q1=0000;else in_q1=in_q1+1;end if;end if ;end process;end rtl;仿真软件: active hdl 7.1实验三利用数组形式描述256x8bits的ram,并利用测试床完成对其读写操作。实验目的:学会简单随机存储器的读写操作,并利用测试台对其进行测试。接口定义:entity ram is generic (k:integer :=8; w:integer :=8) ;port(wr : in std_logic;rd : in std_logic;cs : in std_logic;din : in std_logic

12、_vector(k-1 downto 0);adr : in std_logic_vector(w-1 downto 0);dout : out std_logic_vector(k-1 downto 0);end ram;关键部分代码:adr_in=conv_integer(adr);process (wr)begin if(wrevent and wr=1) then wr_rise=now;if(cs=1)thensram(adr_in)=800 ps) report write sram setup time violation severity warning;end process

13、;process(rd,cs,adr_in,wr)begin if(rd=0 and cs=1) thendout=sram(adr_in) after 3 ns;elsedoutz) after 4 ns;end if;end process;process(din)begindin_change300 ps) report read sram hold time violation severity warning;end process;仿真软件: active hdl 7.1实验四用vhdl语言设计uart。实验目的:学会用vhdl语言设计复杂的电路。实验方案:uart主要有由数据总线

14、接口、控制逻辑、波特率发生器、发送部分和接收部分等组成。本设计主要设计uart中最重要的发送部分和接收部分,其他部分设计不在赘述。功能包括发送缓冲器(tbr)、发送移位寄存器(tsr)、帧产生、奇偶校验、并转串、数据接收缓冲器(rbr)、接收移位寄存器(rsr)、帧产生、奇偶校验、串转并。uart的帧格式下图所示: uart发送器的设计数据的发送是由微处理器控制,微处理器给出wrn信号,发送器根据此信号将并行数据din7.0锁存进发送缓冲器tbr7.0,并通过发送移位寄存器tsr7.0发送串行数据至串行数据输出端sdo。在数据发送过程中用输出信号tbre、tsre作为标志信号,当一帧数据由发送

15、缓冲器tbr7.0送到发送发送移位寄存器tsr7.0时,tbre信号为1,而数据由发送移位寄存器tsr7.0串行发送完毕时,tsre信号为1,通知cpu在下个时钟装入新数据。发送器端口信号如下图所示:部分代码:process (rst,wrn) -接收数据至tbrbeginif rst = 1 thentbr 0) ;elsif wrnevent and wrn = 0 thentbr = din ;end if ;end process ;process (rst,clk16x,clk1x_enable)beginif rst = 1 thenclkdiv = 0000 ;elsif clk

16、16xevent and clk16x = 1 thenif clk1x_enable = 1 thenclkdiv = clkdiv + 0001 ;end if ;end if ;end process ;clk1x = clkdiv(3) ; -产生clk1x时钟process (rst,clk1x,no_bits_sent,tbr)beginif rst = 1 thensdo = 1 ;tsre = 1 ;tsr = 00000000 ;parity = 1 ;elsif clk1xevent and clk1x = 1 thenif std_logic_vector(no_bits

17、_sent) = 0001 thentsr = tbr ; -发送缓冲器tbr数据进入发送移位寄存器tsrtsre = 0 ; -发送移位寄存器空标志置“0”elsif std_logic_vector(no_bits_sent) = 0010 thensdo = 0011 and std_logic_vector(no_bits_sent) = 1010 thentsr = tsr(6 downto 0) & 0 ; -从低位到高位进行移位输出至串行输出端sdosdo = tsr(7) ;parity = parity xor tsr(7) ; -数据位中的1校验end if ;end if

18、 ;end process ;process (rst,clk1x,clk1x_enable) -产生发送字符长度和发送次序计数器beginif rst = 1 or clk1x_enable = 0 thenno_bits_sent = 0000 ;elsif clk1xevent and clk1x = 1 thenif clk1x_enable = 1 thenno_bits_sent = no_bits_sent + 0001 ;end if ;end if ;end process ;uart接收器的设计串行数据帧和接收时钟是异步的,发送来的数据由逻辑1变为逻辑0可以视为一个数据帧的

19、开始。接收器先要捕捉起始位,确定rxd输入由1到0,逻辑0要8个clk16时钟周期,才是正常的起始位,然后在每隔16个clk16时钟周期采样接收数据,移位输入接收移位寄存器rsr,最后输出数据dout。还要输出一个数据接收标志信号标志数据接收完。接收器的端口信号如下图所示:部分代码:process (clk1x,rst)beginif rst = 1 thenrsr = 00000000 ;rbr = 00000000 ;parity = 1 ;framing_error = 0 ;parity_error = 0001 and std_logic_vector(no_bits_rcvd) 1

20、001 then - 数据帧数据由接收串行数据端移位入接收移位寄存器rsr(0) = rxd2 ;rsr(7 downto 1) = rsr(6 downto 0) ;parity = parity xor rsr(0) ;elsif std_logic_vector(no_bits_rcvd) = 1010 thenrbr = rsr ; -接收移位寄存器数据进入接收缓冲器elsif parity = 0 thenparity_error = 1 ;elsif std_logic_vector(no_bits_rcvd) = 1001 and rxd2 = 0 thenframing_err

21、or = 1 ;end if ;end if ;end process ;process (rst,clk1x,clk1x_enable,no_bits_rcvd)beginif rst = 1 or (std_logic_vector(no_bits_rcvd) = 1100 and clk1x_enable = 0) thenno_bits_rcvd = 0000 ;elsif clk1xevent and clk1x = 1 thenif clk1x_enable = 1 thenno_bits_rcvd = no_bits_rcvd + 0001 ;end if ;end if ;en

22、d process ;dout = std_logic_vector(rbr) when rdn = 0 else zzzzzzzz ;end ;uart设计总模块将发送器和接收器模块组装起来,就能较容易地实现通用异步收发器总模块。总模块rtl图如下图:程序在max+plus ii环境下的分析波形仿真图:由于条件限制,数据给的太多,从上图是看不出来的,所以,为了说明设计的正确性,只给出了一个数据。通过波形仿真图我们可以清楚的看到uart的工作原理。实验五完成第九章计时电路设计。实验目的:学会设计稍微复杂一点的电路,学会自顶向下的设计方法。实验方案:先进行十进制计数器,六进制计数器,四进制计数器

23、等底层模块的设计,再运用模块化的设计方法,把它们组装成完整的计时器电路。接口:entity stop_watch isport(sysres : in std_logic;reset_sw : in std_logic;start_stop_sw : in std_logic;clk : in std_logic;dispen : in std_logic;enclk : in std_logic;xinxuanma :out std_logic;segment : out std_logic_vector(6 downto 0);common : out std_logic_vector(5

24、 downto 0);end stop_watch;关键部分代码:顶层模块的代码:architecture rtl of stop_watch is component clkgen port(sysres : in std_logic;en1 : in std_logic;clk : in std_logic;cntclk : out std_logic;keyclk : out std_logic);end component; component keyin port(reset_sw : in std_logic;start_stop_sw : in std_logic;keyclk

25、: in std_logic;clk : in std_logic;res : out std_logic;stst : out std_logic);end component;component ctrl port(sysres : in std_logic;res : in std_logic;stst : in std_logic;cntclk : in std_logic;cnten : out std_logic);end component ;component cntblk port(sysres : in std_logic;clk : in std_logic;cnten

26、: in std_logic;res : in std_logic;secl2 : out std_logic_vector(3 downto 0);secl1 : out std_logic_vector(3 downto 0);sec : out std_logic_vector(3 downto 0);sec10 : out std_logic_vector(2 downto 0);min : out std_logic_vector(3 downto 0);min10 : out std_logic_vector(2 downto 0);end component ; componen

27、t disp port(secl2 : in std_logic_vector(3 downto 0);secl1 : in std_logic_vector(3 downto 0);sec : in std_logic_vector(3 downto 0);sec10 : in std_logic_vector(3 downto 0);min : in std_logic_vector(3 downto 0);min10 : in std_logic_vector(3 downto 0); sysres : in std_logic;clk : in std_logic;dispen : i

28、n std_logic;segment : out std_logic_vector(6 downto 0);common : out std_logic_vector(5 downto 0);end component ; signal cntclk_s :std_logic :=0;signal keyclk_s:std_logic :=0;signal stst_s:std_logic :=0;signal cnten_s:std_logic :=0;signal res_s :std_logic :=0; signal secl2_s:std_logic_vector(3 downto

29、 0):=0000;signal secl1_s:std_logic_vector(3 downto 0):=0000;signal sec_s:std_logic_vector(3 downto 0):=0000;signal min_s:std_logic_vector(3 downto 0):=0000;signal sec10_s:std_logic_vector(3 downto 0):=0000;signal min10_s :std_logic_vector(3 downto 0):=0000; signal sec10_s1:std_logic_vector(2 downto 0):=000;signal min10_s1:std_logic_vector(2 downto 0):=000; beginxinxuanma= cntclk_s; sec10_s=0&sec10_s1;min10_s=0&min10_s1;u0: clkgen port map(sysr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论