计数器的Modelsim仿真报告

合集下载

【博友原创】modelsim三种仿真实验结果对比

【博友原创】modelsim三种仿真实验结果对比

【博友原创】modelsim三种仿真实验结果对比既然决定认认真真搞FPGA,学好modelsim,那么就一路坚持下去!首先,继续摸熟modelsim仿真。

今天摸清了用Modelsim做功能仿真,综合后仿真,时序仿真。

纪录下过程和对比下结果。

首先在前面的博客中,各种环境已经在前面搭建完毕,包括编译仿真库等,一会会有一个简单的各个仿真比较例子。

FPGA各种仿真概念(摘自CB书中)1.功能仿真(前仿真),验证逻辑功能,不用全编译,即ctrl+k 就可以了。

验证电路功能是否符合设计要求。

这个仿真一般是必须做的。

2.综合后的仿真,这个是FPGA综合产生的网表(会有门延时),一般是不用做的,这里要对比几个仿真结果的不同,也做一遍。

3.时序仿真,布局布线后的仿真,这个时候就包括了布线的延时,一般这个也需要做的。

偶然找到一张笔试卷子的题目的module,就以他为例来做了:首先写好v文件:如下:写好testbench文件:那么开始了一:功能仿真1.quartus建立工程后,编写v文件,ctrl+k,无错误(当然注意风格)2.编写testbench文件3.建立sim1仿真工程,在sim有单独的sim1的文件目录,将v和testbench拷贝到sim1这里我们没有用到altera的IP核,所以在library那里可以不用设置路径,如果有用到的话,就要指定路径了。

1.仿真,这个前面没什么区别,注意去掉 Enable optimization1.添加信号,run 500ns可以看到,在wr_en拉高的时候,cnt立马就有输出,这是没有任何延时的,是纯粹的功能仿真。

功能仿真需要文件:v源文件+testbench+指定仿真模型(altera仿真库等,等下就有用到)二:综合后的仿真1.关闭modelsim的sim1工程了,建立sim2文件目录,回到quartus2.然后,点击编译,会在dev目录下产生一个simulation文件夹,找到vo文件3.建立sim2的modelsim的工程,和上面的类似,但是注意:将vo文件和testbench文件拷贝到sim2文件夹,这一点和上面不同哦。

modelsim仿真小结

modelsim仿真小结

Modelsim仿真小结Modelsim的基本仿真流程大致分以下几个步骤:建库、编译工程、前后仿真、调试等。

Modelsim仿真既可以在modelsim界面操作,也可以用do文件实现,这里结合学习的教程、网上看到的资料,和实际遇到的一些问题,分别做一整理小结。

1.建库建库包括Altera库和Xilinx库,同时都包括Verilog和VHDL。

这里只建了Verilog库,VHDL 和Verilog步骤相同。

对于Altera库主要包括lpm元件库、Mega_Function库atera_mf、altera原语库altera_primitive和各器件系列模型库。

前三种是调用altera模块的必备库,第四种是进行综合后功能仿真和布线后时序仿真需要的库,和器件系列有关,只选对应系列即可。

Altera库创建和编译步骤如下:a)在Modelsim安装目录下新建文件夹,命名altera_lib,以存放编译后的库文件,可以在altera_lib下新建Verilog和VHDL两个子文件夹,分别存放Verilog和VHDL库。

b)打开Modelsim,新建Library,file ->new->library ..c)如下图,创建lpm库,路径E:\modeltech_10.1a\altera_lib\Verilog\lpmd)添加库文件,并编译,compile -> compile …,出现compile source files窗口,library指定到lpm下,查找围,选quartus安装目录下…eda\sim_lib目录里的仿真原型文件:220model.v ,点c ompile ,点done。

到此,lpm库建立完毕。

e)同理,建立altera_mf库添加altera_mf.v ,建立primitive库添加altera_primitive.v建立各系列的模型库,命名可用系列名加_ver“xxx_ver”,也可随意吧,添加各系列的xxx_atoms.v。

Multisim 数字电路仿真实验(计数器)

Multisim 数字电路仿真实验(计数器)

Multisim 数字电路仿真实验1.实验目的用Multisim 的仿真软件对数字电路进行仿真研究。

2.实验内容实验19.1 交通灯报警电路仿真交通灯故障报警电路工作要求如下:红、黄、绿三种颜色的指示灯在下列情况下属正常工作,即单独的红灯指示、黄灯指示、绿灯指示及黄、绿灯同时指示,而其他情况下均属于故障状态。

出故障时报警灯亮。

设字母R、Y、G 分别表示红、黄、绿三个交通灯,高电平表示灯亮,低电平表示灯灭。

字母Z 表示报警灯,高电平表示报警。

则真值表如表19.1 所示。

逻辑表达式为:Z = R Y G + RG + RY若用与非门实现,则表达式可化为:Z = R Y G ⋅RG ⋅RYMultisim 仿真设计图如图19.1 所示:图19.1 的电路图中分别用开关A、B、C 模拟控制红、黄、绿灯的亮暗,开关接向高电平时表示灯亮,接向低电平时表示灯灭。

用发光二极管LED1 的亮暗模拟报警灯的亮暗。

另外用了一个5V直流电源、一个7400 四2 输入与非门、一个7404 六反相器、一个7420 双4 输入与非门、一个500欧姆电阻。

图19.1 交通灯报警电路原理图在仿真实验中可以看出,当开关A、B、C 中只有一个拨向高电平,以及B、C 同时拨向高电平而A 拨向低电平时报警灯不亮,其余情况下报警灯均亮。

实验19.2 数字频率计电路仿真数字频率计电路的工作要求如下:能测出某一未知数字信号的频率,并用数码管显示测量结果。

如果用2 位数码管,则测量的最大频率是99Hz。

数字频率计电路Multisim 仿真设计图如图19.2 所示。

其电路结构是:用二片74LS90(U1 和U2)组成BCD 码100 进制计数器,二个数码管U3 和U4 分别显示十位数和个位数。

四D 触发器74LS175(U5)与三输入与非门7410(U6B)组成可自启动的环形计数器,产生闸门控制信号和计数器清0 信号。

信号发生器XFG1 产生频率为1Hz、占空比为50%的连续脉冲信号,信号发生器XFG2 产生频率为1-99Hz(人为设置)、占空比为50%的连续脉冲信号作为被测脉冲。

工程实训报告-Modelsim实验五,数字系统设计

工程实训报告-Modelsim实验五,数字系统设计
【小结】(碰到的问题,如何解决,有何体会,改进建议等)
为了做多功能数字钟,我借了多本关于Verilog HDL的程序设计书。在前几次试验中,因为课程还没有讲完,所以书上的好多代码还不能看懂,只是能猜到大概意思,再根据试验结果来判断代码的意思。
本次试验让我学到了如何分频、用一个键来进行模式选择、if/else的用法、case的用法、秒信号清零等知识。并且对QuartersⅡ有了进一步的掌握,熟悉使用了、Verilog HDL、仿真波形、连接实验箱、下载程序等。
end
default:{count1,count2,counta,countb,LD_min,LD_hour}<=0;
endcase
end
always @(negedge clk)
if(count2) begin
if(loop2==3) num2<=1;
else
begin loop2<=loop2+1; num2<=0;end
end
else begin loop2<=0; num2<=0; end
always @(negedge clk)
if(count1) begin
if(loop3==3) num3<=1;
else
begin loop3<=loop3+1; num3<=0; end
end
else begin loop3<=0; num3<=0; end
*/
Moduleclock(clk,clk_1k,mode,change,turn,alert,hour,min,sec,LD_alert,LD_hour,LD_min);
input clk,clk_1k,mode,change,turn;

【翻译】modelsim指南之基本仿真(digital logic)

【翻译】modelsim指南之基本仿真(digital logic)

Introduction本文将一步步实现以下基本仿真流程:1.创建设计工作库2.编译设计单元3.加载设计4.运行仿真本文用到的设计文件本文的范例是一个8位的二进制加法计数器和相关的测试文件。

