您好,欢迎访问三七文档
第6章数字系统设计练习第6章数字系统设计练习6.1开关、LED灯及多路复用器6.2二进制与BCD码的转换及显示6.3无符号数乘法器6.4锁存器和触发器6.5计数器6.6时钟与定时器6.7有限状态机6.8存储器块6.9简单的处理器6.10增强型处理器第6章数字系统设计练习6.1开关、LED灯及多路复用器6.1.1将输入/输出器件连接到FPGA上DE2平台上提供了18个波段开关,可以作为电路的输入,表示为SW17~SW0;还有18个红色LED,表示为LEDR17~LEDR0,可以作为输出显示之用。使用红色LED显示波段开关状态的电路可以用Verilog语言简单地实现,代码如下:assignLEDR[17]=SW[17];assignLEDR[16]=SW[16];assignLEDR[0]=SW[0];第6章数字系统设计练习由于分别有18个红色LED和18个波段开关,因此在Verilog语言中可以很方便地用向量表示它们,进而可用一个赋值语句完成同样的功能。DE2平台上,LEDR17~LEDR0和SW17~SW0是与FPGA管脚直接相连的,使用这些管脚之前应参照本书附录B或DE2用户手册中DE2平台的引脚分配表,分配连接波段开关和LEDR的FPGA管脚,例如SW0连接在FPGA的N25脚,LEDR0连接在FPGA的AE23脚。最简单的做法是在Quartus中导入DE2_pin_assignments.csv,导入方法参见本书2.10.3小节。第6章数字系统设计练习为保证从DE2_pin_assignments.csv导入的引脚分配表能够正确使用,在Verilog模块中使用到的引脚名称必须与该文件中的完全一致,DE2_pin_assignments.csv中用SW[0]~SW[17]和LEDR[0]~LEDR[17]分别表示18个波段开关和18个红色LED灯,因此在编写的Verilog代码中也必须用这种方式来表示。用向量实现波段开关与红色LED相连的模块代码如代码6.1所示。第6章数字系统设计练习代码6.1将波段开关与红色LED相连的Verilog代码。modulepart1(SW,LEDR);input[17:0]SW;//波段开关output[17:0]LEDR;//红色LEDassignLEDR=SW;endmodule第6章数字系统设计练习请按照以下步骤在DE2上实现代码6.1并进行测试:(1)新建一个QuartusⅡ工程,用以在DE2平台上实现所要求的电路,将FPGA器件设置为EP2C35F672C6。(2)建立一个Verilog文件,其内容如代码6.1所示,将该Verilog文件添加到工程中并编译整个工程。(3)导入DE2_pin_assignments.csv中的引脚分配或参照附录B中DE2平台的引脚分配表,分配连接波段开关和红色LED的FPGA管脚。(4)编译该工程,完成后下载到FPGA中。(5)通过拨动波段开关并观察红色LED的变化来验证所设计的功能是否正确。第6章数字系统设计练习6.1.22选1多路复用器图6.1(a)是一个2选1多路复用器电路,如果s=1,则输出m=y;如果s=0,则输出m=x。图6.1(b)是这个电路的真值表。图6.1(c)是该电路的符号表示。第6章数字系统设计练习图6.1最简单的多路复用器第6章数字系统设计练习这个多路复用器可以用以下的Verilog语句来实现:assignm=(∼s&x)|(s&y);这部分练习的任务是实现如图6.2(a)所示的8位2选1多路复用电路,需要用8个赋值语句。该多路复用器的输入为X和Y,都是8位宽,输出M也为8位宽。如果s=0,M=X;如果s=1,则M=Y。图6.2(b)是该电路的符号表示。2选1多路复用器电路的具体实现步骤如下:(1)新建一个QuartusⅡ工程,用以在DE2平台上实现所要求的电路。第6章数字系统设计练习(2)建立一个Verilog文件,用SW17作为输入s,以SW7~SW0作为输入X,以SW15~SW8作为输入Y,将波段开关与红色LED连接以显示其状态,用绿色LED即LEDG7~LEDG0作为输出M,将该Verilog文件添加到工程中。(3)导入DE2_pin_assignments.csv中的引脚分配或参照附录B中DE2平台的引脚分配表,分配连接波段开关、红色LED以及绿色LED的FPGA管脚。(4)编译工程,完成后下载到FPGA中。(5)拨动波段开关并观察红色LED与绿色LED的变化,以验证8位2选1多路复用器的功能是否正确。第6章数字系统设计练习图6.28位2选1多路复用器第6章数字系统设计练习6.1.33位宽5选1多路复用器与图6.2(a)所示的2选1多路复用器不同,图6.3(a)所示电路的任务是实现一个5选1的多路复用器,即从5个输入x、y、w、u和v中选取一个输出到m。这个电路采用了4个2选1多路复用器来实现,输出选择用一个3位的输入s2s1s0实现,该电路的符号表示如图6.3(b)所示,表6.1为该5选1多路复用器的真值表。第6章数字系统设计练习图6.35选1多路复用器第6章数字系统设计练习表6.15选1多路复用器的真值表s2s1s0m000011110011001101010101uvwxyyyy第6章数字系统设计练习图6.4实现了一个3位5选1多路复用器,这个电路中包含了3个图6.3(a)所示的电路。请按照以下步骤实现3位5选1多路复用器:(1)新建一个QuartusⅡ工程,用以在DE2平台上实现所要求的电路。(2)建立一个Verilog文件,用SW17~SW15作为选择端输入s2s1s0,用剩下的15个波段开关SW14~SW0作为输入U、V、W、X、Y,将波段开关与红色LED连接以显示波段开关的状态,用绿色LED即LEDG2~LEDG0作为输出M,将该Verilog文件添加到工程中。第6章数字系统设计练习图6.43位5选1多路复用器第6章数字系统设计练习(3)导入DE2_pin_assignments.csv中的引脚分配或参照附录B中DE2平台的引脚分配表,分配连接波段开关、红色LED以及绿色LED的FPGA管脚。(4)编译工程,完成后下载到FPGA中。(5)拨动波段开关并观察红色LED和绿色LED的变化,以验证3位5选1多路复用器的功能是否正确,确定从U到Y的所有输入都能够被选择输出到M。第6章数字系统设计练习6.1.4用七段数码管显示简单字符图6.5所示是一个简单的七段解码器模块,c2c1c0是解码器的3个输入,用c2c1c0的不同取值来选择在七段数码管上输出不同的字符。七段数码管上的不同段位用数字0~6表示。注意七段数码管是共阳极的。表6.2列出了c2c1c0取不同值时数码管上输出的字符。本例中只输出4个字符,当c2c1c0取值为100~111时,输出空格。第6章数字系统设计练习图6.5七段解码器第6章数字系统设计练习表6.2字符编码c2c1c0输出字符000011110011001101010101HELO第6章数字系统设计练习请按照以下步骤实现七段解码器电路:(1)新建一个QuartusⅡ工程,用以在DE2平台上实现所要求的电路。(2)建立一个Verilog文件,实现七段解码器电路,用SW2~SW0作为输入c2~c0,DE2平台上的数码管分别为HEX0~HEX7,输出接HEX0,在Verilog中用以下语句定义端口:output[0:6]HEX0;(3)导入DE2_pin_assignments.csv中的引脚分配或参照附录B中DE2平台的引脚分配表分配引脚。(4)编译工程,完成后下载到FPGA中。(5)拨动波段开关并观察七段数码管HEX0的显示,以验证设计的功能是否正确。第6章数字系统设计练习6.1.5循环显示5个字符图6.6中的电路采用了一个3位5选1多路复用电路,可分别从输入的5个字符中选择1个字符并通过七段解码器电路在数码管上显示H、E、L、O和空格中的任一字符。将SW14~SW0分为5组,分别代表H、E、L、O和空格等5个字符,用SW17~SW15来选择要显示的字符。第6章数字系统设计练习图6.6循环显示5个字符的电路第6章数字系统设计练习代码6.2是实现这个电路的代码大纲,其中部分代码省略,被省略掉的代码是前文练习中编写过的。在这个电路中我们将6.1.3小节和6.1.4小节中的电路作为子电路。对代码6.2中的代码进行扩展后,可以用5个数码管显示,当改变SW17~SW15的状态时,最终显示的内容与SW17~SW15的对应关系如表6.3所示,即可以循环显示单词“HELLO”。第6章数字系统设计练习代码6.2图6.6所示电路的Verilog代码。modulepart5(SW,HEX0);input[17:0]SW;//声明波段开关output[0:6]HEX0;//声明七段数码管wire[2:0]M;mux_3bit_5to1M0(SW[17:15],SW[14:12],SW[11:9],SW[8:6],SW[5:3],SW[2:0],M);char7segH0(M,HEX0);endmodule第6章数字系统设计练习//实现一个3位5选1多路复用器modulemux_3bit_5to1(S,U,V,W,X,Y,M);input[2:0]S,U,V,W,X,Y;output[2:0]M;endmodule//实现一个H、E、L、O和空格的5字符七段解码器modulechar_7seg(C,Display);input[2:0]C;//输入码output[0:6]Display;//输出码Endmodule第6章数字系统设计练习表6.3SW17~SW15与显示内容的对应关系SW17SW16SW15HEX4HEX3HEX2HEX1HEX0000HELLO001ELLOH010LLOHE011LOHEL100OHELL第6章数字系统设计练习请按照以下步骤实现“HELLO”的循环显示电路:(1)新建一个QuartusⅡ工程,用以在DE2平台上实现所要求的电路。(2)建立一个Verilog文件,用SW17~SW15作为5个3位5选1多路复用器的选择输入,按照表6.3的对应关系,将SW14~SW0连接到每个多路复用器实例的输入端,将5个多路复用器的输出接到5个七段数码管HEX4~HEX0上,将Verilog文件添加到工程中来。(3)导入DE2_pin_assignments.csv中的引脚分配或参照附录B中DE2平台的引脚分配表,分配引脚。(4)编译工程,完成后下载到FPGA中。(5)先按表6.3设置好SW14~SW0的位置,然后改变波段开关SW17~SW15的位置,观察显示是否正确。第6章数字系统设计练习6.1.6循环显示8个字符在6.1.5小节的基础上,把5个字符扩展到8个字符,如果显示内容少于8个,比如显示“HELLO”,则数码管显示输出与SW17~SW15的对应关系如表6.4所示。第6章数字系统设计练习表6.4“HELLO”在8个数码管上的循环显示SW17SW16SW15HEX7HEX6HEX5HEX4HEX3HEX2HEX1HEX0000HELLO001HELLO010HELLO011HELLO100ELLOH101LLOHE110LOHEL111OHELL第6章数字系统设计练习请按照以下步骤实现“HELLO”的循环显示电路:(1)新建一个QuartusⅡ工程,用以在DE2平台上实现所要求的电路。(2)建立一个Verilog文件,这里会用到8个5选1多路复用器的电路,用SW17~SW15作为8个3位5选1多路复用器的选择输入,按照表6.4的对应关系,将SW14~SW0连接到每个多路复用器电路的输入端(有些多路复用器的输入会是空格),将8个多路复用器的输出接到8个七段数码管HEX7~HEX0上,将Verilog文件添加到工程文件中来。(3)导入DE2_pin_assignments.csv中的引脚分配或参照附录B中DE2平台的引脚分配表,分配引脚。(4)编译工程,完成后下载到FPGA中。(5
本文标题:数字系统设计练习.
链接地址:https://www.777doc.com/doc-2330828 .html