1、EDA实验报告CPLD及FPGA设计实验报告姓名: 学号: 班级: 专业: 电气工程及其自动化 学院: 电气与信息工程学院 江苏科技大学张家港校区2011年12月实验一:8-3编码器及QuartusII的基础一、实验目的1学习组合逻辑电路,学习编码器的功能与定义,学习 Verilog和 VHDL 语言2熟悉利用QuartusII 开发数字电路的基本流程和 QuartusII软件的相关操作二、实验内容编写 83 编码器的 Verilog 代码和 VHDL代码,编译下载后通过拨动拨码开关观察 LED 灯的变化,来验证 83 编码器是否成功。三、实验原理 在数字系统中,常常需要将某一信息(输入)变换
2、为某一特定的代码(输出)。把二进制码按一定的规律排列,例如 8421 码、格雷码等,使每组代码具有一特定的含义(代表某个数字或是控制信号)称为编码。具有编码功能的逻辑电路称为编码器。编码器有若干个输入,在某一时刻只有一个输入被转换为二进制码。例如 8线3 线编码器和 10 线4线编码器分别有 8 输入、3 位输出和 10 位输入、4 位输出。83 编码器的真值表见表 1。表1 83 编码器真值表输入输出A7 A6 A5 A4 A3 A2 A1 A00 0 0 0 0 0 0 10 0 0 0 0 0 1 00 0 0 0 0 1 0 00 0 0 0 1 0 0 00 0 0 1 0 0 0
3、00 0 1 0 0 0 0 00 1 0 0 0 0 0 01 0 0 0 0 0 0 0Y2 Y1 Y00 0 00 0 10 1 00 1 11 0 01 0 11 1 01 1 1四、实验步骤1 选择“开始” “所有程序” “ Altera”“QuartusII9.0” “QuartusII9.0(32Bit)”,启动软件。图1 QuartusII启动界面2 选择“File” “NewProjectWizard”,出现“Introduction”页面,如图 2所示,该页面介绍所要完成的具体任务。图2选择 NewProjectWizard图3 新建工程向导3 单击“Next”按钮,进入工
4、程名称的设定、工作目录的选择。图4 指定工程路径、工程名和顶层实体名4 如图 4 所示。在对话框中第一行选择工程路径;第二行输入工程名,第三行输入顶层文件的实体名(注意:工程名必须与顶层实体名相同,工程目录可以随意设置,但必须是英文的目录,工程名跟顶层实体名必须也是英文开头。不要将文件夹设在计算机已有的安装目录中,更不要将工程文件直接放在安装目录中。文件夹所在的路径名和文件夹名不能用中文,不能用空格,不能用括号,也不能以数字开头这里输入 encoder8_3;单击“Next”按钮,出现如图 5 所示的对话框。图5 新建工程文件添加对话框在图所示的对话框中,可以为工程添加先期已经输入的设计文件,
5、制定用户自定义的元件库的路径,这里没有事先输入好的文件,也没有自定义的元件库,单击“Next”按钮如图5所示的对话框。进入下一步,出现如图6的新建工程器件选择对话框。图6 新建工程器件选择对话框在图所示的对话框中,我们根据本试验箱所选的芯片型号,在 Family 下拉菜单中选择Cyclone II 系列。然后在 Filters下的 Package下拉菜单中选择封装形式 FBGA,Pin count下拉菜单中选择管脚数 672,Speedgrade 下拉菜单中选择速度级别 8;然后在 Availabledevices中选择 EP2C35F672C8 器件。点击“Next”进入下一步。图6 所示的
6、对话框,用户指定在 Quartus II 之外的用于设计输入。5单击“Next”进入图综合、仿真、时序分析的第三方 EDA 工具对话框,这里都不选,直接单击“Next”进入工程信息对话框.图7工程信息对话框点击Next进入图8新建工程完毕最后单击“Finish”完成工程建立。 图8新建工程完毕6新建设计文件,选择“File|New” ,在 New对话框中选择 Device Design Files 下的VerilogFile,单击 OK,完成新建设计文件。如图 9所示。图9在 QuattusII里面新建文件7在新建设计文件中输入 VDHL程序,源代码如下:library ieee;use ie
7、ee.std_logic_1164.all;entity encoder8_3 is port( y0,y1,y2,y3,y4,y5,y6,y7:in std_logic; c,b,a:out std_logic);end;architecture one of encoder8_3 is signal jieguo:std_logic_vector(7 downto 0);begin jieguo c=0;b=0;a c=0;b=0;a c=0;b=1;a c=0;b=1;a c=1;b=0;a c=1;b=0;a c=1;b=1;a c=1;b=1;anull; end case; end
8、 process;end;本例只有一个设计文件,即为顶层设计文件,它的实体名一定要与顶层设计文件名encoder8_3 一致,然后保存到工程文件夹 Project 下,命名为 encoder8_3,即为顶层设计文件。如图 10 所示。图10 保存文件10选择“ProcessingStartCompilation”,或者单击工具栏中的 StartCompilation 按钮进行全程编译,也可以在“Processing”菜单中选择“Start”子菜单中的分布编译操作。图11 编译工程11编译的时候,QuartusII 会给出编译进度,“CompilationReport”窗口会给出编译结果,编译结
9、果会随着编译进度随时更新。Message窗口会给出编译过程的具体情况,包括“information,warning,error”等。“information”多是完成的一些编译的进展描述;可能会出现很多 warning但并不影响编译的进行;如果出现 error,那么设计是不成功的,用户需要改正这些错误,然后重新编译。可以对错误进行定位,选中错误信息,右击,在弹出的菜单中选择 Locate来实现对错误的定位。编译成功以后,会出现如下图所示的提示。图12 编译结果提示12.仿真设置在 QuartusII 中点击选择file-new弹出如图 x的界面,按照图13选择。图 13 新建仿真图设置界面13
10、.仿真结果实验二:半加器与全加器一、实验目的 1学习半加器和全加器的设计,进一步了解、熟悉和掌握FPGA开发软件Quartus II的使用方法 2学习Verilog HDL和VHDL的编程方法 3巩固QuartusII的仿真和图形设计方法。 二、实验内容 编写半加器和全加器的Verilog 代码和VHDL代码并仿真,编译下载验证。 三、实验原理 算术运算式数值系统的基本功能,更是计算机中不可缺少的组成单元。 1.半加器 半加法和全加法是算术运算电路中的基本单元,它们是完成1位二进制相加的一种组合逻辑电路。一位加法器的真值表见表1.71;由表中可以看见,这种加法没有考虑低位来的进位,所以称为半加
11、。半加器就是实现表1.71中逻辑关系的电路。 二进制输入 和输出 进位输出 A B S Co 0 0 0 0 0 1 1 0 1 0 1 0 11012.全加器 全加器能进行加数、被加数和低位来的进位信号相加,并根据求和结果给出该位的进位信号。根据它的功能,可以列出它的真值表,如表1.72所示。 表1.72 全加器的真值表 二进制输入 低位进位输入和输出 进位输出 A B Ci S Co 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 1 0 0 1 0 0 1 1 0 0 1 1 0 1 1 0 1 0 1 111113、半减法和全减法 半减法和全减法与加法器一样是算术运算电
12、路中的基本单元。半减器和全减器的设计方法和设计加法器相同,但是实际上,为了简化系统结构,通常不设计减法器,而是将减法运算变为加法运算来出来,使运算器即能实现加法器运算,又能实现减法器运算。一般采用加补码的方法代替减法运算。从原理图中可见,需要有两个数据输入位还有一个低位进位,数据输入我们采用实验箱上的SW1和SW2,进位采用SW3,LED1显示和输出,LED2显示进位输出。引脚分配情况表1.73 引脚分配四、实验步骤 1新建工程,取名为adder,如下图所示。2新建VHDL设计文件“File|New” ,在New对话框中选择Device Design Files下的VHDL File,单击OK
13、,完成新建设计文件。 3在新建设计文件中输入VHDL程序,源代码如下: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; entity adder is port ( A : in std_logic; B : in std_logic; Ci: in std_logic; S : out std_logic; Co: out std_logic ); end adder; architecture rt1 of adder is begin S = (A xor B) xor Ci; Co = (A and B) or (A and Ci) or(B an
14、d Ci); end rt1; 4生成“Symbol”文件,新建“Block Diagram/Schematic File”文件,在文件中添加刚刚生成的“Symbol”以及输入输出管脚,最后完整的系统顶层模块图如图1.53所示。5保存文件,使用qsf或者tcl进行管脚分配(相应的文件在本工程里面都可以找到)。 6对该工程文件进行全程编译处理,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。 7新建“Vector Waveform File”文件进行波形仿真。其中A,B为输入数据,Ci低位进位。8下载完成后,通过 SW1SW3控制着输入的电平,观察实验结果。实验三:分频器一、实验目的
15、1学习分频器的设计,进一步了解、熟悉和掌握 FPGA开发软件 QuartusII 的使用方法2学习 Verilog HDL 和 VHDL 的编程方法3学会使用Vector Wave 功能仿真4掌握使用多种方法分配管脚二、实验内容 编写一个分频器的 Verilog 代码和 VHDL 代码并仿真,编译下载验证。三、实验原理在数字电路中,时钟信号的分频是很常见的电路。分频器除了可以对时钟信号频率做除以二的计算外,分频器同时很类似涟波计数器。 涟波计数器是计数器的一种,它属于异步设计。因为触发器并非皆由同一个时钟信号同步操作,所以它非常节省电路面积。 本实验要设一个带选择的分 SEL1:0用于选择是几
16、分频。分频器设计原理框图如图所示:图1 设计原理框图从原理图中可见,核心板的时钟是50MHz,通过sel1:0选择分频数,00:不分频;01:12.5M分频;10:25M 四分频;11:50M 分频。采用 SW1SW2 设置分频值,SW3 复位。LED1 为时钟的输出,通过调整 SW1、SW2,可以得到不同的闪烁频率。引脚分配情况表1 引脚分配设计端口芯片引脚开发平台模块设计端口芯片引脚开发平台模块clkPIN_P2CLK1rstPIN_W10SW3s2x1PIN_Y13SW2s2x0PIN_AA16SW1outxPIN_AB20LED1四、实验步骤1新建工程,取名为 frediv2新建 VH
17、DL 设计文件,选择“File|New” ,在 New对话框中选择 DeviceDesignFiles下的 VHDLFile,单击 OK,完成新建设计文件。3在新建设计文件中输入 VHDL 程序,源代码如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fenpin isport (clk : in std_logic; s2x : in std_logic_vector(1 downto 0); outx : out std_logic_vector(1 downto 0); q
18、 : out std_logic);end;architecture bhv of fenpin is signal q1 : std_logic_vector (2 downto 0);begin process (clk) begin if clkevent and clk=1 then q1 q q q q null; end case; outx=not s2x; end process;end;此程序通过两个输入端来选择进行何种分频,00对应1分频,即不分频,01对应2分频10对应4分频11对应8分频4生成“Symbol”文件,新建“Block Diagram/Schematic F
19、ile”文件,在文件中添加刚2所示刚生成的“Symbol”以及输入输出管脚,最后完整的系统顶层模块图如图图2顶层模块图5保存文件,使用 qsf或者 tcl 进行管脚分配6对该工程文件进行全程编译处理,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。7新建“Vector Waveform File”文件进行波形仿真。8下载完成后,观察实验结果。五、实验结果四分频二分频一分频实验四:七段数码管扫描显示一、实验目的 1学习动态扫描显示的原理,进一步了解、熟悉和掌握FPGA开发软件Quartus II的使用方法 2学习Verilog HDL和VHDL的编程方法 3学会使用Vector Wa
20、ve功能仿真 4掌握使用多种方法分配管脚二、实验内容 利用动态扫描的方式设计一个在8个数码管上面分别显示1,3,5,7.的程序 三、实验环境 硬件:EP2C35实验箱、USB ByteBlaster 下载电缆 软件:Altera Quartus II 9.0 集成开发环境 四、实验原理 一般来说,多个数码管的连接并不是把每个数码管都独立的与可编程逻辑器件连接,而是把所有的LED管的输入连在一起。如图3.11所示。 其中每个数码管的8个段:a、b、c、d、e、f、g、h(h是小数点),都分别连到SEG_D0SEG_D7,8个数码管分别由8个选通信号DIG_C0DIG_C7来选择。被选通的数码管显
21、示数据,其余关闭。如在某一时刻DIG_C2为低电平“0”,其余选通信号为高电平“1”,这时仅DIG_C2对应的数码管显示来自段码信号端的数据,而其它7个数码管呈显示关闭状态。根据这种电路状态,如果希望8个数码管显示希望的数据,就必须使得8个选通信号DIG_C0DIG_C7分别被单独选通,并在此同时,在段信号输入口加上希望在该对应数码管上显示的数据,于是随着选通信号的扫描就能实现扫描显示的目的。虽然每次只有一个LED显示,但只要扫描显示速率够快,由于人的视觉余辉效应,使我们仍会感觉所有的数码管都在同时显示。 图3.11 扫描数码管的原理图 扫描频率大小不许合适才能有很好的效果。如果太小,而每个L
22、ED开启的时间大于人眼的视觉暂停时间,那么会产生闪烁现象。而扫描频率太大,则会造成LED的频繁开启和关断,大大增加LED功耗(开启和关断的时刻功耗很大)。一般来说,扫描频率选在50Hz比较合适。SW1为清零信号使能,dig为数码管片选信号端,seg为7段显示片选信号。 五、引脚分配情况 设计端口 芯片引脚 开发平台模块 设计端口芯片引脚 开发平台模块clk PIN_P2 CLK1 clr PIN_AA16 SW1 dig0 PIN_D18 7SEG_bit_1 dig1 PIN_H12 7SEG_bit_2 dig2 PIN_K16 7SEG_bit_3 dig3 PIN_H15 7SEG_b
23、it_4 dig4 PIN_C17 7SEG_bit_5 dig5 PIN_E22 7SEG_bit_6 dig6 PIN_K18 7SEG_bit_7 dig7 PIN_E15 7SEG_bit_8 seg0 PIN_J13 7SEG_a seg1 PIN_G15 7SEG_b seg2 PIN_C16 7SEG_c seg3 PIN_C15 7SEG_d seg4 PIN_D15 7SEG_e seg5 PIN_G13 7SEG_f seg6 PIN_D17 7SEG_g seg7 PIN_D16 7SEG_h 表3.11 引脚分配六、实验步骤 1新建工程,取名为seven_seg,如下图
24、所示。3在新建设计文件中输入VHDL程序,源代码如下: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity seven_seg is port ( clk,clr : in std_logic; dig,seg : out std_logic_vector(7 downto 0) ); end seven_seg; architecture rt1 of seven_seg is signal clk_r:std_logi
25、c;signal scan:std_logic_vector(2 downto 0); signal dig_r:std_logic_vector(7 downto 0); signal data_r:std_logic_vector(3 downto 0); signal seg_r:std_logic_vector(7 downto 0); begin dig = dig_r; seg = seg_r; a:process(clk,clr) variable count:integer range 0 to 50000000; begin if clr = 0 then count :=
26、0; elsif clkevent and clk = 1 thenif count = 49999999 then count := 0; else count := count + 1; end if; if count = 24999999 then clk_r = 0; else clk_r = 1; end if; end if; end process;b:process(clk_r,clr) begin if clr = 0 then scan = 000; elsif clk_revent and clk_r = 1 then scan dig_r = 00000000; data_r dig_r = 00000000; data_r dig_r = 00000000; data_r dig_r = 00000000; data_r dig_r = 00000000; data_r dig_r = 00000000; data_r dig_r = 00000000; data_r dig_r = 00000000; data_r seg_r seg_r =
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1