保存路径:Verilog-<install_dir>/examples/tutorials/verilog/basicSimulation/counter.v and tcounter.v相关阅读用户手册的章节:设计库、Verilog和SystemVerilog仿真。

参考命令:vlib,vmap,vlog,vcom,view,run.创建设计工作库在你仿真前,必须先创建一个库并编译源码到这个库。

1.创建一个新目录并复制本文的设计文件。

Copy counter.v 和tcounter.v2. 启动modelsim。

a. windows下双击快捷方式启动,你将看到modelsim的欢迎对话框,单击Close.b. 选择File > Change Directory 指定到第一步创建的目录。

3. 创建工作库。

a. 选择File > New > Library.弹出一个对话框,可以指定库名等选项。

如图1。

图1 创建一个新库b. 在Library Name项输入work(如果它没有自动输入)。

c. 单击OK.modelsim创建了一个目录work并写了一个名为_info的文件到这个目录。

这个_info文件必须保持在work文件夹以区分他是modelsim的库。

不要从你的操作系统里修改这个文件夹里的内容;所有操作应该在modelsim里进行。

modelsim也把work库添加到库窗口(图2)并记录库映射作为未来参考(modelsim.ini)。

图2当你在第3步单击确定后,Transcript窗口显示以下内容:vlib workvmap work work这两行命令等于你的菜单操作。

编译设计单元创建工作库后,接着就准备编译你的源文件。

multisim使用及电路仿真实验报告_范文模板及概述

multisim使用及电路仿真实验报告_范文模板及概述

multisim使用及电路仿真实验报告范文模板及概述1. 引言1.1 概述引言部分将介绍本篇文章的主题和背景。

在这里,我们将引入Multisim的使用以及电路仿真实验报告。

Multisim是一种强大的电子电路设计和仿真软件,广泛应用于电子工程领域。

通过使用Multisim,可以实现对电路进行仿真、分析和验证,从而提高电路设计的效率和准确性。

1.2 文章结构本文将分为四个主要部分:引言、Multisim使用、电路仿真实验报告以及结论。

在“引言”部分中,我们将介绍文章整体结构,并简要概述Multisim的使用与电路仿真实验报告两个主题。

在“Multisim使用”部分中,我们将详细探讨Multisim软件的背景、功能与特点以及应用领域。

接着,在“电路仿真实验报告”部分中,我们将描述一个具体的电路仿真实验,并包括实验背景、目的、步骤与结果分析等内容。

最后,在“结论”部分中,我们将总结回顾实验内容,并分享个人的实验心得与体会,同时对Multisim软件的使用进行评价与展望。

1.3 目的本篇文章旨在介绍Multisim的使用以及电路仿真实验报告,并探讨其在电子工程领域中的应用。

通过对Multisim软件的详细介绍和电路仿真实验报告的呈现,读者将能够了解Multisim的基本特点、功能以及实际应用场景。

同时,本文旨在激发读者对于电路设计和仿真的兴趣,并提供一些实践经验与建议。

希望本文能够为读者提供有关Multisim使用和电路仿真实验报告方面的基础知识和参考价值,促进他们在这一领域的学习和研究。

2. Multisim使用2.1 简介Multisim是一款功能强大的电路仿真软件,由National Instruments(国家仪器)开发。

它为用户提供了一个全面的电路设计和分析工具,能够模拟各种电子元件和电路的行为。

使用Multisim可以轻松地创建、编辑和测试各种复杂的电路。

2.2 功能与特点Multisim具有许多强大的功能和特点,使其成为研究者、工程师和学生选择使用的首选工具之一。

实验六 Modelsim仿真

实验六 Modelsim仿真

实验六ModelSim仿真【实验内容】1.仔细阅读ModelSim软件简要使用说明。

(“实例代码”压缩包用于ModelSim软件学习用)2.Testbench写法简要介绍。

(可以参考“Testbench模版”)3.用ModelSim完成10位全加器的功能仿真。

4.完成课堂上老师布置的作业。

ModelSim软件简要使用说明ModelSim是对VHDL,V erilog,SystemC以及混合语言编写的设计文件进行仿真和调试的工具软件。

1.仿真流程在ModelSim中对一个设计进行仿真的基本步骤如下图所示:2.仿真具体步骤Create a new project选择“File > New > Project”,会弹出对话框,如图所示:其中:“Project Name”项:填写要创建的工程的名字。

“Project Location”项:确定创建的工程所要存放的位置。

“Default Library Name”项:填写工程的工作库的名字。

注:在用ModelSim进行仿真之前,必须要对设计文件进行编译,生成与设计文件逻辑功能相对应的设计单元。

由于ModelSim是用库文件来进行仿真的,所以编译后的设计单元需要存放在库文件里。

这个库文件叫作“工作库”。

以上三项填写完毕后,点击“OK”按钮,会在指定的位置处创建工程及工作库,如图所示:在工作库文件夹内,有一个名为“_info”的特殊格式文件,如图所示:这个文件指定了此文件夹为ModelSim的工作库文件夹。

在编译步骤内生成的所有设计单元都会被添加到工作库文件夹内。

Adding objects to the project在上一步点击OK后,ModelSim会弹出一个对话框,如图所示:其中:“Create New File”项:在工程中创建新的设计文件。

“Add Existing File”项:把已经存在的设计文件加入到工程中。

“Create Simulation”项:在工程中创建仿真配置文件。

LiberoIDEv9.1中MODELSIM仿真简述

LiberoIDEv9.1中MODELSIM仿真简述

