VHDL几个复杂电路的实现

举报
Qgtdre 发表于 2019/02/01 17:11:48 2019/02/01
【摘要】 VHDL几个复杂电路的实现

一.实验目的:

1 掌握复杂组合部件的设计方法。

2 掌握复杂时序部件的设计方法。

二.实验内容:

1.奇偶校验发生器(奇校验);

无标题1.jpg

2.子程序设计

定义函数或过程maxval,可以求出标准位矢量类型a、b的最大值。主程序中通过调用此函数或过程,可以实现对多个数求最大值。

3.设计实现秒表功能:要求有分秒百分表的显示。

 

 

一.源程序清单

实验4.1

entity parity_gen is

generic ( n :integer :=7);

port (input : in bit_vector (n-1 downto 0);

      output : out bit_vector (n downto 0));

end parity_gen;

architecture parity of parity_gen is

begin

process (input)

variable temp1 : bit;

variable temp2 : bit_vector (output ' range);

begin

temp1 :='1';

for i in input ' range loop

     temp1 := temp1 xor input(i);

     temp2(i) := input (i);

end loop;

temp2(output'high) :=temp1;

output <= temp2;

end process;

end parity;

实验4.2

-----------------11.最大值-------------------------------------------------------

library ieee;

use ieee.std_logic_1164.all;

-----------------------------------------------------------------------------

entity max0 is

port (inp1, inp2 , inp3 : in std_logic_vector (7 downto 0);

       maxout: out std_logic_vector (7 downto 0));

end max0;

-----------------------------------------------------------------------------

architecture max0 of max0 is

signal temp : std_logic_vector (7 downto 0);

-----------------------------------------------------------------------------

procedure max1 ( signal in1, in2 : in std_logic_vector (7 downto 0);

                    signal max : out std_logic_vector (7 downto 0)) is

begin

if (in1 > in2) then

     max <= in1;

else

    max <= in2;

end if;

end max1;

-----------------------------------------------------------------------------

 

begin

u1: max1 (inp1, inp2, temp);

u2: max1 (temp, inp3, maxout);

end max0;

 

实验4.3

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY second IS

       PORT (clk: IN STD_LOGIC;

y1,y2,y3:out integer RANGE 0 TO 3600 );

END second;

architecture counter OF second IS

BEGIN

PROCESS(clk)

variable sec: integer RANGE 0 TO 60;

variable   min: integer RANGE 0 TO 60;

variable  hour:integer RANGE 0 TO 60;

BEGIN

IF (clk'event AND clk='1')then

sec:=sec+1;

IF(sec=60)THEN

min:=min+1;

 END IF;

IF(min=60)THEN

hour:=hour+1;

 END IF;

END IF;

y1<=sec;

y2<=min;

y3<=hour;

END PROCESS;

END counter;

二.调试及运行结果分析

实验4.1

运行结果

无标题2.jpg

分析:当输入为偶数个1时,输出高位置1,输入有奇数个1,输出高位置0.实现奇偶校验发生器(奇校验)的功能。说明代码正确。

实验4.2

运行结果

分析:由图可知,输入三个数a,b,c输出为其中的最大值,实现了对多个数求最大值的功能,说明代码正确。

实验4.3

运行结果

分析:由图可知,当clk输入60个,秒输出计数1,当秒输出计满60,分输出计数1,因为时间太长,没有在图上仿真出分的进位。说明实现了分秒百分表的显示功能,说明代码正确。

五.总结

通过实验:

1.掌握了复杂组合部件的设计方法,学习了奇偶校验发生器(奇校验)的设计。

2 掌握复杂时序部件的设计方法。学习了如何用函数比较多个数,求出最大值。

3.学习了计数器实现秒表的设计方法。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。