Quartus II介绍用Verilog设计
verilog 实验实验一具体步骤

实验步骤1.打开Quartus II工作环境,如图1所示。
图1 打开Quartus II工作环境2.新建一个Quartus工程,在File菜单中选择New Project Wizard帮助新建工程。
打开Wizard之后,界面如图2所示。
点击Next,输入工程工作路径、工程文件名以及顶层实体名。
注意:这里输入的顶层实体名字必须与之后设计文件(比如.v文件)的顶层实体名相同,默认实体名与工程文件名相同,本次实验采用这种命名方法,当然用户也可以根据需要输入不同的实体名。
工作路径:E:\xinjian工程文件名:led顶层实体名:led输入结束后如图3所示。
输入结束后点击Next。
图2 New Project Wizard界面图3 输入设计工程信息3.添加设计文件,界面如图4所示。
如果用户之前已经有设计文件(比如.v文件),那么再次添加相应文件,如果没有完成的设计文件,点击Next,之后添加并且编辑设计文件。
图4 添加设计文件4.选择设计所用器件。
由于本次实验使用Altera公司提供的DE2开发板,用户必须选择与DE2开发板相对应的FPGA器件型号。
在Family菜单中选择CycloneII在Target device选项框中选择Specific device selected in ‘A vailable devices’ list 在A vailable device列表中选择EP2C35F672C6这个型号的器件。
完成后如图5所示,点击Next。
图5 选择相应器件5.设置EDA工具。
设计中可能会用到的EDA工具有综合工具、仿真工具以及时序分析工具。
在本次实验中不使用这些工具,因此点击Next直接跳过设置。
图6 设置EDA工具6.查看新建工程总结。
在基本设计完成后,Quartus II会自动生成一个总结让用户核对之前的设计(如图7所示),确认后点击Finish完成新建。
图7 新建工程总结在完成新建后,Quartus II界面中Project Navigator的Hierarchy标签栏中会出现用户正在设计的工程名以及所选用的器件型号,如图8所示。
QuartusII实验过程示范

QuartusII实验过程⽰范实验⼆⼗进制计数器实验该实验将使⽤Verilog 硬件描述语⾔在DE2-70 开发平台上设计⼀个基本时序逻辑电路——1 位⼗进制计数器。
通过这个实验,读者可以了解使⽤Quartus ⼯具设计硬件的基本流程以及使⽤Quartus II 内置的⼯具进⾏仿真的基本⽅法和使⽤SignalTap II 实际观察电路运⾏输出情况。
SignalTap II 是Quartus ⼯具的⼀个组件,是⼀个⽚上的逻辑分析仪,可以通过JTAG 电缆将电路运⾏的实际输出传回Quartus 进⾏观察,从⽽省去了外界逻辑分析仪时的很多⿇烦。
实验步骤3.1建⽴⼯程并完成硬件描述设计1. 打开Quartus II ⼯作环境,如图3-1 所⽰。
图3-1 Quartus II⼯作环境界⾯2. 点击菜单项File->New Project Wizard 帮助新建⼯程。
参看图3-2。
图3-2 选择New Project Wizard打开Wizard 之后,界⾯如图3-3 所⽰。
点击Next,如图3-3。
第23 页共208 页图3-3 New Project Wizard界⾯3. 输⼊⼯程⼯作路径、⼯程⽂件名以及顶层实体名。
这次实验会帮助读者理解顶层实体名和⼯程名的关系,记住⽬前指定的⼯程名与顶层实体名都是Counter10,输⼊结束后,如图3-4 所⽰。
点击Next。
图3-4输⼊设计⼯程信息4. 添加设计⽂件。
界⾯如图3-5 所⽰。
如果⽤户之前已经有设计⽂件(⽐如.v ⽂件)。
那么再次添加相应⽂件,如果没有完成的设计⽂件,点击Next 之后添加并且编辑设计⽂件。
图3-5添加设计⽂件5. 选择设计所⽤器件。
由于本次实验使⽤Altera 公司提供的DE2-70 开发板,⽤户必须选择与DE2-70 开发板相对应的FPGA 器件型号。
在Family 菜单中选择Cyclone II,Package 选FBGA,Pin Count 选896,Speed grade 选6,确认Available devices 中选中EP2C70F896C6,如图3-6。
图形和Verilog的电路设计

