EDA实验代码

EDA实验代码
EDA实验代码

EDA实验代码实验一:

一位全加器:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY adder1 IS

PORT(A,B,C:IN STD_LOGIC;

COUT,SUM:OUT STD_LOGIC);

END ENTITY adder1;

ARCHITECTURE hl OF adder1 IS

SIGNAL ABC:STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN

ABC<=A&B&C;

PROCESS(ABC)

BEGIN

CASE ABC IS

WHEN"000"=>COUT<='0';SUM<='0'; WHEN"001"=>COUT<='0';SUM<='1'; WHEN"010"=>COUT<='0';SUM<='1'; WHEN"011"=>COUT<='1';SUM<='0'; WHEN"100"=>COUT<='0';SUM<='1'; WHEN"101"=>COUT<='1';SUM<='0';

WHEN"110"=>COUT<='1';SUM<='0'; WHEN"111"=>COUT<='1';SUM<='1';

WHEN OTHERS=>NULL;

END CASE;

END PROCESS;

END ARCHITECTURE hl;

四位全加器(需要调用)

LIBRARY IEEE ;

USE IEEE.STD_LOGIC_1164.ALL ;

ENTITY adder4 IS

PORT (Ain, Bin: IN STD_LOGIC_VECTOR(3 DOWNTO 0); DOUT: OUT STD_LOGIC_VECTOR(4 DOWNTO 0) ) ; END ENTITY adder4;

ARCHITECTURE hl4 OF adder4 IS

COMPONENT adder1

PORT (A, B, C: IN STD_LOGIC;

SUM,COUT: OUT STD_LOGIC ) ;

END COMPONENT;

SIGNAL net1,net2,net3:STD_LOGIC;

BEGIN

u1: adder1 PORT

MAP(A=>Ain(0),B=>Bin(0),C=>'0',SUM=>DOUT(0),COUT=>net1);

u2: adder1 PORT

MAP(A=>Ain(1),B=>Bin(1),C=>net1,SUM=>DOUT(1),COUT=>net2);

u3: adder1 PORT

MAP(A=>Ain(2),B=>Bin(2),C=>net2,SUM=>DOUT(2),COUT=>net3);

u4: adder1 PORT

MAP(A=>Ain(3),B=>Bin(3),C=>net3,SUM=>DOUT(3),COUT=>DOUT(4)); END ARCHITECTURE hl4;

实验二

LIBRARY IEEE ;

USE IEEE.STD_LOGIC_1164.ALL ;

USE IEEE.STD_LOGIC_UNSIGNED.ALL ;

USE IEEE.STD_LOGIC_ARITH.ALL ;

ENTITY LED IS

GENERIC ( T : INTEGER := 50000000);

PORT (CLK : IN STD_LOGIC ; Hz1 : OUT STD_LOGIC) ;

END ;

ARCHITECTURE bhv_HL OF LED IS

SIGNAL Q : INTEGER RANGE 0 TO T-1;

SIGNAL M : STD_LOGIC ;

BEGIN

PROCESS (CLK,Q) BEGIN

IF FALLING_EDGE(CLK) THEN

IF (Q=0) THEN Q<=T-1; ELSE Q<=Q-1; END IF;

IF (Q=0) THEN M<=NOT M; ELSIF (Q=T/2) THEN M<=NOT M;

END IF; E ND IF;

END PROCESS;

Hz1<=M;

END bhv_HL;

实验三

LIBRARY IEEE ;

USE IEEE.STD_LOGIC_1164.ALL ;

USE IEEE.STD_LOGIC_UNSIGNED.ALL ;

USE IEEE.STD_LOGIC_ARITH.ALL ;

ENTITY SEG7 IS

PORT ( CLK : IN STD_LOGIC ;

K_AND : OUT INTEGER RANGE 31 DOWNTO 0 ;

K1,K2 : OUT INTEGER RANGE 15 DOWNTO 0 ;

LED7S01,LED7S10:OUT STD_LOGIC_VECTOR(0 TO 6));

ARCHITECTURE bhv_HL OF SEG7 IS

SIGNAL Q1 : INTEGER RANGE 15 DOWNTO 0 ;

SIGNAL Q2 : INTEGER RANGE 15 DOWNTO 0 ;

SIGNAL Q3 : INTEGER RANGE 31 DOWNTO 0 ;

SIGNAL DEC10,DEC01 : INTEGER RANGE 0 TO 9; BEGIN

PROCESS(CLK)

BEGIN

IF RISING_EDGE(CLK) THEN Q1 <= Q1 + 1 ; END IF; END PROCESS ;

PROCESS(CLK) BEGIN

IF FALLING_EDGE(CLK) THEN Q2 <= Q2 + 1 ; END IF; END PROCESS ;

Q3 <= Q1+Q2 ;

PROCESS (Q3)

VARIABLE DD01 : INTEGER RANGE 0 TO 31; VARIABLE DD10 : INTEGER RANGE 31 DOWNTO 0;

CASE Q3 IS

WHEN 0 TO 9 => DEC10<= 0; DEC01<= Q3;

WHEN 10 TO 19 => DEC10<= 1; DEC01<= Q3 - 10;

WHEN 20 TO 29 => DEC10<= 2; DEC01<= Q3 - 20;

WHEN 30 TO 31 => DEC10<= 3; DEC01<= Q3 - 30; END CASE ;

END PROCESS;

PROCESS(DEC10,DEC01) BEGIN

CASE DEC01 IS

WHEN 0 => LED7S01 <="1000000";

WHEN 1 => LED7S01 <="1111001";

WHEN 2 => LED7S01 <="0100100";

WHEN 3 => LED7S01 <="0110000";

WHEN 4 => LED7S01 <="0011001";

WHEN 5 => LED7S01<="0010010";

WHEN 6 => LED7S01<="0000010";

WHEN 7 => LED7S01<="1111000";

WHEN 8 => LED7S01<="0000000";

WHEN 9 => LED7S01<="0010000";

WHEN OTHERS => NULL;

END CASE;

CASE DEC10 IS

WHEN 0 => LED7S10 <="1000000";

WHEN 1 => LED7S10 <="1111001";

WHEN 2 => LED7S10 <="0100100";

