资源描述:
《de2 实验练习解答—lab 2:数字和显示(digital logic)(de2)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、http://www.cnblogs.com/halflife/archive/2010/04/23/1718797.html本节练习主要用组合逻辑电路实现2进制到10进制数字的转换以及BCD码的加法。PartI2进制数字的显示在HEX3到HEX0上显示SW15-0的值。SW15-12,SW11-8,SW7-4,SW3-0分别对应于HEX3,HEX2,HEX1,HEX0.在数码管上显示0-9,忽略开关表示的数值1010-1111.本练习的目的是手工推导数码管显示的逻辑,要求只用赋值语句和布尔表达式实现。part1.vpart1顶层文件1//part1display0-9o
2、nthe7-segmentdisplays2modulepart1(HEX3,HEX2,HEX1,HEX0,SW);3input[15:0]SW;4output[0:6]HEX3,HEX2,HEX1,HEX0;56btdH3(SW[15:12],HEX3);7btdH2(SW[11:8],HEX2);8btdH1(SW[7:4],HEX1);9btdH0(SW[3:0],HEX0);1011endmodule数码管译码电路:1//binary-to-decimal2modulebtd(s,seg);3input[3:0]s;4output[0:6]seg;56assign
3、seg[6]=~s[3]&~s[2]&~s[1]
4、s[2]&s[1]&s[0];7assignseg[5]=~s[3]&~s[2]&s[0]
5、~s[2]&s[1]
6、s[1]&s[0];8assignseg[4]=s[0]
7、s[2]&~s[1];9assignseg[3]=~s[3]&~s[2]&~s[1]&s[0]
8、10s[2]&~s[1]&~s[0]
9、11s[2]&s[1]&s[0];12assignseg[2]=~s[2]&s[1]&~s[0];13assignseg[1]=s[2]&~s[1]&s[0]
10、s[2]&s[1]&~s[0];14assignseg[0]=
11、s[2]&~s[1]&~s[0]
12、~s[3]&~s[2]&~s[1]&s[0];1516endmodulePart II 2进制值转换为10进制将4位二进制输入V=v3v2v1v0转换成2位十进制数D=d1d0,在HEX1和HEX0上分别显示d1和d0.输出值与输入值的对应关系如表1.图1给出了电路的部分设计。比较器用来检测V>9.电路A用来将>9的输入转换成对应的个位的BCD码.电路B用来将1位二进制的输入转换为对应的BCD码显示.part2.v1//part22modulepart2(V,D1,D0);3input[3:0]V;4output[0:6]D1,D0;5w
13、irez;//comparatoroutput6wire[2:0]a;//circuitAoutput7wire[3:0]m;//multiplexeroutput89comparatorC(V,z);10circuitaA(V[2:0],a);11mux_4b_2to1M(V,{1'b0,a},z,m);12circuitbB(z,D1);13btdD(m,D0);1415endmodule1617//circuitB18modulecircuitb(z,seg);19inputz;20output[0:6]seg;2122assignseg[6]=1;23assign
14、seg[5]=z;24assignseg[4]=z;25assignseg[3]=z;26assignseg[2]=0;27assignseg[1]=0;28assignseg[0]=z;2930endmodule313233//4-bit2-to-1multiplexer34modulemux_4b_2to1(x,y,s,m);35input[3:0]x;36input[3:0]y;37inputs;38output[3:0]m;3940mux_2to1u3(x[3],y[3],s,m[3]);41mux_2to1u2(x[2],y[2],s,m[2]);42mux_2
15、to1u1(x[1],y[1],s,m[1]);43mux_2to1u0(x[0],y[0],s,m[0]);4445endmodule46//2to1multiplexer47modulemux_2to1(a,b,s,m);48inputa,b,s;49outputm;5051assignm=s?b:a;5253endmodule545556//circuitA57modulecircuita(v,a);58input[2:0]v;59output[2:0]a;6061assigna[2]=v[2]&v[1];62assig