硬件描述语言实验报告

合集下载

硬件描述语言实验报告资料

硬件描述语言实验报告资料

《硬件描述语言》实验报告学院:学号:姓名:专业:实验时间:实验地点:指导教师:年月实验一简单组合逻辑设计一、实验目的及要求:1.掌握基本组合逻辑电路的实现方法。

2.初步了解两种基本组合逻辑电路的生成方法。

3.学习测试模块的编写。

4.通过综合和布局布线了解不同层次仿真的物理意义。

二、实验设备及要求装有modesim和synplify的电脑一台三、实验内容与步骤1.实验内容:本次实验采用Verilog HDL语言设计一个可综合的数据比较器,其功能是比较数据a与数据b的结果,如果两个数据相同,则输出结果1,否则给出结果0;并写出测试模型,使其进行比较全面的测试。

2.实验步骤:(1)建立工程文件,编写模块源码和测试模块,要求测试模块对源文件进行比较全面的测试;(2)编译源码和测试模块,用测试模块对源文件进行测试,并进行仿真;(3)观察综合后生成的文件和源文件的不同点和相同点。

(4)综合时采用不同的FPGA器件,观察综合后的结果有什么不同。

四、实验结果与数据处理:1.RTL图及仿真后波形图:2.综合后的电路图:五、分析与讨论:1.课本练习一的测试方法二中,第二个initial块有什么用?它与第一个initial块有什么关系?答:测试方法二中的第二个initial用来暂停仿真以便观察仿真波形,它与第一个initial是并行关系2.如果在第二个initial块中,没有写出#10000或者$stop,仿真会如何进行?答:如果没有写#10000,仿真会直接停止,没有$stop,仿真不会结束。

3.比较两种测试方法,哪一种更全面?答:第二种测试方法更全面,测试了更多种的变换的情况。

实验二简单分频时序逻辑电路的设计一、实验目的及要求:1.掌握条件语句在简单时序模块设计中的使用;2.掌握verilog语句在简单时序模块设计中的使用;3.学习在Verilog模块中应用计数器;4.学习测试模块的编写、综合和不同层次的仿真。

二、实验设备及要求装有modesim和synplify的电脑一台三、实验内容与步骤:1.实验内容:(1)使用always块和@(posedge clk)或@(negedge clk)的结构来表述时序逻辑,设计1/2分频的可综合模型。

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设计实验报告引言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的编写和仿真流程。

编程实验报告实验环境环境

编程实验报告实验环境环境

编程实验报告实验环境环境编程实验报告:实验环境环境摘要:本实验报告旨在介绍编程实验的实验环境环境,包括硬件环境、软件环境以及其他必要的工具和资源。

通过详细描述实验环境,读者可以更好地理解实验的进行过程,并且为实验结果的验证提供参考依据。

1. 硬件环境实验所需的硬件环境主要包括计算机设备和相关的外围设备。

在本实验中,我们使用了一台配备有Intel Core i7处理器、16GB内存和512GB固态硬盘的台式电脑。

此外,还连接了一台打印机、一个显示器和一个键盘鼠标套装。

这些硬件设备的性能和稳定性对于实验的进行具有重要的作用。

2. 软件环境在软件环境方面,我们选择了Ubuntu 20.04操作系统作为实验的基本环境。

此外,我们还安装了Python 3.8编程语言和相关的开发工具包,用于实验中的编程任务。

另外,为了支持实验数据的处理和分析,我们还安装了Jupyter Notebook、Matplotlib和Pandas等数据分析工具。

这些软件环境的选择和配置对于实验的顺利进行至关重要。

3. 其他工具和资源除了硬件和软件环境之外,实验还需要其他的工具和资源来支持实验的进行。

在本实验中,我们使用了Github作为代码版本管理工具,并且将实验的代码和文档进行了版本控制。

此外,我们还利用了一些开源的数据集和算法库,用于实验数据的获取和处理。

这些工具和资源的使用为实验的可重复性和可验证性提供了保障。