WHEN 3 => LED7S10<="0110000";

WHEN 4 => LED7S10<="0011001";

WHEN 5 => LED7S10<="0010010";

WHEN 6 => LED7S10<="0000010";

WHEN 7 => LED7S10<="1111000";

WHEN 8 => LED7S10<="0000000";

WHEN 9 => LED7S10<="0010000";

WHEN OTHERS => NULL;

END CASE;

END PROCESS;

END bhv_HL ;

实验四

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; ENTITY text4 IS

GENERIC( nstep : INTEGER :=4);

PORT( CLK,LOAD:IN STD_LOGIC;

QB :OUT STD_LOGIC;

DIN :IN STD_LOGIC_VECTOR(7 DOWNTO 0);

DOUT :OUT STD_LOGIC_VECTOR(7 DOWNTO 0)

);

END text4;

ARCHITECTURE behav OF text4 IS

--SIGNAL REG8 :STD_LOGIC_VECTOR(7 DOWNTO 0);

BEGIN

PROCESS (CLK,LOAD)

VARIABLE FLAG :STD_LOGIC;

VARIABLE REG8 :STD_LOGIC_VECTOR(7 DOWNTO 0);

BEGIN

IF CLK'EVENT AND CLK = '1' THEN

IF LOAD = '1' THEN REG8 := DIN;

ELSE

FOR N IN 0 TO nstep LOOP

FLAG := REG8(0);

REG8(6 DOWNTO 0) :=REG8(7 DOWNTO 1);

REG8(7) :=FLAG;

END LOOP;

--IF LOAD = '1' THEN REG8 <= DIN;

-- ELSE REG8(6 DOWNTO 0) <=REG8(7 DOWNTO 1);

END IF;

END IF;

QB <=REG8(0);

DOUT <=REG8;

END PROCESS;

END behav;

实验五

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY text5 IS

PORT(

CLK: IN STD_LOGIC;

DOUT :OUT STD_LOGIC_VECTOR(3 DOWNTO 0)

);

END text5;

ARCHITECTURE BEHAV OF text5 IS

TYPE states IS(ST0,ST1,ST2,ST3,ST4,ST5,ST6,ST7,ST8,ST9);

SIGNAL PST : states;

BEGIN

REGCOM:PROCESS(PST,CLK)

BEGIN

IF RISING_EDGE(CLK) THEN

CASE PST IS

WHEN ST0=> PST<=ST1;

WHEN ST1=> PST<=ST2;

WHEN ST2=> PST<=ST3;

WHEN ST3=> PST<=ST4;

WHEN ST4=> PST<=ST5;

WHEN ST5=> PST<=ST6;

WHEN ST6=> PST<=ST7;

WHEN ST7=> PST<=ST8;

WHEN ST8=> PST<=ST9;

WHEN ST9=> PST<=ST0;

WHEN OTHERS => PST<=ST0;

END CASE;

END IF;

END PROCESS REGCOM;

COM: PROCESS(PST)

BEGIN

CASE PST IS

WHEN ST0=> DOUT<="0000";

WHEN ST1=> DOUT<="0001";

WHEN ST2=> DOUT<="0010";

WHEN ST3=> DOUT<="0011";

WHEN ST4=> DOUT<="0100";

WHEN ST5=> DOUT<="0101";

WHEN ST6=> DOUT<="0110";

WHEN ST7=> DOUT<="0111";

WHEN ST8=> DOUT<="1000";

WHEN ST9=> DOUT<="1001";

WHEN OTHERS => DOUT<="0000";

END CASE;

END PROCESS COM;

END;

实验六基于状态机实现交通灯设计

一、实验目的

1、掌握状态转移图的绘制;

2、掌握状态转移图到VHDL代码的设计实现方法;

二、实验参考资料

教材《VHDL与EDA实用技术(第五版)》潘松黄继业

PDF文件《使用QUARTUS_II做FPGA开发全流程_傻瓜式详细教程》PDF文件《Quartus 与ModelSim-Altera 的使用》

PDF文件《DE2中文用户手册》

引脚参考文件DE2_pin_assignments.csv

三、实验描述

1、步骤:

(a)依据示意图(左图)绘制状态机状态图(类似于右图);

(b)配置状态转移条件以及状态输出;(c)依据状态图生成VHDL代码;

(d)配置引脚,下载至DE2,验证效果。

“01”

out_a <= “0101“1000”;

;

out_a <= “1101

Verilog编码风格

Verilog编码风格 嵌入式开发2010-05-03 15:28:13 阅读14 评论0 字号:大中小订阅 这是以前公司的对fpga代码编写的要求 良好代码编写风格的通则概括如下: (1)对所有的信号名、变量名和端口名都用小写,这样做是为了和业界的习惯保持一致;对常量名和用户定义的类型用大写; (2)使用有意义的信号名、端口名、函数名和参数名; (3)信号名长度不要太长; (4)对于时钟信号使用clk 作为信号名,如果设计中存在多个时钟,使用clk 作为时钟信号的前缀; (5)对来自同一驱动源的信号在不同的子模块中采用相同的名字,这要求在芯片总体设计时就定义好顶层子模块间连线的名字,端口和连接端口的信号尽可能采用相同的名字; (6)对于低电平有效的信号,应该以一个下划线跟一个小写字母b 或n 表示。注意在同一个设计中要使用同一个小写字母表示低电平有效; (7)对于复位信号使用rst 作为信号名,如果复位信号是低电平有效,建议使用rst_n; (8)当描述多比特总线时,使用一致的定义顺序,对于verilog 建议采用bus_signal[x:0]的表示; (9)尽量遵循业界已经习惯的一些约定。如*_r 表示寄存器输出,*_a 表示异步信号,*_pn 表示多周期路径第n 个周期使用的信号,*_nxt 表示锁存前的信号,*_z 表示三态信号等; (10)在源文件、批处理文件的开始应该包含一个文件头、文件头一般包含的内容如下例所示:文件名,作者,模块的实现功能概述和关键特性描述,文件创建和修改的记录,包括修改时间,修改的内容等; (11)使用适当的注释来解释所有的always 进程、函数、端口定义、信号含义、变量含义或信号组、变量组的意义等。注释应该放在它所注释的代码附近,要求简明扼要,只要足够说明设计意图即可,避免过于复杂; (12)每一行语句独立成行。尽管VHDL 和Verilog 都允许一行可以写多个语句,当时每个语句独立成行可以增加可读性和可维护性。同时保持每行小于或等于72 个字符,这样做都是为了提高代码得可读性; (13)建议采用缩进提高续行和嵌套语句得可读性。缩进一般采用两个空格,如西安交通大学SOC 设计中心 2 如果空格太多则在深层嵌套时限制行长。同时缩进避免使用TAB 键,这样可以避免不同机器TAB 键得设置不同限制代码得可移植能力; (14)在RTL 源码的设计中任何元素包括端口、信号、变量、函数、任务、模块等的命名都不能取Verilog 和VHDL 语言的关键字; (15)在进行模块的端口申明时,每行只申明一个端口,并建议采用以下顺序:

《EDA》实验指导书2013-6-1

辽东学院自编教材 《可编程逻辑器件原理及应用实验》指导书 李海成编 (计算机科学与技术、电子信息工程专业用) 姓名: 学号: 班级: 信息技术学院 2013年6月

目录 目录 (1) 实验一MAX+PLUS-II设计三八译码器......... 错误!未定义书签。实验二半加器 . (2) 实验三带进位输入的8位加法器 (4) 实验四数据比较器 (6) 实验五编码器 (9) 实验六组合逻辑电路的设计 (12) 实验七计数器 (14) 实验八触发器功能的模拟实现 (17)

(被加数)Ai (被加数)Bi (半加和)Hi (本位进位)Ci 实验二 半加器 实验类型: 验证性 实验课时: 2 指导教师: 李海成 时 间:201 年 月 日 课 次:第 节 教学周次:第 周 实验分室: 实验台号: 实 验 员: 一、 实验目的 1.设计并实验一个一位半加器 2.掌握CPLD/FPGA 组合逻辑设计基本方法。 二、 实验原理 计算机中数的操作都是以二进制进位的,最基本的运算就是加法运算。按照进位是否加入,加法器分为半加器和全加器电路两种。计算机中的异或指令的功能就是求两个操作数各位的半加和。一位半加器有两个输入、输出,如图2-1。 图2-1 一位半加器示意图 表2-1 一个半加大路的真值表如表2-1所示,根据真值表可得到半加器的函数表达式: Bi Ai Bi Ai Hi ?+?= Bi Ai Ci ?= 三、 实验连线 半加器的两个输入所对应的管脚同两位拨码开关相连,两个输入管脚名为a 、b ;两个输出所对应的管脚同两位发光二极管相连,两个输出管脚名为 c0和s,其中c0表示进位, s 表示相加结果。 四、

EDA实验指导书

实验一上机学习电路原理图的绘制(2) 一、设计目的 1. 掌握PROTEL软件的安装、运行及卸载,掌握Protel 99 SE的基本操作; 2. 掌握设计管理器的使用和设计环境的设置,熟悉常用元件库和各主要菜单及命令的使用; 3.学习电路原理图的基本绘图方法 二、设计内容 1.设置原理图的环境参数,添加相应的元件库文件 2.绘制课本P92页的一个D/A功能模块电路图,其中由一片12位的D/A、两片运放、一些电阻和电容组成 图1-1 实验1电路原理图实例 三、设计设备和仪器 1.计算机 1 台(CPU要求Pentium 166MHz以上,推荐内存应为16MB以上,显示器分辨率为800×600(或1024×768)模式。) 2.Protel 99SE 软件 四、设计方法 根据电路图加载相应的元件库文件,然后选择放置电子元件,编辑各元件并精确调整元件位置。对放置好的元件根据例图连接导线,绘制总线和总线出入端口,放置网络标号及电源和输入输出端口。最后放置注释文字。 五、实验步骤 (1)新建名为自己学号姓名的设计数据库 点击“NEW新建”新建数据库文件 在上图所示的选项栏里设置名为自己姓名学号的数据库文件 (2)建立名为自己姓名的原理图文件

点击上图所示图标建立名为自己姓名的原理图文件(3)进入原理图设计环境,修改文件名并修改图纸大小为A4 点击下图中“Options”选项设置图纸大小 (4)加载常用元件库 (5)从元件库中选出需用元件放在原理图设计工作面上 (6)利用绘图工具对所有元器件进行连线 最终原理图如图所示。 六、设计报告 1.明确实验目的和实验要求; 2.写出详细的实验内容和步骤; 3.写出实验中遇到的问题及改正的方法 七、注意事项 熟悉绘图工具的功能和用法是绘制好电路原理图的关键。

EDA实验指导 基于FPGA的动态扫描电路设计new

FPGA实验指导及记录 实验三基于FPGA的数码管动态扫描电路设计 1.实验目的: (1)掌握FPGA工作的基本原理、FPGA硬件平台的使用; (2)熟悉7段数码管显示译码电路的设计。 (3)掌握数码管动态扫描显示原理及动态扫描电路的设计。 2.实验任务:利用FPGA硬件平台上的6位数码管动态显示计数器输出数据。 3.电路设计 (1)顶层电路 由分频模块fre_div,计数器模块counter100,译码显示模块diaplay构成。分频模块fre_div将可将实验平台晶体振荡器提供的50MHz时钟信号分频,输出500Hz,1KHz及1Hz三种信号备用,conter100模块实现模100计数功能,display模块为数码管动态显示模块,实现计数数字在6位数码管上的动态显示。 (2)分频器模块fre_div 该模块已经设计完成,存放在F盘502文件夹里,使用时请自行拷贝至当前工程文件夹,并按设计需要选择合适的输出。 (3)计数器模块counter100 该计数器模块实现模100计数。此处同学们应掌握数据总线的画法。

(4)译码显示模块display 该模块由counter6模块,dig_select模块,seg_select模块以及decoder模块构成,请同学们自行完成该模块总体设计,当display模块的输入信号scanclk频率为1KHz时,数码管扫描周期为36ms,每次扫描每位数码管显示时长6ms。各子模块设计思路如下。 a)counter6模块 该模块需使用74390设计一个模6的计数器。请在空白处做预设计,画出电路图。 b)dig_select模块 该模块用于选择6位数码管中的某一位显示相应字形。74138为3-8译码器,功能表见附录。