Libero IDE v9.1中MODELSIM仿真简述:1、写好要测试的VHDL代码cnt6.vhd;2、针对cnt6.vhd写激励文件testbench.vhd, testbench同样也是VHDL代码;3、进入modelsim后首先建立库文件WORK,具体参见相关教程;4、其次建立工程PROJECT,具体参见相关教程;5、 Compile cnt6.vhd和testbench.vhd6、设置runtime options 运行周期1us7、 Start simulation,选择激励文件和resolution后点OK8、在OBJECTS窗口add signal9、 run10、观察WAVE窗口为仿真结果以下代码已测试无误,全部来源网页:/wangjun403/article/details/6246830写简单的testbench六进制计数器的代码library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;--use ieee.std_logic_unsigned.all;entity cnt6 isport(clr,en,clk :in std_logic;q :out std_logic_vector(2 downto 0));end entity;architecture rtl of cnt6 issignal tmp :std_logic_vector(2 downto 0);beginprocess(clk)-- variable q6:integer;beginif(clk'event and clk='1') thenif(clr='0')thentmp<="000";elsif(en='1') thenif(tmp="101")thentmp<="000";elsetmp<=unsigned(tmp)+'1';end if;end if;end if;q<=tmp;-- qa<=q(0);-- qb<=q(1);-- qc<=q(2);end process;end rtl;六进制计数器testbench的代码library ieee;use ieee.std_logic_1164.all;entity cnt6_tb isend cnt6_tb;architecture rtl of cnt6_tb iscomponent cnt6port(clr,en,clk :in std_logic;q :out std_logic_vector(2 downto 0));end component;signal clr :std_logic:='0';signal en :std_logic:='0';signal clk :std_logic:='0';signal q :std_logic_vector(2 downto 0); constant clk_period :time :=20 ns;begininstant:cnt6 port map(clk=>clk,en=>en,clr=>clr,q=>q);clk_gen:processbeginwait for clk_period/2;clk<='1';wait for clk_period/2;clk<='0';end process;clr_gen:processbeginclr<='0';wait for 30 ns;clr<='1';wait;end process;en_gen:processbeginen<='0';wait for 50ns;en<='1';wait;end process;end rtl;testbench也有自己固定的一套格式,总结如下:--测试平台文件(testbench)的基本结构library ieee;use ieee.std_logic_1164.all;entity test_bench is --测试平台文件的空实体(不需要端口定义) end test_bench;architecture tb_behavior of test_bench iscomponent entity_under_test --被测试元件的声明port(list-of-ports-theri-types-and-modes);end component;begininstantiation:entity_under_test port map(port-associations);process() --产生时钟信号……end process;process() --产生激励源……end process;end tb_behavior;---------------------------------------------------------------------简单计数程序源码library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_unsigned.all;entity sim_counter isport(clk :in std_logic;reset :in std_logic;count :out std_logic_vector(3 downto 0));end entity;architecture behavioral of sim_counter issignal temp :std_logic_vector(3 downto 0);beginprocess(clk,reset)beginif reset='1' thentemp<="0000";elsif clk'event and clk='1' thentemp<=temp+1;end if;end process;count<=temp;end behavioral;---------------------------------------------------------------------简单计数程序,测试文件代码(testbench)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.numeric_std.all;entity counter_tb_vhd is --测试平台实体end counter_tb_vhd;architecture behavior of counter_tb_vhd is--被测试元件(DUT)的声明component sim_counterport(clk :in std_logic;reset :in std_logic;count :out std_logic_vector(3 downto 0));end component;--输入信号signal clk:std_logic:='0';signal reset :std_logic:='0';--输出信号signal count :std_logic_vector(3 downto 0);constant clk_period :time :=20 ns; --时钟周期的定义begindut:sim_counter port map(clk=>clk,reset=>reset,counter=>counter);clk_gen:processbeginclk='1';wait for clk_period/2;clk='0';wait for clk_period/2;end process;tb:process --激励信号beginwait for 20 ns;reset<='1';wait for 20 ns;reset<='0';wait for 200 ns;wait; --will wait forever;end process;end;--激励信号的产生方式--1.以一定的离散时间间隔产生激励信号的波形--2.基于实体的状态产生激励信号,也就是说基于实体的输出响应产生激励信号--两种常用的复位信号--1.周期性的激励信号,如时钟--2.时序变化的激励型号,如复位--eg.产生不对称时钟信号w_clk<='0' after period/4 when w_clk='1' else'1' after 3*period/4 when w_clk='0' else'0';--eg.产生堆成时钟信号,process语句clk_gen1:processconstan clk_period := 40 ns;beginclk='1';wait for clk_period/2;clk='0';wait for clk_period/2;end process;。

工程实训报告-Modelsim实验二组合逻辑电路设计

工程实训报告-Modelsim实验二组合逻辑电路设计
1、打开MAX Plus 2软件。
2、建立工程及相应文件,文件名为compare_2.v。
3、编写两位二进制数比较器程序:
module compare_2(A,B,C,D,E,F);
input A,B,C,D;output E,F;
reg E,F;
always @(A or B or C or D)
实验项目名称:组合逻辑电路设计
指导教师:实验日期:
实验概述:
【实验目的及实验设备】
实验目的:
(1)掌握组合逻辑电路的静态测试方法。
(2)学习测试模块的编写,综合和不同层次的仿真。
(3)编写两位二进制数比较器程序。
(4)熟悉利用MAX Plus 2软件进行波形仿真。
实验设备及仪器名称:
CPU型号:英特尔Pentium Dual-Core T4200 @ 2.00GHz
begin E <= 1'b0;F <= 1'b0;end
else
begin E <= 1'b0;F <= 1'b1;end
end
end
endmodule
4、进行程序编译,查找错误并修改。
5、输出仿真波形。
【实验结果】(实验波形)
【解答思考题】பைடு நூலகம்
比较器是将一个模拟电压信号与一个基准电压相比较的电路。比较器的两路输入为模拟信号,输出则为二进制信号,当输入电压的差值增大或减小时,其输出保持恒定。比较器经过调节可以提供极小的时间延迟,但其频响特性会受到一定限制。为避免输出振荡,许多比较器还带有内部滞回电路。比较器的阈值是固定的,有的只有一个阈值,有的具有两个阈值。
begin
if(B > D)

multisim仿真实验报告

multisim仿真实验报告

竭诚为您提供优质文档/双击可除multisim仿真实验报告
篇一:multisim仿真实验报告
multisim仿真实验报告
3班刘鑫学号:20XX302660009
实验一单极放大电路
动态仿真一
动态仿真二
2.重新启动仿真波形
R=5.1k
R=330欧
篇二:multisim仿真实验报告
实验报告
—基于multisim的电子仿真设计
班级:卓越(通信)091班姓名:杨宝宝学号:6100209170辅导教师:陈素华徐晓玲
实验一基于multisim数字电路仿真实验
学生姓名:杨宝宝学号:6100209170专业班级:卓越(通信)091班实验类型:□验证□综合□设计□创新实验日期:实验成绩:
一、实验目的
1.掌握虚拟仪器库中关于测试数字电路仪器的使用方法,入网数字信号发生器和逻辑分析仪的使用。

2.进一步(:multisim仿真实验报告)了解multisim仿真软件基本操作和分析方法。

二、实验内容
用数字信号发生器和逻辑分析仪测试74Ls138译码器逻辑功能。

三、实验原理
实验原理图如图所示:
四、实验步骤
1.在multisim软件中选择逻辑分析仪,字发生器和
74Ls138译码器;
2.数字信号发生器接138译码器地址端,逻辑分析仪接138译码器输出端。

并按规定连好译码器的其他端口。

3.点击字发生器,控制方式为循环,设置为加计数,频率设为1Khz,并设置显
学生姓名:杨宝宝学号:6100209170专业班级:卓越(通。

multisim仿真数电实验报告

multisim仿真数电实验报告

实验报告课程名称:数字电子技术实验姓名:学号:专业:开课学期:指导教师:实验课安全知识须知1.须知1:规范着装。

为保证实验操作过程安全、避免实验过程中意外发生,学生禁止穿拖鞋进入实验室,女生尽量避免穿裙子参加实验。

2.须知2:实验前必须熟悉实验设备参数、掌握设备的技术性能以及操作规程。

3.须知3:实验时人体不可接触带电线路,接线或拆线都必须在切断电源的情况下进行。

4.须知4:学生独立完成接线或改接线路后必须经指导教师检查和允许,并使组内其他同学引起注意后方可接通电源。

实验中如设备发生故障,应立即切断电源,经查清问题和妥善处理故障后,才能继续进行实验。

5.须知5:接通电源前应先检查功率表及电流表的电流量程是否符合要求,有否短路回路存在,以免损坏仪表或电源。

特别提醒:实验过程中违反以上任一须知,需再次进行预习后方可再来参加实验;课程中违反三次及以上,直接重修。

实验报告撰写要求1.要求1:预习报告部分列出该次实验使用组件名称或者设备额定参数;绘制实验线路图,并注明仪表量程、电阻器阻值、电源端编号等。

绘制数据记录表格,并注明相关的实验环境参数与要求。

2.要求2:分析报告部分一方面参考思考题要求,对实验数据进行分析和整理,说明实验结果与理论是否符合;另一方面根据实测数据和在实验中观察和发现的问题,经过自己研究或分析讨论后写出的心得体会。

3.要求3:在数据处理中,曲线的绘制必须用坐标纸画出曲线,曲线要用曲线尺或曲线板连成光滑曲线,不在曲线上的点仍按实际数据标出其具体坐标。

4.要求4:本课程实验结束后,将各次的实验报告按要求装订,并在首页写上序号(实验课上签到表对应的序号)。

请班长按照序号排序,并在课程结束后按要求上交实验报告。

温馨提示:实验报告撰写过程中如遇预留空白不足,请在该页背面空白接续。

实验报告课程名称:数字电子技术实验实验 5 : multisim多位计数器仿真实验日期:年月日地点:实验台号:专业班级:学号:姓名:评分:教师评语:教师签字:日期:一、实验目的二、实验设备及元器件Multisim仿真洁面三、实验原理(简述实验原理,画出原理图)这一部分的实验主要涉及改变计数进制的问题,我分为以下几个部分预习一、首先需要明确各个芯片的计数最大进制 161系列为16进制,160系列的为10进制。

Modelsim脚本仿真教程

Modelsim脚本仿真教程

Modelsim脚本仿真教程
以计数器C OUNTER为例
第1步:建立工程文件夹
在电脑中任意位置建立一个空文件夹(路径不能包含中文),把设计源代码.v文件,仿真激励文件.v,仿真脚本文件.do拷贝到该目录下。

打开Modelsim软件,点击菜单项File->Change Directory..,选择刚才建立的文件夹作为当前工程路径。

第2步:执行脚本文件
在Transcript栏中输入“do sim.do”,按回车键,执行仿真脚本文件。

如果Modelsim软件中没有出现Transcript栏,只需在菜单项选择View->Transcript即可。

第3步:在Wave窗口中观察波形
第4步:结束仿真
在菜单项选择Simulate->End Simulation即可结束当前仿真。

如若波形有错,则修改源代码或激励文件后重新执行第2步。

附件:。

modelsim实验计数器仿真实验步骤

modelsim实验计数器仿真实验步骤

modelsim实验-计数器仿真实验步骤————————————————————————————————作者:————————————————————————————————日期:一、新建工程a)如图,打开modelsim后点击File→New→Project...b)弹出如下图对话框,输入Project Name后,点击OKc)弹出如下对话框,点击Close二、在建好的工程中添加Verilog程序文件并进行编译a)新建好的空工程如下图,在空白处右击,选择Add to Project New File...b)弹出如下对话框,将type选项改为Verilog,然后输入名称,点击OKc)双击新建好的文件,在右侧的编辑框里输入程序d)输入完成后,点击左上角工具栏的保存按钮e)同样的步骤建立一个测试文件,然后在空白处右击选择Compile Compile All,进行编译f)编译成功后,会出现如下变化,否则请检查程序重新编译三、进行仿真a)编译成功后,点击下方Library选项,在展开的work文件夹中右击刚才建立的测试文件,选择Simulateb)此时弹出如下sim选项界面,在任意处右击选择Add to→Wave→All items in regionc)添加波形完成后,会弹出右侧如下波形框,将上方工具栏中的时间长度100ps改为1ms,然后点击傍边的run工具按钮d)点击运行之后,出现如下波形图,通过调节工具栏上的放大、缩小、适应屏幕的按钮,以及拖动下方的进度条,就会出现合适的波形视图,如下PS: 鼠标右击波形框中的测试文件名,选择Radix Unsigned,可以将二进制改为十进制,如下图,可以看到,计数器随着时钟频率的上升沿,开始计数四、附录Verilog计数器实验源程序module counter3b(clk,cnt); //counter3b.v input clk;output reg[2:0]cnt=3'b0;always @(posedge clk) begincnt<=cnt+1;endendmodule`timescale 1 ns/10 ps // counter3b_tb module counter3b_tb();reg clk=0;wire [2:0]cnt;always #100 clk=~clk;counter3b i1(.clk(clk),.cnt(cnt)); endmodule。

