50
51//Last Multiplexer 52
53assign M[0] = (~S[2]&m2[0])|(S[2]&Y[0]); 54
55assign M[1] = (~S[2]&m2[1])|(S[2]&Y[1]); 56
57assign M[2] = (~S[2]&m2[2])|(S[2]&Y[2]); 58
59endmodule 60 61
part IV:设计一个7segment 显示“HELLO”
这部分要求用一个7segment显示H、E、L、O。需要注意DE2上的七段码数码管是共阴极,对应的真值表见表 1 7-segment 译码真值表: c2c1c0 000 001 010 011 100 101 110 111 表1 7-segment 译码真值表
表达式化简,用卡诺图,比如seg[6](上表7-segment的最右边的一列),化简过程如下图所示:
character H E L O blank 7_segment 1001000 0110000 1110001 0000001 1111111
Part IV:代码
1/* 2
3(C) yf.x 2010 http://halflife.cnblogs.com/ 4
5Filename : part4.v 6
7Compiler : Quartus II 9.1 Web Edition 8
9Description : Demo how to use 7segment display 10
11Release : 03/12/2010 1.0 12 13 */ 14
15//use a 7segment display H、E、L、O 16
17module part4(SW,LEDR,HEX0); 18
19input [2:0] SW; 20
21output [2:0] LEDR; 22
23output [0:6] HEX0; 24
25assign LEDR=SW; 26
27//Seven Segment Decoder for \28
29assign HEX0[0] = SW[2]|~SW[0]; 30
31 assign HEX0[1]=SW[2]|(SW[1]&~SW[0])|(~SW[1]&SW[0]); 32
33 assign HEX0[2]=SW[2]|(SW[1]&~SW[0])|(~SW[1]&SW[0]); 34
35assign HEX0[3] = SW[2]|(~SW[1]&~SW[0]); 36
37assign HEX0[4] = SW[2]; 38
39assign HEX0[5] = SW[2]; 40
41assign HEX0[6] = SW[2]|SW[1]; 42
43endmodule 44 45
注:因为要求用连续赋值语句和布尔逻辑实现,对于七段码的每一段的表达式都可以根据真值表先化简(当然综合工具会自动化简,但是如果考综合工具化简,每个表达式就会很长)。化简就会用到我们学过的卡诺图图(以前一直觉得卡诺图用不上L)。
Part V:用5个7segment循环显示HELLO
这部分要求用5个数码管循环显示HELLO,涉及part III和part IV的引用。5个数码管循环显示如图2.
图 2 数码管循环显示HELLO
Part V 代码:
1/* 2
3(C) yf.x 2010 http://halflife.cnblogs.com/ 4
5Filename : part5.v 6
7Compiler : Quartus II 9.1 Web Edition 8
9Description : Demo how to rotating display 10
11Release : 03/12/2010 1.0 12 13 */ 14
15//Top level file 16
17module part5(SW,HEX4,HEX3,HEX2,HEX1,HEX0); 18
19input [17:0]SW; 20
21output [0:6] HEX4,HEX3,HEX2,HEX1,HEX0; 22
23wire [2:0] M4,M3,M2,M1,M0; 24
25 mux_3bit_5to1 N4(SW[17:15],SW[14:12],SW[11:9], 26
27SW[8:6],SW[5:3],SW[2:0],M4); 28
29 mux_3bit_5to1 N3(SW[17:15],SW[11:9],SW[8:6], 30
31SW[5:3],SW[2:0],SW[14:12],M3); 32
33 mux_3bit_5to1 N2(SW[17:15],SW[8:6],SW[5:3], 34
35SW[2:0],SW[14:12],SW[11:9],M2); 36
37 mux_3bit_5to1 N1(SW[17:15],SW[5:3],SW[2:0], 38
39SW[14:12],SW[11:9],SW[8:6],M1); 40
41 mux_3bit_5to1 N0(SW[17:15],SW[2:0],SW[14:12], 42
43SW[11:9],SW[8:6],SW[5:3],M0);
44
45 char_7seg H4(M4,HEX4); 46
47 char_7seg H3(M3,HEX3); 48
49 char_7seg H2(M2,HEX2); 50
51 char_7seg H1(M1,HEX1); 52
53 char_7seg H0(M0,HEX0); 54
55endmodule 56
57//implements a 7_segment decoder for H,E,L,O,and blank 58
59module char_7seg(c,display); 60
61input [2:0]c; 62
63output [0:6]display; 64
65//Seven Segment Decoder for \ 66
67assign display[0] = c[2]|~c[0]; 68
69assign display[1] = c[2]|(c[0]&~c[1])|(c[1]&~c[2]&~c[0]); 70
71assign display[2] = c[2]|(c[0]&~c[1])|(~c[0]&c[1]&~c[2]); 72
73assign display[3] = c[2]|(~c[1]&~c[0]); 74
75assign display[4] = c[2]; 76
77assign display[5] = c[2]; 78
79assign display[6] = c[2]|c[1]; 80
81endmodule 82
83//3BIT 5 to 1 Multiplexer Module 84
85module mux_3bit_5to1(S,U,V,W,X,Y,M); 86
87input[2:0]S,U,V,W,X,Y;