实验六图形和Verilog HDL语言混合输入的电路设计一、 实验目的1、学习在QUARTUSII软件中模块符号文件的生成与调用。
2、掌握模块符号与模块符号之间的连线规则与方法。
3、掌握从设计文件到模块符号的创建过程。
二、 实验原理在层次化的设计文件中,经常需要将已经设计好的工程文件生成一个模块符号文件作为自己的功能模块符号在顶层调用,该符号就像图形设计文件中的任何其它宏功能符号一样可被高层设计重复调用。
本实验的实验原理就是用Verilog HDL语言分别实现50M信号源的分频、十进制、六进制模块,然后通过QUARTUSII软件合并成一个设计文件。
实现60进制的功能。
三、 实验内容在实验中,时钟信号为50MHZ,经过分频电路分频后得到一个较低的频率(1HZ)做为计数器的时钟频率进行计数器的加法运算。
得到的值在发光二级管上显示出来。
实验箱中的数字时钟模块、按键开关LED与FPGA的接口电路,以及与FPGA的管脚连接在前面的实验中都做了详细说明,这里不在赘述。
四、 实验步骤1、打开QUARTUSII软件,新建一个工程。
2、选择File>new命令,新建一个Verilog文件。
点击OK按钮确认,然后点击保存按钮,弹出一对话框,重命名为fenpin.v,保存。
在打开的文本编辑器中写分频程序代码。
3、选择File>new命令,新建一个Verilog文件。
点击OK按钮确认,然后点击保存按钮,弹出一对话框,重命名为counter10.v,保存。
在打开的文本编辑器中写十进制程序代码。
4、选择File>new命令,新建一个Verilog文件。
点击OK按钮确认,然后点击保存按钮,弹出一对话框,重命名为counter6.v,保存。
在打开的文本编辑器中写十进制程序代码。
5、在File菜单中选择Create/Update项,进而选择Create Symbol for Current File,点击确定按钮,即可创建一个代表刚才打开的设计文件功能的符号(.bsf),如图6-2所示。
实验三基于QuartusII的流水灯设计仿真

实验收获与体会
理论与实践相结合
通过本次实验,我们将数字电路设计与FPGA应用开发的理论知识与实践相结合,加深了对理论知识的理解,提高了 实际操作能力。
团队合作的重要性
在实验过程中,我们小组成员之间进行了充分的讨论和交流,共同解决问题。这使我们深刻体会到团队合作在解决问 题中的重要性。
不断探索与创新
03 通过设计实现流水灯,培养数字电路设计能力。
实验背景
FPGA(现场可编程门阵列)是一种可编artus II是Altera公司推出的一款FPGA开发软件,提供了完整的FPGA设计流程, 包括设计输入、综合、布局布线、仿真和下载等。
Verilog是一种硬件描述语言,用于描述数字电路的行为和结构,广泛应用于FPGA 设计和ASIC设计领域。
高度集成
Quartus II软件集成了设计、编译、仿真和编程等所有必要 的工具,方便用户进行FPGA开发。
高效编译
Quartus II软件采用了高效的编译算法,能够快速将设计转 换为FPGA可执行的配置文件。
灵活设计
Quartus II软件支持多种硬件描述语言,如VHDL和Verilog, 以及多种设计约束格式,方便用户进行灵活的设计。
03 流水灯设计原理
流水灯简介
01
流水灯是一种常见的LED显示设 备,通过控制LED灯的亮灭顺序 和时间间隔,实现动态的视觉效 果。
02
流水灯通常由多个LED灯珠组成 ,按照一定的顺序排列在一条线 上,通过控制每个LED灯的亮灭 状态,形成连续的视觉效果。
流水灯工作原理
流水灯的工作原理主要是通过控 制每个LED灯的亮灭状态和时间 间隔,实现动态的视觉效果。
控制每个LED灯的亮灭状态通常 是通过微控制器或数字逻辑电路 实现的,时间间隔则通过程序控
实验1 应用QuartusII完成基本组合电路设计

实验1 应用QuartusII完成基本组合电路设计一、实验目的:熟悉QuartusⅡ的Verilog文本设计流程全过程,学习简单组合电路的设计、仿真和硬件测试。
二、实验内容1:首先利用QuartusⅡ完成2选1多路选择器(课本例3-3)的文本编辑输入(mux21a.v)和仿真测试等步骤,给出图1所示的仿真波形。
最后在实验系统上进行硬件测试,验证本项设计的功能。
图1 mux21a功能时序波形module mux21a(a,b,s,y);a,b,s;inputy;outputassign y=(s? a:b);endmodule2、将此多路选择器看成是一个元件mux21a,利用元件例化语句描述图2(或书93页图3-29),并将此文件放在同一目录中。
图2 含2选1多路选择器的模块module muxk(a1,a2,a3,s0,s1,outy);a1,a2,a3;inputs0,s1;inputouty;outputtmp;wireu1(.a(a2),.b(a3),.s(s0),.y(tmp));mux21au2(.a(a1),.b(tmp),.s(s1),.y(outy));mux21aendmodule按步骤对上例分别进行编译、综合、仿真。
并对其仿真波形作出分析说明。
3、引脚锁定以及硬件下载测试:选择目标器件是EP1C6,建议选实验电路模式5(附录文件:GW48 EDA-SOPC 主系统使用说明中图7)。
用键1(PIO0,引脚号为1)控制s0;用键2(PIO1,引脚号为2)控制s1;a3、a2和a1分别接clock5(引脚号为16)、clock0(引脚号为93)和clock2(引脚号为17);输出信号outy仍接扬声器spker(引脚号为129)。
通过短路帽选择clock0接256Hz信号,clock5接1024Hz,clock2接8Hz信号。
最后进行编译、下载和硬件测试实验(通过选择键1、键2,控制s0、s1,可使扬声器输出不同音调)。
QuartusII里面的verilog文件模板

