EDA实习报告_eda实习报告

2020-02-28 实习报告 下载本文

EDA实习报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“eda实习报告”。

EDA实验报告

系别:

班级:

姓名:

学号:

目录

1.EDA介绍

2.Quartus II软件介绍

3.实习任务

4.封装引脚图

5.设计程序

6.结果显示

7.实习心得

1.EDA介绍

EDA是电子设计自动化(Electronic Design Automation)缩写。EDA技术是以计算机为工具,根据硬件描述语言HDL(Hardware Description language)完成的设计文件,自动地完成逻辑编译、化简、分割、综合及优化、布局布线、仿真以及对于特定目标芯片的适配编译和编程下载等工作。硬件描述语言HDL是相对于一般的计算机软件语言,如:C、PASCAL而言的。HDL语言使用与设计硬件电子系统的计算机语言,它能描述电子系统的逻辑功能、电路结构和连接方式。设计者可利用HDL程序来描述所希望的电路系统,规定器件结构特征和电路的行为方式;然后利用综合器和适配器将此程序编程能控制FPGA和CPLD内部结构,并实现相应逻辑功能的的门级或更底层的结构网表文件或下载文件。目前,就FPGA/CPLD开发来说,比较常用和流行的HDL主要有ABEL-HDL、AHDL和VHDL[1]。

几乎所有适于大学生做的数字逻辑电路实验都可以在计算机上利用EDA(Electronic Design Automatic—电子设计自动化)软件进行设计、仿真,只有极少量外部配件不能在计算机上进行仿真。因此,在实验前期阶段,即实验预习阶段的主要应用工具是EDA软件,利用EDA软件可以设计、仿真实验课题,进行虚拟实验。通过虚拟实验使实验者在进入真实实验前就能对预做的实验有相当的了解,甚至可以预测到实验的结果。这样在实际做实验时,可以把许多设计型实验的难度降低,同时能有更多的时间让实验者动手做实验,研究问题,提高实验效率。当前数字电路设计已由计算机辅助设计进入到以计算机为主的设计时代。

2.Quartus II 是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。

Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三放EDA工具。

此外,Quartus II 通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。

Maxplus II 作为Altera的上一代PLD设计软件,由于其出色的易用性而得到了广泛的应用。目前Altera已经停止了对Maxplus II 的更新支持,Quartus II 与之相比不仅仅是支持器件类型的丰富和图形界面的改变。Altera在Quartus II 中包含了许多诸如SignalTap II、Chip Editor和RTL Viewer的设计辅助工具,集成了SOPC和HardCopy设计流程,并且继承了Maxplus II 友好的图形界面及简便的使用方法。

3.1 设计信号发生器使其能在仪器上显示正弦、三角、方波、锯齿波(其中的两种波形)

2设计频率计使其能测出制定波形的频率

4.波形发生器封装引脚图

5.波形发生器程序(正弦波,方波)