EDA实验指导书

实验一 MAX+PLUSII软件的使用 [实验目的] 掌握MAX+PLUSII软件的使用。 [实验内容] 学习MAX+PLUSII软件的设计操作步骤。 [实验原理] MAX+PLUSII软件介绍。 MAX+PLUSII软件功能简介: 1 原理图输入(Graphic Editor) MAX+PLUSII软件具有图形输入能力,用户可以方便的使用图形编辑器输入电路图,图中的元器件可以调用元件库中元器件,除调用库中的元件以外,还可以调用该软件中的符号功能形成的功能块。 2 硬件描述语言输入(Text Editor) MAX+PLUSII软件中有一个集成的文本编辑器,该编辑器支持VHDL,AHDL和Verilog硬件描述语言的输入,同时还有一个语言模板使输入程序语言更加方便,该软件可以对这些程序语言进行编译并形成可以下载配置数据。 3 波形编辑器(waveform Editor) 在进行逻辑电路的行为仿真时,需要在所设计电路的输入端加入一定的波形,波形编辑器可以生成和编辑仿真用的波形(*.SCF文件),使用该编辑器的工具条可以容易方便的生成波形和编辑波形。 4 编译与仿真 当设计文件被编译好,并在波形编辑器中将输入波形编辑完毕后,就可以进行行为仿真了,通过仿真可以检验设计的逻辑关系是否准确。 5 器件编程 当设计全部完成后,就可以将形成的目标文件下载到芯片中,实际验证设计的准确性。[实验步骤] 设计过程如下: 1)输入项目文件名(File/Project/Name) 2)输入源文件(图形、VHDL、AHDL、Verlog和波形输入方式) (Max+plusⅡ/graphic Editor, Max+plusⅡ/Text Editor, Max+plusⅡ/Waveform Editor) 3)指定CPLD型号(Assign/Device) 4)设置管脚、下载方式和逻辑综合的方式 (Assign/Global Project Device Option,Assign/Global Logic Synthesis) 5)保存并检查源文件(File/project/Save & Check) 6)指定管脚(Max+plusⅡ/Floorplan Editor) 7)保存和编译源文件(File/project/Save & Compile) 8)生成波形文件(Max+plusⅡ/Waveform Editor) 9)仿真(Max+plusⅡ/Simulator) 10)下载配置(Max+plusⅡ/Programmer) [实验报告要求] 不做要求。 实验二简单组合逻辑电路设计 [实验目的] 1 通过本实验提供的实例,掌握组合逻辑电路的设计方法。

09EDA实验指导书

EDA实验指导书

目录 实验一基于QUARTUSII图形输入电路的设计 (2) 实验二含异步清零和同步使能的加法计数器 (5) 实验三图形和VHDL混合输入的电路设计 (7) 实验四矩阵键盘接口电路的设计 (10) 实验五交通灯控制电路实验 (16) 附图EP1K10TC100管脚图 (24) 主芯片:ACEX 1K 系列的EP1K10TC100-3 下载电缆:Byte Blaster II

实验一基于QUARTUSII图形输入电路的设计 一、实验目的 1、通过一个简单的3线—8线译码器的设计,掌握组合逻辑电路的设计方法。 2、初步了解QUARTUSII原理图输入设计的全过程。 3、掌握组合逻辑电路的静态测试方法。 二、实验原理 3线-8线译码器三输入,八输出。当输入信号按二进制方式的表示值为N时,输出端标号为N的输出端输出高电平表示有信号产生,而其它则为低电平表示无信号产生。因为三个输入端能产生的组合状态有八种,所以输出端在每种组合中仅有一位为高电平的情况下,能表示所有的输入组合。其真值表如表1-1所示 输入输出 D2 D1 D0 Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 1 0 0 0 1 1 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 表1-1 3线-8线译码器真值表 译码器不需要像编码器那样用一个输出端指示输出是否有效。但可以在输入中加入一个输出使能端,用来指示是否将当前的输入进行有效的译码,当使 能端指示输入信号无效或不用对当前信号进行译码时,输出端全为高电平,表 示无任何信号。本例设计中没有考虑使能输入端,自己设计时可以考虑加入使 能输入端时,程序如何设计。 三、实验内容 在本实验中,用三个拨动开关来表示3线-8线译码器的三个输入(D2-D0);用

Verilog的135个经典设计实例

【例3.1】4位全加器 module adder4(cout,sum,ina,inb,cin); output[3:0] sum; output cout; input[3:0] ina,inb; input cin; assign {cout,sum}=ina+inb+cin; endmodule 【例3.2】4位计数器 module count4(out,reset,clk); output[3:0] out; input reset,clk; reg[3:0] out; always @(posedge clk) begin if (reset) out<=0; //同步复位 else out<=out+1; //计数 end endmodule 【例3.3】4位全加器的仿真程序 `timescale 1ns/1ns `include "adder4.v" module adder_tp; //测试模块的名字 reg[3:0] a,b; //测试输入信号定义为reg型 reg cin; wire[3:0] sum; //测试输出信号定义为wire型 wire cout; integer i,j; adder4 adder(sum,cout,a,b,cin); //调用测试对象 always #5 cin=~cin; //设定cin的取值 initial begin a=0;b=0;cin=0; for(i=1;i<16;i=i+1) #10 a=i; //设定a的取值 end - 1 -

initial begin for(j=1;j<16;j=j+1) #10 b=j; //设定b的取值 end initial//定义结果显示格式 begin $monitor($time,,,"%d + %d + %b={%b,%d}",a,b,cin,cout,sum); #160 $finish; end endmodule 【例3.4】4位计数器的仿真程序 `timescale 1ns/1ns `include "count4.v" module coun4_tp; reg clk,reset; //测试输入信号定义为reg型 wire[3:0] out; //测试输出信号定义为wire型 parameter DELY=100; count4 mycount(out,reset,clk); //调用测试对象 always #(DELY/2) clk = ~clk; //产生时钟波形 initial begin//激励信号定义 clk =0; reset=0; #DELY reset=1; #DELY reset=0; #(DELY*20) $finish; end //定义结果显示格式 initial $monitor($time,,,"clk=%d reset=%d out=%d", clk, reset,out); endmodule 【例3.5】“与-或-非”门电路 module AOI(A,B,C,D,F); //模块名为AOI(端口列表A,B,C,D,F) input A,B,C,D; //模块的输入端口为A,B,C,D output F; //模块的输出端口为F - 2 -