总结:实验环境环境是编程实验中至关重要的一部分,它直接影响着实验的进行和结果的验证。

通过本实验报告对实验环境的详细描述,读者可以更好地理解实验的进行过程,并且为实验结果的验证提供参考依据。

希望本报告能够对读者在编程实验中的实验环境配置提供一定的参考和帮助。

verilog实验报告

verilog实验报告

verilog实验报告Verilog实验报告引言:Verilog是一种硬件描述语言(HDL),用于设计和模拟数字电路。

它是一种高级语言,能够描述电路的行为和结构,方便工程师进行数字电路设计和验证。

本实验报告将介绍我在学习Verilog过程中进行的实验内容和所获得的结果。

实验一:基本门电路设计在这个实验中,我使用Verilog设计了基本的逻辑门电路,包括与门、或门和非门。

通过使用Verilog的模块化设计,我能够轻松地创建和组合这些门电路,以实现更复杂的功能。

我首先创建了一个与门电路的模块,定义了输入和输出端口,并使用逻辑运算符和条件语句实现了与门的功能。

然后,我创建了一个测试模块,用于验证与门的正确性。

通过输入不同的组合,我能够验证与门的输出是否符合预期。

接下来,我按照同样的方法设计了或门和非门电路,并进行了相应的测试。

通过这个实验,我不仅学会了使用Verilog进行基本门电路的设计,还加深了对逻辑电路的理解。

实验二:时序电路设计在这个实验中,我学习了如何使用Verilog设计时序电路,例如寄存器和计数器。

时序电路是一种具有状态和时钟输入的电路,能够根据时钟信号的变化来改变其输出。

我首先设计了一个简单的寄存器模块,使用触发器和组合逻辑电路实现了数据的存储和传输功能。

然后,我创建了一个测试模块,用于验证寄存器的正确性。

通过输入不同的数据和时钟信号,我能够观察到寄存器的输出是否正确。

接下来,我设计了一个计数器模块,使用寄存器和加法电路实现了计数功能。

我还添加了一个复位输入,用于将计数器的值重置为初始状态。

通过测试模块,我能够验证计数器在不同的时钟周期内是否正确地进行计数。

通过这个实验,我不仅学会了使用Verilog设计时序电路,还加深了对触发器、寄存器和计数器的理解。

实验三:组合电路设计在这个实验中,我学习了如何使用Verilog设计组合电路,例如多路选择器和加法器。

组合电路是一种没有状态和时钟输入的电路,其输出只取决于当前的输入。

硬件描述语言实验报告——四位加法器

硬件描述语言实验报告——四位加法器

硬件描述语言实验报告——四位加法器实验目的和要求:本次实验的目的是实现四位加法器的硬件描述语言,加深对数字电路的理解和PWM设计的学习。

要求在Vivado环境下实现对四位加法器的设计,能够正确地实现两个四位二进制数之间的加法操作,同时需要能够通过外接开关控制输入的数字。

实验准备工作:在进行本次实验前,首先需要对数字电路、FPGA开发板和Vivado环境有一定的了解:数字电路:是指由一些二进制电子、电气或电子元件通过布线连接而成的电路,可以根据输入信号的不同输出不同的电信号。

(如AND门、OR门、NOT门、NAND门等)FPGA开发板:是一种可编程逻辑器件,可以在硬件级别上实现数字电路。

通过FPGA 开发板,我们可以将数字电路的设计和实现转化为程序设计和实现,有效地降低了数字电路的设计和实现的复杂度。

Vivado环境:是一种FPGA编程工具,可以进行FPGA设计、仿真、实现和验证。

通过Vivado环境,我们可以实现对数字电路的开发和调试。

实验步骤:根据本次实验的要求,在Vivado环境下完成了对四位加法器的硬件描述语言编写与实现。

在实验过程中,我们需要进行以下步骤:1.创建新的工程并添加源文件在Vivado环境下,首先需要创建一个新的工程。