Boxing4

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY boxing4 IS PORT(RIN:in std_logic;

clk: IN std_logic;SINT:in std_logic_VECTOR(1 downto 0);--set:in std_logic;--_vector;--(1 downto 0);rs,rw,en,lcdon,lcdbon : OUT STD_LOGIC;YOUT:out std_logic_vector(7 downto 0);data : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END boxing4;ARCHITECTURE fwm OF boxing4 IS

TYPE states IS(clear_display,set_initial,set_cgram,write_cgram,set_addram1,diaplay_cgram,set_addram2,diaplay_cgrom);--clear_display-清屏;--set_initial-初始化设置;--set_cgram-设置 cgram 地址;--write_cgram-字模写入 cgram;--set_addram1-设置显示 cgram 字符的 addram 地址;--diaplay_cgram-显示 cgram 字符;--set_addram2-设置显示 cgrom 字符的 addram 地址;--diaplay_cgrom-显示 cgrom 字符 SIGNAL state:states;TYPE ram_array0 IS ARRAY(0 TO 7)OF STD_LOGIC_VECTOR(7 DOWNTO 0);--定义 ram_array0 为二维数组

TYPE ram_array1 IS ARRAY(0 TO 7)OF ram_array0;--定义 ram_array1 为三维数组 SIGNAL lcd_clk : STD_LOGIC;SIGNAL data1,data2,data3:INTEGER RANGE 0 TO 9;--signal n:std_logic;SIGNAL net1,net2:std_logic_vector(7 downto 0);--signal net3:std_logic;

COMPONENT choice4_1

PORT(s:in std_logic_vector(1 downto 0);

d1,d2: in std_logic_vector(7 downto 0);

y: out std_logic_vector(7 downto 0));END COMPONENT;COMPONENT fangbo PORT(clkf,rf:in std_logic;

qf:out std_logic_vector(7 downto 0));END COMPONENT;COMPONENT sin PORT(clksin,rsin:in std_logic;

da:out std_logic_vector(7 downto 0));END COMPONENT;BEGIN u1: fangbo PORT MAP(clkf=>CLK,rf=>RIN,qf=>net1);u2: sin PORT MAP(clksin=>CLK,rsin=>RIN,da=>net2);u3: choice4_1 PORT MAP(s=>SINT,d1=>net1,d2=>net2,y=>YOUT);en

PROCESS(clk)

CONSTANT m : INTEGER:=50000;--50M 分频到 1kHz。

VARIABLE cout : INTEGER RANGE 0 TO 50000000:=0;BEGIN

IF clk'EVENT AND clk='0' THEN cout:=cout+1;

IF cout

ELSIF cout

ELSE cout:=0;

END IF;

END IF;

END PROCESS;

PROCESS(lcd_clk)CONSTANT cgram : ram_array1:=(--自定义 8 个 5*8 字符的字模(X“00”,X“0E”,X“00”,X“0E”,X“00”,X“1F”,X“00”,X“00”),--SAN(X“04”,X“1F”,X“04”,X“07”,X“05”,X“09”,X“13”,X“01”),--FANG(X“00”,X“1f”,X“04”,X“04”,X“17”,X“14”,X“14”,X“1f”),--ZHENG(X“0E”,X“02”,X“0E”,X“08”,X“08”,X“0e”,X“02”,X“0e”),--ZUO XIAN(X“04”,X“1E”,X“04”,X“08”,X“1e”,X“04”,X“09”,X“1f”),--YOU XIAN(X“00”,X“13”,X“0A”,X“03”,X“1a”,X“02”,X“0a”,X“13”),--ZUO BO(X“08”,X“1F”,X“09”,X“1E”,X“14”,X“08”,X“14”,X“03”),--YOU BO(X“18”,X“18”,X“07”,X“08”,X“08”,X“08”,X“07”,X“00”)--℃字符数据存储器);

VARIABLE datacnt:INTEGER RANGE 0 TO 15;

VARIABLE cnt: STD_LOGIC_VECTOR(7 DOWNTO 0);

VARIABLE num:INTEGER RANGE 0 TO 7;BEGIN--wait until net3='0';RISING_EDGE(lcd_clk);

IF RISING_EDGE(lcd_clk)THEN

--if sint=“00”then

case sint is

when “11”=>

CASE state IS

WHEN clear_display=> rs

WHEN set_initial=>

IF datacnt

ELSIF datacnt=3 THEN rs

ELSIF datacnt=4 THEN rs

ELSE rs

END IF;

WHEN set_cgram=>rs

data

IF num

END IF;

WHEN write_cgram=> rs

data

IF datacnt=8 THEN num:=num+1;datacnt:=0;state

IF num =7 THEN num:=0;cnt:=“00000000”;state

END IF;

END IF;

WHEN set_addram1=>rs

data

WHEN diaplay_cgram=>rs

--if sint=“00”then

IF datacnt=0 THEN data

ELSIF datacnt=1 THEN data

ELSIF datacnt=2 THEN data

ELSIF datacnt=3 THEN data

ELSIF datacnt=4 THEN data

ELSIF datacnt=5 THEN data

ELSIF datacnt=6 THEN data

ELSIF datacnt=7 THEN data

ELSIF datacnt=8 THEN data

ELSIF datacnt=9 THEN data

ELSIF datacnt=10 THEN data

ELSIF datacnt=11 THEN data

ELSIF datacnt=12 THEN data

ELSIF datacnt=13 THEN data

ELSIF datacnt=14 THEN data

ELSE data

END IF;

WHEN set_addram2=>rs

data

WHEN diaplay_cgrom=>rs

IF datacnt=0 THEN data

ELSIF datacnt=1 THEN data

ELSIF datacnt=2 THEN data

ELSIF datacnt=3 THEN data

ELSIF datacnt=4 THEN data

ELSIF datacnt=5 THEN data

ELSIF datacnt=6 THEN data

ELSIF datacnt=7 THEN data

ELSIF datacnt=8 THEN data

ELSIF datacnt=9 THEN data

ELSIF datacnt=10 THEN data

ELSIF datacnt=11 THEN data

ELSIF datacnt=12 THEN data

ELSIF datacnt=13 THEN data

ELSIF datacnt=14 THEN data

ELSE data

END IF;

END CASE;

--end if;

when “01”=>

--elsif sint =“01”then

CASE state IS

WHEN clear_display=> rs

WHEN set_initial=>

IF datacnt

ELSIF datacnt=3 THEN rs

ELSIF datacnt=4 THEN rs

ELSE rs

END IF;

WHEN set_cgram=>rs

data

IF num

END IF;

WHEN write_cgram=> rs

data

IF datacnt=8 THEN num:=num+1;datacnt:=0;state

IF num =7 THEN num:=0;cnt:=“00000000”;state

END IF;

END IF;

WHEN set_addram1=>rs

data

WHEN diaplay_cgram=>rs

--if sint=“00”then

IF datacnt=0 THEN data

ELSIF datacnt=1 THEN data

ELSIF datacnt=2 THEN data

ELSIF datacnt=3 THEN data

ELSIF datacnt=4 THEN data

ELSIF datacnt=5 THEN data

ELSIF datacnt=6 THEN data

ELSIF datacnt=7 THEN data

ELSIF datacnt=8 THEN data

ELSIF datacnt=9 THEN data

ELSIF datacnt=10 THEN data

ELSIF datacnt=11 THEN data

ELSIF datacnt=12 THEN data

ELSIF datacnt=13 THEN data

ELSIF datacnt=14 THEN data

ELSE data

END IF;

WHEN set_addram2=>rs

data

WHEN diaplay_cgrom=>rs

IF datacnt=0 THEN data

ELSIF datacnt=1 THEN data

ELSIF datacnt=2 THEN data

ELSIF datacnt=3 THEN data

ELSIF datacnt=4 THEN data

ELSIF datacnt=5 THEN data

ELSIF datacnt=6 THEN data

ELSIF datacnt=7 THEN data

ELSIF datacnt=8 THEN data

ELSIF datacnt=9 THEN data

ELSIF datacnt=10 THEN data

ELSIF datacnt=11 THEN data

ELSIF datacnt=12 THEN data

ELSIF datacnt=13 THEN data

ELSIF datacnt=14 THEN data

ELSE data

END IF;

END CASE;

--end if;

when others =>null;

end case;

END IF;end proce;END fwm;

Choice4-1

library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;

--程序包 entity choice4_1 is

--定义实体 port(s:in std_logic_vector(1 downto 0);

--信号选择端口s d1,d2: in std_logic_vector(7 downto 0);--d1d2d3d4分别连接四个波形发生模块

y: out std_logic_vector(7 downto 0));--定义输出信号端口 end choice4_1;architecture behav of choice4_1 is

--结构体 begin

proce(s)

begin

case s is

--case when语句进行信号位的选择

when “01”=>y

when “11”=>y

when others=>null;

end case;end proce;

--进程结束 end behav;

--结构体结束

fangbo

library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity fangbo is port(clkf,rf:in std_logic;qf:out std_logic_vector(7 downto 0));end entity;architecture behav of fangbo is signal a:bit;begin proce(clkf,rf)--计数分频

variable cnt:integer range 0 to 256;begin if(rf='0')then a

qf

sin

library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity sin is port(clksin,rsin:in std_logic;da:out BIT_vector(7 downto 0));end entity;architecture behav of sin is signal a:bit;begin proce(clksin,rsin)--计数分频 variable cnt:integer range 0 to 256;begin if(rsin='0')then a

variable tmp:std_logic_vector(7 downto 0);variable d:BIT_vector(7 downto 0);begin--if a='0' then--d:=“00000000”;--elsif clksin'event and clksin='1' then if a'event and a='1' then if tmp=“00111111” then tmp:=“00000000”;else tmp:=tmp+1;end if;case tmp is when “00000000”=>d:=“11111111”;when “00000001”=>d:=“11111110”;when “00000010”=>d:=“11111100”;when “00000011”=>d:=“11111001”;when “00000100”=>d:=“11110101”;when “00000101”=>d:=“11101111”;when “00000110”=>d:=“11101001”;when “00000111”=>d:=“11100001”;when “00001000”=>d:=“11011001”;when “00001001”=>d:=“11001111”;when “00001010”=>d:=“11000101”;when “00001011”=>d:=“10111010”;when “00001100”=>d:=“10101110”;when “00001101”=>d:=“10100010”;when “00001110”=>d:=“10010110”;when “00001111”=>d:=“10001010”;when “00010000”=>d:=“01111100”;when “00010001”=>d:=“01100000”;when “00010010”=>d:=“01100011”;when “00010011”=>d:=“01010111”;when “00010100”=>d:=“01001011”;when “00010101”=>d:=“01000000”;when “00010110”=>d:=“00110101”;when “00010111”=>d:=“00101011”;when “00011000”=>d:=“00100010”;when “00011001”=>d:=“00011010”;when “00011010”=>d:=“00010011”;when “00011011”=>d:=“00001101”;when “00011100”=>d:=“00001000”;when “00011101”=>d:=“00000001”;when “00011110”=>d:=“00000001”;when “00011111”=>d:=“00000000”;when “00100000”=>d:=“00000000”;when “00100001”=>d:=“00000001”;when “00100010”=>d:=“00000001”;when “00100011”=>d:=“00001000”;when “00100100”=>d:=“00001101”;when “00100101”=>d:=“00010011”;when “00100110”=>d:=“00011010”;when “00100111”=>d:=“00100010”;when “00101000”=>d:=“00101011”;when “00101001”=>d:=“00110101”;when “00101010”=>d:=“01000000”;when “00101011”=>d:=“01001011”;when “00101100”=>d:=“01010111”;when “00101101”=>d:=“01100011”;when “00101110”=>d:=“01100000”;when “00101111”=>d:=“01111100”;when “00110000”=>d:=“10001001”;when “00110001”=>d:=“10010110”;when “00110010”=>d:=“10100010”;when “00110011”=>d:=“10101110”;when “00110100”=>d:=“10111010”;when “00110101”=>d:=“11000101”;when “00110110”=>d:=“11011001”;when “00110111”=>d:=“11011001”;when “00111000”=>d:=“11100001”;when “00111001”=>d:=“11101001”;when “00111010”=>d:=“11101111”;when “00111011”=>d:=“11110101”;when “00111100”=>d:=“11111001”;when “00111101”=>d:=“11111100”;when “00111110”=>d:=“11111110”;when “00111111”=>d:=“11111111”;when others=>null;end case;end if;da

频率计

1、频率产生器: library ieee;use ieee.std_logic_1164.all;library lpm;use lpm.lpm_components.all;entity lpm_counter0 is port(clock: in std_logic;q: out std_logic_vector(26 downto 0));end lpm_counter0;architecture syn of lpm_counter0 is signal sub_wire0 : std_logic_vector(26 downto 0);component lpm_counter generic(lpm_direction : string;

lpm_port_updown : string;lpm_type : string;lpm_width : natural);port(clock : in std_logic;

q : out std_logic_vector(26 downto 0));end component;begin q

lpm_direction => “up”,lpm_port_updown => “port_unused”,lpm_type => “lpm_counter”, lpm_width => 27)port map(clock => clock,q => sub_wire0);end syn;

