您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 汽车理论 > 北理工VHDL实验报告
本科实验报告实验名称:VHDL语言及集成电路设计实验课程名称:VHDL语言及集成电路设计实验时间:2014.5任课教师:桂小琰实验地点:4-427实验教师:任仕伟实验类型:□原理验证□综合设计□自主创新学生姓名:学号/班级:组号:学院:信息与电子学院同组搭档:专业:电子科学与技术成绩:实验一:带有异步复位端的D触发器一、实验目的(1)熟悉linux操作环境和modelsim软件环境(2)理解时序逻辑和组合逻辑电路的区别(3)理解并行语句和顺序语句(4)用VHDL语言编写一个带有异步复位端的D触发器及其测试文件二、实验原理(1)组合逻辑和时序逻辑○1组合逻辑电路当前输出的值仅取决于当前的输入,不需要触发器等具有存储能力的逻辑单元,仅仅使用组合逻辑门○2时序逻辑电路的当前输出不仅取决于当前的输入,还与以前的输入有关,这类电路中包括寄存器等元件,也包括组合逻辑电路,寄存器通过一个反馈环和组合逻辑模块相连。触发器便是属于时序逻辑电路(2)并行和顺序代码从本质上讲,VHDL代码是并发执行的。只有PROCESS,FUNCTION或PROCEDURE内的代码才是顺序执行的。当它们作为一个整体时,与其他模块之间又是并发执行的。以下是3个并发描述语句(stat1,stat2和stat3)的代码,会产生同样的电路结构。stat1stat3stat1stat2=stat2=stat3=其他排列顺序stat3stat1stat2(3)并行语句——进程(PROCESS)○1语法结构:[进程名:]PROCESS(敏感信号列表)[变量说明语句]…BEGIN…(顺序执行的代码)…ENDPROCESS[进程名];○2PROCESS的特点1多进程之间是并行执行的;2进程结构内部的所有语句都是顺序执行的;3进程中可访问结构体或实体中所定义的信号;4进程的启动是由敏感信号列表所标明的信号来触发,也可以用WAIT语句等待一个触发条件的成立。5各进程之间的通信是由信号来传递的。(4)带有异步复位端的D触发器○1电路符号○2功能表RDCPQ0xx01x0保持1x1保持10上升沿011上升沿1三、实验代码LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYdffISPORT(d,clk,rst:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDdff;ARCHITECTUREbehaviorOFdffISBEGINPROCESS(rst,clk)BEGINIF(rst='1')THENq='0';ELSIF(clk'EVENTANDclk='1')THENq=d;ENDIF;ENDPROCESS;endARCHITECTUREbehavior;测试文件:libraryIEEE;useieee.std_logic_1164.all;entitydff_tbisenddff_tb;architecturetb_behaviorofdff_tbiscomponentdffport(d,rst,clk:instd_logic;q:outstd_logic);endcomponent;constantclk_period:time:=50ns;signald,clk,q,rst:std_logic;begindut:dffportmap(d=d,clk=clk,rst=rst,q=q);clk_gen:processbeginclk='0';waitforclk_period/2;clk='1';waitforclk_period/2;endprocess;d_gen:processbeginwaitfor100ns;d='1';waitfor100ns;d='0';endprocess;rst_gen:processbeginrst='1';waitfor150ns;rst='0';waitfor500ns;rst='1';waitfor150ns;wait;endprocess;endtb_behavior;四、仿真结果实验二步进电机控制器一、实验目的(1)理解两种状态机的区别(2)熟悉两种编程风格(3)编写BCD计数器和步进电机二、实验原理(1)米里型状态机和摩尔型状态机米里(Mealy)型状态机:状态机的输出信号不仅与电路的当前状态有关,还与当前的输入有关摩尔(Moore)型状态机:状态机的当前输出仅仅由当前状态决定(2)有限状态机设计流程:1理解问题背景。2逻辑抽象,得出状态转移图。3状态简化。4状态分配。5用VHDL来描述有限状态机。(3)BCD计数器原理图(4)步进电机控制器原理图步进电机状态与输出信号的对应关系状态输出状态S0S1S2S30001001001001000三、实验代码(1)BCD计数器libraryieee;useieee.std_logic_1164.all;entitycounterisport(clk,rst:instd_logic;count:outstd_logic_vector(3downto0));endcounter;architecturestate_machineofcounteristypestateis(zero,one,two,three,four,five,six,seven,eight,nine);signalpr_state,nx_state:state;beginprocess(rst,clk)beginif(rst='1')thenpr_state=nx_state;endif;endprocess;process(pr_state)begincasepr_stateiswhenzero=count=0000;nx_state=one;whenone=count=0001;nx_state=two;whentwo=count=0010;nx_state=three;whenthree=count=0011;nx_state=four;whenfour=count=0100;nx_state=five;whenfive=count=0101;nx_state=six;whensix=count=0110;nx_state=seven;whenseven=count=0111;nx_state=eight;wheneight=count=1000;nx_state=nine;whennine=count=1001;nx_state=zero;endcase;endprocess;endstate_machine;(2)步进电机控制器libraryieee;useieee.std_logic_1164.all;entitystepmotorisport(clk,rst,x:instd_logic;output:outstd_logic_vector(3downto0));endstepmotor;architecturestate_machineofstepmotoristypestateis(s0,s1,s2,s3);signalpr_state,nx_state:state;beginprocess(clk,rst)beginif(rst='1')thenpr_state=s0;elsif(clk'eventandclk='1')thenpr_state=nx_state;endif;endprocess;process(pr_state,x)beginif(x='0')thencasepr_stateiswhens0=output=0001;nx_state=s3;whens1=output=0010;nx_state=s0;whens2=output=0100;nx_state=s1;whens3=output=1000;nx_state=s2;endcase;elsif(x='1')thencasepr_stateiswhens0=output=0001;nx_state=s1;whens1=output=0010;nx_state=s2;whens2=output=0100;nx_state=s3;whens3=output=1000;nx_state=s0;endcase;endif;endprocess;endstate_machine;四、仿真结果BCD计数器步进电机控制器实验三十六位加法器设计一、实验目的(1)掌握元件例化的方法(2)理解for/generate语句的用法(3)编程完成4位加法器和16位加法器的设计二、实验原理(1)元件的例化元件声明是对VHDL模块(即底层设计,也是完整的VHDL设计)的说明,使之可在其他被调用,元件声明可放在程序包中,也可在某个设计的构造体中声明。元件例化指元件的调用。元件声明及元件例化的语法分别如下:元件声明:component〈元件实体名〉prot(〈元件端口信息,同该元件实现时的实体的port部分〉);endcompnent;元件例化:〈例化名〉:〈实体名,即元件名〉portmap(〈端口列表〉);(2)生成语句(GENERATE)GENERATE语句用于循环执行某项操作。FOR模式的生成语句主要用于相同结构的描述中;FOR模式语法结构:FOR/GENERATE:标号:FOR变量IN离散区间GENERATE(并行处理语句);ENDGENERATE;(3)16位加法器的设计三、实验代码4位加法器:libraryieee;useieee.std_logic_1164.all;entityadder4isport(a,b:instd_logic_vector(3downto0);cin:instd_logic;s:outstd_logic_vector(3downto0);cout:outstd_logic);endadder4;architecturebehavofadder4issignalc:std_logic_vector(4downto0);signalp:std_logic_vector(3downto0);signalg:std_logic_vector(3downto0);beginG1:foriin0to3generatep(i)=a(i)xorb(i);g(i)=a(i)andb(i);s(i)=p(i)xorc(i);endgenerate;c(0)=cin;c(1)=(cinandp(0))org(0);c(2)=(cinandp(0)andP(1))or(g(0)andp(1))org(1);c(3)=(cinandp(0)andP(1)andP(2))or(g(0)andp(1)andP(2))or(g(1)andP(2))org(2);c(4)=(cinandp(0)andP(1)andP(2)andP(3))or(g(0)andp(1)andP(2)andP(3))or(g(1)andP(2)andP(3))or(g(2)andP(3))org(3);cout=c(4);endbehav;16位加法器:libraryieee;useieee.std_logic_1164.all;entityadderisport(a,b:instd_logic_vector(15downto0);s:outstd_logic_vector(15downto0);cin:instd_logic;cout:outstd_logic);endadder;architecturebehavofadderiscomponentadder4isport(a,b:instd_logic_vector(3downto0);s:outstd_logic_vector(3downto0);cin:instd_logic;cout:outstd_logi
本文标题:北理工VHDL实验报告
链接地址:https://www.777doc.com/doc-5739647 .html