QuartusII⾥⾯的verilog⽂件模板l 单⼝RAM// Quartus II Verilog Template// Single port RAM with single read/write addressmodule single_port_ram(input [(DATA_WIDTH-1):0] data,input [(ADDR_WIDTH-1):0] addr,input we, clk,output reg [(DATA_WIDTH-1):0] q);parameter DATA_WIDTH = 8;parameter ADDR_WIDTH = 6;// Declare the RAM variablereg [DATA_WIDTH-1:0] ram[2**ADDR_WIDTH-1:0];always @ (posedge clk)begin// Writeif (we)ram[addr] = data;// Read returns NEW data at addr if we == 1'b1. This is the// natural behavior of TriMatrix memory blocks in Single Port// modeq <= ram[addr];endendmodulel 简单双⼝RAM单时钟// Quartus II Verilog Template// Simple Dual Port RAM with separate read/write addresses and// single read/write clockmodule simple_dual_port_ram_single_clock(input [(DATA_WIDTH-1):0] data,input [(ADDR_WIDTH-1):0] read_addr, write_addr,input we, clk,output reg [(DATA_WIDTH-1):0] q);parameter DATA_WIDTH = 8;parameter ADDR_WIDTH = 6;// Declare the RAM variablereg [DATA_WIDTH-1:0] ram[2**ADDR_WIDTH-1:0];always @ (posedge clk)begin// Writeif (we)ram[write_addr] <= data;// Read (if read_addr == write_addr, return OLD data). To return// NEW data, use = (blocking write) rather than <= (non-blocking write) // in the write assignment. NOTE: NEW data may require extra bypass // logic around the RAM.q <= ram[read_addr];endendmodulel 简单双⼝RAM(双时钟)// Quartus II Verilog Template// Simple Dual Port RAM with separate read/write addresses and// separate read/write clocksmodule simple_dual_port_ram_dual_clock(input [(DATA_WIDTH-1):0] data,input [(ADDR_WIDTH-1):0] read_addr, write_addr,input we, read_clock, write_clock,output reg [(DATA_WIDTH-1):0] q);parameter DATA_WIDTH = 8;parameter ADDR_WIDTH = 6;// Declare the RAM variablereg [DATA_WIDTH-1:0] ram[2**ADDR_WIDTH-1:0];always @ (posedge write_clock)begin// Writeif (we)ram[write_addr] <= data;endalways @ (posedge read_clock)begin// Readq <= ram[read_addr];endendmodulel 完整的双⼝RAM(单时钟)// Quartus II Verilog Template// Simple Dual Port RAM with separate read/write addresses and // separate read/write clocksmodule simple_dual_port_ram_dual_clock(input [(DATA_WIDTH-1):0] data,input [(ADDR_WIDTH-1):0] read_addr, write_addr,input we, read_clock, write_clock,output reg [(DATA_WIDTH-1):0] q);parameter DATA_WIDTH = 8;parameter ADDR_WIDTH = 6;// Declare the RAM variablereg [DATA_WIDTH-1:0] ram[2**ADDR_WIDTH-1:0];always @ (posedge write_clock)begin// Writeif (we)ram[write_addr] <= data;endalways @ (posedge read_clock)begin// Readq <= ram[read_addr];endendmodulel 完整的双⼝RAM(双时钟)// Quartus II Verilog Template// True Dual Port RAM with dual clocksmodule true_dual_port_ram_dual_clock(input [(DATA_WIDTH-1):0] data_a, data_b,input [(ADDR_WIDTH-1):0] addr_a, addr_b,input we_a, we_b, clk_a, clk_b,output reg [(DATA_WIDTH-1):0] q_a, q_b);parameter DATA_WIDTH = 8;parameter ADDR_WIDTH = 6;// Declare the RAM variablereg [DATA_WIDTH-1:0] ram[2**ADDR_WIDTH-1:0];always @ (posedge clk_a)begin// Port Aif (we_a)beginram[addr_a] <= data_a;q_a <= data_a;endelsebeginq_a <= ram[addr_a];endendalways @ (posedge clk_b)begin// Port Bif (we_b)beginram[addr_b] <= data_b;q_b <= data_b;endelsebeginq_b <= ram[addr_b];endendendmodulel 单⼝ROM// Quartus II Verilog Template// Single Port ROMmodule single_port_rom(input [(ADDR_WIDTH-1):0] addr,input clk,output reg [(DATA_WIDTH-1):0] q);parameter DATA_WIDTH = 8;parameter ADDR_WIDTH = 6;// Declare the ROM variablereg [DATA_WIDTH-1:0] rom[2**ADDR_WIDTH-1:0];// Initialize the ROM with $readmemb. Put the memory contents // in the file single_port_rom_init.txt. Without this file,// this design will not compile.// See Verilog LRM 1364-2001 Section 17.2.8 for details on the // format of this file.initialbegin$readmemb("single_port_rom_init.txt", rom);endalways @ (posedge clk)beginq <= rom[addr];endendmodulel 双⼝ROM// Quartus II Verilog Template// Dual Port ROMmodule dual_port_rom(input [(ADDR_WIDTH-1):0] addr_a, addr_b,input clk,output reg [(DATA_WIDTH-1):0] q_a, q_bparameter DATA_WIDTH = 8;parameter ADDR_WIDTH = 6;// Declare the ROM variablereg [DATA_WIDTH-1:0] rom[2**ADDR_WIDTH-1:0];// Initialize the ROM with $readmemb. Put the memory contents // in the file dual_port_rom_init.txt. Without this file,// this design will not compile.// See Verilog LRM 1364-2001 Section 17.2.8 for details on the // format of this file.initialbegin$readmemb("dual_port_rom_init.txt", rom);endalways @ (posedge clk)beginq_a <= rom[addr_a];q_b <= rom[addr_b];endendmodulel ⽆符号加法器// Quartus II Verilog Template// Unsigned Addermodule unsigned_adder(input [WIDTH-1:0] dataa,input [WIDTH-1:0] datab,input cin,output [WIDTH:0] result);parameter WIDTH = 16;assign result = dataa + datab + cin;endmodulel 有符号加法器// Quartus II Verilog Template// Signed addermodule signed_adder(input signed [WIDTH-1:0] dataa, input signed [WIDTH-1:0] datab, input cin,output [WIDTH:0] result);parameter WIDTH = 16;assign result = dataa + datab + cin;endmodulel ⽆符号乘法器// Quartus II Verilog Template// Unsigned multiplymodule unsigned_multiply(input [WIDTH-1:0] dataa,input [WIDTH-1:0] datab,output [2*WIDTH-1:0] dataout );parameter WIDTH = 8;assign dataout = dataa * datab;endmodulel 有符号乘法器// Quartus II Verilog Template// Signed multiplymodule signed_multiply(input signed [WIDTH-1:0] dataa,input signed [WIDTH-1:0] datab,output [2*WIDTH-1:0] dataout);parameter WIDTH = 8;assign dataout = dataa * datab;endmodulel 带输⼊输出寄存器的⽆符号乘法器// Quartus II Verilog Template// Unsigned multiply with input and output registersmodule unsigned_multiply_with_input_and_output_registers (input clk,input [WIDTH-1:0] dataa,input [WIDTH-1:0] datab,output reg [2*WIDTH-1:0] dataout);parameter WIDTH = 8;// Declare input and output registersreg [WIDTH-1:0] dataa_reg;reg [WIDTH-1:0] datab_reg;wire [2*WIDTH-1:0] mult_out;// Store the result of the multiplyassign mult_out = dataa_reg * datab_reg;// Update dataalways @ (posedge clk)begindataa_reg <= dataa;datab_reg <= datab;dataout <= mult_out;endendmodulel 带输⼊输出的有符号乘法器// Quartus II Verilog Template// Signed multiply with input and output registersmodule signed_multiply_with_input_and_output_registers (input clk,input signed [WIDTH-1:0] dataa,input signed [WIDTH-1:0] datab,output reg signed [2*WIDTH-1:0] dataout);parameter WIDTH = 8;// Declare input and output registersreg signed [WIDTH-1:0] dataa_reg;reg signed [WIDTH-1:0] datab_reg;wire signed [2*WIDTH-1:0] mult_out;// Store the result of the multiplyassign mult_out = dataa_reg * datab_reg;// Update dataalways @ (posedge clk)begindataa_reg <= dataa;datab_reg <= datab;dataout <= mult_out;endendmodulel ⽆符号乘加器// Quartus II Verilog Template// Unsigned multiply-accumulatemodule unsigned_multiply_accumulate(input clk, aclr, clken, sload,input [WIDTH-1:0] dataa,input [WIDTH-1:0] datab,output reg [4*WIDTH-1:0] adder_out);parameter WIDTH = 8;// Declare registers and wiresreg [4*WIDTH-1:0] old_result;wire [2*WIDTH-1:0] multa;// Store the results of the operations on the current data assign multa = dataa * datab;// Store the value of the accumulation (or clear it)always @ (adder_out, sload)beginif (sload)old_result <= 0;// Clear or update data, as appropriatealways @ (posedge clk or posedge aclr)beginif (aclr)beginadder_out <= 0;endelse if (clken)beginadder_out <= old_result + multa;endendendmodulel 有符号乘加器(略)l 基本移位寄存器// Quartus II Verilog Template// One-bit wide, N-bit long shift registermodule basic_shift_register(input clk, enable,input sr_in,output sr_out);parameter N = 64;// Declare the shift registerreg [N-1:0] sr;// Shift everything over, load the incoming bit always @ (posedge clk)sr[N-1:1] <= sr[N-2:0];sr[0] <= sr_in;endend// Catch the outgoing bitassign sr_out = sr[N-1];endmodulel Mealy状态机// Quartus II Verilog Template// 4-State Mealy state machine// A Mealy machine has outputs that depend on both the state and // the inputs. When the inputs change, the outputs are updated // immediately, without waiting for a clock edge. The outputs// can be written more than once per state or per clock cycle.module four_state_mealy_state_machine(input clk, in, reset,output reg [1:0] out);// Declare state registerreg [1:0]state;// Declare statesparameter S0 = 0, S1 = 1, S2 = 2, S3 = 3;// Determine the next state synchronously, based on the// current state and the inputalways @ (posedge clk or posedge reset) beginif (reset)S0:if (in)beginstate <= S1; endelsebeginstate <= S1; endS1:if (in)beginstate <= S2; endelsebeginstate <= S1; endS2:if (in)beginstate <= S3; endelsebeginstate <= S1; endS3:if (in)beginstate <= S2; endelsebeginstate <= S3; end// Determine the output based only on the current state // and the input (do not wait for a clock edge).always @ (state or in)begincase (state)S0:if (in)beginout = 2'b00;endelsebeginout = 2'b10;endS1:if (in)beginout = 2'b01;endelsebeginout = 2'b00;endS2:if (in)beginout = 2'b10;endelsebeginout = 2'b01;endS3:if (in)beginout = 2'b11;out = 2'b00;endendcaseendendmodulel Moor状态机// Quartus II Verilog Template// 4-State Moore state machine// A Moore machine's outputs are dependent only on the current state. // The output is written only when the state changes. (State// transitions are synchronous.)module four_state_moore_state_machine(input clk, in, reset,output reg [1:0] out);// Declare state registerreg [1:0]state;// Declare statesparameter S0 = 0, S1 = 1, S2 = 2, S3 = 3;// Output depends only on the statealways @ (state) begincase (state)S0:out = 2'b01;S1:out = 2'b10;S2:out = 2'b11;out = 2'b00;endcaseend// Determine the next statealways @ (posedge clk or posedge reset) begin if (reset)state <= S0;elsecase (state)S0:state <= S1;S1:if (in)state <= S2;elsestate <= S1;S2:if (in)state <= S3;elsestate <= S1;S3:if (in)state <= S2;elsestate <= S3;endcaseendendmodulel 流⽔线加法树// Quartus II Verilog Template// Pipelined binary adder treeinput clk,output [WIDTH-1:0] out);parameter WIDTH = 16;wire [WIDTH-1:0] sum1, sum2, sum3, sum4;reg [WIDTH-1:0] sumreg1, sumreg2, sumreg3, sumreg4;always @ (posedge clk)beginsumreg1 <= sum1;sumreg2 <= sum2;sumreg3 <= sum3;sumreg4 <= sum4;end// 2-bit additionsassign sum1 = A + B;assign sum2 = C + D;assign sum3 = sumreg1 + sumreg2;assign sum4 = sumreg3 + E;assign out = sumreg4;endmodulel 三态缓冲器(完成双向⼝的输⼊输出)// When tri-state buffers are output enabled, they output a value.// Otherwise their "output" is set to high-impedence.inout <bidir_variable>;assign <bidir_variable> = (<output_enable> ? <data> : 1'bZ);l 三态寄存器// Tri-state registers are registers on inout ports. As with any// registers, their output can be updated synchronously or asynchronously.if (!<asynch_output_enable>)begin<bidir_variable> <= 1'bZ;endelsebegin<bidir_variable> <= (<output_enable>) ? <data> : 1'bZ;endendl 双向I/Omodule bidirectional_io (input <output_enable>, input [WIDTH-1:0] <data>, inout [WIDTH-1:0] <bidir_variable>, output [WIDTH-1:0] <read_buffer>);parameter WIDTH = 4;// If we are using the bidir as an output, assign it an output value,// otherwise assign it high-impedenceassign <bidir_variable> = (<output_enable> ? <data> : {WIDTH{1'bz}});// Read in the current value of the bidir port, which comes either// from the input or from the previous assignment.assign <read_buffer> = <bidir_variable>;endmodulel 综合属性1. 保持属性// Prevents Quartus II from minimizing or removing a particular// signal net during combinational logic optimization. Apply// the attribute to a net or variable declaration.(* keep *) wire <net_name>;(* keep *) reg <variable_name>;2. 保护属性// a register.(* preserve *) <variable_declaration>;(* preserve *) module <module_name>(...);l ALTERA原语1. 缓冲器u LCELL LCELL <instance_name> (.in(<data_in>), .out(<data_out>)); ;。
Quartus-Ⅱ8.1入门教程(一个Verilog程序的编译和功能仿真)