quartus软件及modelsim仿真实验报告

quartus软件及modelsim仿真实验报告

Verilog实验报告实验一Quartus及Modelsim软件的基本使用一、实验目的熟悉Quartus和Modelsim软件的基本使用方法和步骤,熟悉基本的Verilog语法,学会用Verilog语言编写简单的程序。

二、实验要求熟练掌握Quartus和Modelsim软件工程建立、添加文件、编译运行和仿真的方法,学会写程序文件和测试文件。

三、实验仪器和设备1、硬件:计算机2、软件:Quartus、Modelsim、(UE)四、实验内容1、运行Quartus软件建立工程并添加程序.v文件,编译运行,查看电路图。

2、运行Modelsim软件建立工程并添加测试.v文件,进行仿真,查看波形图。

五、实验方法和步骤(一)Quartus软件的使用1、启动Quartus软件:双击桌面的Quartus快捷图标,进入如图1所示的界面。

图1-1 启动界面2、建立工程:选择菜单栏的【File】→【New Project Wizard】命令,弹出图2所示新建工程向导。

图1-2 新建工程向导单击【Next】跳转至下一页。

为方便工程管理,在新建工程之前,先新建一个文件夹,把工程保存在新建的文件下,并对工程进行命名。

如图3所示。

图1-3 命名和存放单击【Next】跳转至下一页。

添加事先写好的.v文件。

如图4所示。

图1-4 添加文件(此处也可不添加,直接在建立好的工程中,选择【File】→【New】命令,新建一个Verilog HDL File,如图5所示。

图1-5 新建.v文件)单击【Next】跳转至下一页。

选择FPGA型号,如图6所示。

因为本次实验不在硬件上实现,因此此步跳过。

直接单击【Next】跳转至下一页。

图1-6 选择FPGA型号直到出现【Summary】界面,单击【Finish】。

如图7所示。

图1-7 结束3、编写程序:由按键控制led灯的亮灭。

如图8。

图1-8 编写程序4、编译程序:在【Task】栏中找到如图所示,编译程序。

数电仿真实验报告Multism

数电仿真实验报告Multism

实验一组合逻辑电路设计与分析1实验目的(1)学习掌握组合逻辑电路的特点;(2)利用逻辑转换仪对组合逻辑电路进行分析与设计。

2实验内容:实验电路及步骤:(1)利用逻辑转换仪对逻辑电路进行分析:按下图所示连接电路。

图表1 待分析的逻辑电路A经分析得到真值表和表达式:逻辑功能说明:观察真值表,我们发现当四个输入变量A、B、C、D中1的个数为奇数是,输出为0;当四个变量中的个数为偶数时,输出为1.该电路是一个四位输入信号的奇偶校验电路。

(2)根据要求利用逻辑转换仪进行逻辑电路的设计。

问题提出:有一火灾报警系统,设有烟感、温感、紫外线三种类型不同的火灾探测器。

为了防止误报警,只有当其中有两种或两种以上的探测器发出火灾探测信号时,报警系统才产生报警信号,试设计报警控制信号的电路在逻辑转换仪面板上根据下列分析出真值表如下图所示:由于探测器发出的火灾探测信号也只有两种可能,一种是高端平(1),表示有火灾报警;一种是低电平(0),表示正常无火灾报警。

因此,令A、B、C分别表示烟感、温感、紫外线三种探测器输出的信号,为报警控制电路的输入、令F为报警控制电路的输出。

(3)在逻辑转换仪面板上单击按钮(由真值表导出简化表达式)后得到下图所示的最简化表达式。

(4)在上图的基础上单击(由逻辑表达式得到逻辑电路)后得到如下图所示的逻辑电路思考题(1)设计一个4人表决电路。

如果3人或3人以上同意,则通过;反之,则被否决。

用与非门实现。

记A、B、C、D四个变量表示一个人是否同意,若同意输出1,反之输出0。

在逻辑转换仪面板上分析出真值表如下图所示:化简逻辑表达式后并转化成与非门电路如下图所示(2)利用逻辑转换仪对下图所示电路进行分析。

得出真值表如下逻辑功能分析:当A、B不同时为1时,输出为C非;当A、B同时为1时,输出为C。

A B端作为控制信号控制输出与C的关系。

实验二编码器、译码器电路仿真实验一、实验要求(1)掌握编码器、编译器的工作原理。

模8计数器verilog报告

模8计数器verilog报告

模8计数器verilog报告实验名称模8计数器姓名:XXX班级:XXX学号:XXXXX报告日期:XXXXXX1.实验目的练习在modelsim下编写verilog程序,熟悉modelsim运行过程, 并学会用verilog编写一个模八计数器。

2.实验任务编写一个模值为八的计数器的功能模块实现模为八带清零端的(异步清零);并且编写一激励模块来测试该模块。

3.实验内容及步骤3.1实验内容编写模8计数器模块及激励模块3.2本次所实现的功能描述模8计数器有两个输入端,分别为clock(时钟控制输入端)和clear (异步清零端),一个输出端Q用来周期性的显示。

Clock:时钟信号,当上升沿到来时,计数器自动加一。