EDA实验指导书

ED心验指导书齐鲁理工学院

目录 实验一Protel DXP 2004认识实验 0 实验二两级阻容耦合三极管放大电路原理图设计 0 实验三原理图元件库建立与调用 (2) 实验四两级阻容耦合三极管放大电路PCB图设计............................ .4实验五集成电路的逻辑功能测试.. (6) 实验六组合逻辑电路分析与设计............................................... 1.1实验七Quartus II的使用 ................................................. 1.6实验八组合逻辑器件设计. (16) 实验九组合电路设计 (24)

实验一Protel DXP 2004 认识实验 一、实验目的 1. 掌握Protel DXP 2004的安装、启动和关闭。 2. 了解Protel DXP 2004主窗口的组成和各部分的作用。 3. 掌握Protel DXP 2004工程和文件的新建、保存、打开。 二、实验内容与步骤 1、Protel_DXP_2004 的安装 (1) 用虚拟光驱软件打开Protel_DXP_2004.iso 文件 (2) 运行setup\Setup.exe 文件,安装Protel DXP 2004 (3) 运行破解程序后,点击导入模版”,先导入一个ini文件模版(如果要生成单机版的License选择Unified Nexar-Protel License.ini;要生成网络版的License选择Unified Nexar-Protel Network License.ini ),然后修改里面的参数:TransactorName=Your Name (将"Your Name替换为你想要注册的用户名);SerialNumber=0000000 (如果你只有一台计算 机,那么这个可以不用修改,如果有两台以上的计算机且连成局域网,那么请保证每个License文件中的SerialNumber=为不同的值。修改完成后点击生成协议文件",任意输入一 个文件名(文件后缀为.alf)保存,程序会在相应目录中生成1个License文件。点击替换密钥”,选取DXP.exe (在DXP 2004安装目录里,默认路径为),程序会自动替换文件中的公开密钥。将前面生成的License文件拷贝至DXP 2004安装目录里(默认路径为)授权完成。 (4) 打开Protel 在左上角DXP 菜单下的Preference 菜单项里,选中Use localize resources后关闭Protel_DXP_2004 ,重新打开软件变为简体中文版本。 2、Protel_DXP_2004 的卸载 卸载Protel_DXP_2004的具体步骤如下: (1) 在Windows的“开始”菜单中选择“设置/控制面板”,然后在控制面板中选择“添加/删除程序”选项,将弹出对话框。从中选择DXP 2004应用软件。 (2) 单击删除”按钮,将弹出对话框,询问用户是否真的要删除程序。 (3) 单击“是”按钮,开始卸载。在卸载过程中,若想终止卸载,可单击“取消”按

EDA实验指导书new_Quartus2

EDA技术实验手册及程序代码 物理与信息项目学院 学号:111000228 姓名:汪艺彬 注意事项 1、本实验手册是为了配合《EDA技术实用教程》,作为本课程实验环节的补充 指导而编制。 2、实验中涉及的QuartusⅡ软件的使用请参考 《EDA技术实用教程》中有关章节。 手册中所有的虚线空白框,都留出来作为实验记录之用,每个实验完成后,应按照实验内容的要求将实验结果记入框中。 4、每个实验后面都附有一道思考题,完成实验内容后可以作为更进一步的练习 。 5、每次实验后将手册相关部分<完成实验结果记录)和实验源代码<.vhd文件) 一起,作为实验报告上交。 6、课程结束后请将所有报告按顺序加封面装订好上交,作为实验部分成绩计入 总成绩。 实验一利用原理图输入法设计4位全加器一、实验目的: 熟悉如何在QuartusⅡ集成环境下利用原理图输入设计简单组合逻辑电路,掌握层次化的电路设计方法。 二、实验原理: 一个4位全加器可以由4个一位全加器构成,加法器间的进位可以串行方式实现,即将低位加法器的进位输出cout与相邻的高位加法器的进位输入信号cin相接。 三、实验内容: 1.QuartusII软件的熟悉

熟悉QuartusⅡ环境下原理图的设计方法和流程,可参考课本5.4节的内容,重点掌握层次化的设计方法。 2.设计1位全加器原理图 设计的原理图如下所示 3.利用层次化原理图方法设计4位全加器 <1)生成新的空白原理图,作为4位全加器设计输入 <2)利用已经生成的1位全加器作为电路单元,设计4位全加器的原理图,如下所示 4、设计一个超前进位4位全加器 以上设计的全加器是基于串行进位的结构,高位的进位输入必须等待低位的运算结果,造成较长的延时。通过对进位位进行超前运算,可以缩短这部分的延时。 在已有1位全加器的基础上设计一个具有超前进位结构的4位全加器,原理图如下所示 5、完成设计流程

EDA实验箱实验指导书

实验二流水灯 1.实验目的 通过本实验让学生进一步了解、熟悉和掌握CPLD/FPGA开发软件的使用方法及VHDL 语言的编程方法;学习简单的时序电路的设计和硬件测试。 2.实验内容 本实验的内容是控制实验箱上的发光二极管LED1—LED8,使之实现流水灯显示。3.实验原理 在LED1~LED8引脚上周期性地输出流水数据,即输出的数据依次为11111111、11111110、11111100、11111000、11110000、11100000、11000000、10000000、00000000,如此循环显示,输出数据“0”,表示点亮相应的LED小灯。为了方便观察,流水的速率控制在2Hz左右。在核心板上有一个48MHz的标准时钟源,该时钟源与芯片EP2C5的23脚相连。为了产生2Hz的时钟源,在此调用了分频模块int_div。 4.实验步骤 (1)启动Quartus II,建立一个空白工程,然后命名为led_waterflow.qpf。 (2)新建ledwater.vhd源程序文件,源代码如下。然后进行综合编译。若在编译过程中发现错误,则找出并更正错误,直到编译成功为止。生产符号文件ledwater.bsf (File→ Create/_Update → Create Symbol Files for Current File)。 流水灯程序参考 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_Arith.ALL; USE IEEE.STD_LOGIC_Unsigned.ALL; ENTITY ledwater IS PORT( clk: IN STD_LOGIC; led: OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );END; ARCHITECTURE one OF ledwater IS SIGNAL led_r:STD_LOGIC_VECTOR(8 DOWNTO 0); BEGIN led<=led_r(7 DOWNTO 0); PROCESS(clk) BEGIN IF clk’event and clk=’1’ THEN led_r<=led_r(7 DOWNTO 0) & '0'; IF led_r="000000000" THEN --循环完毕吗? led_r<="111111111"; --是,则重新赋初值 END IF; END IF; END PROCESS; END; (3)将实验模块库里的int_div.vhd和int_div.bsf拷贝到工程目录下。

