搜索
您的当前位置:首页正文

verilog实现8路数据选择器

来源:好走旅游网
《串行数据检测器》实验报告

一、实验目的及要求 1.掌握用always语句实现组合逻辑电路; 2.学习测试模块中随机数的产生和应用; 3.每路输入数据与输出数据均为4位2进制数,当选择开关(至少3位) 或输入数据发生变化时,输出数据也相应地变化。 二、实验设备(环境)及要求 1.实验设备:PC机一台 2.环境要求:安装Modelsim仿真软件以及Synplify Pro综合工具 三、实验内容与步骤 1.根据实验要求编写源代码mux_8.v如下 /** * @File mux_8.v * @Synopsis 每路输入数据与输出数据均为4位2进制数,当选择开关 * (至少3位)或输入数据发生变化时,输出数据也相应地变化。 * @Author mouter.net@gmail.com * @Version 1 * @Date 2010-11-05 */ /* Copyright(C) 2010- * By * All right reserved */

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路输入或者选择开关或者使能信号发生变化则条件触发 begin if(!ncs)

//低电平使能

case(addr)

3'b000: mout = in1; //选择开关的3位对应000时,输出等于in1输

入; 输入; 输入; 输入;

3'b100: mout = in5; //选择开关的3位对应100时,输出等于in1

3'b011: mout = in4; //选择开关的3位对应011时,输出等于in1

3'b010: mout = in3; //选择开关的3位对应010时,输出等于in1

3'b001: mout = in2; //选择开关的3位对应001时,输出等于in1

输入; 输入; 输入; 输入; endcase else

mout = 0;

//使能信号高电平时输出一直为0;

3'b111: mout = in8; //选择开关的3位对应111时,输出等于in1

3'b110: mout = in7; //选择开关的3位对应110时,输出等于in1

3'b101: mout = in6; //选择开关的3位对应101时,输出等于in1

end endmodule

2.编写测试模块test_mux_8.v如下 /** * @File

test_mux_8.v

* @Synopsis 这是8路数据选择器mux_8的测试模块 * @Author 陈昊, mouter.net@gmail.com * @Version 1 * @Date */

/* Copyright(0) 2010- * By

2010-11-05

* All right reserved */

`timescale 1ns/1ns module test_mux_8; wire[3:0] mout;

//声明输出为线网型,4位

reg [3:0] in1,in2,in3,in4,in5,in6,in7,in8; //声明8路输入信号

reg [2:0] addr; reg ncs;

//-------------------------------------------------------------产生测试信号------------------------------------------------------ initial begin ncs=0; 选择器正常工作

in8={$random}%16; 至15之间的数

in1={$random}%16; in2={$random}%16; in3={$random}%16; in4={$random}%16;

//并赋予输入

//使用系统任务$random产生一个0

//在初始化模块里将使能信号置为0,让

//3位的选择开关,寄存型类型

//1位的寄存器型使能信号

in5={$random}%16; in6={$random}%16; in7={$random}%16; addr=3'b000; 000.

repeat(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; 开关的值,加1 end

#10 $stop; end

//-------------------------------------------------------------------

//每执行一次后改变一次选择

//重复下面的语句块5次,赋5次值

//让选择开关的3位初始对应为

------------------------------------------------------------ //--------------------------------------------------------实例引用被测试模块----------------------------------------------------- mux_8 example(.addr(addr),.in1(in1),.in2(in2),.in3(in3),.in4(in4),.in5(in5),.in6(in6),.in7(in7),.in8(in8),.mout(mout),.ncs(ncs)); //------------------------------------------------------------------------------------------------------------------------------- endmodule 3.利用Modelsim编译纠错和仿真 4.利用Synplify Pro进行综合 5.利用QuartusⅡ进行布局布线 四、实验结果与数据处理 1.Modelsim仿真波形如下,自上向下信号依次为a、b、qOut 2.选择Altera STRATIX器件库利用Synplify Pro综合产生的RTL级电路如下 3.使用Quatus II进行布局布线结果如下 4.使用Modelsim进行后仿真波形如下 五、分析与讨论 1.该8路数据选择器成功通过了综合和布局布线,分析发现,前仿真结果逻辑正确。 2.分析后仿真结果发现,电路延时较为严重,本次选择的数据数据在下一次数据来到之后才输出,需要对代码进行进一步优化。 六、教师评语 签名: 日期: 成绩

因篇幅问题不能全部显示,请点此查看更多更全内容

Top