eda中的顶层文件代码怎样写
‘壹’ EDA设计顶层文件怎么写 各个模块我已经东拼西凑实现了,可是不知道如何给连接起来实现功能
随便找本EDA方面的书,看看例化那个章节是怎么写的。显式例化。
另外,各个模块这样找来后再拼接起来,功能肯定不能实现。你先看看书吧。
‘贰’ 你那份eda课程设计,就是洗衣机程序。最后是如何生成顶层文件的求帮助!!!
这个 貌似EDA技术后面书上有的?洗衣机程序……
‘叁’ eda实验中顶层文件采用VerilogHDL语言设计,怎么把各个功能模块通过元件例化的方法进行连接请给个例子
mole eda_top(clk, rst_n, din, dout);
input clk;
input rst_n;
input din;
output dout;
mole1_name instance1(
.clk(clk),
.rst_n(rst_n),
.din(din),
.dout(dout1)
);
mole2_name instance2(
.clk(clk),
.rst_n(rst_n),
.din(dout1),
.dout(dout2)
);
assign dout = dout2;
endmole
‘肆’ 有哪位朋友能提供一篇关于交通灯控制器(EDA)的论文给我,本人不胜感激!
给你2种方案以供参考:
方案对比与论证 本次毕业设计课题为交通灯控制(EDA),所要设计的交通信号灯控制电路要能够适用于由一条主干道和一条支干道的汇合点形成的十字交叉路口。能够做到主、支干道的红绿灯闪亮的时间不完全相同,在绿灯跳变红灯的过程中能够用黄灯进行过渡,使得行驶过程中的车辆有足够的时间停下来。还要求在主、支干道各设立一组计时显示器,能够显示相应的红、黄、绿倒计时。可以利用VHDL语言合理设计系统功能,使红黄绿灯的转换有一个准确的时间间隔和转换顺序。
交通灯控制的方案有很多,如:用标准逻辑器件、可编程逻辑器PLC、单片机、EDA等来实现交通灯的控制。下面就EDA和单片机两种方案做下比较与说明。
2.1 方案一: 采用单片机方案来实现,模型可以由电源电路、单片机主控电路、无线收发控制电路和显示电路四部分组成。在电源电路中,需要用到+5V的直流稳压电源,无线收发控制电路和显示电路应由编码芯片和数据发射模块两部分组成,主控电路的主要元件为AT89C51。硬件设计完成后还要利用计算机软件经行软件部分的
设计才能够实现相应的功能。
虽然利用单片机系统设计的交通灯控制器相对来说较稳定,能够完成较多功能的实现,但这些控制方法的功能修改及调试都需要硬件电路的支持,在一定程度上增加了功能修改及系统设计与调试的困难。
2.2 方案二: 用EDA技术 ,采用模块层次化设计,将此设计分为四个模块,状态控制模块,信号灯显示模块,数码扫描显示模块。将四个模块再分别用VHDL语言编写成,做成原理图模块,用原理图输入法做整个设计的顶层文件。本系统采用GW48 EDA/SOPC实验箱来设计交通灯控制器,模拟实现红、绿灯指挥交通的功能。它直接采用FPGA/CPLD芯片开发,用VHDL语言编程和QUARTUS Ⅱ6.0设计。交通灯控制器设计, 系统地阐述了用FPGA/CPLD实现数字电路的设计过程, 展示了FPGA/CPLD的强大功能和非凡特性此方案设计方便、简单,方法易懂、易操作,也易于寻找程序中的错误,周期短,设计灵活,易于修改等明显的的优点。而且,随着FPGA器件、设计语言和电子设计自动化工具的发展和改进,越来越多的电子系统采用FPGA来设计。未来,使用FPGA器件设计的产品将出现在各个领域里。因此,此次的交通信号灯控制器的设计将采用基于FPGA的设计方案来实现所要求的功能。
下面对EDA做下详细介绍:
完整地了解利用EDA技术进行设计开发的流程对于正确地选择和使用EDA软件,优化设计项目,提高设计效率十分有益。一个完整的、典型的EDA设计流程既是自顶向下设计方法的具体实施途径,也是EDA工具软件本身的组成结构。
设计输入:1.图形输入:图形输入通常包括原理图输入、状态图输入和波形图输入等方法。
状态图输入方法就是根据电路的控制条件和不同的转换方式,用绘图的方法,在EDA工具的状态图编辑器上绘出状态图,然后由EDA编译器和综合器将此状态变化流程图形编译综合成电路网表。
波形图输入方法则是将待设计的电路看成是一个黑盒子,只需告诉EDA工具该黑盒子电路的输入和输出时序波形图,EDA工具即能据此完成黑子电路的设计。
原理图输入方法是一种类似于传统电子设计方法的原理图编辑输入方式,即在EDA软件的图形编辑界面上绘制能完成特定功能的电路原理图。原理图由逻辑器件(符号)和连接线构成,图中的逻辑器件可以是EDA软件库中预制的功能模块,如与门、非门、或门、触发器以及各种含74系列器件功能的宏模块,甚至还有一些类似于IP的功能模块。
硬件描述语言文本输入:这种方式与传统的计算机软件语言编辑输入基本一致。就是将使用了某种硬件描述语言(HDL)的电路设计文本,如VHDL或Verilog的源程序,进行编辑输入。
综合:综合(Synthesis),就其字面含义应该为:把抽象的实体结合成单个或统一的实体。因此,综合就是把某些东西结合到一起,把设计抽象层次中的一种表述转化成另一种表述过程。
对于电子设计领域的综合概念可以表示为:将用行为和功能层次表达的电子系统转换为低层次的便于具体实现的模块组合装配而成的过程。
事实上,设计过程中的每一步都可以称为一个综合环节。设计过程通常从高层次的行为描述开始,以最底层的结构描述结束,每个综合步骤都是上一层次的转换:
从自然语言表述转换到VHDL语言算法表述,是自然语言综合。
从算法表述转换到寄存器的传输级(Register Transport Level,RTL)表述,即从行为域到结构域的综合,是行为综合。
从RTL级表述转换到逻辑门(包括触发器)的表述,即逻辑综合。
从逻辑门表述转换到版图表述(ASIC设计),或转换到FPGA的配置网表文件,可称为版图综合或结构综合。
一般地,综合是仅对应于HDL而言的。利用HDL综合器对设计进行综合是十分重要的一步。因为综合过程将把软件设计的HDL描述与硬件结构挂钩,是将软件转化为硬件电路的关键步骤,是文字描述与硬件实现的一座桥梁。综合救赎将电路的高级语言(如行为描述)转换成低级的,可与PFGA/CPLD的基本结构相映射的网表文件或过程。
当输入的HDL文件在EDA工具中检测无误后,首先面临的是逻辑综合,因此要求HDL源文件中的语句都是可综合的。
在综合后,HDL综合器一般都可以生成一种或多种文件格式网表文件,如EDIF、VHDL、VerilogHDL等标准格式,在这种网表文件中用各自的格式描述电路的结构。如在VHDL网表文件采用VHDL的语法,用结构描述的风格重新诠释综合后的电路结构。
适配(布线布局):适配器也称结构综合器,它的功能是将由综合器产生的网表文件配置于指定的目标器件中,使之产生最终的下载文件,如JEDEC、Jam格式。适配文件所选定的目标器件必须属于原综合器指定的目标器件系列。通常,EDA软件中的综合器可由专业的第三方EDA公司提供,而适配器则需由FPGA/CPLD供应商提供。因为适配器
的适配对象直接与器件的结构细节相对应。
适配器就是将综合后的网表文件针对某一具体的目标器件进行逻辑映射操作,其中包括底层期间配置、逻辑分割、优化、布局布线操作。适配完成后可以利用适配所产生的仿真文件做精准的时序仿真,同时产生可用于对目标器件进行编程的文件。
仿真:在编译下载前必须利用EDA工具对适配生成的结果进行模拟测试,就是所谓的仿真。
仿真就是让计算机根据一定的算法和一定的仿真库对EDA设计进行模拟,以验证设计,排除错误。仿真是在EDA设计过程中的重要步骤。时序与功能门级仿真通常由FPGA公司的EDA开发工具直接提供(当然也可以选用第三方的专业仿真工具),它可以完成两种不同级别的仿真测试:
时序仿真,就是接近真实器件运行特性的仿真。仿真文件中已包含了器件硬件特性参数。因而,仿真精确度高。但时序仿真的仿真文件必须来自对具体器件的适配器。综合后所得的EDIF等网表文件通常作为FPGA适配器的输入文件,产生的仿真网表文件中包含了精确地硬件延时信息。
功能仿真,是直接对VHDL、原理图描述或其他形式的逻辑功能进行测试模拟,以了解其实现的功能是否满足原设计要求的过程,仿真过程不涉及任何具 体器件的硬件特性。不经历适配阶段,在设计项目遍及编译(或综合)后即可进入门级仿真器进行模拟测试。直接进行功能仿真的好处是设计耗时短,对硬件库、综合器等没有任何要求。
‘伍’ EDA中的静态显示代码`````
第一次回答可获2分,答案被采纳可获得悬赏分mole dled_7s(clk,led_7s);
input clk;
output[11:0] led_7s ;
//output[3:0]scan;
reg[11:0]led_7s;
//reg[3:0]scan;
wire clk_25;
reg[24:0]count;
reg[3:0] tmp;
always@(posedge clk)
count<=count+1;
assign clk_25=count[24];
always@(posedge clk_25)
tmp<=tmp+1;
always@(tmp)
begin
case(tmp)
4'b0001:led_7s=12'b0001_0000_0110;//1 06
4'b0010:led_7s=12'b0001_0101_1011;//2 5B
4'b0011:led_7s=12'b0001_0100_1111;//3 4F
4'b0100:led_7s=12'b0001_0110_0110;//4 66
4'b0101:led_7s=12'b0001_0110_1101;//5 6D
4'b0110:led_7s=12'b0001_0111_1101;//6 7D
4'b0111:led_7s=12'b0001_0000_0111;//7 07
4'b1000:led_7s=12'b0001_0111_1111;//8 7F
4'b1001:led_7s=12'b0001_0110_1111;//9 6F
4'b1010:led_7s=12'b0001_0111_0111;//A 77
4'b0001:led_7s=12'b0001_0000_0110;//B 7C
4'b1100:led_7s=12'b0001_0011_1001;//C 39
4'b1101:led_7s=12'b0001_0101_1110;//D 5E
4'b1110:led_7s=12'b0001_0111_1001;//E 79
4'b1111:led_7s=12'b0001_0111_0001;//F 71
default:led_7s=12'b0001_0011_1111;//0 3F
endcase
end
endmole
和额外20分奖励。
‘陆’ EDA编程,数字频率合成器
DDS或DDFS是 Direct Digital Frequency Synthesis 的简称。DDS的工作原理是以数控振荡器的方式产生频率、相位可控制的正弦波。电路一般包括基准时钟、频率累加器、相位累加器、幅度/相位转换电路、D/A转换器和低通滤波器(LPF)。频率累加器对输入信号进行累加运算,产生频率控制数据K(frequency data或相位步进量)。相位累加器由N位全加器和N位累加寄存器级联而成,对代表频率的二进制码进行累加运算,是典型的反馈电路,产生累加结果。幅度/相位转换电路实质上是一个波形寄存器,以供查表使用。读出的数据送入D/A转换器和低通滤波器。
具体工作过程如下:
每来一个时钟脉冲fc,N位加法器将频率控制字K与累加寄存器输出的累加相位数据相加,把相加后的结果送至累加寄存器的数据输入端。其中相位累加器由N位加法器与N位累加寄存器级联构成,累加寄存器将加法器在上一个时钟脉冲作用后所产生的新相位数据反馈到加法器的输入端,以使加法器在下一个时钟脉冲的作用下继续与频率控制字K相加。这样,相位累加器在时钟作用下,不断对频率控制字K进行线性相位累加。由此可见,相位累加器在每一个时钟脉冲输入时,把频率控制字K累加一次,相位累加器输出的数据就是合成信号的相位,相位累加器的溢出频率就是DDS输出的信号频率。用相位累加器输出的数据作为波形存储器ROM的相位取样地址,可把存储在波形存储器内的波形抽样值(二进制编码)经查找表查出,完成相位到幅值转换。波形存储器的输出送到D/A转换器,D/A转换器将数字量形式的波形幅值转换成所要求合成频率的模拟量形式信号,由低通滤波器滤除杂散波和谐波以后,输出一个频率为fo的正弦波。输出频率fo与时钟频率fc之间的关系满足下式:Fo=K×Fc/2^N
其中fo为输出频率,fc为时钟脉冲,K为频率控制字。N为累加器的位数(字长)。
在软件MAX+PLUS Ⅱ中VHDL语言 仿真描述DDS输出的正弦波程序...
本设计中相位累加器的数据宽度N采用32位
LIBRARY IEEE; --DDS顶层设计
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY DDS_VHDL IS
PORT (CLK:IN STD_LOGIC;
FWORD: IN STD_LOGIC_VECTOR(7 DOWNTO 0); --频率控制字
PWORD: IN STD_LOGIC_VECTOR(7 DOWNTO 0); --相位控制字
FOUT: OUT STD_LOGIC_VECTOR(9 DOWNTO 0) );
END DDS_VHDL;
ARCHITECTURE one OF DDS_VHDL IS
COMPONENT REG32B
PORT (LOAD: IN STD_LOGIC;
DIN: IN STD_LOGIC_VECTOR(31 DOWNTO 0);
DOUT: OUT STD_LOGIC_VECTOR(31 DOWNTO 0));
END COMPONENT;
COMPONENT REG10B
PORT (LOAD: IN STD_LOGIC;
DIN: IN STD_LOGIC_VECTOR(9 DOWNTO 0);
DOUT: OUT STD_LOGIC_VECTOR(9 DOWNTO 0));
END COMPONENT;
COMPONENT ADDER32B
PORT (A: IN STD_LOGIC_VECTOR(31 DOWNTO 0);
B: IN STD_LOGIC_VECTOR(31 DOWNTO 0);
S: OUT STD_LOGIC_VECTOR(31 DOWNTO 0));
END COMPONENT;
COMPONENT ADDER10B
PORT (A: IN STD_LOGIC_VECTOR(9 DOWNTO 0);
B: IN STD_LOGIC_VECTOR(9 DOWNTO 0);
S: OUT STD_LOGIC_VECTOR(9 DOWNTO 0));
END COMPONENT;
COMPONENT SIN_ROM
PORT (address: IN STD_LOGIC_VECTOR(9 DOWNTO 0);
inclock: IN STD_LOGIC;
q: OUT STD_LOGIC_VECTOR(9 DOWNTO 0));
END COMPONENT;
SIGNAL F32B,D32B,DIN32B: STD_LOGIC_VECTOR(31 DOWNTO 0);
SIGNAL P10B,LIN10B,SIN10B: STD_LOGIC_VECTOR(9 DOWNTO 0);
BEGIN
F32B(27 DOWNTO 20)<=FWORD; F32B (31 DOWNTO 28)<="0000";
P10B(1 DOWNTO 0)<="00";
F32B(19 DOWNTO 0)<="00000000000000000000"; P10B(9 DOWNTO 2)<=PWORD;
u1: ADDER32B PORT MAP(A=>F32B,B=>D32B,S=>DIN32B);
u2: REG32B PORT MAP(DOUT=>D32B,DIN=>DIN32B,LOAD=>CLK);
u3: SIN_ROM PORT MAP(address=>SIN10B,q=>FOUT,inclock=>CLK);
u4: ADDER10B PORT MAP(A=>P10B,B=>D32B(31 DOWNTO 22),S=>LIN10B);
u5: REG10B PORT MAP(DOUT=>SIN10B,DIN=>LIN10B,LOAD=>CLK);
END one;
累加器的VHDL描述
累加器由N位加法器与N位累加寄存器级联构成,这里的N取32位。
LIBRARY IEEE; --32位加法器模块
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY ADDER32B IS
PORT (A,B: IN STD_LOGIC_VECTOR(31 DOWNTO 0);
S: OUT STD_LOGIC_VECTOR(31 DOWNTO 0));
END ADDER32B;
ARCHITECTURE behav OF ADDER32B IS
BEGIN
S<=A+B;
END behav;
LIBRARY IEEE; --32位寄存器模块
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY REG32B IS
PORT (Load: IN STD_LOGIC;
DIN: IN STD_LOGIC_VECTOR(31 DOWNTO 0);
DOUT: OUT STD_LOGIC_VECTOR(31 DOWNTO 0));
END REG32B;
ARCHITECTURE behav OF REG32B IS
BEGIN
PROCESS(LOAD,DIN)
BEGIN
IF (Load'EVENT AND Load='1') THEN
DOUT<=DIN;
END IF;
END PROCESS;
END behav;
移相加法器的数据宽度采用10位,即输出的D/A的精度是10位。
LIBRARY IEEE; --10位加法器模块
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY ADDER10B IS
PORT (A,B: IN STD_LOGIC_VECTOR(9 DOWNTO 0);
S: OUT STD_LOGIC_VECTOR(9 DOWNTO 0));
END ADDER10B;
ARCHITECTURE behav OF ADDER10B IS
BEGIN
S<=A+B;
END behav;
LIBRARY IEEE; --10位寄存器模块
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY REG10B IS
PORT (Load: IN STD_LOGIC;
DIN: IN STD_LOGIC_VECTOR(9 DOWNTO 0);
DOUT: OUT STD_LOGIC_VECTOR(9 DOWNTO 0));
END REG10B;
ARCHITECTURE behav OF REG10B IS
BEGIN
PROCESS(LOAD,DIN)
BEGIN
IF (Load'EVENT AND Load='1') THEN
DOUT<=DIN;
END IF;
END PROCESS;
END behav;
定制LPM_ROM初始化数据文件
rom_data.mif 10位正弦波数据文件,可用MATLAB/DSP Builder生成
WIDTH=10;
DEPTH=1024;
ADDRESS_RADIX=DEC;
DATA_RADIX=DEC;
CONTENT BEGIN
0:512; 1:515; 2:518; 3:521; 4:524; 5:527; 6:530; 7:533;
8:537; 9:540; 10:543; 11:546; 12:549; 13:552; 14:555; ....(略去部分数据)
1018:493; 1019:496; 1020:499; 1021:502; 1022:505; 1023:508;
END;
用于例化的波形数据ROM
用于例化的波形数据ROM文件
LIBRARY IEEE; --数据ROM
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY sin_rom IS
PORT (address: IN STD_LOGIC_VECTOR(9 DOWNTO 0);
inclock: IN STD_LOGIC;
q: OUT STD_LOGIC_VECTOR(9 DOWNTO 0));
END sin_rom;
ARCHITECTURE SYN OF sin_rom IS
SIGNAL sub_wire0: STD_LOGIC_VECTOR(9 DOWNTO 0);
COMPONENT lpm_rom --调用LPM ROM模块
GENERIC (lpm_width : NATURAL;
lpm_widthad : NATURAL;
lpm_address_control: STRING;
lpm_outdata : STRING;
lpm_file : STRING);
PORT (address: IN STD_LOGIC_VECTOR(9 DOWNTO 0);
inclock: IN STD_LOGIC;
q: OUT STD_LOGIC_VECTOR(9 DOWNTO 0));
END COMPONENT;
BEGIN
q<=sub_wire0(9 DOWNTO 0);
lpm_rom_component: lpm_rom GENERIC MAP(
LPM_WIDTH=>10,
LPM_WIDTHAD=>10,
LPM_ADDRESS_CONTROL=>"REGISTERED",
LPM_OUTDATA=>"UNREGISTERED",
LPM_FILE=>"ROM_DATA.mif") --ROM数据文件及其路径
PORT MAP(address=>address,inclock=>inclock,q=>sub_wire0);
END SYN;
这个太多咯,DDS基本原理书上或网上多得很, 一般在EDA技术的书上讲有VHDL语言实现DDS的代码、、
‘柒’ EDA中什么情况下可以直接对顶层文件进行编译
QuartusII 是Altera公司开发的功能最强大的PLD编译工具,全面取代MAX+PLUS
使用步骤:
一、建立工程.
1、“File”→“New Project Wizard”开始新工程的建立设置。‘NEXT’
2、指定project的路径,和project的名称,顶层文件的名称(一般与工程名相同)。
3、指定project中要include 的文件。
4、选择project中要使用的一些EDA TOOLS。
5、选择所使用的器件的家族“family” 和具体型号。
6、‘finish’ 完成工程的设置。
二、输入文件. 在工程中新建设计文件:图形文件“Block Diagram/Schematic File”,Verilog语言文 件“VerilogHDL File”
1、完成工程文件的输入,若为顶层文件,则文件名应该保存为与工程名相同。
2、编译设置:“Assignment”→“Compiler Settings Wizard”→“Next”
3、根据编译窗口的提示修改错误。
4、编译后会生成编译报告“Compilation Report”会分成如下几项:
(1) Analysis&Synthesis语法检查,把大电路转成较小的元件
(2) Fitter 器件资源利用情况,引脚分配情况等
(3) Assembler 连线各元件
(4) Timing Analyzer 时间分析
三、仿真. 完成工程文件的编译、综合、时间、分析后就可以建立波形仿真文件进行功能仿真
1、建立仿真文件
“File”→“New”→“Other Files”→“Vector Waveform File”→“OK”
2、选择输入输出引脚
Edit→“Insert Node or Bus”→“Node Finder”,在“Filter”处选择“Pins:all”,再按下“ >>”将所有选中的引脚添加到“Seleted Nodes”框,点“OK”→“OK”完成引脚添加。可通过右键 修改引脚的显示方式、属性、初始值等参数。
3、仿真时间、栅格的设置
Edit→‘End Time’ 设置仿真结束的时间, ‘Grid Size’设置每个栅格表示的时间。仿真时间是 以建立仿真文件时给出的结束时间为准,仿真设置“Wizards”中设定的End Time没用。
4、仿真编译设置
‘Assignments’→‘Wizards’→‘Simulator Settings Wizard’→选择当前要仿真得文件
仿真文件做好后还要将其设置为当前仿真文件,才可以开始仿真。因为有时一个工程需要建立多个 仿真文件,这就需要通过设置确定仿哪个文件了。在选择仿真类型“Type of simulation”时,“ timing”代表考虑延时,“functional”表示功能型的仿真。
5、先编译后仿真
‘Processing’→‘Start Compilation&Simulation’
6、仿真结束后会生成仿真报告“Simulation Report”
仿真结果并不是出现 在所建立得仿真文件中,在仿真报告中有独立的仿真结果。
仿真的结果总是与当前的工程文件相对应,工程文件改变后要重新仿真后才有意义。
四、将工程模块化,利用图形设计文件建立更大的工程
模块工程文件(“Block Diagram/Schematic File”或“Verilog HDL File”)编译仿真成功后就可以 将其模块化,然后在更高层次将各个模块级联起来,构成更大得工程。
1、模块化
‘File’→‘Creat/Updata’→‘Creat Symbol Files for Current File’ 然后编译器会自动将当前工程完整得编译一遍,然后生产图形模块,放在存放当前工程的文件夹里。
2、更大的工程
(1)建立工程文件
“File”→“New”→“Device Design Files”→“Block Diagram/Schematic File”→“OK”
(2)输入元件
右键→‘Insert’→‘Symbol’→可以在库文件中选,也可以通过“浏览”将已经建立图新模块的 工程加载进来。
(3)连线
‘捌’ EDA如何将VHDL设计文件打包成模块以便设计顶层文件
不用什么打包直接在顶层文件component声明一下就可以直接使用了
‘玖’ verilog 如何设置顶层模块及其子模块
在quartus直接新建一个.v文件。。。在top层把新建的模块调用即可
‘拾’ eda的主程序
你说的系统是指后缀为bdf的文件吧?一般这个是顶层文件(也就是你指的主程序),其实每个文件都是可以设置为顶层文件的,右击文件,选择“set as top-level entity”就可以了,quartus是编译顶层文件的,如果还不明白可以问我...