七段显示器在DE2可当成Verilog的控制台,做为16进位的输出结果。 介绍 使用环境:Quartus II 7.2 SP3 + DE2 (旋风II EP2C35F627C6) 简单的使用开关当成2进位输入,并用8位数的七段显示器显示10进位的结果。 switch_seg10.v/Verilog 1/* 2 (c) OOMusou 2008年 3 4文件名 : switch_seg10.v 5编译器 : Quartus II 7.2 SP3 6描述: 演示如何使用8位7段显示小数 7发行 : 07/20/2008 1.0 8 * 9模块switch_seg10 ( 输入的10 [17 :0] SW, 输出的11 [6 :0] HEX0, 输出的12 [6 :0] HEX1, 输出的13 [6 :0] HEX2, 输出的14 [6 :0] HEX3, 输出的15 [6 :0] HEX4, 输出的16 [6 :0] HEX5, 输出的17 [6 :0] HEX6, 输出的18 [6 :0] HEX7 19); 20 21 seg7_lut_8 u0 ( 22 .i_dig (SW), 23 .o_seg0 (HEX0), 24 .o_seg1 (HEX1), 25 .o_seg2 (HEX2), 26 .o_seg3 (HEX3), 27 .o_seg4 (HEX4), 28 .o_seg5 (HEX5), 29 .o_seg6 (HEX6), 30 .o_seg7 (HEX7) 31); 32 33 endmodule 这是顶面模块,负责建立例化seg7_lut8。 switch_lut.v/Verilog 1/* 2 (c) OOMusou 2008年 3 4文件名 : switch_lut.v 5编译器 : Quartus II 7.2 SP3 6描述: 演示如何使用8位7段显示小数 7发行 : 07/20/2008 1.0 8 * 9模块seg7_lut ( 输入的10 [3 :0] i_dig, 11输出的reg [6 :0] o_seg 12); 13 14 always@ (i_dig)开始 15案件(i_dig) 16 4 ' h1 : o_seg = 7 ' b111_1001; // ---t---- 17 4 ' h2 : o_seg = 7 ' b010_0100; // | | 18 4 ' h3 : o_seg = 7 ' b011_0000; // Lt rt 19 4 ' h4 : o_seg = 7 ' b001_1001; // | | 20 4 ' h5 : o_seg = 7 ' b001_0010; // ---m---- 21 4 ' h6 : o_seg = 7 ' b000_0010; // | | 22 4 ' h7 : o_seg = 7 ' b111_1000; // lb 铷 23 4 ' h8 : o_seg = 7 ' b000_0000; // | | 24 4 ' h9 : o_seg = 7 ' b001_1000; // ---b---- 25 4 ' ha : o_seg = 7 ' b000_1000; 26 4 ' hb : o_seg = 7 ' b000_0011; 27 4 ' hc : o_seg = 7 ' b100_0110; 28 4 ' hd : o_seg = 7 ' b010_0001; 29 4 '他: o_seg = 7 ' b000_0110; 30 4 ' hf : o_seg = 7 ' b000_1110; 31 4 ' h0 : o_seg = 7 ' b100_0000; 32 endcase 33末端 34 35 endmodule 36 这是一个七段显示器的查寻表。 switch_lut_8.v 1/* 2 (c) OOMusou 2008年 3 4文件名 : switch_lut_8.v 5编译器 : Quartus II 7.2 SP3 6描述: 演示如何使用8位7段显示小数 7发行 : 07/20/2008 1.0 8 * 9模块seg7_lut_8 ( 输出的10 [6 :0] o_seg0, 输出的11 [6 :0] o_seg1, 输出的12 [6 :0] o_seg2, 输出的13 [6 :0] o_seg3, 输出的14 [6 :0] o_seg4, 输出的15 [6 :0] o_seg5, 输出的16 [6 :0] o_seg6, 输出的17 [6 :0] o_seg7, 输入的18 [31 :0] i_dig 19); 20 21 seg7_lut u0 ( 22 .i_dig (i_dig%10), 23 .o_seg (o_seg0), 24); 25 26 seg7_lut u1 ( 27 .i_dig ((i_dig或10)%10), 28 .o_seg (o_seg1) 29); 30 31 seg7_lut u2 ( 32 .i_dig ((i_dig/100) %10), 33 .o_seg (o_seg2) 34); 35 36 seg7_lut u3 ( 37 .i_dig ((i_dig/1000) %10), 38 .o_seg (o_seg3) 39); 40 41 seg7_lut u4 ( 42 .i_dig ((i_dig/10000) %10), 43 .o_seg (o_seg4) 44); 45 46 seg7_lut u5 ( 47 .i_dig ((i_dig/100000) %10), 48 .o_seg (o_seg5) 49); 50 51 seg7_lut u6 ( 52 .i_dig ((i_dig/1000000) %10), 53 .o_seg (o_seg6) 54); 55 56 seg7_lut u7 ( 57 .i_dig ((i_dig/10000000) %10), 58 .o_seg (o_seg7) 59); 60 61 endmodule 与(原创)如何以2进位显示8位数的七段显示器? (SOC) (Verilog) (DE2)与(原创)如何以16进位显示8位数的七段显示器? (SOC) (Verilog) (DE2) 相比较,关键的差异就在switch_lut_8.v。由于开关输入的是2进位,显示2进位就是将每个位送进一个七段显示器,显示16进位就是每4bit送进一个 七段显示器,但10进位怎么办呢? 如开关输入的是10进位的378,若要取的十位的7,将378/10 = 37,再将37% 10 = 7,这样就能取出10位的7了,其它位数同理。
|