EDA实验指导书

实验一利用原理图输入法设计4位全加器 一、实验目的: 熟悉如何在QuartusⅡ集成环境下利用原理图输入设计简单组合逻辑电路,掌握层次化的电路设计方法。 二、实验原理: 一个4位全加器可以由4个一位全加器构成,加法器间的进位可以串行方式实现,即将低位加法器的进位输出cout与相邻的高位加法器的进位输入信号 cin相接。 三、实验内容: 1.QuartusII软件的熟悉 熟悉QuartusⅡ环境下原理图的设计方法和流程,可参考课本5.4节的内容,重点掌握层次化的设计方法。 2.设计1位全加器原理图 设计的原理图如下所示 3.利用层次化原理图方法设计4位全加器 (1)生成新的空白原理图,作为4位全加器设计输入 (2)利用已经生成的1位全加器作为电路单元,设计4位全加器的原理图,如 下所示 以上为一位半加器

以上为1位全加器 以上为4位全加器 4、设计一个超前进位4位全加器 以上设计的全加器是基于串行进位的结构,高位的进位输入必须等待低位的运算结果,造成较长的延时。通过对进位位进行超前运算,可以缩短这部分的延 时。 在已有1位全加器的基础上设计一个具有超前进位结构的4位全加器,原理图如下所示

以上为4位超前进位全加器 5、完成设计流程 (1)在QuartusII环境下对以上设计电路按照教材5.1节的流程进行编译,排 除错误,生成最终配置文件。 (2)对结果进行时序仿真,观察设计的正确性(注意观察时序仿真波形中引入 的延时),如有错误应改正电路,并重新执行整个流程,直到得到正确的仿真结 果。 四、思考题 1、你在原理图设计中使用的是哪一个库里面的元件,是否还有其他库可用,有 什么不同?请试着用另外一个库重复以上的设计内容。 2、试用QuartusII下的时序分析器(教材11.3.7~11.3.8)分析两种进位结构的 4位全加器的时序,给出数据对比,说明两者之间的性能差异。 以上为串行加法器仿真时序

Verilog程序例子

modul e and1(a, b, c); input a; input b; output c; assign c = a & b; endmodul e `timescale 1ns/1ns modul e t; reg a; reg b; wire c; and1 t(a,b,c); initial begin a=0; b=0; #100 a = 1; b = 0; #100 a = 0; b = 1; #100 a = 0; b = 0; #100 a = 1; b = 1; #100 $stop;

end initial $monitor("a = %d, ", a, " b = %d, ", b, "c = %d\n", c); endmodul e modul e add(a, b, in, c, out); input a; input b; input in; output c; output out; assign {out, c} = a + b + in; endmodul e `timescal e 1ns/1ns modul e count_t; reg clk; reg a; reg b; reg in; wire c; wire out; ad d process(a, b, in, c, out);

initial clk = 0; always forever #5 clk = ~clk; initial begin a = 0; b = 0; in = 0; #10 a = 0; b = 0; in = 1; #10 a = 0; b = 1; in = 0; #10 a = 0; b = 1; in = 1; #10 a = 1; b = 0; in = 0; #10 a = 1; b = 0; in = 1; #10 a = 1; b = 1; in = 0; #10 a = 1; b = 1; in = 1; end initial begin #200 $finish; end initial $monitor(" out = %d, c = %d\n", out, c); endmodul e modul e compare (equal, a, b); input a,b; output equal; assign equal= (a==b)?1:0; endmodul e `timescal e 1ns/1ns modul e t; reg a, b; wire equal; initial begin a=0; b=0; #100 a = 1; b = 0;

EDA实验指导书1

EDA实验指导书 天津大学仁爱学院 2011年9月30日

目录 1.实验一LED实验 (验证性实验) 2.实验二LED点阵实验 (综合性实验) 3.实验三LCD显示实验 (设计性实验)

实验一:LED实验 一、实验目的 1.熟悉ISE8.2开发环境,掌握工程的生成方法; 2.熟悉SEED-XDTK_V4实验环境; 二、实验内容 1.创建工程; 2.添加HDL资源文件; 3.配置一个应用程序完成设计。 三、实验准备 1.通过USB口下载电缆将计算机的USB口及SEED-FEM025板的J9连接好; 2.启动计算机,打开SEED-XDTK_V4实验箱电源开关。观察SEED-FEM025板上的+ 5V(D11)的电源指示灯是否均亮。若有不亮的,请断开电源,检查电源。 四、实验步骤 1.创建工程 1)双击桌面Xilinx ISE8.2快捷方式打开ISE工程管理器(Project Navigator); 2)打开Project Navigator后,选择File→New Project,弹出新建工程对话框; 3)在工程路径中单击“…”按钮,将工程指定到如下目录D:\02.V4_lab,单击确定; 4)在工程名称中输入led,点击Next按钮,如图1.1所示; 图1.1 5)弹出器件特性对话框。器件族类型(Device Family)选择“Virtex4”,器件型号(Device) 选“XC4VSX25FF668-10”,综合工具(Synthesis Tool)选“XST(VHDL/Verilog)”,仿真器(Simulator)选“ISE Simulator”,如图1.2;

EDA实验指导书全(Verilog版)

EDA实验指导书 熊利祥编 武汉理工大学华夏学院

