1、备注:FPGA 实验的源程序要与相应的电路结合看并有一定的理解,务必要熟练知道引脚的分配,软件的基本操作详见实验指导书的实验一。实验二:12 选 1 的数据选择器 具体步骤: 第1步:新建一个Quartus 项目。 第2步:在Quartus 项目中新建一个VHDL文件,并命名为mux_2to1.vhd,实现2选1的电路功能,其真值表和电路符号如下图所示。即当s1时,输出my;当s 0时,输出mx。 代码一:VHDL程序代码如下。 library ieee; use ieee.std_logic_1164.all; entity mux_2to1 is port( s,x,y:in std_lo
2、gic; m:out std_logic); end mux_2to1; architecture behave_mux_2to1 of mux_2to1 is begin m=x when s=0 else y ; end behave_mux_2to1; 2、 28 位宽 2 选 1 的数据选择器 在完成2选1数据选择器之后,将信号x和y的位宽由1位扩展为8位。更改后的电路图如下: 实验代码如下: library ieee; use ieee.std_logic_1164.all; entity mux_2to1_8bit is port( s:in std_logic;x,y:in st
3、d_logic_vector(7 downto 0); m:out std_logic); end mux_2to1_8bit; architecture behave_mux_2to1_8bit of mux_2to1_8bit is begin m=x when s=0 else y; end behave_mux_2to1_8bit;第 2 步:接着把 mux_2to1_8bit.vhd 设定为项目的顶层设计文件。实现方法如下图所示,在项目浏览器(Project Navigator)中选择文件(Files )页,选中 mux_2to1_8bit.vhd,单击右键,选择“Set as To
4、p-Level Entity”命令即可。34 选 1 的数据选择器 在完成2选1电路之后,将电路扩展为4选1数据选择器,电路及其真值表如下图所示。 代码修改如下: library ieee; use ieee.std_logic_1164.all; entity mux_4to1 is port( s:in std_logic_vector(1 downto 0); u,v,w,x:in std_logic; m:out std_logic ); end mux_4to1; architecture behave_mux_4to1 of mux_4to1 is begin m=u when s
5、=“00“ else v when s=“01“ else w when s=“10“ else x; end behave_mux_4to1; 文件另存为mux_4to1.vhd。 接着将mux_4to1.vhd设定为项目的顶层设计文件,再进行语法检查和引脚分配。 4实现 3 位宽的 4 选 1 数据选择器。 电路如下图所示。代码完成后,另存为mux_4to1_3bit.vhd。 library ieee; use ieee.std_logic_1164.all; entity mux_4to1_3bit is port( s:in std_logic_vector(1 downto 0);
6、 u,v,w,x:in std_logic_vector(2 downto 0); m:out std_logic_vector(2 downto 0) ); end mux_4to1_3bit; architecture behave_mux_4to1_3bit of mux_4to1_3bit is begin m=u when s=“00“ else v when s=“01“ else w when s=“10“ else x; end behave_mux_4to1_3bit;实验三:七段数码管显示 1显示简单字符 七段数码管显示电路如下图所示: 图中包含一个七段解码器模块,c2c0
7、 是解码器的 3个输入,当输入值不同时,输出不同的字符。如表中所示,当输入值为100111时,输出空格,即数码管全暗。七段数码管的不同段位用数字06表示,注意七段数码管是共阳极的,即各管段输入低电平时,数码管亮;否则数码管暗。 具体实验步骤如下: 第1步:新建一个Quartus 项目。 第2步:新建一个VHDL文件,实现上述七段解码器。具体代码如下: library ieee; use ieee.std_logic_1164.all; entity char_7seg is port( c:in std_logic_vector(2 downto 0); hex:out std_logic_v
8、ector(6 downto 0); end char_7seg; architecture behave_char_7seg of char_7seg is begin with c(2 downto 0) select hex= “0001001“ when “000“ , -“H“ “0000110“ when “001“ , -“E“ “1000111“ when “010“ , -“L“ “1000000“ when “011“ , -“O“ “1111111“ when others; -“ “ end behave_char_7seg; 保存VHDL文件,并命名为char_7se
9、g.vhd 。 第3步:语法检查,通过后,进行引脚分配,分配表如下: 信号 DE2上的器件 C2.0 SW2SW0 hex6.0 HEX06.0 2显示 09 数字 在完成简单字符显示电路之后,设计一个用于显示09数字的七段数码管电路。电路图如下图所示,c3c0 是七段数码器的输入,当输入 00001001时,则输出09,如表中所示;当输入10101111时,输出空格。 对上述代码进行相应的修改,并将文件另存为num_7seg.vhd 。 接着将num_7seg.vhd设定为项目的顶层设计文件,再进行语法检查和引脚分配。 引脚分配表如下表所示,具体的FPGA引脚可通过查找附录表获取。分配完后重
10、新编译项目文件,并下载验证。 信号 DE2上的器件 C3.0 SW3SW0 hex6.0 HEX06.0 library ieee; use ieee.std_logic_1164.all; entity num_7seg is port( c:in std_logic_vector(3 downto 0); hex:out std_logic_vector(6 downto 0); end num_7seg; architecture behave_num_7seg of num_7seg is begin with c(3 downto 0) select hex= “1000000“ w
11、hen “0000“ , -“0“ “1111001“ when “0001“ , -“1“ “0100100“ when “0010“ , -“2“ “0110000“ when “0011“ , -“3“ “0011001“ when “0100“ , -“4“ “0010010“ when “0101“ , -“5“ “0000010“ when “0110“ , -“6“ “1111000“ when “0111“ , -“7“ “0000000“ when “1000“ , -“8“ “0010000“ when “1001“ , -“9“ “1111111“ when others
12、; -“ “ end behave_num_7seg;3循环显示 4 个字符 循环显示4个字符的电路图如下: 电路的工作原理是,输入端 U、V 、W 和 X 的输入值分别是 000、001、010 和 011,通过s1 和 s0 选择四个输入端其中一个作为七段解码器的输入值,从而显示 H、L、E 和 O 任一字符。方法二: 通过VHDL代码实现,这里需要用到元件的概念。整个文件的代码如下: library ieee; use ieee.std_logic_1164.all; entity char_4to1_7segv is port( s:in std_logic_vector(1 down
13、to 0); U,V,W,X:in std_logic_vector(2 downto 0); hex0:out std_logic_vector(6 downto 0); end char_4to1_7segv; architecture behave_char_4to1_7segv of char_4to1_7segv is component char_7seg is port( c:in std_logic_vector(2 downto 0); hex:out std_logic_vector(6 downto 0); end component; component mux_4to
14、1_3bit is port( s:in std_logic_vector(1 downto 0); u,v,w,x:in std_logic_vector(2 downto 0); m:out std_logic_vector(2 downto 0); end component; signal mout:std_logic_vector(2 downto 0); begin u1:mux_4to1_3bit port map(s,U,V,W,X,mout); u2:char_7seg port map(mout,hex0) ; end behave_char_4to1_7segv; 代码中
15、用红色标识出来的就是元件的定义和调用部分。将文件另存为char_4to1_7segv.vhd,并将其设定为项目的顶层设计文件。再进行语法检查、引脚分配和编译下载。 实验四:BCD 码显示及运算 1二进制码到 BCD 码的转换 二进制码与BCD 码之间的转换关系见下表: 表中将 4 位二进制输入 V=v3v2v1v0转换成 2 位十进制 Dd1d0,实现办法是用 SW3.0作为二进制输入,而用 HEX1 和 HEX0 作为十进制输出的显示。从上述表中可以看出,当V=9 时, d1 0、d0V;反之,d11、d0V 10。 1、BCD 二进制转换为十进制library ieee; use ieee
16、.std_logic_1164.all; use ieee.std_logic_unsigned.all;entity bin_bcd isport(v:in std_logic_vector( 3 downto 0);hex0,hex1:out std_logic_vector( 6 downto 0);end entity bin_bcd;architecture behave_bin_bcd of bin_bcd issignal d0,d1:std_logic_vector(3 downto 0);component num_7seg is port( c:in std_logic_v
17、ector(3 downto 0); hex:out std_logic_vector(6 downto 0); end component;begin process(v)beginif(v=9)then d1=“0000“;d0=v;else d1=“0001“;d0=v-10;end if;end process;dd0:num_7seg port map(d0,hex0);dd1:num_7seg port map(d1,hex1);end behave_bin_bcd;2 1 位 BCD 加法器 电路原理是输入两个BCD码A和B以及1位进位输入cin,输出是BCD码的和sum以及 1位进位输出cout。例如当A1001(9)、 B1001(9)、cin 1时,cout1,sum1001(9)。电路的输出最大值也就是19。 1位BCD加法器可以利用两个二进制加法器实现,其原理如下图所示。在VHDL中,二进制加法可以直接用A+B实现。不过前提是需要使用std_logic_unsigned.all这个程序包。 2、1 位 BCD 加法
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。