八选一数据选择器和四位数据比较器verilog实验报告)
verilog实验报告
verilog实验报告Verilog实验报告引言:Verilog是一种硬件描述语言(HDL),用于设计和模拟数字电路。
它是一种高级语言,能够描述电路的行为和结构,方便工程师进行数字电路设计和验证。
本实验报告将介绍我在学习Verilog过程中进行的实验内容和所获得的结果。
实验一:基本门电路设计在这个实验中,我使用Verilog设计了基本的逻辑门电路,包括与门、或门和非门。
通过使用Verilog的模块化设计,我能够轻松地创建和组合这些门电路,以实现更复杂的功能。
我首先创建了一个与门电路的模块,定义了输入和输出端口,并使用逻辑运算符和条件语句实现了与门的功能。
然后,我创建了一个测试模块,用于验证与门的正确性。
通过输入不同的组合,我能够验证与门的输出是否符合预期。
接下来,我按照同样的方法设计了或门和非门电路,并进行了相应的测试。
通过这个实验,我不仅学会了使用Verilog进行基本门电路的设计,还加深了对逻辑电路的理解。
实验二:时序电路设计在这个实验中,我学习了如何使用Verilog设计时序电路,例如寄存器和计数器。
时序电路是一种具有状态和时钟输入的电路,能够根据时钟信号的变化来改变其输出。
我首先设计了一个简单的寄存器模块,使用触发器和组合逻辑电路实现了数据的存储和传输功能。
然后,我创建了一个测试模块,用于验证寄存器的正确性。
通过输入不同的数据和时钟信号,我能够观察到寄存器的输出是否正确。
接下来,我设计了一个计数器模块,使用寄存器和加法电路实现了计数功能。
我还添加了一个复位输入,用于将计数器的值重置为初始状态。
通过测试模块,我能够验证计数器在不同的时钟周期内是否正确地进行计数。
通过这个实验,我不仅学会了使用Verilog设计时序电路,还加深了对触发器、寄存器和计数器的理解。
实验三:组合电路设计在这个实验中,我学习了如何使用Verilog设计组合电路,例如多路选择器和加法器。
组合电路是一种没有状态和时钟输入的电路,其输出只取决于当前的输入。
西安邮电学院数据选择器实验报告
Verilog实验报告微电子0902班姓名___黄覃_______学号__04094041(04)__一、实验课题1、8选1选择器2、四位比较器二、Verilog程序(主程序+激励)1、8选1选择器module select81(D_In,Cs,OP,D_Out);input [0:7] D_In ;input Cs ;input [0:2] OP ;output D_Out ;reg D_Out ;always @(D_In or OP or Cs)beginif(Cs)begincase (OP)3'b 000: D_Out = D_In[0]; 3'b 001: D_Out = D_In[1]; 3'b 010: D_Out = D_In[2]; 3'b 011: D_Out = D_In[3]; 3'b 100: D_Out = D_In[4]; 3'b 101: D_Out = D_In[5]; 3'b 110: D_Out = D_In[6]; 3'b 111: D_Out = D_In[7]; default D_Out = 1'b 0;endcaseendendendmodule激励:module select81_test;reg [0:7]D_In;tri D_Out;reg Cs;reg [0:2]OP;select81 UUT ( .D_In(D_In), .D_Out(D_Out), .Cs(Cs), .OP(OP)); initialbeginreg [3:0] pal;D_In = 8'b 11001001;for(pal=0; pal<16; pal = pal +1)begin#10;{Cs,OP } = pal;endendendmodule2、四位比较器module compare4(a_gt_b, a_eq_b, a_it_b, in1, in2); input [3:0] in1, in2;output a_gt_b, a_eq_b, a_it_b;reg a_gt_b, a_eq_b, a_it_b;always @(in1 or in2)beginif(in1==in2) a_eq_b=1;else a_eq_b=0;if(in1>in2) a_gt_b=1;else a_gt_b=0;if(in1<in2) a_it_b=1;else a_it_b=0;endendmodule激励:module compare4_test;reg [3:0] a, b;wire a_gt_b, a_eq_b, a_it_b;compare4mycom(.a_gt_b(a_gt_b), .a_eq_b(a_eq_b), .a_it_b(a_it_b), .in1(a), .in2(b));initialbegin#5 a=4'b0100;b=4'b1011;#15 a=4'b0011;b=4'b0101;#20 a=4'b1010;b=4'b0011;#30 a=4'b0101;b=4'b0101;endendmodule三、实验波形图截图1、8选1选择器2、四位比较器四、波形分析及实验心得1、波形分析①4位比较器由波形图可知,当A=0000,B=0000时,故A_DENGYU_B=1,其余输出为0;当A=1010,B=1000时,A_DAYU_B=1,其余输出为0;;当A=0001,B=0111时,A_XIAOYU_B=1,其余输出为0。
fpga8选1数据选择器
精心整理2019年9月FPGA 实验报告姓名 朱聪聪 学号 39 姓名 武帅 学号 课题名称 8选1数据选择器设计实验目的1、理解数据选择器功能。
2、掌握VHDL 并行语句中条件信号赋值的格式和用法。
设计要求设计一个8选1数据选择器使其满足如下真值表:8选1数据选择器真值表地址码(选择信号)输出Q A0 A1 A20 0 0D0 0 0 1D1 0 1 0D2 0 1 1D3 1 0 0D4 1 0 1D5 1 1 0D6 1 1 1D7 表一1.利用条件信号赋值语句实现8选1数据选择器器功能。
2.完成设计的仿真,并记录、分析仿真波形。
设计思路 条件信号赋值语句也是一种并行信号赋值语句。
条件信号赋值语句可以根据不同的条件将不同的表达式赋值给目标信号,格式如下:信号<=表达式1WHEN 赋值条件1ELSE表达式2WHEN 赋值条件2ELSE ……表达式n ;精心整理2019年9月设计原理图及源程序 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MUX8 ISPORT(D:IN STD_LOGIC_VECTOR(7 DOWNTO 0);A:IN STD_LOGIC_VECTOR(2 DOWNTO 0);Q:OUT STD_LOGIC);END ENTITY MUX8;ARCHITECTURE one OF MUX8 IS BEGIN Q<=D(0) WHEN A="000" ELSE D(1) WHEN A="001" ELSE D(2) WHEN A="010" ELSED(3) WHEN A="011" ELSED(4) WHEN A="100" ELSED(5) WHEN A="101" ELSED(6) WHEN A="110" ELSED(7) WHEN A="111" ELSE'Z';END one;.. 仿真波形图实验总结及个人心得体会通过本次实验,复习了之前学习的条件信号赋值语句。
数据选择器实验报告
数据选择器实验报告在现代生活中,数据处理已经成为不可避免的任务。
而数据选择器就是处理之中的重要组成部分,它可以帮助我们从大量的数据中,快速准确地筛选出我们需要的信息。
因此,本文将介绍我们在实验室中进行的一次数据选择器实验。
一、实验目的本实验的目的是验证数据选择器的基本功能和性能。
在实验中,我们将通过模拟多种不同的数据输入,以检测不同类型的数据选择器在各种情况下的响应能力,并比较它们的工作效率和准确性。
二、实验步骤1. 实验设备准备本次实验主要使用以下两种设备:数字信号发生器和示波器。
数字信号发生器可以生成不同频率和振幅的电信号,模拟各种不同类型的数据输入。
示波器可以帮助我们观察数据选择器的输出情况。
2. 实验过程首先,我们将数字信号发生器连接到数据选择器的输入端。
然后,我们将以不同的频率和振幅向数据选择器输入各种不同类型的信号。
在读取数据时,我们将使用示波器来分析每个数据选择器的输出情况。
在本次实验中,我们测试了以下几种数据选择器:二选一数据选择器、四选一数据选择器、八选一数据选择器和十六选一数据选择器。
三、实验结果经过实验,我们得出了以下结论:1. 二选一数据选择器可以在两个输入数据中间快速切换,准确选择出需要的信息。
2. 四选一数据选择器的准确性和速度相对较高,在多种输入数据中都可以迅速稳定的输出正确的数据。
3. 八选一数据选择器的性能相对更优秀,可以更加快速地响应各种复杂的数据情况。
4. 十六选一数据选择器可以在最大的数据范围内进行精确的筛选,可以作为对于数据量大小和场景复杂性都有高要求的大规模数据处理中使用。
我们还注意到,在实验中,所有数据选择器的响应时间非常快,几乎是瞬间的。
这使得它们可以处理高速输入数据,满足各种应用需求。
四、结论在本次实验中,我们测试了多种不同类型的数据选择器。
通过实验,我们得出了结论:不同类型的数据选择器在处理不同类型和规模的数据方面表现得分别优异,可以根据实际需求自行选择使用。
数据选择器实验报告
一、实验目的1. 理解数据选择器的基本原理和功能。
2. 掌握数据选择器的使用方法及其在数字电路中的应用。
3. 通过实验加深对组合逻辑电路的理解。
二、实验原理数据选择器是一种数字电路,它可以从多个输入端中选择一个数据输出。
其工作原理如下:根据地址码的不同,数据选择器从N路输入中选择一路输出。
常见的数据选择器有4选1、8选1等类型。
本实验使用的是双4选1数据选择器74LS153,它具有4个数据输入端(D0、D1、D2、D3)、3个地址输入端(A0、A1、A2)和1个使能端(G)。
当G=0时,数据选择器处于正常工作状态;当G=1时,所有数据输入端均被封锁,输出端输出高阻态。
三、实验器材1. 双4选1数据选择器74LS1532. 逻辑门电路3. 电源4. 指示灯5. 连接线6. 逻辑分析仪四、实验步骤1. 连接电路根据实验要求,连接双4选1数据选择器74LS153、逻辑门电路、电源、指示灯和连线。
2. 设计电路(1)根据实验要求,设计一个简单的数据选择器电路,实现以下功能:当A0=0、A1=0时,输出D0;当A0=0、A1=1时,输出D1;当A0=1、A1=0时,输出D2;当A0=1、A1=1时,输出D3。
(2)根据设计要求,将74LS153的数据输入端与逻辑门电路连接,实现数据选择功能。
3. 测试电路(1)使用逻辑分析仪或示波器观察输出端波形,验证电路是否满足设计要求。
(2)根据实验要求,测试不同地址码下的输出结果,确保电路正常工作。
4. 分析实验结果根据实验结果,分析数据选择器的工作原理和特点,总结实验心得。
五、实验结果与分析1. 实验结果通过实验,验证了双4选1数据选择器74LS153在正常工作状态下能够实现数据选择功能。
在不同地址码下,输出端输出对应的数据输入端数据。
2. 实验分析(1)数据选择器在数字电路中具有广泛的应用,如数据分配、数据选择、数据比较等。
(2)在设计数据选择器电路时,需要注意以下几点:a. 根据实际需求选择合适的数据选择器类型和规模;b. 合理安排数据输入端、地址输入端和使能端;c. 仔细检查电路连接,确保电路正常工作。
verilog设计
Verilog 程序设计报告一、课题概述:任务:本实验主要完成8位比较器、分频器、阻塞赋值和非阻塞赋值的区别、8路的数据选择器、有限状态机的设计。
目的:通过实验掌握基本组合逻辑电路、时序逻辑电路的实现流程;条件语句及case语句的用法;在实验中认识阻塞赋值和非阻塞赋值的区别;能够设计出简单的有限状态机。
要求:熟练掌握verilog的基本语法知识和一些基本语句的用法。
二、设计思路及采取方案思路:(1)8位比较器可以用数据流描述方法(assign赋值语句)或行为描述方法(always语句)或结构描述方法(元件例化)实现。
(2)分频器可以采用if…else语句或case语句实现。
(3)阻塞赋值和非阻塞赋值的区别可以通过观察波形图及分析综合出的电路图来得到。
(4)8位数据选择器可以采用assign赋值语句及always语句实现。
(5)有限状态机可以采用case语句实现。
方案:(1)8位的比较器采用assign赋值语句实现。
(2)用if…else条件语句实现分频器的设计。
(3)通过观察波形图,得出利用阻塞赋值和非阻塞赋值设计电路的特点和区别。
(4)利用always语句实现8位数据选择器。
(5)利用case语句完成有限状态机的设计。
三、实验结果结果:我基本完成以上的5个任务,并且通过这些任务的完成,巩固了已经学过的知识,提高了自己的动手操作能力,坚定了继续学习的信心。
四、实验体会体会:第一次接触学习硬件编程语言,感受到verilog与软件编程语言有着许多显著的差别,最重要的是用verilog可以编出并行执行的程序,通过不断的学习和实践,习惯了用硬件结构思路编程,由于一些细节把握不到位,在设计中出现了许多错误;像进程赋值语句声明寄存器变量时格式出错、begin-end声明语句没有注意相互匹配、在声明语句的末尾忘了写上分号等等。
编译不成功时,我会不厌其烦的去查找错误,直至编译成功、满足题目的要求。
通过实验不仅巩固了已经学过的知识而且加强了自己的动手操作能力,为以后的考研及工作打下了基础。
实验三 8选1数据选择器实验报告
实验三、八选一数据选择器一、实验目的:1.熟悉Quartus II6.0软件的使用和FPGA设计流程2.用VHDL语言进行八选一数据选择器的设计二、实验步骤:一.建立文件夹:在D盘“xingming”的文件夹下建立一个名为“choice8”的文件夹。
二.建立新工程1.双击桌面上Quartus II6.0 的图标,启动该软件。
2.通过File => New Project Wizard… 菜单命令启动新项目向导。
在随后弹出的对话框上点击Next按钮,在 What is the working directory for this project 栏目中设定新项目所使用的路径:D:\xingming\choice8;在What is the name of this project 栏目中输入新项目的名字:choice8,点击 Next 按钮。
在下一个出现的对话框中继续点击Next,跳过这步。
3.为本项目指定目标器件:选择器件系列为ACEX1K ,选择具体器件为EP1K30TC144-3 1728 24576 ,再点击Next。
在弹出的下一对话框中继续点击Next ,最后确认相关设置,点击Finish按钮,完成新项目创建。
三.设计输入1.建立一个VHDL文件。
通过 File => New 菜单命令,在随后弹出的对话框中选择 VHDL File选项,点击 OK 按钮。
通过 File => Save As 命令,将其保存,并加入到项目中。
2.在VHDL界面输入8选1数据选择器程序,然后通过File => Save As 命令保存。
四.综合适配1.选择Processing =>Start Compilation命令,检查发现无程序语法错误。
2.执行Tools =>Netlist Viewer =>RTL Viewe, 生成RTL图。
五.模拟仿真1.在 File 菜单下,点击 New 命令。
黄红涛-vhdl实验报告-实验1 8选1数据选择器
学生实验报告实验课名称:VHDL硬件描述语言实验项目名称:8选1数据选择器专业名称:电子科学与技术班级:32050801学号:3205080134学生姓名:黄红涛教师姓名:程鸿亮_2010__年__11__月__6__日组别_____________________ 同组同学_ 刘增辉实验日期:2011 年11 月6 日实验室名称______ 成绩_____一、实验名称:8选1数据选择器二、实验目的与要求:1.实验目的:设计一个8选1的数据选择器,初步掌握QuartusII软件的使用方法以及硬件编程下载的基本技能。
2.实验要求:通过VHDL编程,实现一个数据选择器,要求有8位数据输入端,1位数据输出端,通过3位地址输入信号寻址,并具有输出使能功能。
首先在QuartusII上进行功能和时序仿真,之后通过器件及其端口配置下载程序到SOPC开发平台中。
如图所示: d0~d7为数据输入端; g为使能端,高电平有效; a[2..0]为地址输端; y 为输出端。
要求非使能或是无效地址状态时,y输出0。
首先在QuartusII上进行功能和时序仿真,之后通过器件及其端口配置下载程序到SOPC开发平台中。
在硬件实现中,要求:1.用实验平台的拨动开关实现8位输入信号(d0~d7):要求使用最右面8个开关。
2. 用实验平台的按键实现地址信号和使能信号:注意采用模式0的输入方式,并使用最左边的键6~键8三个按键实现地址输入,以及键3实现使能信号。
3. 输出采用LED发光阵列的LED12。
三、实验内容:1. 打开QuartusII软件,建立一个新的工程:1) 单击菜单File\New Project Wizard…2) 输入工程的路径、工程名以及顶层实体名。
3) 单击 Next> 按钮,由于我们建立的是一个空的项目,所以没有包含已有文件,单击 Next> 继续4) 设置我们的器件信息:如,将package选择为FBGA,将family置为cydoneii,pincount 设置为4845) 单击 Next> ,指定第三方工具,但是这里我们不指定第三方 EDA 工具,单击 Next> 后结束工程建立。
数电仿真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语言编写八选一数据选择器
八选一选择器一、实验目的编写一个八选一的选择器,并在verilog软件上进行仿真。
二、代码1、源代码(1)用数据流描述的八选一多路选择器模块,采用了逻辑方程module mux8_to_1(out,i0,i1,i2,i3,i4,i5,i6,i7,s2,s1,s0); output out;input i0,i1,i2,i3,i4,i5,i6,i7;input s2,s1,s0;assign out=s2?(s1?(s0?i7:i6):(s0?i5:i4)):(s1?(s0?i3:i2):(s0?i1:i0));endmodule(2)用数据流描述的八选一多路选择器模块,采用了条件操作语句module mux8_to_1(out,i0,i1,i2,i3,i4,i5,i6,i7,s2,s1,s0); output out;input i0,i1,i2,i3,i4,i5,i6,i7;input s2,s1,s0;assign out=(~s2&~s1&~s0&i0)|(~s2&~s1&s0&i1)|(~s2&s1&~s0&i2)|(~s2&s1&s0&i3)|(s2&~s1&~s0&i4)|(s2&~s1&s0&i5)|(s2&s1&~s0&i6)|(s2&s1&s0&i7);endmodule(3)用行为及描述的八选一多路选择器模块可描述为:module mux8_to_1(out,i0,i1,i2,i3,i4,i5,i6,i7,s2,s1,s0); output out;input i0,i1,i2,i3,i4,i5,i6,i7;input s2,s1,s0;reg out;always @(s2 or s1 or s0 or i0 or i1 or i2 or i3 or i4 or i5 or i6or i7)begincase({s2,s1,s0})3'b000:out=i0;3'b001:out=i1;3'b010:out=i2;3'b011:out=i3;3'b100:out=i4;3'b101:out=i5;3'b110:out=i6;3'b111:out=i7;defult:$dispiay(Invalid control signals);endcaseendendmodule或者是:module mux8_to_1(out,i0,i1,i2,i3,i4,i5,i6,i7,s2,s1,s0);output out;input i0,i1,i2,i3,i4,i5,i6,i7;input s2,s1,s0;reg out;always @(s2 or s1 or s0 or i0 or i1 or i2 or i3 or i4 or i5 or i6or i7)begincase({s2,s1,s0})3'd1:out=i0;3'd2:out=i1;3'd3:out=i2;3'd4:out=i3;3'd5:out=i4;3'd6:out=i5;3'd7:out=i6;3'd8:out=i7;defult:$dispiay(Invalid control signals);endcaseendendmodule2、激励模块`timescale 1ns/100psmodule mux8_to_1_tb;reg I0,I1,I2,I3,I4,I5,I6,I7;reg S2,S1,S0;wire OUT;mux8_to_1 ul(.out(OUT),.i0(I0),.i1(I1),.i2(I2),.i3(I3),.i4(I4),.i5(I5),.i6(I6),.i7(I7),.s2(S2),.s1(S1),.s0(S0));initialbeginI0=1;I1=0;I2=0;I3=1;I4=1;I5=1;I6=0;I7=0;S2=0;S1=0;S0=0;#10 S2=0;S1=0;S0=1;#10 S2=0;S1=1;S0=0;#10 S2=0;S1=1;S0=1;#10 S2=1;S1=0;S0=0;#10 S2=1;S1=0;S0=1;#10 S2=1;S1=1;S0=0;#10 S2=1;S1=1;S0=1;endendmodule三、仿真波形四、波形说明波形图中,从上至下依次为:输入数据I0,I1,I2,I3,I4,I5,I6,I7,选择端口S2,S1,S0,输出COUT。
数据选择器_实验报告
一、实验目的1. 理解数据选择器的工作原理和逻辑功能。
2. 掌握数据选择器的引脚及其作用。
3. 学会使用数据选择器进行组合逻辑电路的设计。
4. 通过实验验证数据选择器的应用。
二、实验原理数据选择器,又称多路选择器,是一种能够从多个数据输入中选取一路输出到输出端的数字电路。
其基本原理是利用控制信号来选择所需的输入数据。
常见的数据选择器有二选一、四选一、八选一等。
三、实验器材1. 74LS153双四选一数据选择器2. 逻辑分析仪3. 电源4. 连接线5. 逻辑门电路四、实验步骤1. 搭建实验电路:按照实验原理图连接好电路,包括数据选择器、输入端、输出端和控制端。
2. 输入数据测试:向数据选择器的输入端输入不同的数据,观察输出端的变化。
3. 控制信号测试:改变控制信号的状态,观察输出端的变化,验证数据选择器的逻辑功能。
4. 组合逻辑电路设计:设计一个组合逻辑电路,使用数据选择器实现所需的逻辑功能。
5. 电路仿真:使用逻辑分析仪对电路进行仿真,验证电路的正确性。
五、实验结果与分析1. 输入数据测试:当输入端的数据分别为0和1时,输出端能够正确地输出对应的值。
2. 控制信号测试:当控制信号改变时,输出端能够正确地选择对应的输入数据。
3. 组合逻辑电路设计:设计了一个组合逻辑电路,使用数据选择器实现了所需的逻辑功能。
4. 电路仿真:仿真结果显示,电路能够正确地实现预期的逻辑功能。
六、实验心得1. 通过本次实验,我对数据选择器的工作原理和逻辑功能有了更深入的了解。
2. 实验过程中,我学会了如何使用数据选择器进行组合逻辑电路的设计。
3. 实验让我认识到,在实际应用中,数据选择器可以简化电路设计,提高电路的可靠性。
4. 通过本次实验,我提高了自己的动手能力和逻辑思维能力。
七、总结本次实验成功地实现了数据选择器的测试和应用,验证了数据选择器的逻辑功能。
通过实验,我对数据选择器有了更深入的了解,并掌握了使用数据选择器进行组合逻辑电路设计的技巧。
八选一数据选择器
给出实现该电路制造的工艺流程
首先,n阱CMOS工艺流程:选择衬底---n阱光刻---有源区光刻---多晶硅光刻---n+区光刻----p+区光刻---光刻接触孔---金属化内连线---光刻钝化孔,便得到了反相器;
其次,将nmos与pmos合理布局;
最后,将其用金属按照电路要求连接起来,做钝化和封装处理;
总结
集成电路的设计流程主要有:电路图的确定、电路图模拟及仿真、电路板图设计、版图与原理图对比、后仿真;电路模拟及仿真时,需要注意电路的连接是否符合原理图要求,仿真时需要注意所加的信号是否能够达到电路的实际要求,版图设计时,需要注意版图的布局,工艺要求及其间距的最小要求,而芯片尺寸尽可能小,版图与原理图对比和后仿真时要求电路图和版图中管子的尺寸基本一致,否则仿真结果无意义。
本次设计中,共使用了24个晶体管,其中一部分用于反相器,一部分用于逻辑门,课设中,应注意一些问题:
在S-edit中绘制原理图:更改每个MOቤተ መጻሕፍቲ ባይዱ管的属性为NENH或PENH,以及管子的尺寸;
在T-Spice中进行原理图的仿真:在提取库文件时确保是正确的路径,并添加“tt”,仿真前输入正确的命令语句;
在L-Edit中绘制版图,注意各种规则,确保正确的绘制版图;
数据选择器是指经过选择,把多个通道的数据传送到唯一的公共数据通道上去,实现数据选择功能的逻辑电路称为数据选择器。它的作用相当于多个输入的单刀多掷开关,其示意图如下所示
数据选择器除了可以实现一些组合逻辑功能以外,还可以做分时多路传输电路,函数发生器及数码比较器等,常见的数据比较器有2选1,4选1,8选1,16选1电路。
画版图和电路设计图时应严格按照要求电路来进行设计,应实现电路实际功能。
八选一数据选择器和四位数据比较器verilog实验报告
八选一数据选择器和四位数据比较器verilog实验报告实验报告:八选一数据选择器和四位数据比较器一、引言数据选择器和数据比较器是数字电路中常用的基本电路模块,它们在许多数字系统中起着重要的作用。
本实验通过使用Verilog语言,设计并实现了八选一数据选择器和四位数据比较器电路。
本实验报告将分别介绍这两个电路的设计原理、实验过程以及实验结果。
二、八选一数据选择器的设计1.设计原理八选一数据选择器是一种多路选择器,根据控制信号来选择其中一个输入信号输出。
其输入端包括8个数据输入信号(D0-D7)、3个控制信号(S2、S1、S0)以及一个使能信号(EN),输出端为一个数据输出信号(Y)。
当使能信号为高电平时,根据控制信号的值,将对应的输入信号输出。
2.设计过程本实验中,我们使用Verilog语言进行八选一数据选择器的设计。
首先,我们声明输入输出端口:module mux8to1(input [7:0] D, input [2:0] S, input EN,output reg Y);然后,我们使用case语句来实现根据控制信号选择输出信号的功能:beginif (EN)case (S)3'b000:Y=D[0];3'b001:Y=D[1];3'b010:Y=D[2];3'b011:Y=D[3];3'b100:Y=D[4];3'b101:Y=D[5];3'b110:Y=D[6];3'b111:Y=D[7];default: Y = 1'bx;endcaseelseY = 1'bx;end最后,我们将设计的模块实例化并进行仿真和综合验证。
三、四位数据比较器的设计1.设计原理四位数据比较器用于比较两个四位二进制数的大小。
其输入端包括两个四位二进制数(A、B),输出端为一个比较结果信号(OUT)。
当输入A大于B时,OUT为1;当A等于B时,OUT为0;当A小于B时,OUT为-12.设计过程本实验中,我们同样使用Verilog语言进行四位数据比较器的设计。
实验三 8选1数据选择器实验报告
实验三、八选一数据选择器一、实验目的:1.熟悉Quartus II6.0软件的使用和FPGA设计流程2.用VHDL语言进行八选一数据选择器的设计二、实验步骤:一.建立文件夹:在D盘“xingming”的文件夹下建立一个名为“choice8”的文件夹。
二.建立新工程1.双击桌面上Quartus II6.0 的图标,启动该软件。
2.通过File => New Project Wizard… 菜单命令启动新项目向导。
在随后弹出的对话框上点击Next按钮,在 What is the working directory for this project 栏目中设定新项目所使用的路径:D:\xingming\choice8;在What is the name of this project 栏目中输入新项目的名字:choice8,点击 Next 按钮。
在下一个出现的对话框中继续点击Next,跳过这步。
3.为本项目指定目标器件:选择器件系列为ACEX1K ,选择具体器件为EP1K30TC144-3 1728 24576 ,再点击Next。
在弹出的下一对话框中继续点击Next ,最后确认相关设置,点击Finish按钮,完成新项目创建。
三.设计输入1.建立一个VHDL文件。
通过 File => New 菜单命令,在随后弹出的对话框中选择 VHDL File选项,点击 OK 按钮。
通过 File => Save As 命令,将其保存,并加入到项目中。
2.在VHDL界面输入8选1数据选择器程序,然后通过File => Save As 命令保存。
四.综合适配1.选择Processing =>Start Compilation命令,检查发现无程序语法错误。
2.执行Tools =>Netlist Viewer =>RTL Viewe, 生成RTL图。
五.模拟仿真1.在 File 菜单下,点击 New 命令。
实验七 4选1和8选1数据选择器的设计
实验七 4选1和8选1数据选择器的设计一、实验目的3. 掌握电路设计和仿真测试的方法。
二、实验原理数据选择器是一种数字电路,用于从多个输入信号中选择一个输出信号。
数据选择器根据控制信号的不同,可以实现4选1或8选1的选择功能。
4选1数据选择器的原理如下:输入端有4个数据输入,一个选择输入S(S=0时选择输入1,S=1时选择输入2,S=2时选择输入3,S=3时选择输入4),根据S的不同,输出端输出选择的输入信号。
8选1数据选择器的原理与4选1相似,只是输入端有8个数据输入,选择输入S的取值范围为0~7。
三、实验器材1. 计算机和仿真软件Multisim;2. 数字电路实验箱、数字电路元器件。
四、实验步骤2. 在Multisim中建立相应的电路,并进行仿真测试。
3. 分析仿真结果,验证电路是否符合设计要求,如果出现问题,及时查找原因并修改电路图。
4. 根据实验结果,总结设计和仿真方法,掌握数据选择器电路的设计和仿真测试技巧。
五、实验注意事项1. 在进行电路设计和仿真测试时,应仔细分析原理,并尽可能避免出现矛盾和异常。
2. 电路元器件的选用要合适,尤其是输入和输出端的电阻值和工作电压要一致。
3. 在进行仿真测试时,要保证仿真参数的准确性,特别是信号幅度和频率要符合预期。
4. 电路测试完成后,应及时记录实验结果,包括电路图、仿真参数、测试数据等信息。
六、实验结果分析经过设计和仿真测试,我们成功实现了4选1和8选1数据选择器电路的设计,并获得了合适的仿真结果。
在实验过程中,我们掌握了数据选择器电路的设计和仿真测试技巧,积累了一定的电路设计和测试经验。
综上所述,本次实验达到了预期目标,并为我们今后的电路设计和测试工作提供了一定的指导和参考。
八选一数据选择器和四位数据比较器verilog实验报告
八选一数据选择器和四位数据比较器v e r i l o g实验报告内部编号:(YUUT-TBBY-MMUT-URRUY-UOOY-DBUYI-0128)Verilog HDV数字设计与综合实验报告微电子0901班姓名:袁东明 _学号:_04094026一、实验课题:1.八选一数据选择器2.四位数据比较器二、八选一数据选择器Verilog程序:2.1主程序module option(a,b,c,d,e,f,g,h,s0,s1,s2,out);input [2:0] a,b,c,d,e,f,g,h;input s0,s1,s2;output [2:0] out;reg [2:0] out;always@(a or b or c or d or e or f or g or h or s0 or s1 or s2) begincase({s0,s1,s2})3'd0 : out=a;3'd1 : out=b;3'd2 : out=c;3'd3 : out=d;3'd4 : out=e;3'd5 : out=f;3'd6 : out=g;3'd7 : out=h;endcaseendendmodule2.2激励程序module sti;reg [2:0] A,B,C,D,E,F,G,H;reg S0,S1,S2;wire [2:0] OUT;option dtg(A,B,C,D,E,F,G,H,S0,S1,S2,OUT);initialbeginA=3'd0;B=3'd1;C=3'd2;D=3'd3;E=3'd4;F=3'd5;G=3'd6;H=3'd7;S0=0;S1=0;S2=0;#100A=3'd0;B=3'd1;C=3'd2;D=3'd3;E=3'd4;F=3'd5;G=3'd6;H=3'd7;S0=0;S1=0;S2=1; #100A=3'd0;B=3'd1;C=3'd2;D=3'd3;E=3'd4;F=3'd5;G=3'd6;H=3'd7;S0=0;S1=1;S2=0; #100A=3'd0;B=3'd1;C=3'd2;D=3'd3;E=3'd4;F=3'd5;G=3'd6;H=3'd7;S0=0;S1=1;S2=1; #100A=3'd0;B=3'd1;C=3'd2;D=3'd3;E=3'd4;F=3'd5;G=3'd6;H=3'd7;S0=1;S1=0;S2=0; #100A=3'd0;B=3'd1;C=3'd2;D=3'd3;E=3'd4;F=3'd5;G=3'd6;H=3'd7;S0=1;S1=0;S2=1; #100A=3'd0;B=3'd1;C=3'd2;D=3'd3;E=3'd4;F=3'd5;G=3'd6;H=3'd7;S0=1;S1=1;S2=0; #100A=3'd0;B=3'd1;C=3'd2;D=3'd3;E=3'd4;F=3'd5;G=3'd6;H=3'd7;S0=1;S1=1;S2=1; endendmodule三、四位数据比较器3.1主程序module fourcompare(a,b,c);input[3:0] a,b;output [1:0] c;reg[1:0] c;always@(a or b)beginif(a>b)c=2'd2;else if(a<b)c=2'd1;elsec=2'd0;endendmodule3.2激励程序module sti;reg [3:0] A,B;wire [1:0]C;fourcompare fte(A,B,C); initialbeginA=2'd0;B=2'd1;#100 A=2'd2;B=2'd1;#100 A=2'd1;B=2'd1;endendmodule四、实验波形图截图:4.1八选一数据选择器4.2四位数据比较器四、波形分析及实验心得:4.1.波形分析1.八选一数据选择器输入数据为A=000,B=001,C=010,D=011,E=100,F=101,g=110,h=111;S0,S1,S2,为选择控制端,它们组成一个三位数,记为enable,控制数据的输出,其中S0为最高位,S1次之,S2为最低位。
verilog实现8路数据选择器
西北工业大学《串行数据检测器》实验报告学院:软件与微电子学院学号:2008303538 姓名:陈昊专业:微电子学实验时间:2010年11月实验地点:实验室及宿舍指导教师:曾惠敏西北工业大学2010 年11 月*/module mux_8(addr, in1, in2, in3, in4, in5,in6,in7,in8,mout,ncs); input [2:0] addr; //输入的地址端,3位选择开关input [3:0] in1,in2,in3,in4,in5,in6,in7,in8; //8路数据端输入input ncs; //使能信号output [3:0] mout; //一路输出reg [3:0] mout; //输出声明为寄存器类型always @(addr or in1 or in2 or in3 or in4 or in5 or in6 or in7 or in8 or ncs) //8路输入或者选择开关或者使能信号发生变化则条件触发beginif(!ncs) //低电平使能case(addr)3'b000: mout = in1; //选择开关的3位对应000时,输出等于in1输入;3'b001: mout = in2; //选择开关的3位对应001时,输出等于in1输入;3'b010: mout = in3; //选择开关的3位对应010时,输出等于in1输入;3'b011: mout = in4; //选择开关的3位对应011时,输出等于in1输入;3'b100: mout = in5; //选择开关的3位对应100时,输出等于in1输入;3'b101: mout = in6; //选择开关的3位对应101时,输出等于in1输入;3'b110: mout = in7; //选择开关的3位对应110时,输出等于in1输入;3'b111: mout = in8; //选择开关的3位对应111时,输出等于in1输入;endcaseelsemout = 0; //使能信号高电平时输出一直为0;endendmodule2.编写测试模块test_mux_8.v如下/*** @File test_mux_8.v* @Synopsis 这是8路数据选择器mux_8的测试模块* @Author 陈昊, @* @Version 1* @Date 2010-11-05*//* Copyright(0) 2010-* By 陈昊* All right reserved*/`timescale 1ns/1nsmodule test_mux_8;wire[3:0] mout; //声明输出为线网型,4位reg [3:0] in1,in2,in3,in4,in5,in6,in7,in8; //声明8路输入信号reg [2:0] addr; //3位的选择开关,寄存型类型reg ncs; //1位的寄存器型使能信号//-------------------------------------------------------------产生测试信号------------------------------------------------------ initialbeginncs=0; //在初始化模块里将使能信号置为0,让选择器正常工作in8={$random}%16; //使用系统任务$random产生一个0至15之间的数in1={$random}%16; //并赋予输入in2={$random}%16;in3={$random}%16;in4={$random}%16;in5={$random}%16;in6={$random}%16;in7={$random}%16;addr=3'b000; //让选择开关的3位初始对应为000.repeat(5) //重复下面的语句块5次,赋5次值 begin#10 in8={$random}%16;in1={$random}%16;in2={$random}%16;in3={$random}%16;in4={$random}%16;in5={$random}%16;in6={$random}%16;in7={$random}%16;addr=addr+1; //每执行一次后改变一次选择开关的值,加1end#10 $stop;end//-------------------------------------------------------------------------------------------------------------------------------2.选择Altera STRATIX器件库利用Synplify Pro综合产生的RTL级电路如下五、分析与讨论。
实验七 4选1和8选1数据选择器的设计
浙江大学城市学院实验报告纸一.实验目的(1)通过用VHDL语言设计4选1数据选择器和8选1数据选择器;(2)掌握4选1数据选择器的设计方案;(3)掌握软件工具的使用方法。
二.实验原理当S=0时工作,S=1时禁止工作。
A0和A1为4选1数据选择器的控制信号。
三.实验内容用VHDL言设计4选1数据选择器,进行编译、波形仿真及器件编程,并自行用VHDL语言设计8选1数据选择器。
四.源程序清单(1)4选1数据选择器library ieee;use ieee.std_logic_1164.all;entity gaoqianyi isport (d0,d1,d2,d3,a0,a1,s:in std_logic;y:out std_logic);end gaoqianyi;architecture zhang of gaoqianyi is signal a:std_logic_vector(1 downto 0); beginprocess (a0,a1)begina<=a1&a0;if (s='0') thencase a iswhen"00"=>y<=d0;when"01"=>y<=d1;when"10"=>y<=d2;when others=>y<=d3; end case;end if;end process;end zhang;(2)8选1数据选择器library ieee;use ieee.std_logic_1164.all;entity sxy isport(d0,d1,d2,d3,d4,d5,d6,d7,a0,a1,a2,s:in std_logic;y:out std_logic);end sxy;architecture zhang of sxy issignal sel:integer range 0 to 8;beginsel<=0 when a0='0' and a1='0' and a2='0' and s='0' else1 when a0='1' and a1='0' and a2='0' and s='0' else2 when a0='0' and a1='1' and a2='0' and s='0' else3 when a0='1' and a1='1' and a2='0' and s='0' else4 when a0='0' and a1='0' and a2='1' and s='0' else5 when a0='1' and a1='0' and a2='1' and s='0' else6 when a0='0' and a1='1' and a2='1' and s='0' else7 when a0='1' and a1='1' and a2='1' and s='0' else8;with sel selecty <= d0 when 0,d1 when 1,d2 when 2,d3 when 3,d4 when 4,d5 when 5,d6 when 6,d7 when 7,'0' when others;end zhang;五.实验总结这个实验通过用VHDL语言设计了4选1数据选择器和8选1数据选择器,在编译时遇到一些语法问题,在老师的指导下都轻松的编译成功。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Verilog HDV
数字设计与综合
实验报告
微电子0901班
姓名:袁东明 _
学号:_04094026
一、实验课题:
1.八选一数据选择器
2.四位数据比较器
二、八选一数据选择器Verilog程序:
2.1主程序
module option(a,b,c,d,e,f,g,h,s0,s1,s2,out);
input [2:0] a,b,c,d,e,f,g,h;
input s0,s1,s2;
output [2:0] out;
reg [2:0] out;
always@(a or b or c or d or e or f or g or h or s0 or s1 or s2) begin
case({s0,s1,s2})
3'd0 : out=a;
3'd1 : out=b;
3'd2 : out=c;
3'd3 : out=d;
3'd4 : out=e;
3'd5 : out=f;
3'd6 : out=g;
3'd7 : out=h;
endcase
end
endmodule
2.2激励程序
module sti;
reg [2:0] A,B,C,D,E,F,G,H;
reg S0,S1,S2;
wire [2:0] OUT;
option dtg(A,B,C,D,E,F,G,H,S0,S1,S2,OUT);
initial
begin
A=3'd0;B=3'd1;C=3'd2;D=3'd3;E=3'd4;F=3'd5;G=3'd6;H=3'd7;S0=0;S1=0;S2=0;
#100 A=3'd0;B=3'd1;C=3'd2;D=3'd3;E=3'd4;F=3'd5;G=3'd6;H=3'd7;S0=0;S1=0;S2=1; #100 A=3'd0;B=3'd1;C=3'd2;D=3'd3;E=3'd4;F=3'd5;G=3'd6;H=3'd7;S0=0;S1=1;S2=0; #100 A=3'd0;B=3'd1;C=3'd2;D=3'd3;E=3'd4;F=3'd5;G=3'd6;H=3'd7;S0=0;S1=1;S2=1; #100 A=3'd0;B=3'd1;C=3'd2;D=3'd3;E=3'd4;F=3'd5;G=3'd6;H=3'd7;S0=1;S1=0;S2=0; #100 A=3'd0;B=3'd1;C=3'd2;D=3'd3;E=3'd4;F=3'd5;G=3'd6;H=3'd7;S0=1;S1=0;S2=1;
#100 A=3'd0;B=3'd1;C=3'd2;D=3'd3;E=3'd4;F=3'd5;G=3'd6;H=3'd7;S0=1;S1=1;S2=0; #100 A=3'd0;B=3'd1;C=3'd2;D=3'd3;E=3'd4;F=3'd5;G=3'd6;H=3'd7;S0=1;S1=1;S2=1; end
endmodule
三、四位数据比较器
3.1主程序
module fourcompare(a,b,c);
input[3:0] a,b;
output [1:0] c;
reg[1:0] c;
always@(a or b)
begin
if(a>b)
c=2'd2;
else if(a<b)
c=2'd1;
else
c=2'd0;
end
endmodule
3.2激励程序
module sti;
reg [3:0] A,B;
wire [1:0]C;
fourcompare fte(A,B,C);
initial
begin
A=2'd0;B=2'd1;
#100 A=2'd2;B=2'd1;
#100 A=2'd1;B=2'd1;
end
endmodule
四、实验波形图截图:
4.1八选一数据选择器
4.2四位数据比较器
四、波形分析及实验心得:
4.1.波形分析
1.八选一数据选择器
输入数据为A=000,B=001,C=010,D=011,E=100,F=101,g=110,h=111;S0,S1,S2,为选择控制端,它们组成一个三位数,记为enable,控制数据的输出,其中S0为最高位,S1次之,S2为最低位。
当enable=000,输出A; enable= 001,输出B;enable= 010,输出C;enable= 011,输出D;enable= 100,输出E;enable= 101,输出F;enable= 110,输出G;enable= 111,输出H
观察波形当enable=000时,输出为000即A;当enable=001时,输出为001,即B;当enable=010时,输出为010即C;当enable=011时,输出为011即D;当enable=100时,输出为100即E;当enable=101时,输出为101,即F;当enable=110时,输出为110即G;当enable=111时,输出为111即G,其结果与理论结果相吻合故验证该设计是正确的。
2.四位数据选择器
该设计要求比较两个四位数的大小A、B,输出结果为A>B(10)、A=B(00)或A<B(01);
观察波形当输入数据当A=0000,B=0001,输出结果为01
当A=0010,B=0001,输出结果为10
当A=0001,B=0001,输出结果为00
经分析其仿真结果与理论相符合,说明了其设计的正确性。
4.2 实验心得
这次实验与上次相比有明显的进步,通过这次实验我对modelsim的应用更加得心应手,深切的体会到了verilog是一种描述性语言,这次实验总的来说是比较顺利的,但在实验过程中还是遇到了一些问题,比如端口的匹配问题,在写程序的时候误将位宽写在了变量名的后面,虽然程序能够运行但有警告,仿真波形是错误的,可见在写程序时警告有时也是致命的,这要求我们在学习的过程中思想一定要严谨!其次在做实验时一定要多想,例如在学习这门课时,书上说在模块外部输入可以是wire型或reg型,但在写程序时激励模块往往要初始化数据,所以编程时其类型往往声明为reg型,通过这个例子我明白了书上所说的有时往往是一个比较笼统的,而更多的需要我们自己去实践、探索、勤思考,只有这样我们才能把书本上的知识转化为属于我们自己的知识,才能在学习的道路上走的更远!。