2011年9月

前言 一、实验课目的 EDA实验课是电子工程类专业教学中重要的实践环节,包括了ISE开发环境基本操作及Verilog语言、组合逻辑电路设计、流水灯设计、计数器设计、扫描显示电路的驱动、综合层次性实验——交通灯或数字秒表设计实验。要求学生通过实验学会正确使用EDA技术,掌握FPGA器件的开发,熟练使用ISE开发环境,掌握Verilog 语言的编程,掌握数字电路和系统的设计。 通过实验,使学生加深对课堂专业教学内容的理解,培养学生理论联系实际的能力,实事求是,严谨的科学作风,使学生通过实验结果,利用所学的理论去分析研究EDA技术。培养学生使用EDA实验设备的能力以及运用实验方法解决实际问题的能力。 二、实验要求: 1.课前预习 ①认真阅读实验指导书,了解实验内容; ②认真阅读有关实验的理论知识; ③读懂程序代码。 2.实验过程 ①按时到达实验室; ②认真听取老师对实验内容及实验要求的讲解; ③认真进行实验的每一步,观察程序代码与仿真结果是否相符; ④将实验过程中程序代码和仿真结果提交给老师审查; ⑤做完实验后,整理实验设备,关闭实验开发板电源、电脑电源后方可离开。 3.实验报告 ①按要求认真填写实验报告书; ②认真分析实验结果; ③按时将实验报告交给老师批阅。

三、实验学生守则 1.保持室内整洁,不准随地吐痰、不准乱丢杂物、不准大声喧哗、不准吸烟、不准吃东西; 2.爱护公务,不得在实验桌及墙壁上书写刻画,不得擅自删除电脑里面的文件; 3.安全用电,严禁触及任何带电体的裸露部分,严禁带电接线和拆线; 4.任何规章或不按老师要求操作造成仪器设备损坏须论价赔偿。

eda实验指导书新印刷

淮阴工学院EDA技术实验指导书 编者:叶小婷 电子与电气工程学院 2014年6月7日

目录 实验一基于QUARTUSII 图形输入电路的设计 (1) 实验二基于VHDL 格雷码编码器的设计 (16) 实验三含异步清零和同步使能的加法计数器 (18) 实验四八位七段数码管动态显示电路的设计 (20) 实验五数控分频器的设计 (22) 实验六图形和VHDL 混合输入的电路设计 (23) 实验七四位并行乘法器的设计 (26) 实验八基本触发器的设计 (28) 实验九四位全加器设计 (30) 实验十矩阵键盘显示电路的设计 (32) 实验十一用VHDL 设计七人表决器 (35) 实验十二用VHDL 设计四人抢答器 (37) 实验九熟悉PROTEL99环境 (39) 实验十原理图设计 (42) 实验十一元件制作与网络表操作 (44) 实验十二印刷电路板设计 (47) 附录一实验箱常用管脚分配表 (49) 附录二参考程序 (51)

实验一基于QUARTUSII 图形输入电路的设计 一、实验目的 1.通过一个简单的3—8译码器的设计,掌握组合逻辑电路的设计方法。 2.初步了解QUARTUSII 原理图输入设计的全过程。 3.掌握组合逻辑电路的静态测试方法。 二、实验设备 1.PC机一台; 2.Altera Blaster下载器一根; 3.THGSC-3型实验箱一台。 三、实验原理 3-8译码器三输入,八输出。当输入信号按二进制方式的表示值为N时,输出端标号为N 的输出端输出高电平表示有信号产生,而其它则为低电平表示无信号产生。因为三个输入端能产生的组合状态有八种,所以输出端在每种组合中仅有一位为高电平的情况下,能表示所有的输入组合。 译码器不需要像编码器那样用一个输出端指示输出是否有效。但可以在输入中加入一个输出使能端,用来指示是否将当前的输入进行有效的译码,当使能端指示输入信号无效或不用对当前信号进行译码时,输出端全为高电平,表示无任何信号。本例设计中没有考虑使能输入端,自己设计时可以考虑加入使能输入端时,程序如何设计。 四、实验内容 在本实验中,用三个拨动开关(SW1~SW3)来表示三八译码器的三个输入(A、B、C);用八个LED 来表示三八译码器的八个输出(D1~D8)。通过输入不同的值来观察输入的结果与三八译码器的真值表是否一致。实验箱中的拨动开关,当开关闭合(拨动开关的档位在下方)时其输出为低电平,反之输出高电平。实验箱中的拨动开关与FPGA 的接口电路,LED 灯与FPGA 的接口电路以及拨动开关、LED 与FPGA 的管脚连接在用户手册中都做了详细说明,这里不再赘述。 五、实验步骤 下面将通过这个实验,向读者介绍QUARTUSII 的项目文件的生成、编译、管脚分配以及时序仿真等的操作过程。 1.建立工程文件 1)选择“开始>程序>Altera>QuartusII 9.0”,运行QUARTUSII 软件。或者双击桌面上的QUARTUSII 的图标运行QUARTUSII 软件,出现如图1-1 所示,如果是第一次打开QUARTUSII 软件可能会有其它的提示信息,使用者可以根据实际情况进行设定后进入图1-1 所示界面。 2)选择软件中的,新建一个工程。如图1-2所示。 3)点击图1-2 中的Next 进入工作目录,工程名的设定对话框如图1-3 所示。第一个输入框为工程目录输入框,用户可以输入如e:/eda 等工作路径来设定工程的目录,设定好后,所有的生成文件将放入这个工作目录。第二个输入框为工程名称输入框,第三个输入框为顶层实体名称输入框。用户可以设定如exp1,一般情况下工程名称与实体名称相同。使用者也

Verilog的150个经典设计实例

module adder4(cout,sum,ina,inb,cin); output[3:0] sum; output cout; input[3:0] ina,inb; input cin; assign {cout,sum}=ina+inb+cin; endmodule 【例3.2】4位计数器 module count4(out,reset,clk); output[3:0] out; input reset,clk; reg[3:0] out; always @(posedge clk) begin if (reset) out<=0; //同步复位 else out<=out+1; //计数 end endmodule 【例3.3】4位全加器的仿真程序 `timescale 1ns/1ns `include "adder4.v" module adder_tp; //测试模块的名字 reg[3:0] a,b; //测试输入信号定义为reg型 reg cin; wire[3:0] sum; //测试输出信号定义为wire型 wire cout; integer i,j; adder4 adder(sum,cout,a,b,cin); //调用测试对象 always #5 cin=~cin; //设定cin的取值 initial begin a=0;b=0;cin=0; for(i=1;i<16;i=i+1) #10 a=i; //设定a的取值 end - 1 -

