1、北理工VHDL实验报告 本科实验报告 实验名称: VHDL语言及集成电路设计实验 课程名称:VHDL语言及集成电路设计实验时间:12、13周周二上午14、15周周六下午任课教师:任仕伟实验地点:4#427实验教师:任仕伟实验类型: 原理验证 综合设计 自主创新学生姓名:学号/班级:组 号:学 院:信息与电子学院同组搭档:专 业:微电子成 绩: 实验一:带有异步复位端的D触发器一、实验目的(1)熟悉linux操作环境和modelsim软件环境(2)理解时序逻辑和组合逻辑电路的区别(3)理解并行语句和顺序语句(4)用VHDL语言编写一个带有异步复位端的D触发器及其测试文件二、实验原理(1)组合逻辑
2、和时序逻辑组合逻辑电路当前输出的值仅取决于当前的输入,不需要触发器等具有存储能力的逻辑单元,仅仅使用组合逻辑门;时序逻辑电路的当前输出不仅取决于当前的输入,还与以前的输入有关,这类电路中包括寄存器等元件,也包括组合逻辑电路,寄存器通过一个反馈环和组合逻辑模块相连,触发器便是属于时序逻辑电路;(2)并行和顺序代码从本质上讲,VHDL代码是并发执行的。只有PROCESS,FUNCTION或PROCEDURE内的代码才是顺序执行的。当它们作为一个整体时,与其他模块之间又是并发执行的。以下是3个并发描述语句(stat1,stat2和stat3)的代码,会产生同样的电路结构。 stat1 stat3 s
3、tat1stat2 = stat2 = stat3 = 其他排列顺序stat3 stat1 stat2(3)并行语句进程(PROCESS)1)语法结构: 进程名: PROCESS (敏感信号列表)变量说明语句BEGIN(顺序执行的代码)END PROCESS 进程名;2) PROCESS 的特点 多进程之间是并行执行的; 进程结构内部的所有语句都是顺序执行的; 进程中可访问结构体或实体中所定义的信号; 进程的启动是由敏感信号列表所标明的信号来触发,也可以用WAIT语句等待 一个触发条件的成立。 各进程之间的通信是由信号来传递的。(4)带有异步复位端的D触发器三、实验代码LIBRARY IEEE
4、;USE IEEE.STD_LOGIC_1164.ALL;ENTITY dff ISPORT(d,clk,rst:IN STD_LOGIC;q:OUT STD_LOGIC);END dff;定义entity dffARCHITECTURE behavior OF dff IS BEGINPROCESS(rst,clk)BEGINIF(rst=1) THENq=0;如果复位信号有效,q为0ELSIF(clkEVENT AND clk=1) THEN q=d;上升沿触发且,qd,clk=clk,rst=rst,q=q); clk_gen:processbeginclk=0;wait for clk
5、_period/2; clk=1;wait for clk_period/2; end process;d_gen:processbeginwait for 100 ns;d=1;wait for 100 ns;d=0;end process;rst_gen:processbeginrst=1;wait for 150 ns;rst=0;wait for 500 ns;rst=1;wait for 150 ns; wait;end process;end tb_behavior;4、实验结果5、实验心得第一次使用此软件,略有陌生,耗费时间稍久,因为之前用过的quartusii9.0不必使用tb
6、文件,所以第一次实验刚开始并没有明白tb文件的用途,上网查找资料之后才明白过来,不过好在程序简单,顺利完成实验。实验二 步进电机控制器一、实验目的(1)理解两种状态机的区别(2)熟悉两种编程风格(3)编写BCD计数器和步进电机二、实验原理(1)米里型状态机和摩尔型状态机米里(Mealy)型状态机:状态机的输出信号不仅与电路的当前状态有关,还与当前的输入有关摩尔(Moore)型状态机:状态机的当前输出仅仅由当前状态决定。(2)有限状态机设计流程:1)理解问题背景。2) 逻辑抽象,得出状态转移图。 3 状态简化。4)状态分配。5) 用VHDL来描述有限状态机。(3)BCD计数器原理图(4)步进电机
7、控制器三、实验代码(1)BCD计数器library ieee;use ieee.std_logic_1164.all;entity counter isport(clk,rst:in std_logic; count:out std_logic_vector(3 downto 0); end counter;定义entity counterarchitecture state_machine of counter istype state is(zero,one,two,three,four,five,six,seven,eight,nine);自定义type类型的量,用来表示程序中要用到的不
8、同状态signal pr_state,nx_state:state;定义信号pr_state,nx_state,均为state类型的量beginprocess (rst,clk)beginif(rst=1)thenpr_state count =0000;nx_state count =0001;nx_state count =0010;nx_state count =0011;nx_state count =0100;nx_state count =0101;nx_state count =0110;nx_state count =0111;nx_state count =1000;nx_s
9、tate count =1001;nx_state = zero;end case;使用case语句,列举所有状态,同时指出所有现态的次态指向end process;end state_machine;(2)步进电机控制器library ieee;use ieee.std_logic_1164.all;entity stepmotor isport(clk,rst,x:in std_logic; output:out std_logic_vector(3 downto 0); end stepmotor;定义entity stepmoterarchitecture state_machine
10、of stepmotor istype state is(s0,s1,s2,s3);自定义type类型signal pr_state,nx_state:state;定义信号量beginprocess (clk,rst)beginif(rst=1)thenpr_state=s0;elsif(clk event and clk =1)thenpr_state output =0001;nx_state output =0010;nx_state output =0100;nx_state output =1000;nx_state output =0001; nx_state output =00
11、10; nx_state output =0100; nx_state output =1000; nx_state = s0; end case;end if;end process;end state_machine;4、仿真结果BCD计数器:步进电机控制器:5、实验心得这次所做实验为BCD计数器和步进电机控制,程序比较简单,有可以使用的模板,结果也比较有意思,主要是对状态机的理解运用和VHdl语句中例如case语句、if语句、when语句的区分和正确使用。实验三 十六位加法器设计一、实验目的(1)掌握元件例化的方法(2)理解for/generate语句的用法(3)编程完成4位加法器和16位加法器的设计二、实验原理(1)元件的例化元件声明是对VHDL模块(即底层设计,也是完整的VHDL设计)的说明,使之可在其他被调用,元件声明可放在程序包中,也可在某个设计的构造体中声明。 元件例化指元件的调用。元件声明及元件例化的语法分别如下:元件声明:component元件实体名prot(元件端口信息,同该元件实现时的实体的port部分);end compnent;元件例化:例化
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1