组合逻辑实验报告
无02 季涛2010012107
一多路选择器
实验目的
掌握组合逻辑基本设计方法;掌握多路选择器的基本原理。
设计方案
如图为二选一多路选择器的基本结构,根据真值表推出逻辑表达式为y=~s&a|s&b。 卡诺图如下图所示:
s/AB 0 1
00 01 1 11 1 1 10 1 冒险分析:根据两级网络的冒险检测和消除理论我们得知,如果初始输入值和最终输入
值能够被同一个本原蕴含想覆盖就不会出现毛刺,当输入变化跨越了多个本原蕴含项就会产生毛刺。
由卡诺图上可以看出,当AB=11,从s=0到s=1状态跳变时,这个过程没有包含在上面的逻辑表示式中,因此电路会产生冒险。
消除冒险的根本策略是添加冗余的本原蕴涵项。在这道题里,只要在逻辑表达式中加上a&b这一项即可。当然我们这里只考虑了单个输入发生变化的问题,因为在实际应用中,输入是按一定顺序变化的,即使有多个输入发生变化也是如此。 还有一种方案就是利用采样脉冲消除冒险。在这里就不多说了。
在此基础上可以设计出四选一的多路选择器,也就是实例化两个二选一多路选择器,然后再对这两个选择器的输出进行一次二选一。
代码
二选一多路选择器:
module mux_2_1(a,b,s,y,leda,ledb,leds);
input a,b,s;
output y,leda,ledb,leds;
wire s1,a1,a2; buf b1(leda,a); buf b2(ledb,b); buf b3(leds,s);
not not1(s1,s);
endmodule 管脚约束:
NET \NET \NET \NET \NET \NET \NET \
四选一多路选择器:
module mux_4_1(a,b,c,d,s1,s2,y,leda,ledb,ledc,ledd,leds1,leds2 );
input a,b,c,d,s1,s2;
output y,leda,ledb,ledc,ledd,leds1,leds2; wire ledy1,ledy2; wire y1,y2;
and and1(a1,s1,a); and and2(a2,s,b); or or1(y,a1,a2);
mux_2_1 m1(a,b,s1,y1,leda,ledb,leds1); mux_2_1 m2(c,d,s1,y2,ledc,ledd,leds1); mux_2_1 m3(y1,y2,s2,y,ledy1,ledy2,leds2);
endmodule 管脚约束:
NET \NET \NET \NET \NET \NET \NET \
NET \NET \NET \NET \NET \NET \
仿真结果
上图为四选一多路选择器的modelsim仿真结果。符合实验要求。
综合和硬件调试情况
调试结果符合预期,没有问题
二译码器
实验目的
掌握组合逻辑设计方法;掌握译码器设计原理。