2、测频控制信号发生器 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity testpl is port(clk:in std_logic;--1Hz信号

tsten:out std_logic;--计数器使能信号 clr_cnt:out std_logic;--计数器清零信号 load:out std_logic);--锁存器输出控制信号 end testpl;architecture art of testpl is signal div2clk:std_logic;begin proce(clk)begin if clk'event and clk='1'then div2clk

3、有时钟使能的十进制计数器 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt10 is port(clk,clr,en: in std_logic;--clk:计数器时钟,clr:清零信号,en:计数使能信号

q: out std_logic_vector(3 downto 0);--q:4位计数结果输出 c10: out std_logic);--计数进位 end cnt10;architecture art of cnt10 is signal cqi: std_logic_vector(3 downto 0);begin proce(clk,clr)begin if clr='1' then cqi

proce(cqi)begin if cqi=“1001” then c10

4、16位锁存器 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity reg16b is port(load: in std_logic;--输出锁存控制信号 din: in std_logic_vector(15 downto 0);dout: out std_logic_vector(15 downto 0));end reg16b;architecture art of reg16b is begin proce(load,din)begin if load'event and load='1'then--load为高电平时teten为低电平,计数器禁止 dout

5、数码管控制器 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity ledcom is port(clk:in std_logic;--数码管扫描频率

datain: in std_logic_vector(15 downto 0);--锁存器输入的16位信号 dataout: out std_logic_vector(3 downto 0);-输出至译码器的4位信号 com: out std_logic_vector(3 downto 0));--输出数码管选择信号 end ledcom;architecture art of ledcom is signal comclk: std_logic_vector(1 downto 0);begin--comclk同扫描频率clk循环变化 proce(clk)begin if rising_edge(clk)then if comclk>=3 then

