vhdl报告
vhdl实验报告
vhdl实验报告VHDL实验报告引言:VHDL(Very High Speed Integrated Circuit Hardware Description Language)是一种硬件描述语言,广泛应用于数字电路设计和仿真。
本篇实验报告将介绍我在VHDL实验中的学习和实践经验,包括实验目的、实验过程、实验结果以及对VHDL的理解和展望。
一、实验目的VHDL实验的主要目的是让我们掌握VHDL语言的基本语法和使用方法,能够利用VHDL描述数字电路,并通过仿真和综合工具进行验证和实现。
通过这些实验,我们可以深入了解数字电路的原理和设计方法,提高我们的逻辑设计能力和工程实践能力。
二、实验过程在实验过程中,我们首先学习了VHDL的基本语法,包括实体声明、端口声明、信号声明等。
然后,我们通过实例学习了VHDL的建模方法,包括组合逻辑电路的建模和时序逻辑电路的建模。
在组合逻辑电路的建模中,我们学习了使用逻辑运算符和条件语句描述电路的功能;在时序逻辑电路的建模中,我们学习了使用过程语句和时钟信号描述电路的状态转换。
在学习了VHDL的基础知识后,我们开始进行实验设计。
我们选择了一个简单的数字电路,如4位加法器,来进行实验验证。
首先,我们通过VHDL语言描述了加法器的功能和结构,包括输入端口、输出端口和中间信号。
然后,我们使用仿真工具进行了功能仿真,验证了加法器的正确性。
接着,我们使用综合工具将VHDL代码综合成门级电路,并进行了时序仿真和时序优化,验证了加法器的时序正确性和性能。
三、实验结果通过实验,我们成功地实现了4位加法器的功能,并验证了其正确性和性能。
在功能仿真中,我们输入了不同的测试数据,观察了输出结果,发现加法器能够正确地进行加法运算,并得到了正确的结果。
在时序仿真中,我们观察了电路的时序行为,包括输入信号的变化、输出信号的响应和中间信号的传播延迟等,发现加法器能够在时序上满足要求,并且具有较好的性能。
vhdl设计实验报告
vhdl设计实验报告VHDL设计实验报告引言VHDL(Very High Speed Integrated Circuit Hardware Description Language)是一种硬件描述语言,广泛应用于数字电路设计和验证。
本实验旨在通过设计一个简单的电路来熟悉VHDL语言的基本语法和设计流程。
一、实验背景数字电路是现代电子系统的基础,而VHDL则是描述和设计数字电路的重要工具。
VHDL可以帮助工程师们以一种形式化的语言来描述电路的功能和结构,从而实现电路的模拟和验证。
二、实验目的本实验的目的是通过使用VHDL语言设计一个简单的电路,加深对VHDL语言的理解,并掌握基本的电路设计流程。
三、实验步骤1. 确定电路功能在设计电路之前,首先需要明确电路的功能。
本实验中,我们选择设计一个4位加法器电路。
2. 设计电路结构根据电路功能的要求,设计电路的结构。
在本实验中,我们需要设计一个4位加法器,因此需要使用4个输入端口和一个输出端口。
3. 编写VHDL代码使用VHDL语言编写电路的描述代码。
在代码中,需要定义输入和输出端口的类型和位宽,并实现电路的功能。
4. 进行仿真使用仿真工具对设计的电路进行仿真,以验证电路的功能是否符合预期。
通过输入不同的测试数据,观察输出是否正确。
5. 下载到FPGA开发板将设计好的电路代码下载到FPGA开发板上进行验证。
通过连接输入信号和观察输出信号,验证电路在实际硬件上的运行情况。
四、实验结果与分析经过仿真和实际验证,我们设计的4位加法器电路在功能上符合预期。
输入不同的数据进行加法运算时,输出结果都正确。
五、实验总结通过本次实验,我们深入了解了VHDL语言的基本语法和设计流程。
通过设计一个简单的电路,我们掌握了VHDL的应用方法,并通过仿真和实际验证,加深了对电路设计的理解。
六、实验心得本实验让我对VHDL语言有了更深入的认识。
通过实际操作,我更加熟悉了VHDL的编写和仿真流程。
VHDL与数字电路设计实验报告
VHDL与数字电路设计实验报告引言本实验旨在通过使用VHDL编程语言和数字电路设计技术,实现特定功能的电路设计。
本文档将对实验的步骤、设计原理和结果进行详细描述。
实验步骤1. 步骤一:熟悉VHDL编程语言在实验开始之前,团队成员对VHDL编程语言进行了研究和熟悉。
我们了解了VHDL的基本语法、数据类型和结构,并获得了对VHDL设计原理的初步理解。
2. 步骤二:设计功能电路在本实验中,我们选择了一个特定的功能电路进行设计。
我们首先进行了功能需求分析,并根据需求确定了电路的输入输出信号以及主要的逻辑运算。
然后,我们使用VHDL编程语言将电路的逻辑运算实现为代码,并进行了仿真和测试。
3. 步骤三:电路仿真和验证为了验证我们设计的电路功能的正确性,我们使用了VHDL仿真工具进行了电路的仿真和验证。
我们根据输入信号的不同组合,观察输出信号的变化,并与我们预期的结果进行比较。
通过这一步骤,我们确认了我们设计的电路能够按照预期工作。
4. 步骤四:电路实现和测试在确认电路的设计和仿真结果无误之后,我们进一步将电路实现到实际的数字电路平台上,并进行了硬件测试。
我们使用实际的输入信号来测试电路的性能和稳定性,并对输出信号进行观察和分析。
通过这一步骤,我们验证了电路在实际环境中的可行性。
设计原理我们设计的电路基于特定的功能需求,采用了经典的数字电路设计原理。
通过使用VHDL编程语言,我们将电路的逻辑运算实现为逻辑门和触发器的组合。
通过将输入信号连接到适当的逻辑门和触发器,我们实现了所需的功能。
结果与分析经过实验步骤的完成,我们成功地设计和实现了一个具有特定功能的数字电路。
在仿真测试和实际测试中,电路都表现出了良好的性能和稳定性。
根据结果的分析,我们验证了电路的设计原理和逻辑的正确性。
结论本实验通过使用VHDL编程语言和数字电路设计技术,成功地实现了一个具有特定功能的电路设计。
我们的实验结果表明,VHDL和数字电路设计技术在电路设计领域具有重要的应用价值。
VHDL实验报告实验一
实验一:3位比较器一、实验目的1、熟悉Xilinx ISE/ModelSim软件,掌握软件的VHDL程序输入、程序编译和程序仿真操作;2、学习利用VHDL语言设计三位比较器控制电路程序;3、根据三位比较器的原理设计VHDL程序,使得a,b为三位信息的输入端口,若a>b 则c=1。
否则c=0;二、VHDL源程序:●Compare3源代码:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity compare3 isport (a:in std_logic_vector(2 downto 0);b:in std_logic_vector(2 downto 0);c:out std_logic);end compare3;architecture Behavioral of compare3 isbeginprocess (a,b)beginif(a>=b)thenc<='1';elsec<='0';end if;end process;end Behavioral;●三位比较器testbench代码:LIBRARY ieee;USE ieee.std_logic_1164.ALL;-- Uncomment the following library declaration if using-- arithmetic functions with Signed or Unsigned values--USE ieee.numeric_std.ALL;ENTITY tbench1 ISEND tbench1;ARCHITECTURE behavior OF tbench1 IS-- Component Declaration for the Unit Under Test (UUT)COMPONENT compare3PORT(a : IN std_logic_vector(2 downto 0);b : IN std_logic_vector(2 downto 0);c : OUT std_logic);END COMPONENT;--Inputssignal a : std_logic_vector(2 downto 0) := "000";signal b : std_logic_vector(2 downto 0) := "000";--Outputssignal c : std_logic;-- No clocks detected in port list. Replace <clock> below with -- appropriate port nameBEGIN-- Instantiate the Unit Under Test (UUT)uut: compare3 PORT MAP (a => a,b => b,c => c);-- Clock process definitions-- Stimulus processstim_proc: processbegin-- hold reset state for 100 ns.wait for 10 ns;a <= "010";b <= "001";wait for 10 ns;a <= "110";b <= "111";wait for 10 ns;a <= "011";b <= "111";wait for 10 ns;a <= "110";b <= "101";wait for 10 ns;a <= "110";b <= "000";wait for 10 ns;a <= "100";b <= "101";wait for 1000 ns;-- insert stimulus herewait;end process;END;三、实验结果与分析●实验仿真波形图●实验结果分析由波形图观察可得该VHDLd代码实现了比较的功能,在输入a,b值大小不同的情况下,成许进行比较均能的出结果并给C赋值,当a>b,c=1, 反之c=0。
VHDL断言语句与报告语句
例: RS触发器的VHDL描述中REPORT语句的使用。
LIBRARY IEEE; USE IEEE. STD_LOGIC_1164.ALL;
ENTITY rsff IS
PORT(s :IN BIT; r :IN BIT;
ቤተ መጻሕፍቲ ባይዱ
q :OUT BIT;
qb :OUT BIT); END rsff;
例: RS触发器的VHDL描述中断言语句的使用
LIBRARY IEEE; USE IEEE. STD_LOGIC_1164.ALL; ENTITY rsff IS PORT(s :IN BIT; r :IN BIT; q :OUT BIT; qb :OUT BIT); END rsff;
ARCHITECTURE rtl OF rsff IS BEGIN
last_state := 0;
ELSE last_state := 1;
END IF;
q <= last_state; qb <= not(last_state);
END PROCESS;
END rtl;
断言语句(Assert)
断言语句分为顺序断言语句和并行断言语句,顺序 断言语句主要用于进程、函数和过程仿真、调试中的人 机对话,它可以给出一个文字串作为警告和错误信息。 断言语句的书写格式如下:
PROCESS(s,r)
VARIABLE last_state :BIT; BEGIN ASSERT(NOT(s =„1‟AND r =„1‟)) REPORT “Both s and r equal to„1‟.” SEVERITY ERROR;
IF(s =„0‟AND r =„0‟)THEN last_state := last_state; ELSIF(s =„0‟AND r =„1‟)THEN last_state := 0; ELSE last_state := 1; END IF; q <= last_state; qb <= not(last_state); END PROCESS; END rtl;
vhdl实验报告--蜂鸣器
vhdl实验报告--蜂鸣器VHDL 实验报告蜂鸣器一、实验目的本次实验的主要目的是通过使用 VHDL 语言来设计并实现一个蜂鸣器的控制电路,深入理解数字电路的设计原理和 VHDL 编程的基本方法,掌握硬件描述语言在实际电路设计中的应用,提高自己的逻辑思维和问题解决能力。
二、实验原理蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电。
常见的蜂鸣器分为有源蜂鸣器和无源蜂鸣器两种。
有源蜂鸣器内部自带了振荡源,只要给其供电就能发出固定频率的声音;无源蜂鸣器则需要外部提供一定频率的脉冲信号才能发声。
在本实验中,我们使用 VHDL 语言来控制一个无源蜂鸣器。
通过编写代码,生成特定频率的脉冲信号,从而驱动蜂鸣器发声。
三、实验设备及工具1、计算机2、 Quartus II 软件3、开发板四、实验内容及步骤1、设计思路首先,需要确定蜂鸣器发声的频率。
通过计算得出所需的时钟周期数。
然后,使用计数器来产生特定频率的脉冲信号。
最后,将脉冲信号输出到蜂鸣器的控制引脚。
2、 VHDL 代码编写```vhdllibrary ieee;use ieeestd_logic_1164all;use ieeenumeric_stdall;entity buzzer_control isport(clk : in std_logic;rst : in std_logic;buzzer : out std_logic);end entity;architecture Behavioral of buzzer_control isconstant CLK_FREQ : integer := 50_000_000; 系统时钟频率constant BUZZER_FREQ : integer := 1000; 蜂鸣器发声频率signal counter : integer range 0 to CLK_FREQ/BUZZER_FREQ 1; signal clk_div : std_logic;beginprocess(clk, rst)beginif rst ='1' thencounter <= 0;clk_div <='0';elsif rising_edge(clk) thenif counter = CLK_FREQ/BUZZER_FREQ 1 thencounter <= 0;clk_div <= not clk_div;elsecounter <= counter + 1;end if;end if;end process;buzzer <= clk_div;end architecture;```3、编译与仿真将编写好的 VHDL 代码在 Quartus II 软件中进行编译。
VHDL实验报告(1)
VHDL 实验报告******班级:电子0701学号:************实验一组合逻辑电路设计一实验目的:1. 熟悉mux+pluxII软件,可以进行新文件的编辑和文件的修改。
2. 掌握门电路VHDL语言程序设计方法。
3. 掌握选择器VHDL语言程序设计方法。
4. 掌握加法器VHDL语言程序设计方法。
5. 熟悉VHDL编程的基本方法。
二实验设备:1.计算机2.Max+PlusII软件三实验原理及内容:1 二输入与门(1)实验原理二输入与门是我们数字电路中的一个基础逻辑门电路,是最基本的逻辑门电路之一,也是最简单的逻辑门之一。
它能实现两个输入端的相与,一般有三个端口。
二输入与门的表达式是:Y=ab二输入与门的逻辑符号如图(1)所示,真值表如表(1)所示。
图(1)与门逻辑符号表(1)与门真值表(2)实验内容a.在mux+pluxII文本编辑环境下,打开新文本,编写两输入与门VHDL语言源程序,程序设计如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY and2 ISPORT(a,b: IN STD_LOGIC;Y: OUT STD_LOGIC);END and2;ARCHITECTURE behave OF and2 ISBEGINY <= a and b;END behave;b.对源程序进行编译,按照提示进行修改,直至编译通过。
c.对编译程序进行仿真,分析并记录仿真波形,其仿真波形图如图(2)所示。
图(2)二输入与门仿真图d.在自己的目录下保存相应的源文件、波形文件。
2 四选一选择器(1)实验原理四选一选择器如图(3)所示,真值表如表(2)所示。
图(3)mux4管脚图表(2)mux4真值表(2)实验内容a.在mux+plusII文本编辑环境下,打开新文件,编辑四选一VHDL源程序文件,其程序设计如下:LIBRARY IEEEUSE IEEE.STD_LOGIC_1164.ALL;ENTITY mux4 ISPORT(A: IN STD_LOGIC_VECTOR (1 DOWNTO 0);D0,D1,D2,D3:IN STD_LOGIC;G:IN STD_LOGIC;Y: OUT STD_LOGIC);END mux4;ARCHITECTURE dataflow OF mux4 ISBEGINPROCESS (A,D0,D1,D2,D3,G)BEGINIF (G ='0') THENIF (A="00")THEN Y <= D0;ELSIF(A="01")THEN Y <= D1;ELSIF(A="10")THEN Y <= D2;ELSE Y <= D3;END IF;ELSE Y <='0';END IF;END PROCESS;END dataflow;b.对源程序进行编译,按照提示进行修改,直到编译通过。
VHDL实验报告
年月日VHDL实验报告学院专业学号姓名实验1 译码器设计一、实验原理1、译码器是数字系统中常用的组合逻辑电路,常用于地址译码。
74LS138是最常用的一种小规模集成电路,它有3个二进制输入端和8个译码输出端。
表1.1是它的真值表。
表1.1 3-8 译码器真值表2、普通的LED数码管由7段和一个点组成,使用它进行显示,需要译码驱动。
本实验实现一个七段LED显示译码电路。
为了实验方便,在译码之前加入一个4位二进制加法计数器,当低频率的脉冲信号输入计数器后,由7段译码器将计数值译为对应的十进制码,并由数码管显示出来。
图1.1为此电路的原理图。
图1.1 7段LED译码显示电路二、实验内容1、设计一个4-16译码器。
2、设计轮流显示表1.2所示字符的程序。
表1.2 字母显示真值表3、通过仿真,观察设计的正确性。
4、下载、验证设计的正确性。
三、源程序1、4-16译码器。
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY decode ISPORT( d0, d1, d2,d3, s1 ,s2 ,s3:IN STD_LOGIC;Y : OUT STD_LOGIC_VECTOR ( 15 DOWNTO 0 ) );END decode;ARCHITECTURE rtl OF decode ISSIGNAL indata : STD_LOGIC_VECTOR ( 3 DOWNTO 0 );BEGINIndata <= d3 & d2 & d1 & d0 ;PROCESS ( indata, s1, s2, s3 )BEGINIF (s1 ='1' AND s2='0' AND s3 = '0' ) THENCASE indata ISWHEN "0000" => Y <= "1111111111111110" ;WHEN "0001" => Y <= "1111111111111101" ;WHEN "0010" => Y <= "1111111111111011" ; WHEN "0011" => Y <= "1111111111110111" ;WHEN "0100" => Y <= "1111111111101111" ;WHEN "0101" => Y <= "1111111111011111" ;WHEN "0110" => Y <= "1111111110111111" ;WHEN "0111" => Y <= "1111111101111111" ;WHEN "1000" => Y <= "1111111011111111" ;WHEN "1001" => Y <= "1111110111111111" ;WHEN "1010" => Y <= "1111101111111111" ; WHEN "1011" => Y <= "1111011111111111" ;WHEN "1100" => Y <= "1110111111111111" ;WHEN "1101" => Y <= "1101111111111111" ;WHEN "1110" => Y <= "1011111111111111" ;WHEN "1111" => Y <= "0111111111111111" ;WHEN OTHERS=> NULL;END CASE;ELSEY <= "1111111111111111" ;END IF;END PROCESS;END rtl;2、轮流显示表1.2所示字符的程序。
VHDL实验报告
《创新实验》实验报告—基于vhdl的编程和硬件实现一、实验目的1.2.3.4. 熟悉和掌握硬件描述语言vhdl的基本语法及编写;掌握软件xilinx ise 10.1的使用;熟悉sdz-6电子技术实验箱的使用;了解节拍脉冲发生器等基本电路的实现;5. 了解八位二进制计数器的功能与设计;6. 学习键盘和七段数码管显示的控制和设计。
二、实验内容1. xilinx ise 10.1软件的使用;2. 节拍脉冲发生器等基本电路的实现;3. 八位二进制计数器的实现4. 键盘扫描及显示的实现三、实验器材1、 pc机2、 sdz-6电子技术实验箱3、正负5v电源4、 i/o接口线四、软件的使用在安装xilinx10.1软件时,需要一个id号,其实这个id号是可以重复使用的,几个同学在官网注册后就可以共享id号了。
安装完成之后就可以使用这个软件编写相应的vhdl的程序。
1.新建工程file—>new project 弹出下面的对话框输入工程名后单击next。
然后根据本实验的实验箱进行以下设置。
以后的步骤一般都是单击next(有些资料上会介绍有些这些步骤的具体功能,但对于本实验不必用到),最后单击finish,完成新建一个工程。
在窗口的左边会出现刚刚新建的工程,如下: 2.新建一个vhdl的源文件。
在上图中,右击工程选择new source ,弹出如下对话框。
在对画框的左边选择vhdl module,输入文件的名字(改名字最好是你定义的实体的名字)。
单击next。
出现下面的对话框。
该对话框主要是对外部端口的编辑。
可以直接跳过,即单击next,在源文件上编辑端口。
然后在接下来的对话框中单击finish。
完成建立一个源文件。
窗口右边就会出现刚才编辑的源文件。
3.编写和编译代码将事先编好的代码复制到源文件里,然后保存文件。
选中左边的文件名,在窗体的左边出现如下编辑文档内容。
选择synthesize —xst—》check syntax,双击check syntax,开始编译源文件。
VHDL数字电路课程实验报告
VHDL数字电路课程实验报告实验一8分频器一、实验要求:分别用信号量和变量实现八分频器二、实验过程:1、代码:8分频器vhdlibrary ieee;use ieee.std_logic_1164.all;entity freq_divider isport(clk: in std_logic;out1, out2: buffer bit);end freq_divider;architecture example of freq_divider issignal count1: integer range 0 to 7;beginprocess(clk)variable count2: integer range 0 to 7;beginif(clk'event and clk='1') thencount1<=count1+1;count2:=count2+1;if(count1=3) thenout1<=not out1;count1<=0;end if;if(count2=4) thenout2<=not out2;count2:=0;end if;end if;end process;end example;八分频器tbLIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY fd_tb isEND fd_tb;architecture behavior of fd_tb iscomponent freq_dividerport(clk:IN STD_LOGIC;out1, out2: buffer bit);end component;signal clk:std_logic;signal out1,out2:bit;beginu1: freq_divider port map(clk,out1,out2);processbeginclk<='0';wait for 50 ns;loopclk<=not clk;wait for 25 ns;end loop;end process;end behavior;2、结果图:实验二实现例8.6一、实验要求:电路只有一个输入时钟信号,输出信号在适中的两个边沿都会发生变化二、实验内容:1、代码信号发生器vhdENTITY signal_gen ISPORT (clk: IN BIT;outp: OUT BIT);END signal_gen;ARCHITECTURE fsm OF signal_gen ISTYPE state IS (one, two, three);SIGNAL pr_state1, nx_state1: state;SIGNAL pr_state2, nx_state2: state;SIGNAL out1, out2: BIT;BEGINPROCESS(clk)BEGINIF (clk'EVENT AND clk = '1') THENpr_state1 <= nx_state1;END IF;END PROCESS;PROCESS (clk)BEGINIF (clk'EVENT AND clk = '0') THENpr_state2 <= nx_state2;END IF;END PROCESS;PROCESS (pr_state1)BEGINCASE pr_state1 ISWHEN one =>out1 <= '0';nx_state1 <= two;WHEN two =>out1 <= '1';nx_state1 <= three;WHEN three =>out1 <= '1';nx_state1 <= one;END CASE;END PROCESS;PROCESS (pr_state2)BEGINCASE pr_state2 ISWHEN one =>out2 <= '1';nx_state2 <= two;WHEN two =>out2 <= '0';nx_state2 <= three;WHEN three =>out2 <= '1';nx_state2 <= one;END CASE;END PROCESS;outp <= out1 AND out2;END fsm;信号发生器tbentity tb_fsm isend tb_fsm;architecture behavior of tb_fsm is component signal_gen isport( clk: in bit;outp: out bit);end component;signal clk,outp:bit;beginu1: signal_gen port map(clk,outp); processbeginclk<='0';wait for 20 ns;loopclk<=not clk;wait for 10 ns;end loop;end process;end behavior;2、结果图实验三常数比较器一、实验要求常数比较器,用于比较的变量位宽应大于等于常数二、实验内容1、代码常数比较器vhdLIBRARY ieee;USE ieee.std_logic_1164.all;entity compare isport(b: in integer range 0 to 15;x1,x2,x3: out std_logic);end compare;architecture compare of compare isconstant a: integer:=10;beginx1<='1' when a>b else '0';x2<='1' when a=b else '0';x3<='1' when a<b else '0';end compare;常数比较器tbLIBRARY ieee;USE ieee.std_logic_1164.all;entity tb_compare isend tb_compare;architecture behavior of tb_compare iscomponent compareport(b: in integer range 0 to 15;x1,x2,x3: out std_logic);end component;signal b: integer;signal x1,x2,x3: std_logic;beginu1: compare port map(b, x1,x2,x3);processbeginb<=5; wait for 10 ns;b<=8; wait for 10 ns;b<=10; wait for 10 ns;b<=13; wait for 10 ns; b<=10; wait for 10 ns; b<=3; wait for 10 ns; end process;end behavior;2、结果图实验四序列检测器一、实验要求序列检测’1001’弱检测到,输出‘1‘,否则输出’0‘二、实验内容1、状态图2、代码序列检测器vhdlibrary ieee;use ieee.std_logic_1164.all;entity string_detector isport(datain,clk: in bit;q: out bit);end string_detector;architecture sd of string_detector istype state is (zero, one, two, three, four);signal pr_state, nx_state: state;beginprocess(clk)beginif(clk'event and clk='1') thenpr_state<=nx_state;end if;end process;process(datain, pr_state)begincase pr_state iswhen zero=>q<='0';if(datain='1') then nx_state<=one;else nx_state<=zero;end if;when one=>q<='0';if(datain='0') then nx_state<=two;else nx_state<=zero;end if;when two=>q<='0';if(datain='0') then nx_state<=three;else nx_state<=zero;end if;when three=>q<='0';if(datain='1') then nx_state<=four;else nx_state<=zero;end if;when four=>q<='1';nx_state<=zero;end case;end process;end sd;序列检测器tb------------------------------------------------------------------ library ieee;use ieee.std_logic_1164.all;------------------------------------------------------------------ entity testBench isend testBench;------------------------------------------------------------------architecture test of testBench iscomponent string_detector isport(datain,clk: in bit;q: out bit);end component;signal datain,clk:bit;signal q:bit;beginSD: string_detector port map(datain,clk,q);processbeginfor i in 0 to 100 loopclk<='0';wait for 10 ns;clk<='1';wait for 10 ns;end loop;end process;processbegindin<='1';wait for 20ns;din<='0';wait for 20ns;din<='0';wait for 20ns;din<='0';wait for 20ns;din<='1';wait for 20ns;din<='0';wait for 20ns;din<='0';wait for 20ns;din<='1';wait for 20ns;din<='0';wait for 20ns;din<='1';wait for 20ns;din<='0';wait for 20ns;end process;end test;3、结果图。
一位全加器_可编程逻辑器件VHDL实验报告
1.一位全加器实验报告一、实验目的要求学习计数器的设计、仿真和硬件测试,进一步熟悉VHDL设计技术。
设计程序独立完成全加器的仿真。
全加器由两个半加器组合而成,原理类似。
半加器不考虑低位进位,但有高位进位;全加器要考虑低位的进位且该进位和求和的二进制相加,可能获得更高的进位。
二、设计方法与原理图图1是一个一位二进制全加器电路图,由图1所示,由两个半加器和一个或门构成一个一位二进制全加器;ain,bin为全加器的输入端,cin为全加器的低位进位,sum是全加器的全加和,cout是全加器的全加进位端;从而实现一位二进制全加器。
(图1)一位二进制全加器原理图三、实验内容按照教材上的步骤,在max plus II上进行编辑、编译、综合、适配、仿真。
说明例中各语句的作用,详细描述示例的功能特点,给出其所有信号的时序仿真波形。
四、源程序library ieee;use ieee.std_logic_1164.all;entity full_adder isport(a,b,cin:in std_logic;cout,sum:out std_logic);end entity full_adder;architecture fd1 of full_adder iscomponent h_adderport(a,b:in std_logic;co,so:out std_logic);end component;component or2aport(a,b:in std_logic;c:out std_logic);end component;signal d,e,f:std_logic;beginu1:h_adder port map(a=>ain,b=>bin,co=>d,so=>e); u2:h_adder port map(a=>e,b=>cin,co=>f,so=>sum); u3:or2a port map(a=>d,b=>f,c=>cout);end fd1;五过程性截图六、仿真结果(图2)一位二进制全加器仿真结果七、分析结果与总结由图2,本实验的目标已达成,及通过编写VHDL语言实现一个一位二进制全加器。
VHDL报告
实验五:数制转换一、实验任务和要求1.实现十六进制到十进制的转换2.分析实现的方法3.十六位数据的范围为X”00”~X”FF”二、设计分析,电路原理组成和方法第一步:设计一个计数器,记录256个数,依次是0--255,是通过VHDL语言编写的(文本输入)第二步:将十六进制数转换为十进制数,以BCD码的形式输出。
是以原理性设计输入实现的。
首先计数是以一个时钟信号,当出现上升沿是计数加一,直到255,以八位的二进制形式输出。
接下来是LPM-ROM。
将十六进制数转换为十进制,以BCD码输出。
首先建立一个MIF文件,将对应的十六进制转换为十进制,MIF文件如下:depth = 256; width = 12; address_radix = hex;data_radix = hex;contentbegin00:0;01:1;02:2;03:3;04:4;05:5;06:6;07:7;08:8;09:9;0A:10;0B:11;0C:12; 0D:13;0E:14;0F:15;10:16;11:17;12:18;13:19;14:20;15:21;16:22;17:23;18:24;19:25;1A:26;1B:27;1C:28;1D:29;1E:30;1F:31;20:32;21:33;22:34;23:35;24:36;25:37;26:38;27:39;28:40;29:41;2A:42;2B:43;2C:44;2D:45;2E:46;2F:47;30:48;31:49;32:50;33:51;34:52;35:53;36:54;37:55;38:56;39:57;3A:58;3B:59;3C:60;3D:61;3E:62;3F:63;40:64;41:65;42:66;43:67;44:68;45:69;46:70;47:71;48:72;49:73;4A:74;4B:75;4C:76;4D:77;4E:78;4F:79;50:80;51:81;52:82;53:83;54:84;55:85;56:86;57:87;58:88;59:89;5A:90;5B:91;5C:92;5D:93;5E:94;5F:95;60:96;61:97; 62:98; 63:99; 64:100; 65:101; 66:102; 67:103; 68:104; 69:105; 6A:106; 6B:107; 6C:108; 6D:109; 6E:110; 6F:111; 70:112; 71:113; 72:114; 73:115; 74:116; 75:117; 76:118; 77:119; 78:120; 79:121; 7A:122; 7B:123; 7C:124; 7D:125; 7E:126; 7F:127; 80:128; 81:129;82:130;83:131;84:132;85:133;86:134;87:135;88:136;89:137;8A:138;8B:139;8C:140;8D:141;8E:142;8F:143;90:144;91:145;92:146;93:147;94:148;95:149;96:150;97:151;98:152;99:153;9A:154;9B:155;9C:156;9D:157;9E:158;9F:159;A0:160;A1:161;A2:162;A3:163;A4:164;A5:165;A6:166;A7:167;A8:168;A9:169;AA:170;AB:171;AC:172;AD:173;AE:174;AF:175;B0:176;B1:177;B2:178;B3:179;B4:180;B5:181;B6:182;B7:183;B8:184;B9:185;BA:186;BB:187;BC:188;BD:189;BE:190;BF:191;C0:192;C1:193;C2:194;C3:195;C4:196;C5:197;C6:198;C7:199;C8:200;C9:201;CA:202;CB:203;CC:204;CD:205;CE:206;CF:207;D0:208;D1:209;D2:210;D3:211;D4:212;D5:213;D6:214;D7:215;D8:216;D9:217;DA:218;DB:219;DC:220;DD:221;DE:222;DF:223;E0:224;E1:225;E2:226;E3:227;E4:228;E5:229;E6:230;E7:231;E8:232;E9:233;EA:234;EB:235;EC:236;ED:237;EE:238;EF:239;F0:240;F1:241;F2:242;F3:243;F4:244;F5:245;F6:246;F7:247;F8:248;F9:249;FA:250;FB:251;FC:252;FD:253;FE:254;FF:255;end;然后设计LPM-ROM原件,在Graphic editor中找到原件,设置相应参数,并把MIF文件放入其中,进行编辑。
vhdl计数器实验报告
vhdl计数器实验报告《VHDL计数器实验报告》摘要:本实验利用VHDL语言设计了一个简单的计数器电路,并通过FPGA实现了该计数器。
实验结果表明,VHDL计数器能够准确地实现计数功能,具有较高的稳定性和可靠性。
引言:计数器是数字电路中常见的一种基本电路,用于实现对输入信号的计数和统计。
在本次实验中,我们利用VHDL语言设计了一个简单的计数器电路,并通过FPGA实现了该计数器。
本实验旨在通过实际操作和观察,加深对VHDL语言和计数器电路的理解,提高实验者的实际动手能力和问题解决能力。
实验内容:1. VHDL语言设计计数器电路2. 在FPGA上实现计数器电路3. 调试和测试计数器电路实验步骤:1. 设计计数器电路的VHDL代码,包括计数器的输入输出端口、计数器的计数规则和状态转换规则等。
2. 将VHDL代码综合成逻辑门电路,并下载到FPGA开发板上。
3. 运行FPGA开发板,观察计数器电路的工作情况,调试和测试计数器电路。
实验结果:经过实验,我们成功设计了一个简单的4位二进制计数器,能够准确地实现计数功能。
在FPGA开发板上实现该计数器电路后,我们观察到计数器能够按照预期的规则进行计数,并且在每个计数值上能够稳定地输出正确的结果。
在不同的输入条件下,计数器电路都能够正常工作,具有较高的稳定性和可靠性。
结论:通过本次实验,我们深入了解了VHDL语言的基本语法和计数器电路的设计原理,掌握了VHDL语言设计数字电路的方法和技巧。
同时,我们通过实际操作和观察,加深了对计数器电路的理解,提高了实际动手能力和问题解决能力。
本次实验取得了良好的实验效果,为今后的数字电路实验和项目设计奠定了良好的基础。
vhdl实验报告--蜂鸣器
VHDL实验报告一、实验目的1、掌握蜂鸣器的使用;2、通过复杂实验,进一步加深对VHDL语言的掌握程度。
二、实验原理乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频率,就可以在蜂鸣器上连续地发出各个音符的音调。
而要准确地演奏出一首乐曲,仅仅让蜂鸣器能够发声是不够的,还必须准确地控制乐曲的节奏,即每个音符的持续时间。
由此可见,乐曲中每个音符的发音频率及其持续的时间是乐曲能够连续演奏的两个关键因素。
乐曲的12平均率规定:每2个八度音(如简谱中的中音1与高音1)之间的频率相差1倍。
在2个八度音之间,又可分为12个半音。
另外,音符A(简谱中的低音6)的频率为440Hz,音符B到C之间、E到F之间为半音,其余为全音。
由此可以计算出简谱中从低音l至高音1之间每个音符的频率,如表2.1所示。
音名频率/Hz音名频率/Hz音名频率/Hz低音1261.6 中音1523.3 高音11045.5低音2293.7 中音2587.3 高音21174.7低音3329.6 中音3659.3 高音31318.5低音4349.2 中音4698.5 高音41391.1低音5392 中音5784 高音51568低音6440 中音6880 高音61760低音7493.9 中音7987.8 高音71975.5表2.1 简谱音名与频率的对应关系产生各音符所需的频率可用一分频器实现,由于各音符对应的频率多为非整数,而分频系数又不能为小数,故必须将计算得到的分频数四舍五入取整。
若分频器时钟频率过低,则由于分频系数过小,四舍五入取整后的误差较大;若时钟频率过高,虽然误差变小,但分频数将变大。
实际的设计应综合考虑两方面的因素,在尽量减小频率误差的前提下取合适的时钟频率。
实际上,只要各个音符间的相对频率关系不变,演奏出的乐曲听起来都不会走调。
音符的持续时间须根据乐曲的速度及每个音符的节拍数来确定。
因此,要控制音符的音长,就必须知道乐曲的速度和每个音符所对应的节拍数,本例所演奏的乐曲的最短的音符为四分音符,如果将全音符的持续时间设为1s的话,那么一拍所应该持续的时间为0.25秒,则只需要提供一个4HZ的时钟频率即可产生四分音符的时长。
VHDL实验报告
VHDL练习一1、七段译码管设计流程:七段译码管的实现不需要什么运算,和逻辑,只需要设定对应关系就可以。
首先调用ieee库,调用std_logic_1164.all,然后定义实体dec7,包含输入端口clk、data_in,输出端口dec,其中clk是std_logic类型,data_in根据要求是一个整型,输出端口对应到译码管的7段器件,所以是std_logic_vector类型。
接着定义结构体实现功能,进程敏感表为clk,使用case语句分情况输出,默认共阴极译码管,0为亮灯,当输出不在0~9范围时输出中间横线。
备注:一开始使用三位二进制数作为输入,后验证可以使用整型作为输入数据。
验证模块:声明空实体dec7_tb进行测试,将参数定义,并赋初值。
对被测试原件映射,定义时钟周期20ns,时钟进程自循环进行。
主进程验证时随意选取3组数据进行测试结果:结果与设计一致,认为设计成功。
2、十进制计数器设计流程:实体counter10,输入信号reset,up_enable,clk,输出信号bcd(4位),count。
结构体设计,定义信号变量temp(4位),作为可读数,记录当前数字。
当reset有效(当1有效),计数清零,否则当up_enable有效并获得clk上升沿时,计数加1,当计数达到9,count输出一个脉冲并将计数器归零。
完成后将计数器数字输出给bcd。
后来发现可以定义bcd为inout类型,就不需要temp作为中间变量。
验证模块:分别验证计数正确性、count输出、reset功能、up_enable功能。
结果:符合设计目标,计数器到9输出脉冲,up_enable为零时不计数,reset重置。
3、序列检测器设计流程:采用5位移位寄存器实现序列检测,当reset有效,重置寄存器;否则时钟上升沿到来时进行寄存器内容左移并在最低位读入数据,检测当前寄存器内容是否满足要求,是的话输出匹配信号脉冲。
验证模块:验证模块中增加constant std_logic_vector类型的data作为输入码流,预设为16位。
VHDL交通灯控制器-实验报告
可编程逻辑器件应用项目报告书项目名称:交通灯控制器指导老师:姓名:学号:班级:(以后写报告要包含以下一些内容:)一、设计要求--------------------------------------------------------------------------------二、设计目的--------------------------------------------------------------------------------三、设计方案--------------------------------------------------------------------------------四、设计程序---------------------------------------------------------------------------------五、管脚分配---------------------------------------------------------------------------------六、硬件下载实现现象描述------------------------------------------七、体会、对设计工作的总结与展-------------------------------------------一、设计要求:①在十字路口的两个方向上各设一组红、绿、黄灯,显示顺序为其中一方向(东西方向)是绿灯、黄灯、红灯;另一方向(南北方向)是红灯、绿灯、黄灯。
②设置一组数码管,以倒计时的方式显示允许通行或禁止通行的时间,其中绿灯、黄灯、红灯的持续时间分别是20s、5s和25s。
③当各条路上任意一条上出现特殊情况时,如当消防车、救护车或其他需要优先放行的车辆通过时,各方向上均是红灯亮,倒计时停止,且显示数字在闪烁。
当特殊运行状态结束后,控制器恢复原来状态,继续正常运行。
【实验】VHDL实验报告
【关键字】实验项目一数据选择器一、实验与设计要求1.熟悉MAX+PLUS II的编译环境,掌握该集成环境各个菜单项的使用;2.了解MAX+PLUSII的VHDL程序设计输入方法,初步了解该软件的仿真环境;3.初步运用VHDL编程,体会硬件描述语言的先进性;4.理解VHDL语言的并发执行的特点;5.熟悉VHDL语法6. 按照如下图示,设计一个四路的数据选择器,该电路能将四组不同的数据有选择的输出,每一组数据的宽度为4,输出那一组数据由选择开关决定,如下表:AB QCDS0S1二、实验与设计方法1.加入MAX+PLUSII软件之前,在E盘上新建一个工作目录\lyung。
2.加入MAX+PLUSII文本编辑器,编写VHDL程序,并保存文件至\lyung\mux41.vhd:3. 将工程指向当前文件并编译当前文件。
4. 建立波形仿真文件,设置输入、输出端口及输入端口的信号波形,保存波形仿真文件。
5. 加入仿真器工作环境,查看波形仿真结果。
6. 选择器件, 为电路端口分配FPGA器件引脚。
7. 进行第二次编译(包括逻辑综合和器件工艺映射),生成目标文件(*.sof等)。
8.将目标文件下载至FPGA器件。
9.在实验台上进行实际操作,验证设计的正确性。
三、实验与设计结果通过实验,初步熟悉了MAX+PLUS II的编译环境,并掌握该集成环境各个菜单项的使用。
实验过程中,了解了MAX+PLUSII的VHDL程序设计输入方法,初步运用VHDL编程,成功的按照实验要求设计了程序的VHDL源码(见附件1),熟悉了VHDL语法,理解了VHDL语言的并发执行的特点;并进行了仿真实验(仿真实验截图见图4-1),初步了解该软件的仿真环境,并成功的将文件烧入实验平台,成功通过了测试(实验平台截图见图4-2)。
四、程序源码及实验截图4-0、VHDL源码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux41 ISPORT (a,b,c,d: IN STD_LOGIC_VECTOR (3 DOWNTO 0);s1,s0: IN STD_LOGIC;q: OUT STD_LOGIC_VECTOR (3 DOWNTO 0));END mux41;ARCHITECTURE behave OF mux41 ISSIGNAL sel: STD_LOGIC_VECTOR(1 DOWNTO 0);BEGINsel <= s1 & s0;q<= a WHEN sel="00" ELSEb WHEN sel="01" ELSEc WHEN sel="10" ELSEd WHEN sel="11" ELSE"XXXX";END behave ;图 4-2 实验平台实验项目二三—八译码器一、实验与设计要求1.掌握组合逻辑电路的设计的一般步骤和方法;2.掌握一般电路设计要求及其设计知识;3. 设计一个3-8译码器,此电路有三个输入端(A,B,C),八个输出端D[7··0];当输入为为不同的值(0~7)时,只有对应的输出端才有输出;如下图所示:Y7二、实验与设计方法1.建立真值表2. 编写VHDL语言程序3. 将工程指向当前文件并编译当前文件。
VHDL报告
基于VHDL语言的电子密码锁设计摘要本次设计基于VHDL语言,使用QuartusII并行两位电子密码锁进行设计,并对设计过程进行了详细描述。
采用VHDL语言进行电子密码锁的设计可使设计工作简洁直观,快速实现既定功能。
电子密码锁在对财产安全保护等方面都有着重要作用,应用前景非常广泛。
该电子密码锁使用两位十进制并行密码,当输入的密码与锁内密码一致时,绿灯亮,开锁;当输入的密码与锁内的密码不一致时,红灯亮,不能开锁。
密码锁的密码可由用户自行设置。
关键词密码锁;VHDL;QuatusII;目录1.引言 (3)1.1系统设计背景及意义 (3)1.2 VHDL语言介绍 (3)2.需求分析 (3)2.1 功能需求 (3)2.2 器材需求 (4)3.功能设计 (4)3.1 设计总体框图 (4)3.2 输入部分设计 (5)3.3 输出部分设计 (6)3.4 芯片总体设计 (6)4.系统程序设计 (7)5.运行结果与分析 (11)5.1 系统仿真 (11)5.2 结果分析 (12)6.心得体会 (13)7.参考文献 (14)1 引言1.1 系统设计背景及意义在当今社会中,人们对于隐私的保护和对物品安全的重视程度与日俱增。
因此,使用了现代电子技术的电子密码锁便有了广泛的应用前景。
本次所设计的电子密码锁,能够实现该两位十进制并行密码保护,当输入的密码与锁内密码一致时,绿灯亮,开锁;当输入的密码与锁内的密码不一致时,红灯亮,不能开锁。
密码锁的密码可由用户自行设置,并可在共阴极七段数码管上显示所输入的密码。
为人们的财产、信息安全提供了可靠地保障。
1.2 VHDL语言介绍VHDL语言:VHDL(Very-High-Speed Integrated Circuit Hardware Description Language)即超高速积体电路硬件描述语言,在基于CPLD/FPGA和ASIC的数位系统设计中有着广泛的应用。
VHDL语言诞生于1983年,1987年被美国国防部和IEEE确定为标准的硬件描述语言。
(VHDL实验报告)数码管显示(一位数码管显示0-9,八位数码管显示学号后八位)
(1)一位数码管显示0-9:
(2)八位数码管显示学号后八位: 七、心得体会
七段码管位选输入信号 七段码管位选输入信号 七段码管位选输入信号
五、 实验步骤
1、打开 QUARTUSII 软件,新建一个工程。 2、建完工程之后,再新建一个VHDL File,打开VHDL 编辑器对话框。 3、按照实验原理和自己的想法,在VHDL 编辑窗口编写VHDL 程序。其 程序如下所示:
(1)一位数码管显示0-9:
电子科技大学成都学院学院
标准实验报告
(实验)课程名称 数字电路 EDA 设计与应用
姓名 乱弹的枇杷 学号 专业 指导教师
一、 实验名称 数码管显示(一位数码管显示 0-9,八位数码管显示学号
后八位)
二、 实验目的 1、了解数码管的工作原理。 2、学习七段数码管显示译码器的设计。 3、掌握 VHDL 的 CASE 语句及多层次设计方法。
信号名称对应fpga管脚名说明7segaf13七段码管段输入信号7segbf14七段码管段输入信号7segcf15七段码管段输入信号7segde15七段码管段输入信号7segef16七段码管段输入信号7segff17七段码管段输入信号7segge18七段码管段输入信号7segdpf18七段码管dp段输入信号7segsel0g18七段码管位选输入信号7segsel1g17七段码管位选输入信号7segsel2g16七段码管位选输入信号实验步骤1打开quartusii软件新建一个工程
信号名称 7SEG-A 7SEG-B 7SEG-C 7SEG-D 7SEG-E 7SEG-F 7SEG-G 7SEG-DP 7SEG-SEL0 7SEG-SEL1 7SEG-SEL2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
班级2011211410 学号2011211977 姓名姚雷阳
班级2011211410 学号2011211975 姓名高娃
一实验名称组合逻辑电路之加法器设计
二实验目的
学习计数器的设计、仿真和硬件测试,进一步熟悉VHDL设计技术。
设计程序认真独立完成设计的仿真。
三实验要求
1、利用计算机组成原理中介绍的修正函数,编程实现一个任意位进位的1位BCD码加法器。
2、设计标准输入为键盘,便于观察结果,输出为八段数码管显示。
3、设计能够自动对输入的键盘值转换成学号对应的BCD码制,然后采用相应的修正函数实现加法,加法结果正确(要求输出观测)。
4、要求考虑任意位的进位和修正函数,主要关注修正函数的实现、时钟分频、键盘扫描、八段数码管显示及八段数码管扫描。
四实验内容和原理
设计标准输入为8421BCD,输出为8421BCD码,便于观察结果。
设计能够自动对输入的8421BCD转换成学号对应的BCD码制(要求输出观测),然后采用相应的修正函数实现加法。
加法结果正确(要求输出观测)。
并且自动将加法的结果转换成8421BCD码输出。
1系统构成
(1)八段数码管显示模块
(2)八段数码管扫描模块
(3)BCD转换及加法计算模块
(4)键盘输入数据读取模块
(5)时钟分频模块
2矩阵键盘工作原理
(1)按键设置在行列线交叉点,行列线分别连接到按键开关的两端。
列线通过上拉电阻接5V电压,即列线的输出被钳位到高电平状态。
(2)判断键盘中有无按键按下是通过行线送入扫描信号然后从列线读取状态得到的。
其方法是依次给行线送低电平,检查列线的输入。
如果列线全是高电平,则代表低电平信号所在的行中无按键按下;如果列线有输入为低电平,则代表低电平信号所在的行和出现低电平的列的交点处有按键按下。
(3)按键设置在行列线交叉点,行列线分别连接到按键开关的两端。
列线通过上拉电阻接5V电压,即列线的输出被钳位到高电平状态。
(4)判断键盘中有无按键按下是通过行线送入扫描信号然后从列线读取状态得到的。
其方法是依次给行线送低电平,检查列线的输入。
如果列线全是高电平,则代表低电平信号所在的行中无按键按下;如果列线有输入为低电平,则代表低
电平信号所在的行和出现低电平的列的交点处有按键按下。
图1矩阵键盘工作原理图
3键盘输入
一个完整的键盘控制程序应解决以下任务:
(1)检测有无按键按下。
(2)有键按下,在无硬件去抖得情况下,应有软件延时除去抖动影响。
(3)键扫描程序。
(4)将键编码转换成相应键值。
整个设计程序包括三个模块:时钟分频、键盘扫描和键译码转换。
为了显示,还必须在顶层添加显示部分。
时钟分频:
由于使用的外部时钟频率为50MHz,这个频率对扫描来说太高,所以这里需要一个分频器来分得适合键盘扫描使用的频率。
4管脚约束
(1)SEED-FEM025板卡上FPGA通过2个控制引脚(MULTI_IO16、MULTI_IO17)控制SEED-XDTK_MBOARD板卡上的CPLD,实现功能模块的切换。
(2)SEED-FEM025板卡FPGA提供给CPLD的控制引脚共35根,其中MULTI_IO16、MULTI_IO17作为功能控制引脚,其余33根引脚(D00-D15、MULTI_IO00-MULTI_IO15、MULTI_IO18)做为数据输入、输出使用。
五源程序
8421BCD转换成5421BCD校正函数:
Function tran
(m:in std_logic_vector(4 downto 0))return std_logic_vector is
variable n:std_logic_vector(4 downto 0); begin
case m is--为什么不能用信号
when "00101" =>n:="01000"; when"00110"=>n:="01001"; when"00111"=>n:="0101 0"; when"01000"=>n:="01011"; when"01001"=>n:="01100"; when"01010"=>n:="00 000"; when"01011"=>n:="00001"; when"01100"=>n:="00010"; when"01101"=>n:=" 00011"; when"01110"=>n:="00100"
when"01111"=>n:="00101";
when "10101" =>n:="11000";
when"10110"=>n:="11001";
when"10111"=>n:="11010";
when"11000"=>n:="11011";
when others=>n:=m;
end case;
return(n);
end tran;
二进制码转换成
8421BCD
码校正函数:
function tran2
(j:in std_logic_vector(4 downto 0))return
std_logic_vector is
variable k:std_logic_vector(4 downto 0);
begin
when "01010" =>k:="10001";
when"01011"=>k:="10001";
when"01100"=>k:="10010";
when"01101"=>k:="10011";
when"01110"=>k:="10100";
when"01111"=>k:="10101";
when "10000" =>k:="10110";
when"10001"=>k:="10111";
when"10010"=>k:="11000";
when others=>k:=j;
end case;
return(k);
end tran2
六程序框图
程序包——实体——结构体(8421转换成2421函数,对8421各位分别全加,得出二进制码转换成8421码)。
七测试用例、测试目的和预计结果
(1)输入加数和被加数为键盘值2和1
(2)--输入值转余三码程序段
完成将键盘值转换成0101(余三码表示的2),以及0100 (余三码表示的1)将此转换结果作为监测信号输出,在波形图上要求可见
(3)--余三码校正函数
利用余三码的校正函数完成0101和0100的和sum<=0110,将sum输出,要求在波形图上可见
(4)--余三码转八段数码管程序段
将0110(余三码表示的3)转换成八段数码管01001111输出,波形图上可见。
八仿真波形图
九实验中遇到的问题和解决方法
(1)如何实现8421码转换2421BCD码:首先找出8421BCD与2421BCD表示
的十进制数的对应,然后在利用case语句实现表达。
(2)如何实现进位的表示:通过统一最高位表示进位从而实现全加的进位。
(3)怎样实现每位信号的全加而不是半加:通过构造函数对每一位的进位
信号赋值,分别调用一位全加函数实现单一位的全加,再迭代作为新一个加数,调用全加函数。
(4)全加函数实现的是二进制相加,相加结果还需要通过case语句转换成8421BCD码。