Clear:异步清零端,低电平到来时计数器自动清零。

Q:输出端,从000-111共八个状态3.3本次实验的设计方案带有异步清零端的模8计数器共有8个状态,所以输出端Q 只需 要三位(从000----111)共八个状态。

还需要一个输入端(clock )来 输入时钟信号,另一个输入端(clear )来输入清零信号。

模8计数器的状态转移图如下:模 8 — Q、计具体方案如下:1.进入 modelsim 后点击 file ----> new ---->project •之后出现一个建clockClear立工程的对话框,键入counter_8工程名后,再在下面路径添加一个自己的文件夹。

确认后会弹出一个对话框,点击creat New File, 在工程conuter_8下建立两个文件分别叫做counter_8的功能模块文件和test_counter_8的测试激励模块文件。

2.双击进入文件后编写程序3.编译,如果程序出错对程序进行修改。

之后再编译,编译成功后点击simulate进行仿真。

・4.观察仿真结果是否符合事先的设计。

不符合继续修改程序。

模8计数器的功能模块如下:module counter_8(clock,clear,q);input clock,clear;output[2:0] q;reg[2:0] q;always @(posedge clock or negedge clear) beginif(!clear)q<=0;elseq <= q +1;endendmodule测试激励如下:module test_counter8;reg clk,clr;wire[2:0] q;counter_8 counter(.clock(clk),.clear(clr),.q(q));initialclk = 0;always#100 clk = ~clk;initialbeginclr = 0;#50 clr = 1;#200 clr = 0;#50 clr = 1;endinitial$monitor($time,"clear= %b,clock= %b,q= %b",clr,clk,q);endmodule3.4本次实验设计的结果测试结果波形如下:!■] Wav®---测试输出结果如下;0clear=0z ciock=ODD50clears l z clock=0,q-000 100clear-1;clock-QQ1 200clear=l,clock=0^*5=001 250cleat=0,clock=0層000 300clear=丄$匚丄ock=丄層400clear=l,clock=001 500clear=lz cloc}£=010 600clear=l z clock=DID700clear-lz clock=1,5*=Qll800clear-l z clock=Oil900clear=丄,clock=丄内=1001000clears Ij. clock=ICC1100clear=1f clock=i/q=1011200clears1f clocks1011300clears1,01001:1101400clear-l^clock-o,q=1101500cleaii=l z clock-l*q=11116DD clear-lz clock=1111700clEai:丄十匚丄ock=丄用0001800clear=丄^clock®0/Q=0001900clear=lz c 丄(JUk-r□tn2000clear=l z clock=0,q=0012100clear-i z C10CJ:s1W oia4.实验总结这是第二次用modelsim编写程序,使用方面还不熟练,总是不知道点哪里。

数电仿真Modelsim设计实验报告VerilogHDL语言

数电仿真Modelsim设计实验报告VerilogHDL语言

《Verilog HDL程序设计与仿真实验报告》1、实验名称:Verilog HDL程序设计与仿真实验2、实验设计要求以及容:利用Verilog HDL语言和描述下列芯片的功能,编写激励测试程序并在Modelsim软件中仿真运行、记录相关波形。

芯片包括:CD4532、74X138、74HC4511、74HC151、74HC85、74HC283、74HC194、74LVC161。

3、实验软件:Modelsim软件。