在创建工程的过程中,需要设定工程的名称、类型、硬件平台和绑定一个新的目录。

创建完工程后,我们需要将本次实验所需要的源文件添加到新创建的工程中。

这些文件包括:•top.v:顶层模块文件,将各个模块串联在一起。

•add.v:加法器模块,用于实现四位加法器的加法运算。

•switch.v:开关模块,用于控制输入数字。

2.对各模块进行修改和调试完成对源文件的添加后,我们便可以对各个模块进行修改和调试,以确保能够正确地实现四位加法器的加法运算。

在进行修改和调试时,我们需要根据所学的数字电路知识,利用逻辑门、时钟、寄存器等基本单元,将四位加法器进行分解,逐一实现每一部分的设计:•开关模块的设计:开关模块是本次实验中的输入模块,负责输入两个四位数。

VHDL硬件描述语言实验报告

VHDL硬件描述语言实验报告

硬件描述语言实验附录姓名:xxx学号:xxx指导教师:xxx目录硬件描述语言实验附录 (1)实验1.三输入与门电路实验 (2)实验2. 三—八译码器实验 (3)实验3. D触发器实验 (4)实验4. 分频器实验 (5)实验5. 状态机实验 (8)实验1.三输入与门电路实验--三输入与门电路threeinput--姓名:王定--学号:1306034248--中北大学LIBRARY IEEE; --调用库USE IEEE.STD_LOGIC_1164.ALL;--库文件--------------------------------------------------------------ENTITY threeinput IS --定义实体名,其名称必须与VHDL文本文件名称相同PORT( A: IN STD_LOGIC; --输入端口,时钟输入B: IN STD_LOGIC; --输入端口,个位写入使能C: IN STD_LOGIC; --输入端口,十位写入使能CO: OUT STD_LOGIC); --输出端口,溢出标志END ENTITY threeinput; --结束端口定义--------------------------------------------------------------ARCHITECTURE RTL OF threeinput IS--定义结构体BEGINPROCESS(A,B,C) IS --开始,必须带上BEGINCO<=A AND B AND C ;END PROCESS;END ARCHITECTURE RTL; --结束结构体表1. 三输入与门电路VHDL实验代码图1. 三输入与门电路仿真波形图,A,B,C输入,CO输出实验2. 三—八译码器实验--王定--2015年11月25日--3线-8线译码器LIBRARYIEEE; --调用库USEIEEE.STD_LOGIC_1164.ALL; --库文件-------------------------------------------------------------ENTITYthreetoeightISPORT(DA TAIN:INSTD_LOGIC_VECTOR(2DOWNTO0);--数据输入DA TAOUT:OUTSTD_LOGIC_VECTOR(7DOWNTO0));--数据输出ENDENTITYthreetoeight; --结束实体-------------------------------------------------------------ARCHITECTUREBEHA VEOFthreetoeightIS--结构体BEGIN --不能漏掉PROCESS(DATAIN) --数据输入BEGIN --开始,不能漏掉CASEDATAINIS --情况判定WHEN"000"=>DA TAOUT<="00000001";WHEN"001"=>DA TAOUT<="00000010";WHEN"010"=>DA TAOUT<="00000100";WHEN"011"=>DATAOUT<="00001000";WHEN"100"=>DA TAOUT<="00010000";WHEN"101"=>DA TAOUT<="00100000";WHEN"110"=>DATAOUT<="01000000";WHEN"111"=>DA TAOUT<="10000000";WHENOTHERS=>null;ENDCASE;ENDPROCESS;ENDBEHA VE;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY decoder_3_to_8 ISPORT (a,b,c,g1,g2a,g2b:IN STD_LOGIC;y:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END decoder_3_to_8;ARCHITECTURE rtl OF decoder_3_to_8 ISSIGNAL indata:STD_LOGIC_VECTOR (2 DOWNTO 0);BEGINindata <= c & b & a;PROCESS (indata,g1,g2a,g2b)BEGINIF (g1 = '1' AND g2a = '0' AND g2b = '0' ) THENCASE indata ISWHEN "000" => y <= "11111110";WHEN "001" => y <= "11111101";WHEN "010" => y <= "11111011";WHEN "011" => y <= "11110111";WHEN "100" => y <= "11101111";WHEN "101" => y <= "11011111";WHEN "110" => y <= "10111111";WHEN "111" => y <= "01111111";WHEN OTHERS=>y<= "XXXXXXXX";END CASE;ELSEY <= "11111111";END IF;END PROCESS;END rtl;表2. 三—八译码器VHDL实验代码图2. 三—八译码器仿真波形图--异步复位/置位的D触发器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY dff3 ISPORT(clk,d,clr,pset:IN STD_LOGIC;q : OUT STD_LOGIC);END dff3;ARCHITECTURE rtl OF dff3 ISBEGINPROCESS (clk,pset,clr)BEGINIF (pset='0') THENq<='1';ELSIF (clr='0') THENq<='0';ELSIF (clk'EVENT AND clk='1') THENq<=d;END IF;END PROCESS ;END rtl; --同步复位的D触发器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; ENTITY dff4 ISPORT(clk,d,clr:IN STD_LOGIC;q : OUT STD_LOGIC );END dff4;ARCHITECTURE rtl OF dff4 ISBEGINPROCESS (clk)BEGINIF (clk'EVENT AND clk='1') THENIF (clr='0') THENq<='0';ELSEq<=d;END IF;END IF;END PROCESS ;END rtl;表3. 异步和同步D触发器VHDL实验代码图3. 异步触发器仿真波形图图4. 同步触发器仿真波形图--四分频器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;----------------------------------------------ENTITY clk_div ISPORT(clk: IN STD_LOGIC;--时钟输入clk_div2: OUT STD_LOGIC;clk_div4: OUT STD_LOGIC;clk_div8: OUT STD_LOGIC;clk_div16: OUT STD_LOGIC);END ENTITY clk_div;---------------------------------------------------ARCHITECTURE rtl OF clk_div ISSIGNAL count:STD_LOGIC_VECTOR(3 DOWNTO 0);--定义一个四位的信号BEGINPROCESS(clk)BEGINIF(clk' event AND clk ='1') THEN--上升沿到来IF (count="1111") THEN--达到最大计数值count<="0000"; --置零ELSEcount<=count+1; --计数END IF;END IF;END PROCESS;clk_div2<=count(0); --2分频clk_div4<=count(1); --4分频clk_div8<=count(2); --8分频clk_div16<=count(3); --16分频END rtl;表4. 四分频器VHDL实验代码图5. 四分频器仿真波形图TMP1<= '0'; --置0,带入语句滞后ELSETMP1<= '1'; --置1END IF;END IF;END IF;END PROCESS;---------------------------------------------PROCESS(CLKIN,RST)BEGINIF RST ='1'THEN --复位有效COUNT2 <= "00000000"; --立即清零TMP2<= '1';ELSIF CLKIN'EVENT AND CLKIN='0' THEN --下降沿到来IF COUNT2 = "00000100" THEN --100==4(5个数据)COUNT2 <= "00000000";ELSECOUNT2 <= COUNT2 + 1;IF COUNT2 < "00000010" THEN --10==2(三个下降沿),小于三个上升沿时,始终置0,三个下降沿对应6分频TMP2<= '1';ELSETMP2<= '0';END IF;END IF;END IF;END PROCESS;END RTL;--信号是等待整个进程结束完后,再赋值图6. 五分频器仿真波形图实验5. 状态机实验ST <= S3; END IF; OP <= '1'; WHEN S3=> IF X = '0' THEN ST <= S3; ELSE ST <= S0; END IF; OP <= '0'; END CASE; END IF; END PROCESS STATE_COMP;END ARCHITECTURE A;END IF; END CASE; END IF;END PROCESS state_comp; END a;表6. moore 与mealy 状态机VHDL 实验代码图7. moore 型状态机VHDL 实验代码图8. mealy 型状态机仿真波形图。

CPLD实验报告

CPLD实验报告

实验一 Xilinx软件及状态机设计一实验目的:学习FPGA设计软件, 掌握软件流程, 掌握状态机编程。

二实验内容:设计一个状态机三实验说明:状态机设计是数字电路中使用非常广泛和方便的时序设计工具。

由于硬件是并行的触发, 相对软件是串行执行, 那么让硬件电路按照节拍执行串行操作指令就成为一个问题, 这就是状态机的主要功能。

相应的, 软件指令中的几十条简单顺序执行代码可能需要硬件的几十上百个触发器去实现其功能。

所以, 软件与硬件的设计思路有相当大的区别。

当然, 随着FPGA规模的不断扩大, 这些问题也越来越容易解决了。

我们可以用软件的思路去描述自己的设计, 可能最终实现的电路是几十万门级的器件, 但是你只要花费几美元就能买到。

状态机是数字电路的基础, 因此, VHDL的学习也从这个实验开始。

四实验过程:1.在进行实验之前, 我先自学了VHDL语言。

2.熟悉Xilinx软件环境。

3.通过仿真, 读懂了states这段代码所实现的功能及其出现的问题。

五思考题:1.通过仿真, 这段代码实现相应功能时出了什么问题?请修正代码。

答:这段程序完成的是对红绿灯的控制功能。

通过仿真发现所有的灯都比预期的多亮了2秒, 比如东西方向绿灯亮62秒(应该是60秒), 黄灯是5秒(应该是3秒)。

出现此问题的原因是没有考虑到硬件的延时问题。

所以只要把程序中的59改为57, 39改为37, 3改为1, 再进行仿真, 结果就正确了。

2.状态机输出分成同步输出和异步输出, 状态机异步输出直接用状态机的某个状态进行组合逻辑运算来得到一个输出, 同步输出是在该状态的时钟上跳沿控制输出变化。

请问同步输出和异步输出利弊各在哪里?答: 同步输出的优点是: 时钟脉冲的间距解决了组合逻辑电路中的延时和竞争问题。

只要时钟脉冲的宽度合适, 输出就不会存在竞争与现象。

缺点是: 外部输入信号的变化应满足触发器正常工作所需的建立和保持时间。

因为上述特点使得同步时序输出的工作速度的提高受到限制, 且对时钟脉冲到达个触发器的时间及外部信号的变化有较严格的要求。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《硬件描述语言》实验报告学院:学号:姓名:专业:实验时间:实验地点:指导教师:年月实验一简单组合逻辑设计一、实验目的及要求:1.掌握基本组合逻辑电路的实现方法。

2.初步了解两种基本组合逻辑电路的生成方法。

3.学习测试模块的编写。

4.通过综合和布局布线了解不同层次仿真的物理意义。

二、实验设备及要求装有modesim和synplify的电脑一台三、实验内容与步骤1.实验内容:本次实验采用Verilog HDL语言设计一个可综合的数据比较器,其功能是比较数据a与数据b的结果,如果两个数据相同,则输出结果1,否则给出结果0;并写出测试模型,使其进行比较全面的测试。

2.实验步骤:(1)建立工程文件,编写模块源码和测试模块,要求测试模块对源文件进行比较全面的测试;(2)编译源码和测试模块,用测试模块对源文件进行测试,并进行仿真;(3)观察综合后生成的文件和源文件的不同点和相同点。

(4)综合时采用不同的FPGA器件,观察综合后的结果有什么不同。

四、实验结果与数据处理:1.RTL图及仿真后波形图:2.综合后的电路图:五、分析与讨论:1.课本练习一的测试方法二中,第二个initial块有什么用?它与第一个initial块有什么关系?答:测试方法二中的第二个initial用来暂停仿真以便观察仿真波形,它与第一个initial是并行关系2.如果在第二个initial块中,没有写出#10000或者$stop,仿真会如何进行?答:如果没有写#10000,仿真会直接停止,没有$stop,仿真不会结束。

3.比较两种测试方法,哪一种更全面?答:第二种测试方法更全面,测试了更多种的变换的情况。

实验二简单分频时序逻辑电路的设计一、实验目的及要求:1.掌握条件语句在简单时序模块设计中的使用;2.掌握verilog语句在简单时序模块设计中的使用;3.学习在Verilog模块中应用计数器;4.学习测试模块的编写、综合和不同层次的仿真。

二、实验设备及要求装有modesim和synplify的电脑一台三、实验内容与步骤:1.实验内容:(1)使用always块和@(posedge clk)或@(negedge clk)的结构来表述时序逻辑,设计1/2分频的可综合模型。

得到如下波形图:(2)对模块进行RTL级仿真、综合后门级仿真,布局布线仿真;2.实验步骤:(1)建立工程文件,编写模块源码和测试模块,要求测试模块能对源文件进行比较全面的测试。

(2)编译源码和测试模块,用测试模块对源文件进行测试,并综合仿真。

得到波形图。

(3)观察综合后生成的文件和源文件的不同点和相同点。

(4)记录数据并完成实验报告。

四、实验结果与数据处理:1.RTL图及仿真后波形图:2.综合后的电路图:五、分析与讨论:1.如果没有reset信号,能否控制2分频clk_out信号的相位?答:如果没有reset信号,则无法控制2分频clk_out信号的相位。

2.只用clk时钟沿的触发(即不用2分频产生的时钟沿)如何直接产生4分频、8分频、或者16分频的时钟?答:借助一个整型变量j做计数操作。

3.如何只用clk时钟沿的触发直接产生占空比不同的分频时钟?答:借助一个整型变量j做计数操作,从而用clk时钟沿的触发直接产生4分频、8分频或者16分频的时钟,及产生占空比不同的分频时钟。

实验三利用条件语句实现计数分频时序电路一、实验目的及要求:1.掌握条件语句在简单时序模块设计中的使用;2.掌握最基本时序电路的实现方法;3.学习在Verilog模块中应用计数器;4.学习测试模块的编写、综合和不同层次的仿真。

二、实验设备及要求装有modesim和synplify的电脑一台三、实验内容与步骤:1.实验内容:(1)复习课本,熟悉条件语句的使用方式;(2)建立工程并编写源代码;(3)综合并布局布线仿真并分析always语句在时序逻辑中的作用;(4)学习测试模块的编写、综合和仿真。

2.实验步骤:(·1)建立工程文件,编写模块源码和测试模块,要求测试模块能对源文件进行比较全面的测试;(2)编译源码和测试模块,用测试模块对源文件进行测试,并综合仿真;(3)观察综合后生成的文件和源文件的不同点和相同点;(4)综合时采用不同的FPGA器件,如Altera公司的Cyclone II系列和Stratix III系列,观察综合后的结果有什么不同。

四、实验结果与数据处理:1.RTL图及仿真后波形图:2.综合后的电路图:五、分析与讨论:如果综合时采用不同的FPGA器件,如Altera公司的Cyclone II系列和Stratix III系列,想想综合后的结果有什么不同?答:时钟分频的实现方法如果是采用行波时钟的方式(异步设计),容易造成时钟偏差,很难控制芯片内部的逻辑基本单元中的触发器的建立/保持时间,同时不同芯片的内部参数也有所不同,同一代码的时序分析结果分析得不同也很正常。

如果分频后的时钟作为后级设计的工作时钟,那么整个设计不只使用一个主时钟,而是用多个时钟来实现的话(异步设计),存在信号的跨时钟域转换问题,跨时钟域的信号如果设计不当,会采到亚稳态。

实验四阻塞赋值与非阻塞赋值的区别一、实验目的及要求:1.通过实验,掌握阻塞赋值与非阻塞赋值的概念与区别;2.深入理解顺序执行和并发执行的概念。

3.了解非阻塞和阻塞赋值的不同使用场合;4.学习测试模块的编写,综合和不同层次的仿真。

二、实验设备及要求:装有modesim和synplify的电脑一台三、实验内容与步骤:1.实验内容:(1)本次实验参照课本上的练习三,采用Verilog HDL语言描述两个模块,分别包含有阻塞和非阻塞赋值语句;(2)编写测试模块,在相同输入信号的条件下,比较阻塞与非阻塞语句的输出结果;(3)对模块进行RTL级仿真、综合后门级仿真,布局布线仿真;(4)分析阻塞赋值与非阻塞赋值的区别。

2.实验步骤:(1)仔细阅读课本,建立工程文件,编写模块源码和测试模块,要求测试模块能对源文件进行比较全面的测试;(2)编译源码和测试模块,用测试模块对源文件进行测试,并综合仿真;(3)观察综合后生成的两个电路结构图并观察仿真波形图,分析阻塞与非阻塞赋值的异同(4)综合时采用不同的FPGA器件,如Altera公司的Cyclone II系列和Stratix III系列,观察综合后的结果有什么不同。

四、实验结果与数据处理:1.RTL图及仿真后波形图:2.综合后的电路图:五、分析与讨论:1.解释说明测试模块中forever语句后若有其他语句,是否能够执行?为什么?答:不能。

forever循环语句常用于产生周期性的波形,用来作为仿真测试信号。

它与always不同之处在于它不能独立写在程序中,而必须写在initial块中。

2.在blocking模块中按如下两种方法,仿真与综合的结果会有什么样的变化?作出仿真波形,分析综合结果。

答:a)always@(posedge clk)beginc=b;b=a;end可以实现与上面非阻塞赋值相同的赋值结果。

b)always@(posedge clk)b=a;always@(posedge clk)c=b;有可能出现竞争现象。