initial begin for(j=1;j<16;j=j+1) #10 b=j; //设定b的取值 end initial//定义结果显示格式 begin $monitor($time,,,"%d + %d + %b={%b,%d}",a,b,cin,cout,sum); #160 $finish; end endmodule 【例3.4】4位计数器的仿真程序 `timescale 1ns/1ns `include "count4.v" module coun4_tp; reg clk,reset; //测试输入信号定义为reg型 wire[3:0] out; //测试输出信号定义为wire型 parameter DELY=100; count4 mycount(out,reset,clk); //调用测试对象 always #(DELY/2) clk = ~clk; //产生时钟波形 initial begin//激励信号定义 clk =0; reset=0; #DELY reset=1; #DELY reset=0; #(DELY*20) $finish; end //定义结果显示格式 initial $monitor($time,,,"clk=%d reset=%d out=%d", clk, reset,out); endmodule 【例3.5】“与-或-非”门电路 module AOI(A,B,C,D,F); //模块名为AOI(端口列表A,B,C,D,F) input A,B,C,D; //模块的输入端口为A,B,C,D output F; //模块的输出端口为F - 2 -

FPGA设计实验指导书(2013)

《FPGA设计》实验指导书

安全操作注意事项 1、接插下载电缆前,请务必关闭实验箱开关,避免损坏下载电缆或实验箱器件。 2、操作过程中应防止静电。 3、保持实验箱和电路板的表面清洁。 4、小心轻放,避免不必要的硬件损伤或者人身受伤。 实验箱简介

实验一简单组合逻辑设计 一、实验目的和任务 1、熟习Quartus II软件的使用; 2、掌握用原理图输入法和硬件描述语言(Verilog HDL)两种方法来设计逻 辑电路; 3、通过电路的仿真及验证,进一步了解4选1数据选择器的功能; 二、实验内容 1、用原理图输入法来设计4选1数据选择器 参照按图1-1所示来编辑完成4选1数据选择器的原理图输入,其中a、b、c、d 为数据输入端,sel[1]、sel[0]为控制输入端,q为4选1数据输出端。存盘仿真后,观察仿真波形,以验证数据选择器的功能。 图1-1 4选1数据选择器原理图 2、用Verilog HDL硬件描述语言来设计4选1数据选择器 用QuartusII中的文本编辑器,编辑输入4选1数据选择器源程序:module m41( a, b, c, d, sel, q); input a,b,c,d; input [1:0]sel; output q; reg q; always @( sel) case(sel) 2’b00: q=a; 2’b01: q=b;

2’b11: q=d; endcase endmodule 程序中的a 、b 、c 、d 依然为数据输入端,sel[1]、sel[0]为控制输入端,q 为4选1数据输出端。同样存盘后进行仿真,并观察仿真波形,以验证数据选择器的功能。 三、实验仪器、设备及材料 电脑、EDA 软件、实验箱、下载电缆。 四、实验原理 4选1数据选择器的原理框图及真值表如图1-2及表1-1所示,sel[1:0]可能出现四种组合情况: 00 01 10 11,它分别对应选通四个不同的数据输入a 、b 、c 、d ,从q 端输出。结合以前所学数字电路的知识,可由真值表得出利用“与非门”实现的逻辑电路,进而可用QuartusII 原理图输入方法,设计出该4选1数据选择器;如应用EDA 技术所学的Verilog HDL 硬件描述语言来描述该电路功能,即可设计出该4选1数据选择器的源程序。 图1-2 4选1数据选择器的原理框图 q Sel[1]输出 选择输入 0a 01b 00 c 11 d 1 Sel[0]表1-1 真值表 五、重点、难点 d a b c

verilog实例代码2word版本

v e r i l o g实例代码2

//与门 module zxhand2(c,a,b); input a,b; output c; assign c= a & b; endmodule //或门 module zxhor2(c,a,b); input a,b; output c; assign c= a | b; endmodule //非门 module zxhnot2(c,b); input b; output c; assign c=~ b; endmodule ////异或门 module zxhxro2(c,a,b); input b; output c; assign c=a ^ b; endmodule 两选一电路 module data_scan(d0,d1,sel,q); output q; input d0,d1,sel; wire t1,t2,t3; n1 zxhand2(t1,d0,sel); n2 zxhnot2 (t4,sel); n3 zxhand2(t2,d1,t4); n4 zxhor2(t3,t1,t2); assign q=t1;

endmodule verilog HDL实例(一) 练习一.简单的组合逻辑设计 目的: 掌握基本组合逻辑电路的实现方法。 这是一个可综合的数据比较器,很容易看出它的功能是比较数据a与数据b,如果两个数据相同,则给出结果1,否则给出结果0。在Verilog HDL中,描述组合逻辑时常使用assign结构。注意equal=(a==b)?1:0,这是一种在组合逻辑实现分支判断时常使用的格式。 模块源代码: //--------------- compare.v ----------------- module compare(equal,a,b); input a,b; output equal; assign equal=(a==b)?1:0; //a等于b时,equal输出为1;a不等于b时, //equal输出为0。 endmodule 测试模块用于检测模块设计得正确与否,它给出模块的输入信号,观察模块的内部信号和输出信号,如果发现结果与预期的有所偏差,则要对设计模块进行修改。 测试模块源代码: `timescale 1ns/1ns //定义时间单位。 module comparetest; reg a,b; wire equal; initial //initial常用于仿真时信号的给出。 begin a=0; b=0; #100 a=0; b=1; #100 a=1; b=1; #100 a=1; b=0; #100 $stop; //系统任务,暂停仿真以便观察仿真波形。 end compare compare1(.equal(equal),.a(a),.b(b)); //调用模块。 Endmodule

相关文档
最新文档