4、芯片功能与真值表:输入输出CS E00 x x x x x x x x1 0 0 0 0 0 0 0 01 1 x x x x x x x1 0 1 x x x x x x1 0 0 1 x x x x x1 0 0 0 1 x x x x1 0 0 0 0 1 x x x1 0 0 0 0 0 1 x x1 0 0 0 0 0 0 1 x1 0 0 0 0 0 0 0 10 0 0 0 00 0 0 0 11 1 1 1 01 1 0 1 01 0 1 1 01 0 0 1 00 1 1 1 00 1 0 1 00 0 1 1 00 0 0 1 0输入输出x 1 xx x 11 x x1 0 01 0 01 0 01 0 01 0 01 0 01 0 01 0 0x x xx x xx x x0 0 00 0 10 1 00 1 11 0 01 0 11 1 01 1 11 1 1 1 1 1 1 11 1 1 1 1 1 1 11 1 1 1 1 1 1 10 1 1 1 1 1 1 11 0 1 1 1 1 1 11 1 0 1 1 1 1 11 1 1 0 1 1 1 11 1 1 1 0 1 1 11 1 1 1 1 0 1 11 1 1 1 1 1 0 11 1 1 1 1 1 1 074HC4511:七段显示译码器:十进制或功能输入输出字形LE a b c d e f g0 1 2 3 4 5 6 7 8 9101112131415 01111111111111111111111111111111100 0 00 0 0 100 1 000 1 10 1 0 00 1 0 10 1 1 00 1 1 110 0 01 0 0 11 0 1 01 0 1 11 1 0 01 1 0 11 1 1 01 1 1 11 1 1 1 1 1 00 1 1 0 0 0 01 1 0 1 1 0 11 1 1 1 0 0 10 1 1 0 0 1 11 0 1 1 0 1 10 0 1 1 1 1 01 1 1 0 0 0 01 1 1 1 1 1 11 1 1 1 0 1 10 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 00 0 0 0 0 0 0123456789熄灭熄灭熄灭熄灭熄灭熄灭灯测试x x 0 x x x x 1 1 1 1 1 1 1 8 灭灯x 0 1 x x x x 0 0 0 0 0 0 0 熄灭锁存 1 1 1 x x x x * *输入输出使能选择Y1 0 0 0 0 0 0 0 x x x0 0 00 0 10 1 00 1 11 0 01 0 11 1 00 10 1 1 174HC85:4位数值比较器:74HC283:4位二进制全加器:输入输出功能清零控制信号时钟串行输入并行输入CR CP 右移左移LHHHHx xL LL HL HH Lxx↑↑↑x xx xL xH xx Lx x x xx x x xx x x xx x x xx x x xL L L LLHH H H LH H↑↑x Hx xx x x x74LVC161:4位二进制同步计数器:输入输出清零CR 预支PE使能C E P C E T时钟CP预支数据输入进位TCL H H H H xLHHHx xx xL xx LH Hx↑xx↑x x x xx x x xx x x xx x x xL L L L保持保持保持L##L#5、实验具体设计:CD4532-8位优先编码器:模块设计代码:module CD4532(EI,I,Y,GS,EO);//8位优先编码器input EI;input [7:0] I;output reg [2:0] Y;output reg GS,EO;always (EI,I)beginif(EI==0) begin Y=3'd0; GS=0; EO=0; endelse//当EI=1时,实现优先编码器的功能beginGS=1; EO=0;//当编码器输入信号有效时,设定GS、EO的输出值if(I[7]) Y=3'd7; else//根据I的高位情况对Y的输出进行控制if(I[6]) Y=3'd6; elseif(I[5]) Y=3'd5; elseif(I[4]) Y=3'd4; elseif(I[3]) Y=3'd3; elseif(I[2]) Y=3'd2; elseif(I[1]) Y=3'd1; elseif(I[0]) Y=3'd0;elsebegin Y=3'd0; GS=0; EO=1; end//当编码器输入信号无效时,设定GS、EO的输出值 endendendmodule对应testbench设计代码:`timescale 1ns/1ns //设定仿真时间间隔单位,之后的testbench中这句代码功能类似module CD4532_tb;reg [7:0] D_in;// 设定testbench输入数据类型为reg型 reg EI_in;wire [2:0] Q_result;// / 设定testbench输出数据类型为wire型wire GS_result,EO_result;initialbeginEI_in=0;//初始化相关数据的值D_in=8'b0000_0001;#80 EI_in=1;#80 $stop();//上一个语句执行完毕后的80个时间单位后仿真终止endalways #10 //每隔10个时间单位执行一次beginif(D_in==8'b1000_0000)D_in=8'b0000_0001;elseD_in=(D_in<<1);endCD4532 U1(.EI(EI_in),.I(D_in),.Y(Q_result),.GS(GS_result),.EO(EO_result)); endmodule74X138-3 线-8线译码器:模块设计代码:module _74X138(A,EN,Y);//3 线-8线译码器,输出为低电平有效input [2:0] A;input EN;//使能端output reg [7:0] Y;integer k;always (A,EN)beginY=8'b1111_1111;for(k=0;k<=7;k=k+1)beginif((EN==1)&&(A==k))Y[k]=0;//EN=1时根据输入的A进行译码elseY[k]=1;//使能无效时或输入无效endendendmodule对应testbench设计代码:`timescale 1ns/1nsmodule _74X138_tb;reg [2:0] A_in;reg EI_in;wire [7:0] Y_result;initialbeginEI_in=0;A_in=3'b000;#80 EI_in=1;#160 $stop();endalways #10beginif(A_in==3'b111)A_in=3'b000;elseA_in=A_in+1;end_74X138 U1(.A(A_in),.EN(EI_in),.Y(Y_result));endmodule74HC4511-七段显示译码器:模块设计代码:module _74HC4511(D,LE,BL,LT,a,b,c,d,e,f,g);//七段显示译码器input [3:0] D;//输入信号端口input LE,BL,LT;//控制信号output reg a,b,c,d,e,f,g;always(LE,BL,LT,D)beginif(LT==0) {a,b,c,d,e,f,g}=7'b111_1111;//显示器全亮else if(BL==0) {a,b,c,d,e,f,g}=7'b000_0000;//显示器全灭else if(LE==0) {a,b,c,d,e,f,g}={a,b,c,d,e,f,g};//显示器保持当前显示elsecase(D)//根据输入的8421BCD码进行译码4'd0: {a,b,c,d,e,f,g}=7'b111_1110;//04'd1: {a,b,c,d,e,f,g}=7'b011_0000;//14'd2: {a,b,c,d,e,f,g}=7'b110_1101;//24'd3: {a,b,c,d,e,f,g}=7'b111_1001;//34'd4: {a,b,c,d,e,f,g}=7'b011_0011;//44'd5: {a,b,c,d,e,f,g}=7'b101_1011;//54'd6: {a,b,c,d,e,f,g}=7'b001_1111;//64'd7: {a,b,c,d,e,f,g}=7'b111_0000;//74'd8: {a,b,c,d,e,f,g}=7'b111_1111;//84'd9: {a,b,c,d,e,f,g}=7'b111_1011;//9default:{a,b,c,d,e,f,g}=7'b000_0000;//非8421BCD码输入时,不译码 endcaseendendmodule对应testbench设计代码:`timescale 1ns/1nsmodule _74HC4511_tb;reg [3:0] D_in;reg LE_in,BL_in,LT_in;wire A,B,C,D,E,F,G;initialbegin//开始为全亮LE_in=1;//保持,低电平有效BL_in=1;//全灭,低电平有效LT_in=0;//全亮,低电平有效D_in=4'b0000;#100 begin LE_in=1; BL_in=0; LT_in=1; end//全灭#100 begin LE_in=1; BL_in=1; LT_in=1; end//正常显示 #100 begin LE_in=0; BL_in=1; LT_in=1; end//保持#100 $stop();endalways #10beginif(D_in==4'd9)D_in=4'b0000;elseD_in=D_in+1;end_74HC4511 U1(D_in,LE_in,BL_in,LT_in,A,B,C,D,E,F,G); endmodule74HC151-八选一数据选择器:模块设计代码:module _74HC151(S,D,E,Y0,Y1);//八选一数据选择器input [2:0] S;//控制信号input [7:0] D;//输入信号input E;//使能端output reg Y0,Y1;//Y0,Y1分别为同相和反相输出信号always(E,S,D)beginif(~E)begin Y0=0; Y1=1; end//不工作,输出默认信号elsebegincase(S)//根据控制信号选择不同通道的输入信号作为输出3'b000: begin Y0=D[0]; Y1=~Y0; end//03'b001: begin Y0=D[1]; Y1=~Y0; end//13'b010: begin Y0=D[2]; Y1=~Y0; end//23'b011: begin Y0=D[3]; Y1=~Y0; end//33'b100: begin Y0=D[4]; Y1=~Y0; end//43'b101: begin Y0=D[5]; Y1=~Y0; end//53'b110: begin Y0=D[6]; Y1=~Y0; end//63'b111: begin Y0=D[7]; Y1=~Y0; end//7default: begin Y0=0; Y1=~Y0; end//若控制信号不符合要求则输出默认信号endcaseendendendmodule对应testbench设计代码:`timescale 1ns/1nsmodule _74HC151_tb;reg [2:0] S_in;reg [7:0] D_in;reg E_in;wire Y0_result,Y1_result;initialbeginE_in=0;S_in=3'b000;D_in=8'b0010_0110;#80 E_in=1;#80 D_in=8'b1001_1110;#80 E_in=0;#80 $stop();endalways #10beginif(S_in==3'b111)S_in=3'b000;elseS_in=S_in+1;end_74HC151 U1(S_in,D_in,E_in,Y0_result,Y1_result);Endmodule74HC85-4位数值比较器:模块设计代码:module _74HC85(A,B,I0,I1,I2,Fab0,Fab1,Fab2);//4位数值比较器,以下均为高电平有效 input [3:0] A,B;//输入信号input I0,I1,I2;//低位比较结果,依次为低位A=B,A<B,A>Boutput reg Fab0,Fab1,Fab2;//输出信号Fab0,Fab1,Fab2依次为A=B,A<B,A>B.reg F000,F001,F002,F110,F111,F112,F220,F221,F222,F330,F331,F332;//中间节点,依次对应Ai=Bi,Ai<Bi,Ai>Bi.i为位数(0~3)always(A,B,I0,I1,I2)beginif(A[3]>B[3])//比较第4位begin F330=0; F331=0; F332=1; endelse if(A[3]<B[3])begin F330=0; F331=1; F332=0; endelsebegin F330=1; F331=0; F332=0; endif(A[2]>B[2])//比较第3位begin F220=0; F221=0; F222=1; endelse if(A[2]<B[2])begin F220=0; F221=1; F222=0; endelsebegin F220=1; F221=0; F222=0; endif(A[1]>B[1])//比较第2位begin F110=0; F111=0; F112=1; endelse if(A[1]<B[1])begin F110=0; F111=1; F112=0; endelsebegin F110=1; F111=0; F112=0; endif(A[0]>B[0])//比较第1位begin F000=0; F001=0; F002=1; endelse if(A[0]<B[0])begin F000=0; F001=1; F002=0; endelsebegin F000=1; F001=0; F002=0; end//输出结果如下if((F000&&F110&&F220&&F330)&&I0)//低位进位信号出错begin Fab2=0; Fab1=0; Fab0=1; endelse if((F000&&F110&&F220&&F330)&&(~I0&&I1&&I2))//低位进位信号出错begin Fab2=0; Fab1=0; Fab0=0; endelse if((F000&&F110&&F220&&F330)&&(~I0&&~I1&&~I2))//低位进位信号出错begin Fab2=1; Fab1=1; Fab0=0; endelse//低位进位信号正常beginFab2=F332||F330&&F222||F330&&F220&&F112||F330&&F220&&F110&&F002||F330&&F220&&F110&&F000&&I2;Fab1=F331||F330&&F221||F330&&F220&&F111||F330&&F220&&F110&&F001||F330&&F220&&F110&&F000&&I1;Fab0=F330&&F220&&F110&&F000&&I0;endendendmodule对应testbench设计代码:`timescale 1ns/1nsmodule _74HC85_tb;reg [3:0] A_in,B_in;reg I0_in,I1_in,I2_in;wire Fab0_result,Fab1_result,Fab2_result;initialbeginI0_in=0;I1_in=0;I2_in=0;A_in=4'b1010;B_in=4'b0111;#10 begin I0_in=1; I1_in=0; I2_in=0; end//低位A=B#10 begin I0_in=0; I1_in=1; I2_in=0; end//低位A<B#10 begin I0_in=0; I1_in=0; I2_in=1; end//低位A>B#10 begin I0_in=0; I1_in=0; I2_in=0; //低位归位A_in=4'b0100; B_in=4'b1001; end#10 begin I0_in=1; I1_in=0; I2_in=0; end//低位A=B#10 begin I0_in=0; I1_in=1; I2_in=0; end//低位A<B#10 begin I0_in=0; I1_in=0; I2_in=1; end//低位A>B#10 begin I0_in=0; I1_in=0; I2_in=0; //低位归位A_in=4'b0010; B_in=4'b0010; end#10 begin I0_in=1; I1_in=0; I2_in=0; end//低位A=B#10 begin I0_in=0; I1_in=1; I2_in=0; end//低位A<B#10 begin I0_in=0; I1_in=0; I2_in=1; end//低位A>B#10 $stop();end_74HC85 U1(A_in,B_in,I0_in,I1_in,I2_in,Fab0_result,Fab1_result,Fab2_result); endmodule74HC283-4位二进制全加器:模块设计代码:module _74HC283(A,B,Ci,Co,S);//4位二进制全加器input Ci;//低位进位信号input [3:0] A,B;//输入信号output reg [3:0] S;//输出结果output reg Co;//高位进位信号Co=C[3]reg [3:0] C,G,P;integer k;always(A,B,Ci)beginfor(k=0;k<4;k=k+1)beginG[k]=A[k]&&B[k];P[k]=A[k]&&~B[k]||~A[k]&&B[k];endC[0]=G[0]||P[0]&&Ci;C[1]=G[1]||P[1]&&C[0];C[2]=G[2]||P[2]&&C[1];C[3]=G[3]||P[3]&&C[2];S[0]=P[0]&&~Ci||~P[0]&&Ci;S[1]=P[1]&&~C[0]||~P[1]&&C[0];S[2]=P[2]&&~C[1]||~P[2]&&C[1];S[3]=P[3]&&~C[2]||~P[3]&&C[2];Co=C[3];endendmodule对应testbench设计代码:`timescale 1ns/1nsmodule _74HC283_tb;reg [3:0] A_in,B_in;reg Ci_in;//低位进位信号wire [3:0] S_out;//本位相加结果wire Co_out;//高位进位信号initialbeginCi_in=0;A_in=4'b1010;B_in=4'b0111;#10 begin A_in=4'b0011; B_in=4'b1111; end#10 begin A_in=4'b0101; B_in=4'b1001; end#10 begin A_in=4'b1111; B_in=4'b0010; end#10 $stop();endalways #5beginCi_in=~Ci_in;//循环改变低位进位信号end_74HC283 U1(A_in,B_in,Ci_in,Co_out,S_out);endmodule74HC194-4位双向移位寄存器:模块设计代码:module _74HC194(S0,S1,Dsl,Dsr,CP,CR,D,Q);//4位双向移位寄存器_P339 input S0,S1;//输入端口input Dsr,Dsl;//串行数据输入input CP,CR;//时钟和清零input [3:0] D;//并行数据输入output reg [3:0] Q;//输出结果always(posedge CP, negedge CR)beginif(~CR) Q<=4'b0000;//异步清零elsecase({S1,S0})2'b00:Q<=Q;//输出保持不变2'b01:Q<={Q[2:0],Dsr};//右移,低位移向高位2'b10:Q<={Dsl,Q[3:1]};//左移,高位移向低位2'b11:Q<=D;//并行置数endcaseendendmodule对应testbench设计代码:`timescale 1ns/1nsmodule _74HC194_tb;reg [3:0] D_in;//并行数据输入reg S0_in,S1_in;//控制信号输入端口reg Dsr_in,Dsl_in;//串行数据输入reg CP_in,CR_in;//时钟和清零,清零为低电平有效wire [3:0] Q_out;//输出结果initialbeginCP_in=1;CR_in=1;S0_in=1;S1_in=1;//开始先输入串行数据Dsr_in=0;Dsl_in=0;D_in=4'b0110;#243 CR_in=~CR_in;#20 $stop();endalways #5beginCP_in=~CP_in;//周期为10ns的时钟信号endalways #15//循环调整控制输入信号,周期60nsbegincase({S1_in,S0_in})2'b00:begin S1_in=0; S0_in=1; end2'b01:begin S1_in=1; S0_in=0; end2'b10:begin S1_in=1; S0_in=1; end2'b11:begin S1_in=0; S0_in=0; endendcaseendalways #10//循环调整串行数据输入信号,周期40nsbegincase({Dsr_in,Dsl_in})2'b00:begin Dsr_in=0; Dsl_in=1; end2'b01:begin Dsr_in=1; Dsl_in=0; end2'b10:begin Dsr_in=1; Dsl_in=1; end2'b11:begin Dsr_in=0; Dsl_in=0; endendcaseend_74HC194 U1(S0_in,S1_in,Dsl_in,Dsr_in,CP_in,CR_in,D_in,Q_out);endmodule74LVC161-4位二进制同步计数器:模块设计代码:module _74LVC161(CEP,CET,PE,CP,CR,D,TC,Q);//4位二进制同步计数器_P340 input CEP,CET,PE,CP,CR;//输入端口input [3:0] D;//并行数据输入output TC;//进位输出output reg [3:0] Q;//输出结果wire CE;assign CE=CEP&CET;//CE=1时计数器计数assign TC=CET&PE&(Q==4'b1111);//产生进位输出信号always(posedge CP, negedge CR)beginif(~CR) Q<=4'b0000;//异步清零else if(~PE) Q<=D;//PE=0,同步输入数据else if(CE)beginif((TC==1)&&(Q==4'b1111))Q<=4'b0000;//计数器计满后自动归零elseQ<=Q+1'b1;//加1计数endelse Q<=Q;//保持输出不变endendmodule对应testbench设计代码:`timescale 1ns/1nsmodule _74LVC161_tb;reg CEP_in,CET_in,PE_in,CP_in,CR_in;//输入端口reg [3:0] D_in;//并行数据输入wire TC_out;//进位输出wire [3:0] Q_out;//输出结果initialbeginCEP_in=0;CET_in=1;PE_in=0;CP_in=1;CR_in=1;D_in=4'b1101;#10 begin PE_in=1;D_in=4'b1001; end#20 begin CEP_in=1; CET_in=1; end#220 begin PE_in=0; end#23 CR_in=~CR_in;#20 $stop();endalways #5beginCP_in=~CP_in;//周期为10ns的时钟信号end_74LVC161 U1(CEP_in,CET_in,PE_in,CP_in,CR_in,D_in,TC_out,Q_out);endmodule6、输出仿真波形以及相关数据:CD4532-8位优先编码器:以下波形由上至下依次是:D_in, EI_in, Q_result, GS_result, EO_result;74X138-3 线-8线译码器:以下波形由上至下依次是:A_in, EI_in, Y_result;74HC4511-七段显示译码器:以下波形由上至下依次是:D_in, LE_in, LT_in, A, B, C, D, E, F, G;74HC151-八选一数据选择器:以下波形由上至下依次是:S_in, D_in, E_in, Y0_result, Y1_result;74HC85-4位数值比较器:以下波形由上至下依次是:A_in, B_in, I0_in, I1_in, I2_in, Fab0_result, Fab1_result, Fab2_result;74HC283-4位二进制全加器:以下波形由上至下依次是:A_in, B_in, S_out, Co_out;74HC194-4位双向移位寄存器:以下波形由上至下依次是:D_in, S0_in, S1_in,Dsr_in, Dsl_in, CP_in, CR_in, Q_out;74LVC161-4位二进制同步计数器:以下波形由上至下依次是:CEP_in, CET_in, PE_in, CP_in, CR_in, D_in, T_out, Q_out;7、仿真结果分析:仿真输出波形符合预期,与芯片的功能表描述的功能相符。