Quartus-Ⅱ8.1入门教程(一个Verilog程序的编译和功能仿真)Quartus Ⅱ8.1入门教程(一个Verilog 程序的编译和功能仿真)Quartus Ⅱ 是Altera 公司推出的专业EDA 工具,支持原理图输入、硬件描述语言的输入等多种输入方式。
硬件描述语言的输入方式是利用类似高级程序的设计方法来设计出数字系统。
接下来我们对这种智能的EDA 工具进行初步的学习。
使大家以后的数字系统设计更加容易上手。
快捷工具●快捷工具栏:提供设置(setting),编译(compile)等快捷方式,方便用户使用,用户也可以在菜单栏的下拉菜单找到相应的选项。
●菜单栏:软件所有功能的控制选项都可以在其下拉菜单中找到。
●信息栏:编译或者综合整个过程的详细信息显示窗口,包括编译通过信息和报错信息。
注意以下命名要一致。
第二步:新建工程(file>new Project Wizard)所建工程的1 工程名称:2第三步:添加文件(file>new> VHDL file),新建完成之后要先保存。
第四步:编写程序以实现一个与门和或门为例,Verilog描述源文件如下:module test(a,b,out1,out2);input a,b;Output out1,out2;assign out1=a&b; assign out2=a | b; endmodule然后保存源文件;第五步:检查语法(点击工具栏的这个按钮(start Analysis & synthesis ))点击确定完成语法检查第六步:(锁定引脚,点击工具栏的(pin planner ))(注:如果不下载到开发板上进行测试,引脚可以不用分配)双击location 为您的输入输出配置引脚。
第七步:整体编译(工具栏的按钮(startComplilation))各个端口顶层某块的第八步:功能仿真(直接利用quratus 进行功能仿真)1 将仿真类型设置为功能仿真(Assignments>setting>Simulator Settings>下拉>Function )2 建立一个波形文件:(new>Vector Waveform File )然后导入引脚(双击Name 下面空白区域>Node Finder>list>点击):接下来设置激励信号(单击>选择>Timing>Multiplied by1)设置b 信号源的时候类同设置a 信号源,最后一步改为然后要先生成仿真需要的网表(工具栏processing>Generate Functional Simulation Netlist )设置输入接下来开始仿真(仿真前要将波形文件保存,点击工具栏开始仿真):观察波形,刚好符合我们的逻辑。
设计工具Quartus II简介

