DE2 实验练习解答—lab 1(Digital Logic)(DE2)(Quartus II)
更新时间:2024-06-05 11:10:01 阅读量: 综合文库 文档下载
- de2-115开发板推荐度:
- 相关推荐
http://www.cnblogs.com/halflife/archive/2010/03/12/1684764.html
Abstract
Switches、Lights and Multiplexers Release: 1.0 By yf.x 03/12/2010
Introduction
这个练习的目的是学习如何连接简单的输入、输出设备到一个FPGA芯片,并且用这些器件实现一个电路。我们将用DE2开发板上的switches SW17-0作为输入,用LED和7-segment displays作为输出。
完成DE2 实验练习1(Digital Logic)对与初学者来说是一个比较大的实验。我估计,每天要花几小时才能完成。这个实验包括6个部分,主要是组合逻辑电路和使用assign语句。
Part I :第一次使用assign语句
Altera 的DE2开发板有18个拨动开关(toggle switch)和18个红色的LED。Part I非常简单,在实验手册里首先介绍了Verilog的格式,并给出了代码。需要自己做的部分就是把代码粘贴到Quartus II然后运行。当你拨动一个开关(比如Switch 1),对应的LED就会亮(比如LEDR1),这部分在实验手册里解释的很详细。 Part 1代码:
1/* 2
3(C) yf.x 2010 http://halflife.cnblogs.com/ 4
5Filename : part1.v 6
7Compiler : Quartus II 9.1 Web Edition 8
9Description : Demo how to use Switch and led 10
11Release : 03/05/2010 1.0 12 13 */
14
15//Simple module that conects the SW switchs to the LEDR lights 16
17module part1(SW,LEDR); 18
19input [17:0] SW; //toggle switches 20
21output [17:0] LEDR; //red leds 22
23assign LEDR=SW; 24
25endmodule
Part II:设计一个8位的2选1多路选择器
用Verilog设计一个多路选择器有很多种方法。但是在这个实验里,要求只能用门级电路描述。比如:assign m=(~s&x)|(s&y);这里x和y是输入,s是选择信号,m是输出。X被定义为SW 0到7,Y被定义为SW 8到15,S被定义为SW17,M被定义为绿色的LEDG 0到7.这部分的完整代码如下。 Part II 代码:
1/* 2
3(C) yf.x 2010 http://halflife.cnblogs.com/ 4
5Filename : part2.v 6
7Compiler : Quartus II 9.1 Web Edition 8
9Description : Demo how to use assign statements 10
11Release : 03/05/2010 1.0 12 13 */ 14
15//Top level file of part2 16
17module part2(LEDR,LEDG,SW); 18
19input [17:0]SW; 20
21output [17:0]LEDR; 22
23output [7:0]LEDG; 24
25wire s; 26
27wire [7:0]X,Y,M; 28
29assign S=SW[17]; 30
31assign X=SW[7:0]; 32
33assign Y=SW[15:8]; 34
35assign LEDR=SW; 36
37assign LEDG=M; 38
39 mux2to1 m7(S,X[7],Y[7],M[7]); 40
41 mux2to1 m6(S,X[6],Y[6],M[6]); 42
43 mux2to1 m5(S,X[5],Y[5],M[5]); 44
45 mux2to1 m4(S,X[4],Y[4],M[4]); 46
47 mux2to1 m3(S,X[3],Y[3],M[3]); 48
49 mux2to1 m2(S,X[2],Y[2],M[2]); 50
51 mux2to1 m1(S,X[1],Y[1],M[1]); 52
53 mux2to1 m0(S,X[0],Y[0],M[0]); 54
55endmodule 56
57//1-bit 2-to1 multiplexer 58
59module mux2to1(s,x,y,m); 60
61inputs,x,y; 62
63output m; 64
65assign m=(~s&x)|(s&y); 66
67endmodule 68 69
在我的代码里,有一个小技巧。我把RTL代码分成2部分。1个主模块和1个多路选择器模块。通过调用多选器模块,可以很容易的实现设计。(这里因为用到很多引脚,为了方便引脚分配,输入、输出端口名和板上的器件名相同。)
Part III:设计一个3位的5选一多路选择器
设计一个3位的5选1多路选择器很简单。如图1所示,使用了4个3位的2选1的多路选择器。完整代码如下:
图 1 5选1多路选择器 Part III 代码:
1/* 2
3(C) yf.x 2010 http://halflife.cnblogs.com/ 4
5Filename : part3.v
6
7Compiler : Quartus II 9.1 Web Edition 8
9Description : Demo how to use assign statements 10
11Release : 03/05/2010 1.0 12 13 */ 14
15//3BIT 5 to 1 Multiplexer Module 16
17module mux_3bit_5to1(S,U,V,W,X,Y,M); 18
19input[2:0]S,U,V,W,X,Y; 20
21output[2:0]M; 22
23wire[2:0]m0,m1,m2; 24
25// Leftmost 2 to 1 Multiplexers 26
27 //Top 28
29assign m0[0] = (~S[0]&U[0])|(S[0]&V[0]); 30
31assign m0[1] = (~S[0]&U[1])|(S[0]&V[1]); 32
33assign m0[2] = (~S[0]&U[2])|(S[0]&V[2]); 34
35//Bottom 36
37assign m1[0] = (~S[0]&W[0])|(S[0]&X[0]); 38
39assign m1[1] = (~S[0]&W[1])|(S[0]&X[1]); 40
41assign m1[2] = (~S[0]&W[2])|(S[0]&X[2]); 42
43//Middle Multiplexer 44
45assign m2[0] = (~S[1]&m0[0])|(S[1]&m1[0]); 46
47assign m2[1] = (~S[1]&m0[1])|(S[1]&m1[1]); 48
49assign m2[2] = (~S[1]&m0[2])|(S[1]&m1[2]);
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;
88
89output[2:0]M; 90
91wire[2:0]m0,m1,m2; 92
93// Leftmost 2 to 1 Multiplexers 94 95//Top 96
97assign m0[0] = (~S[0]&U[0])|(S[0]&V[0]); 98
99assign m0[1] = (~S[0]&U[1])|(S[0]&V[1]); 100
101assign m0[2] = (~S[0]&U[2])|(S[0]&V[2]); 102
103//Bottom 104
105assign m1[0] = (~S[0]&W[0])|(S[0]&X[0]); 106
107assign m1[1] = (~S[0]&W[1])|(S[0]&X[1]); 108
109assign m1[2] = (~S[0]&W[2])|(S[0]&X[2]); 110
111//Middle Multiplexer 112
113assign m2[0] = (~S[1]&m0[0])|(S[1]&m1[0]); 114
115assign m2[1] = (~S[1]&m0[1])|(S[1]&m1[1]); 116
117assign m2[2] = (~S[1]&m0[2])|(S[1]&m1[2]); 118
119//Last Multiplexer 120
121assign M[0] = (~S[2]&m2[0])|(S[2]&Y[0]); 122
123assign M[1] = (~S[2]&m2[1])|(S[2]&Y[1]); 124
125assign M[2] = (~S[2]&m2[2])|(S[2]&Y[2]); 126
127endmodule 128 129
技巧:同样的选择参数被用于不同的多路选择器实例引用,不同的多路选择器连接不同的数码管,每个数码管都可以循环显示不同的字符。前两部分的代码稍稍修改就可直接引用。
Part VI:用8个数码管循环显示HELLO
要求按照图 3 数码管循环显示,这是整个实验最复杂的部分,需要用到前5部分的信息。因为要用到选择信号的8中状态,需要创建一个8选1的多路选择器。其余就类似第5部分。注意在实例引用8选1多路器时8个输入信号的排列(我的神啊,眼睛差点都看花了J)!!
图3 数码管循环显示 Part VI 代码:
1/* 2
3(C) yf.x 2010 http://halflife.cnblogs.com/ 4
5Filename : part6.v 6
7Compiler : Quartus II 9.1 Web Edition 8
9Description : Demo how to use 8 7seg rotating display 10
11Release : 03/12/2010 1.0 12 13*/ 14
15//Top level file 16
17module part6(SW,HEX7,HEX6,HEX5,HEX4,HEX3,HEX2, 18
19HEX1,HEX0); 20
21input [17:0]SW; 22
23output [0:6]HEX7,HEX6,HEX5,HEX4,HEX3,HEX2, 24HEX1,HEX0; 25
26wire [2:0]M7,M6,M5,M4,M3,M2,M1,M0; 27
28 mux_3bit_8to1 N7(SW[17:15],SW[2:0],SW[2:0],SW[2:0], SW[14:12],SW[11:9],SW[8:6],SW[8:6],SW[5:3],M7); 29
30 mux_3bit_8to1 N6(SW[17:15],SW[2:0],SW[2:0],SW[14:12], SW[11:9],SW[8:6],SW[8:6],SW[5:3],SW[2:0],M6); 31
32 mux_3bit_8to1 N5(SW[17:15],SW[2:0],SW[14:12], 33SW[11:9],SW[8:6],SW[8:6],SW[5:3],SW[2:0],SW[2:0],M5); 34
35 mux_3bit_8to1 N4(SW[17:15],SW[14:12],SW[11:9], 36SW[8:6],SW[8:6],SW[5:3],SW[2:0],SW[2:0],SW[2:0],M4); 37
38 mux_3bit_8to1 N3(SW[17:15],SW[11:9],SW[8:6],SW[8:6], SW[5:3],SW[2:0],SW[2:0],SW[2:0],SW[14:12],M3); 39
40 mux_3bit_8to1 N2(SW[17:15],SW[8:6],SW[8:6],SW[5:3], SW[2:0],SW[2:0],SW[2:0],SW[14:12],SW[11:9],M2); 41
42 mux_3bit_8to1 N1(SW[17:15],SW[8:6],SW[5:3],
43SW[2:0],SW[2:0],SW[2:0],SW[14:12],SW[11:9],SW[8:6],M1); 44
45 mux_3bit_8to1 N0(SW[17:15],SW[5:3],SW[2:0],SW [2:0], SW[2:0],SW[14:12],SW[11:9],SW[8:6],SW[8:6],M0); 46
47 char_7seg H7(M7,HEX7); 48
49 char_7seg H6(M6,HEX6); 50
51 char_7seg H5(M5,HEX5); 52
53 char_7seg H4(M4,HEX4);
54
55 char_7seg H3(M3,HEX3); 56
57 char_7seg H2(M2,HEX2); 58
59 char_7seg H1(M1,HEX1); 60
61 char_7seg H0(M0,HEX0); 62
63endmodule 64
65//3bit 8to1 multiplexer 66
67//use 7 3bit 2-to-1 multiplexer 68
69module mux_3bit_8to1(S,U,V,W,X,Y,Z,A,B,M); 70
71input [2:0]S,U,V,W,X,Y,Z,A,B; 72
73output [2:0]M; 74
75wire [2:0]n0,n1,n2,n3,n4,n5; 76
77// 2 to 1 Multiplexers 78 79//one 80
81assign n0[0] = (~S[0]&U[0])|(S[0]&V[0]); 82
83assign n0[1] = (~S[0]&U[1])|(S[0]&V[1]); 84
85assign n0[2] = (~S[0]&U[2])|(S[0]&V[2]); 86 87//two 88
89assign n1[0] = (~S[0]&W[0])|(S[0]&X[0]); 90
91assign n1[1] = (~S[0]&W[1])|(S[0]&X[1]); 92
93assign n1[2] = (~S[0]&W[2])|(S[0]&X[2]); 94
95//three 96
97assign n2[0] = (~S[0]&Y[0])|(S[0]&Z[0]);
98
99assign n2[1] = (~S[0]&Y[1])|(S[0]&Z[1]); 100
101assign n2[2] = (~S[0]&Y[2])|(S[0]&Z[2]); 102
103//four 104
105assign n3[0] = (~S[0]&A[0])|(S[0]&B[0]); 106
107assign n3[1] = (~S[0]&A[1])|(S[0]&B[1]); 108
109assign n3[2] = (~S[0]&A[2])|(S[0]&B[2]); 110
111//five 112
113assign n4[0] = (~S[1]&n0[0])|(S[1]&n1[0]); 114
115assign n4[1] = (~S[1]&n0[1])|(S[1]&n1[1]); 116
117assign n4[2] = (~S[1]&n0[2])|(S[1]&n1[2]); 118 119//six 120
121assign n5[0] = (~S[1]&n2[0])|(S[1]&n3[0]); 122
123assign n5[1] = (~S[1]&n2[1])|(S[1]&n3[1]); 124
125assign n5[2] = (~S[1]&n2[2])|(S[1]&n3[2]); 126
127//seven 128
129assign M[0] = (~S[2]&n4[0])|(S[2]&n5[0]); 130
131assign M[1] = (~S[2]&n4[1])|(S[2]&n5[1]); 132
133assign M[2] = (~S[2]&n4[2])|(S[2]&n5[2]); 134
135endmodule 136
137//implements a 7_segment decoder for H,E,L,O,and blank 138
139module char_7seg(c,display); 140
141input [2:0]c;
142
143output [0:6]display; 144
145//Seven Segment Decoder for \146
147assign display[0] = c[2]|~c[0]; 148
149assign display[1] = c[2]|(c[0]&~c[1])|(c[1]&~c[2]&~c[0]); 150
151assign display[2] = c[2]|(c[0]&~c[1])|(~c[0]&c[1]&~c[2]); 152
153assign display[3] = c[2]|(~c[1]&~c[0]); 154
155assign display[4] = c[2]; 156
157assign display[5] = c[2]; 158
159assign display[6] = c[2]|c[1]; 160
161endmodule 162 163
注:3位8选1多路器的设计思想如同前面的3位5选1多路器的设计思想一致。在这部分,我预选设置SW的值如表2。 SW SW14-12 SW11-9 SW8-6 SW5-3 SW2-0 预设值 000 001 010 011 100 数码管显示 H E L O blank Conclusion
整体来看,Altera的实验设计很花心思。在实验1,主要要求用基本的布尔逻辑实现。不允许用高级的RTL描述,考查门级电路实现(心中有电路图,描述就不难。J)。完成整个实验非常有趣,积累基本经验,并且回顾和更好的理解底层的数字逻辑设计。
See Also
Altera’s website: www.Altera.com
正在阅读:
DE2 实验练习解答—lab 1(Digital Logic)(DE2)(Quartus II)06-05
推荐优秀特岗教师演讲稿10-15
关于科技的作文03-10
成长的记忆作文02-05
幼儿园科学教案科学活动 按长短排序12-17
我喜欢西瓜作文300字07-04
小兔子运南瓜看图写话二年级06-16
美国留学生本科未毕业申请硕士不再遥遥无期07-11
东师古代汉语(一)16秋在线作业203-26
- 1Quartus - II
- 2exercise de traduction 9
- 3141231102107150DE162011 - 图文
- 4CCIE Lab分解实验练习(Plannet_Practice_Labs)_.Vol_2
- 5福雷 月光 Faure Op.46 no.2 Clair de lune 声乐谱
- 6EDA实验报告(quartus2仿真)
- 7lettre de motivation LEA 法语动机信
- 8lettre de motivation LEA 法语动机信
- 9Anti-de Sitter space, squashed and stretched
- 10Anti-de Sitter space, squashed and stretched
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- DE2
- 解答
- 练习
- Digital
- Quartus
- 实验
- Logic
- lab
- II
- ABB机器人RAPID指令中文
- 道路危险货物运输从业人员培训
- 2015一模好题精选(教师)(定稿)
- 材料科学基础习题及答案
- 化工仪表与自动化复习题及答案
- 人美版小学三年级美术下册《别致的小花瓶》教案
- 勤奋自学成大器
- 气化水系统冲洗方案
- 长江大学辩论赛策划书
- 实验六 水果中总酸及pH的测定
- 上海市虹口区2013年高考二模生物试题
- 工程项目施工总承包合同模板
- 基于51单片机的WIFI无线控制系统设计与实现
- 全面风量计算及分配方案
- 企业工会工作调研报告
- 2019九年级化学上册 第一章 课题2 化学是一门以实验为基础的科学
- 幼儿一日生活常规及保教人员相应职责
- 物理化学习题解答(五)
- 2018江苏开放大学公文写作与处理第四次作业
- 教学工作总结,高中级部主任