Verilog HDL《实验一Modelsim的使用》实验报告

Verilog HDL《实验一Modelsim的使用》实验报告

一、实验目的:1. 熟悉并掌握Modelsim仿真工具的使用方法;2. 初步了解Verilog HDL描述简单数字电路的方法;3. 学习用Verilog HDL编写测试模块。

二、实验设备:1. PC机一台2. Sword实验平台三、实验任务:1. 实现课本P30例2.3-8的2选1数据选择器,并编写测试文件进行功能仿真,观察输出波形。

2. 实现课本P32例2.4-1的D触发器,并编写测试模块,进行仿真。

3. 根据例2.3-8,试着设计4选1的数据选择器电路,并编写测试模块,进行仿真。

四、实验原理:2选1数据选择器:若该数据选择器的sel端为不定态x,则out由in1和in2按位运算的结果得出。

若in1=4’b0011,in2=4’b0101,则out=4’b0xx1。

当sel为低电平0时,out等于in1,反之为in2。

五、实验步骤:三个题的实验步骤一样,这里以第一题为例:1. 新建一个工程,取名为mux21。

2.在mux21工程中新建一个Verilog文件,取名为mux21。

3.打开mux21.v文件,编写程序源代码。

4.编译源程序。

5.在mux21工程中再新建一个测试文件,取名为mux21_tb。