comclk

else comclk

proce(comclk)begin case comclk is when “00” => com com com comNULL;end case;end proce;--对应数码管的输出

proce(comclk,datain)begin case comclk is when “11”=> dataout dataout dataout dataoutNULL;end case;end proce;end art;

6、七段数码管的译码器 library IEEE;use IEEE.std_logic_1164.all;entity ymq is port(d_in: in std_logic_vector(3 downto 0);--数码管控制器输入四位信号

d_out: out std_logic_vector(7 downto 0));--输出8位信号 end ymq;--第8位d_out[7]为逗号 architecture art of ymq is begin proce(d_in)begin case d_in is--第8位为1高电平逗号不显示 when “0000” => d_out d_out d_out d_out d_out d_out d_out d_out d_out d_outNULL;end case;end proce;end art;

7、元件声明及例化将各个元器件依据设计相连 library ieee;use ieee.std_logic_1164.all;entity lx is port(clk: in std_logic;led: out std_logic_vector(7 downto 0);ledc: out std_logic_vector(3 downto 0));end lx;architecture art of lx is component lpm_counter0--待调用的频率生成器端口定义 PORT(clock: IN STD_LOGIC;q: OUT STD_LOGIC_VECTOR(26 DOWNTO 0));end component;--十进制计数器

component cnt10--待调用的有时钟使能的十进制计数器端口定义