实验五用always块实现较复杂的组合逻辑电路一、实验目的及要求:1.掌握用always实现较大组合逻辑电路的方法;2.进一步了解assign与always两种组合电路实现方法的区别和注意点;3.学习测试模块中随机数的产生和应用;4.学习综合不同层次的仿真,并比较结果。

二、实验设备及要求装有modesim和synplify的电脑一台三、实验内容与步骤1.实验内容:(1)运用always语句块设计一个8位数据选择器。

要求:每路输入数据与输出数据均为4位2进制数,当选择开关(至少3位)或输入数据发生变化时,输出数据也相应地变化;(2)写出测试模块,对模块的功能进行测试;(3)对模块进行RTL级仿真、综合后门级仿真,布局布线仿真。

2.实验步骤:(1)仔细阅读课本,建立工程文件,编写模块源码和测试模块,要求测试模块能对源文件进行比较全面的测试;(2)编译源码和测试模块,用测试模块对源文件进行测试,并综合仿真;(3)观察综合后生成的两个电路结构图并观察仿真波形图,分析assign与always两种组合电路实现方法的区别和注意点;(4)综合时采用不同的FPGA器件,如Altera公司的Cyclone II系列和Stratix III系列,观察综合后的结果有什么不同。

四、实验结果与数据处理:1.RTL图及仿真后波形图:.2.综合后的电路图:五、分析与讨论:1.分析用assign语句和always语句进行组合逻辑设计时有什么异同点?答:verilog语言中的赋值语句有两种,一种是持续赋值语句(assign语句),另一种是过程赋值语句(always语句)。

持续赋值语句(assign语句)主要用于对wire型变量的赋值,因为wire的值不能存住,需要一直给值,所以需要用持续赋值。

过程赋值语句(always语句)主要用于reg 型变量的赋值,因为always 语句被执行是需要满足触发条件的,所以always过程块里面的内容不是每时每刻都被执行,因此需要将被赋值的对象定义成寄存器类型,以便这个值能被保持住。

过程赋值又分为阻塞赋值“=”和非阻塞赋值“<=”两种。

六、教师评语成绩签名:日期:。

相关文档
最新文档