设计工具Quartus II简介二十世纪后半期,随着集成电路和计算机技术的飞速发展,数字系统也得到了飞速发展。
在可编程集成电路的开发过程中,以计算机为工作平台,融合了电子应用技术,计算机技术,智能化技术最新成果的电子设计自动化(Electronic Design Automation)技术能辅助各种规模的设计工作。
Quartus II是Altera 提供的FPGA/CPLD开发集成环境,Altera是世界最大可编程逻辑器件供应商之一。
Quartus II在21世纪初推出,是Altera前一代FPGA/CPLD集成开发环境MAX+plus II 的更新换代产品,其界面友好,使用便捷。
在Quartus II上可以完成设计输入、HDL综合、布线布局(适配)、仿真和下载和硬件测试等流程,它提供了一种与结构无关的设计环境,使设计者能方便地进行设计输入、快速处理和器件编程。
Altera的Quartus II 提供了完整的多平台设计环境,能满足各种特定设计的需要,也是单芯片可编程系统(SOPC) 设计的综合性环境和SOPC 开发的基本设计工具,并为Altera DSP 开发包进行系统模型设计提供了集成综合环境。
Quartus II设计工具完全支持VHDL、Verylog 的设计流程,其内部嵌有VHDL、Verilog 逻辑综合器。
Quartus II也可以利用第三方的综合工具,如Leonardo Spectrum Synplify Pro FPGA Complier II并能直接调用这些工具。
同样,Quartus II具备仿真功能,同时也支持第三方的仿真工具,如ModelSim。
此外,Quartus II与MATLAB和DSP Builder结合,可以进行基于FPGA的DSP系统开发,是DSP硬件系统实现的关键EDA工具。
Quartus II包括模块化的编译器。
编译器包括的功能模块有分析综合器(Analysis &Synthesis)、适配器(Filter)、装配器( Assembler)、时序分析器(Timing Analyzer)、设计辅助模块(Design Assistant)、EDA网表文件生成器(EDA Netlist Writer) 和编辑数据接口(Complier Database Interface 等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Quartus II介绍用Verilog设计第一章介绍本教程介绍了Quartus II®CAD系统介绍。
它是利用FPGA器件实现电路的设计给出了一个典型的CAD流程的一般概述,并说明这种流动是在Quartus II 软件实现。
通过使用Quartus II软件在Altera公司的FPGA器件实现一个非常简单的电路提供一步一步的指示,说明了设计过程。
Quartus II系统包括所有流行的进入一个描述所需的电路转换为CAD系统的方法充分的支持。
本教程使用Verilog设计输入方法,在用户指定的Verilog 硬件描述语言所需的电路。
本教程的其他两个版本也可以;一个用VHDL硬件描述语言,另一种是基于在一个示意图的形式定义所需的电路。
在设计过程中的最后一步是在实际的FPGA器件的配置设计的电路。
显示如何做到这一点,它是假定用户接入到Altera DE系列发展和教育局连接到电脑,Quartus II软件安装。
一个读者没有访问DE系列板仍然会发现有用的教程学习如何编程和配置FPGA执行任务。
屏幕捕捉在教程中使用Quartus II 11版得到;如果使用其他版本的软件,有些图片可能略有不同。
内容:•典型的CAD流•开始•开始一个新项目•Verilog设计输入•编制设计•引脚分配•模拟电路设计•编程和配置FPGA器件•测试电路设计第二章背景计算机辅助设计(CAD)软件可以很容易地通过使用可编程逻辑器件实现所需的逻辑电路,如现场可编程门阵列(FPGA)芯片。
一个典型的FPGA CAD流程如图1所示。
图1 典型的CAD流该CAD流程包括以下步骤:●设计输入–所需的电路是指定的示意图,或使用硬件描述语言,如Verilog或VHDL●合成–输入设计合成了一个电路构成的逻辑元素(LES)在FPGA芯片提供●功能仿真–合成电路进行测试,验证其功能的正确性;这种模拟不考虑任何时机的问题●拟合的CAD–钳工工具确定LES的定义在表到LES在实际的FPGA芯片的位置;它也选择路由的导线在芯片制造所需的之间的连接特定的LES●时序分析–传播延迟在安装电路的各种路径的分析,提供了电路的预期性能的指示●时序仿真–拟合电路进行测试,验证其功能的正确性和时间●编程和配置–所设计的电路是通过编程配置交换机配置的LES和建立所需的布线连接的FPGA芯片实现的一个物理本教程介绍了Quartus II软件的基本特征。
它显示了如何使用该软件可以实现电路采用Verilog硬件描述语言指定的设计。
它使得使用的图形用户接口来调用Quartus II的命令。
在本教程中,读者将了解:●创建一个项目●设计入门使用Verilog代码●合成电路的Verilog代码●拟合成电路到Altera公司的FPGA●分配电路的输入和输出,在FPGA●模拟电路设计●编程和配置在Altera公司的FPGA芯片特定DE系列板引脚第三章开始每个逻辑电路,或子电路,采用Quartus II软件被称为一个项目。
该软件可以在一个项目上,让所有的信息在一个单一的目录(文件夹)项目中的文件系统。
开始一个新的逻辑电路设计,第一步是创建一个目录来保存文件。
在本教程将设计文件,我们将使用一个目录introtutorial。
本教程的实例是双向光的一个简单的控制电路。
开始Quartus II软件。
你应该看到一个显示类似于图2中的一个。
这显示由几个Windows提供的Quartus II软件的特点,其中用户选择的计算机鼠标。
大多数通过Quartus II软件提供的指令可以通过使用一组菜单位于标题栏访问。
例如,在图2中点击菜单“文件打开如图3所示的菜单,鼠标左键。
点击鼠标左键在出入境退出Quartus II软件。
在一般情况下,只要用鼠标选择点,左边的按钮是用来。
因此,我们通常不会指定按哪个按钮。
在少数情况下,当需要使用鼠标右键,它将被明确指定。
图2 主要的Quartus II显示图3 文件菜单的例子一些命令需要访问序列中的两个或两个以上的菜单。
我们使用公约>Menu1 menu2>项目表明,选择所需的命令,用户应首先点击Menu1鼠标左键,然后在菜单中点击menu2,然后在menu2点击项目。
例如,文件>退出使用鼠标退出系统。
许多命令都可以通过点击一个工具栏的显示一个图标调用。
看到一个图标关联的命令,位置在图标和鼠标会出现工具提示显示命令名称。
3.1 Quartus II的在线帮助Quartus II软件提供全面的在线文档,回答了许多使用该软件时可能出现的问题。
从帮助菜单访问该文件,提供一定的思路,让读者通过浏览帮助菜单获得有价值的信息。
如果没有指定Web浏览器,Quartus将错误消息的报错。
指定Web浏览器,点击工具>选项…>一般>互联网连接。
指定要在Web浏览器领域的Web浏览器的路径。
用户可以通过快速搜索帮助主题选择帮助>搜索,将打开一个对话框,关键词可以进入。
另一种方法,上下文敏感的帮助,提供快速查找特定主题的文档。
在使用大多数应用程序中,按下键盘上的F1键打开帮助显示应用程序可用的命令。
第四章开始一个新项目开始一个新的设计,我们首先需要定义一个新的设计方案。
Quartus II软件设计者的任务容易通过向导的形式提供支持。
创建一个新的项目如下:1.选择文件>新项目向导图4到窗口,这要求项目名称和目录。
图4 一个新的项目创建2.将工作目录设置为introtutorial;当然,如果你喜欢你可以选择使用一些其他的目录名称。
项目必须有一个名字,通常包括相同的顶层实体和项目。
选择light为项目和顶层实体的名称,如图4所示。
按“下一步”。
由于我们还没有创建的目录introtutorial,Quartus II软件显示的弹出框图5询问是否要创建所需的目录。
单击“是”,从而导致在图6窗口。
图5 Quartus II软件可以为项目创建一个新目录图6 该向导可以包括用户指定的设计文件3.该向导可以很容易地指定的现有文件(如果有)应包括在项目。
假设我们没有任何现有的文件,请单击“下一步”,从而导致在图7窗口。
图7 选择设备的家庭和一个特定的设备4.我们必须指定的装置的设计的电路将执行类型。
选择你的DE系列板cycloneseries设备的家庭。
我们可以让Quartus II软件选择家庭中的一个特定的设备,或者我们可以选择装置明确。
我们将采取后一种方法。
从可用设备列表,选择你的德系列板适当的设备名称。
一系列的设备在德系列主板的名字可以在表1中找到。
按“下一步”按钮,打开如图8所示的窗口。
板设备名称DE0 Cyclone III EP3C16F484C6DE1 Cyclone II EP2C20F484C7DE2 Cyclone II EP2C35F672C6DE2-70 Cyclone II EP2C70F896C6DE2-115 Cyclone IVE EP4CE115F29C7表1 DE系列FPGA器件名称图8 其它EDA工具可以指定5.用户可以指定任何第三方工具应使用的。
一种常用的电子电路CAD软件项的EDA工具,其中的缩写代表电子设计自动化。
这个词是在Quartus II 中使用的信息,参阅第三方工具,它的开发和销售以外的Altera公司的工具。
因为我们将仅仅依靠QuartusⅡ工具,我们不会选择其他工具。
按“下一步”。
6.所选择的设置,总结出现在图9所示的屏幕。
按“完成”,并返回到主Quartus II窗口,但指定为新的项目,显示在标题栏,如图10所示。
图9 设置一个DE2板工程实例总结图10 用于创建项目在DE2板Quartus II显示第五章设计输入采用Verilog代码作为一个设计实例,我们将使用双向光控制器电路如图11所示。
该电路可以用来控制两个光开关,X1和X2,在一个封闭开关对应的逻辑值1。
也是电路真值表中给出的图。
请注意,这只是输入X1和X2异或功能,但我们将指定使用显示的大门。
图11 该光源控制器电路要求的电路由图12中的Verilog代码描述。
请注意,Verilog模块称为光在图4中给出的名称匹配,这是创建项目时指定。
此代码可以键入文件使用任何文本编辑器存储ASCII文件,或通过使用Quartus II文本编辑设施。
当文件可以是任何名称,它是一种常见的设计实践中使用相同的名称作为顶级Verilog 模块的名称。
文件名必须包含扩展.V,这表明Verilog文件。
因此,我们将命名light.v。
光源模块(x1, x2, f);输入 x1, x2;输出 f;分配 f = (x1 & »x2) j (»x1 & x2);结束模块图12 Verilog代码为在图11电路5.1使用Quartus II文本编辑器本节说明如何使用Quartus II文本编辑器。
如果你们愿意的话可以使用一些其他的文本编辑器来创建的Verilog源代码文件跳过这一节,我们将命名light.V。
选择文件>新图13中得到的窗口,选择Verilog HDL语言文件,然后单击“确定”。
这将打开文本编辑器窗口。
第一步是为要创建的文件指定一个名字。
选择文件>保存打开的弹出框,如图14所示。
在保存类型选择框的Verilog HDL 文件。
在箱标记文件名light。
把标记在箱文件添加到当前项目。
单击“保存”,将文件放入目录introtutorial导致文本编辑器窗口如图15所示。
输入的Verilog代码在图12中的文本编辑器,输入文件>保存该文件,或键入快捷ctrl-s。
大多数文本编辑器中可用的命令是不言自明的。
文本是显示在插入点,这是由一个薄的垂直线表示。
插入点可以通过使用键盘上的方向键或用鼠标移动。
文本编辑器的两个特点是特别方便打字的Verilog代码。
首先,编辑器可以显示不同类型的不同颜色的Verilog语句,这是默认的选择。
第二,编辑器会自动缩进的文本在新的一行,它匹配一行。
这些选项可以通过工具>选项>文本编辑器设置控制。
图13 准备一个Verilog文件图14 命名文件图15 文本编辑器窗口。
Verilog代码的语法有时是困难的设计师要记住。
为了解决这个问题,文本编辑器提供了一个收集的Verilog模板。
该模板提供各种类型的Verilog语句的例子,例如一个模块的声明,一个总是块,和赋值语句。
这是值得浏览模板选择编辑>插入模板>Verilog HDL熟悉这个资源。
5.2添加到项目设计文件我们表明,当讨论图6,你可以告诉Quartus II软件设计文件应作为当前项目的一部分。
看到已包括在light项目文件列表,选择作业>设置,从而导致在图16窗口。