port(clk,clr,en: in std_logic;q: out std_logic_vector(3 downto 0);c10: out std_logic);end component;--16位锁存器

component reg16b--待调用的32位锁存器端口定义 port(load: in std_logic;din: in std_logic_vector(15 downto 0);dout: out std_logic_vector(15 downto 0));end component;--测频控制器

component testpl--待调用的测频控制信号发生器端口定义 port(clk:in std_logic;tsten:out std_logic;clr_cnt:out std_logic;load:out std_logic);end component;--数码管选择器

component ledcom--待调用的数码管选择器端口定义 port(clk:in std_logic;datain: in std_logic_vector(15 downto 0);dataout: out std_logic_vector(3 downto 0);com: out std_logic_vector(3 downto 0));end component;--译码器

component ymq--待调用的译码器端口定义 port(d_in: in std_logic_vector(3 downto 0);d_out: out std_logic_vector(7 downto 0));end component;signal clk1,clk2,clk3: std_logic;--clk1为1Hz信号,clk2为被测信号,clk3为数码管扫描信号

signal tsten,clr,load: std_logic;signal c1,c2,c3,c4: std_logic;signal qout,rout: std_logic_vector(15 downto 0);signal datao: std_logic_vector(3 downto 0);begin u0:testpl port map(clk1,tsten,clr,load);u1:cnt10 port map(clk2,clr,tsten,qout(3 downto 0),c1);u2:cnt10 port map(c1,clr,tsten,qout(7 downto 4),c2);u3:cnt10 port map(c2,clr,tsten,qout(11 downto 8),c3);u4:cnt10 port map(c3,clr,tsten,qout(15 downto 12),c4);u5:reg16b port map(load,qout(15 downto 0),rout);u6:ledcom port map(clk3,rout,datao,ledc);u8:ymq port map(datao,led);u9:lpm_counter0 port map(clk,q(25)=>clk1,q(15)=>clk2,q(17)=>clk3);end art;

6.结果显示

7.实习心得

《EDA实习报告.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
EDA实习报告
点击下载文档
相关专题 eda实习报告 实习报告 EDA eda实习报告 实习报告 EDA
[实习报告]相关推荐
    [实习报告]热门文章
      下载全文