6.打开mux21_tb.v文件,编写测试程序源代码。

7.编译测试程序。

8.进行仿真,观察波形六、实验结果:2选1数据选择器modelsim功能仿真图:当sel信号为低电平0时,数据选择器选择in1信号,所以out输出信号与in1信号一致,当sel信号为高电平1时,数据选择器选择in2信号,所以out输出信号与in2信号一致。

D触发器modelsim功能仿真图:D触发器:仿真刚开始时,clk时钟信号的上升沿未到来,out为不定态。

当时钟信号的上升沿到来时,out端输出in信号,因此在每一个上升沿到来时,out的值变为in并保持到下一个上升沿时刻到来后作出变化。

4选1数据选择器modelsim功能仿真图:当选择信号为00时,输出信号与in0一致;当选择信号为01时,输出信号与in1一致;当选择信号为10时,输出信号与in2一致;当选择信号为11时,输出信号与in3一致。

modelsim仿真测试实验三

modelsim仿真测试实验三

实验3.1. model‎s im仿真‎测试一、实验目的1、分析分频器‎的V HDL‎代码,了解信号和‎变量的差别‎。

2、学习mod‎elsim‎软件环境下‎,采用测试向‎量进行测试‎的方法。

包括:激励文件的‎建立和测试‎实现。

二、实验步骤1.1. model‎s im的批‎处理操作流‎程建立一个工‎程F ile‎->New Proje‎c t Wizar‎d,信号描述变量描述:方法1:方法2:存为:div_s‎i g nal‎_do.do在编译后,获得了逻辑‎网表,但未开始仿‎真。

可以直接运‎行DO文件‎。

点击Nex‎t,我们将其工‎程存储在D‎:\Temp\ex1下(注意:存储路径中‎一定不能有‎空格或中文‎,否则找不到‎相关文件),工程命名为‎e x1,如下所示1.2. 使用测试向‎量test‎b ench‎新建项目,添加新文件‎:打开菜单s‎imula‎t e\start‎simul‎a tion‎:实验3.2. 基于SOP‎C的跑马灯‎一、实验目的1、熟悉用Qu‎a rtus‎ II 进行嵌入式‎最小系统开‎发的基本流‎程。

2.熟悉用SO‎PC Build‎e r 进行Nio‎s II CPU 开发的基本‎流程。

3.熟悉用Ni‎o s II IDE 进行汇编代‎码的编写、下载的基本‎过程,通过Nio‎s II IDE集成‎开发平台调‎试软件。

二、实验原理SOPC(syste‎m on a progr‎a mmab‎le chip ),就是把一个‎系统集成在‎单片可编程‎芯片中。

而一个基于‎N ios II软核处‎理器的嵌入‎式最小系统‎,至少要包含‎一个NIO‎S II软核处‎理器、一个随机存‎储器(RAM)、Flash‎ROM (存储代码、数据等)和一个外部‎设备。

为了方便初‎学可以进一‎步简化系统‎,采用RAM‎的一段存储‎区来代替R‎O M,并只管理一‎个芯片外部‎的设备(LED灯)。

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

计数器的Modelsim仿真
一.实验目的和要求:
1. 熟悉Quartus和Modelsim软件的基本使用方法和步骤,熟悉基本的Verilog语法,学会用Verilog语言编写简单的程序。

2.学会使用Quartus编写计数器模块并用Modelsim进行仿真。

3.熟练掌握Quartus和Modelsim软件工程建立、添加文件、编译运行和仿真的方法,学会写程序文件和测试文件。

4.试验设备及要求:@Quartus 13 和Modelsim。

@运行Modelsim软件建立工程并添加测试.v 文件,进行仿真,查看波形图。

二.仿真方案:
用Quartus编写出计数器模块,已由上节课完成这个任务。

编写好计数器模块后,再进行Modelsim进行仿真实验。

三.仿真过程:
1.根据自己写的计数器模块编写测试程序。

这里我是用Quartus编写的,所以在编写的时候遇到一些问题。

编写如下图:
2.编写完测试模块并编译完成后,打开Modelsim。

选择菜单栏的【File】→【New】→【Project】
命令,在弹出窗口中选择【Add Exiting File】,把事先写好的测试文件和程序文件tb_cnt84和count84加入。

3、编译运行:在空白处右键,在弹出窗口中选择【Compile】→【Compile All】,检查完错误后,进行更改,直至没有错误出现。

最后进行【Simulate】,选择自己编写的tb_cnt84,然后右击选择加波形,add wave。

4、计数器仿真结束:
四.仿真过程中的错误排查与解决方案:
1、在编写测试模块时我是用Quartus进行编写的,所以总是有一个问题,也就是总是有一个错误解决不了,在请教了同学之后,知道这可能是没问题的,所以还要导入Modelsim之后再进行修改,我导入Modelsim之后,发现确实没有了错误。

2、测试模块的变量问题,测试模块的变量决定了测试模块能否编写成功的关键,所以在编写变量时要格外注意,第一次我并没有把所有的变量编写进去,所以总是漏洞百出,最后,终于成功地完成了测试模块的编写。

五.仿真结果分析:
1:测试模块程序:
`timescale 1ns/1ns
module tb_cnt84( );
wire [7:0] qout;
reg clk;
reg reset;
reg enable;
wire cout;
initial begin
reset = 1'b0;
clk = 1'b0;
# 30 reset = 1'b1;
enable=1'b1;
end
always #50 clk = ~clk;
count84 u1(
.clk(clk),
.reset(reset),
.enable(enable),
.qout(qout),
.cout(cout)
);
Endmodule
2、计数器模块程序:
module count84(input clk, reset, enable,
output reg[7:0] qout,
output cout ); //定义输入输出变量,采用级联的形式,十位记到8,个位到4 always@(posedge clk or negedge reset)
begin
if(!reset)
qout <= 8'b00000000;
else if( enable== 1'b0)
qout <= qout;
else if( (qout[7:4] == 4'b1000)&&(qout[3:0] == 4'b0100) ) //十位是8并且个位为4
qout <= 8'b00000000;
else if(qout[3:0] == 4'b1001) //如果为9
begin
qout[3:0] <= 4'b0000;
qout[7:4] <= qout[7:4] + 1'b1; //加一运算
end
else
begin
qout[7:4] <= qout[7:4];
qout[3:0] <= qout[3:0] + 1'b1; //加一运算
end
end
assign cout=((qout[7:4] == 4'b1000)&&(qout[3:0] == 4'b0100))?1'b1:1'b0; //输出进位endmodule
3、结果分析:
在看到并行之后,我想这个结果应该是正确的。

因为在计时脉冲经过84次之后,进位端就会进行一次进位,然后再次进行计数,再次进行进位。

相关文档
最新文档