基于Quartus2的Verilog实例详解

合集下载

实验讲义verilogQuartusII软件的使用资料

实验讲义verilogQuartusII软件的使用资料

《硬件描述语言及应用》实验讲义2015-2016年度第二学期实验一、EDA软件使用一、实验目的:1、掌握MAX+PLUS Ⅱ软件的使用;2、掌握文本编辑器和波形编辑器的使用。

二、实验仪器微机一台。

三、实验原理1、MAX+PLUS Ⅱ软件MAX+PLUS II 9.3界面友好,使用便捷,被誉为业界最易学易用的EDA 软件。

支持原理图、VHDL和Verilog语言文本文件,以及波形与EDIF等格式的文件作为设计输入,并支持这些文件的任意混合设计。

MAX+PLUS II 具有门级仿真器,可以进行功能仿真和时序仿真,能够产生精确的仿真结果。

在适配之后,MAX+PLUS II生成供时序仿真用的EDIF、VHDL和Verilog 三种不同格式的网表文件。

MAX+PLUS II支持主流的第三方EDA工具,如Synopsys、Cadence、Synplicity、Mentor、Viewlogic、Exemplar和Model Technology等。

MAX+PLUS II支持除APEX20K系列之外的所有Altera FPG/CPLD 大规模逻辑器件。

2、Verilog语言简介(1) 什么是Verilog HDLVerilog HDL是硬件描述语言的一种,用于数字电子系统设计。

它允许设计者用它来进行各种级别的逻辑设计,可以用它进行数字逻辑系统的仿真验证、时序分析、逻辑综合。

它是目前应用最广泛的一种硬件描述语言之一。

(2) Verilog HDL的历史Verilog HDL是在1983年由GDA(GateWay Design Automation)公司的Phil Moorby首创的。

Phil Moorby后来成为Verilog-XL的主要设计者和Cadence公司(Cadence Design System)的第一个合伙人。

在1984年~1985年,Moorby设计出了第一个关于Verilog-XL的仿真器,1986年,他对Verilog HDL的发展又做出了另一个巨大贡献:即提出了用于快速门级仿真的XL 算法。

实验三基于QuartusII的流水灯设计仿真

实验三基于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灯的亮灭状态通常 是通过微控制器或数字逻辑电路 实现的,时间间隔则通过程序控

QuartusII里面的verilog文件模板

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 Ⅱ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 )设置输入接下来开始仿真(仿真前要将波形文件保存,点击工具栏开始仿真):观察波形,刚好符合我们的逻辑。

VerilogHDL第九讲 QuartuII使用介绍

VerilogHDL第九讲  QuartuII使用介绍

9.4.4 装载仿真模块和仿真库
在编译完成后,接着需要装载准备仿真的设计模 块和仿真库.单击工作区中的Library选项卡,把 Library切换到work库.Work库就是当前的仿真工作 库.我们可以看到work库中有xxxxx.仿真模块存在 了,这是刚才编译的结果.选中该项目,单击右键, 在出现的菜单中选择Simulate,当工作区中出现Sim 选项卡时,说明本仿真模块已装载成功. 在仿真模块加载前,主窗口中命令窗口的图标显 示为:ModelSim. 在仿真模块加载后,主窗口中命令窗口的图标显 示为:VSIM.
4): 仿真器参数设置 选择Assignments---Settings项,在弹出的对话框中选择 Simulator Setting项下的Mode,选择仿真模式,仿真 模式有功能仿真(Functional)和时序仿真(Timing) 两种. 5): 观察仿真结果 选择菜单Processing—Start Simulation,即启动仿真器 工作.仿真完成后,可通过查看输出波形,检验所设 计电路的功能是否正确.如不正确,可修改设计,重 新执行以上的过程,直到完全满足自己的设计要求为 止.
9.4.5 执行仿真
下面就可以执行仿真了,在仿真前信号激励设 置必不可少.单击菜单View---All Windows,打开 所有的ModelSim仿真窗口.出现的8个窗口(含 主窗口)构成了ModelSim强大的HDL仿真环境. 在主窗口的命令窗口中键入Run即可开始仿真. 如果是对设计模块本身进行仿真,应在 Signals窗口中,用该窗口下Edit菜单中的Force…, Clock…设置好信号的激励,然后在主窗口的命令 窗口中键入Run进行仿真,并在适当的仿真时刻 改变某些信号的激励.
需要指出的是,在ModelSim中对Signal的Force赋值 有3个类(Kind):Freeze,Drive和Deposit.其中, Freeze的赋值强度最强,Drive次之,Deposit最弱. ModelSim是一个严格的HDL仿真器,对于寄存器不指定默 认值,在信号的初始化时要对寄存器赋值,这时不可赋予 Freeze,那样的话,寄存器的值就不能被其他信号驱动而 Freeze, 改变,一般要用Deposit赋值.同样,inout等类型信号一 般情况下也不能用Freeze赋值.

实验1 QuartusII使用

实验1 QuartusII使用

实验一quartus使用实验1用Verilog HDL语言完成基本电路的设计一、实验目的1.熟悉QuartusⅡ的V erilog HDL文本设计流程全过程及波形时序仿真方法;2.学习简单组合电路的设计。

二、实验内容1.用Verilog HDL语言设计简单组合电路。

2.利用QuartusⅡ开发平台完成电路的文本编辑输入和编译等步骤。

3.在进行时序仿真,验证本项设计的功能。

三、参考程序module muxtwo(a,b,s,y);input a , b , s;output y;assign y=(s?a:b);endmodule四、实验步骤1.建立工作库文件夹(1)新建文件夹。

这里假设本项设计的文件夹取名为muxtwo,在E盘中,路径为E:\muxtwo 。

注意:●文件夹名字不能用中文,最好也不要用数字。

●工程文件夹不要设在计算机已有的安装目录中,也不要建立在“桌面”上,更不要将其直接放在安装目录中。

●不同的设计项目最好放在不同的文件夹中,而同一工程的所有文件都必须放在同一文件夹中。

2.创建工程(1)打开并建立新工程管理窗口。

菜单操作:file—new project wizard,即弹出设置窗口,如图1-1所示。

填好内容后,单击Next按钮。

图1-1 利用“New Preject Wizard”创建工程muxtwo注意:●图中的第一编辑框中的E:\muxtwo表示工程所在的工作库文件夹●第二编辑框中的muxtwo表示此项工程的工程名。

工程名可以取任何其它的名,也可直接用顶层文件的模块实体名。

●第三编辑框中的muxtwo表示当前工程顶层文件的实体名,这里即是muxtwo 。

(2)将设计文件加入工程中。

弹出如图1-2所示的对话框。

(现在还没有输入源程序,故不用添加)单击Next。

图1-2 将所有相关的文件都加入进此工程(3)选择目标芯片。

根据实验箱提供的器件型号选择目标器件。

弹出如图1-3所示的对话框。

数字系统设计QuartusⅡ的VerilogHDL建模与仿真

数字系统设计QuartusⅡ的VerilogHDL建模与仿真
设计输入
使用Quartus II软件的设计输入工具, 将设计转换为可编程的硬件描述语言或
原理图。
仿真
使用Quartus II软件的仿真工具,对 设计进行功能仿真和时序仿真,以确
保设计的正确性。
综合与布局布线
将设计转换为可编程的配置文件,并 进行布局布线,以确保设计的正确性。
编程与配置
将生成的配置文件下载到FPGA芯片 中,完成数字系统的设计和实现。
VS
优化设计
根据仿真结果分析和实际需求,对 Verilog HDL代码进行优化,提高设计的 性能和可靠性。
05
数字系统设计实例
实例一
总结词
简单计数器
详细描述
简单计数器是一个常见的数字系统设计实例,用于对输入信号进行计数。通过Verilog HDL建模,可 以实现计数器的逻辑功能,并在Quartus II中进行仿真测试。
模块化设计
将复杂的数字系统划分为若干个 较小的模块,每个模块具有明确 的功能和接口,便于设计和验证。
行为描述
使用Verilog HDL的逻辑运算符、 控制语句等对数字系统的行为进 行描述,实现逻辑功能。
层次化设计
将不同层次的模块按照层次结构 组织起来,上层模块调用下层模 块,实现系统的层次化设计。
Verilog HDL的仿真流程和工具
移位运算符:左移、右移。
04
05
数据类型:`reg`、`wire`、 `integer`等。
03
Quartus II软件介绍
Quartus II软件的特点和功能
高度集成
Quartus II软件集成了数字系统设计所需的所有工具,包括编辑器、 编译器、仿真器等,方便用户进行一站式设计。

使用QUARTUSⅡ及MODELSIM进行Verilog程序的综合及仿真

使用QUARTUSⅡ及MODELSIM进行Verilog程序的综合及仿真

第一步:软件安装。

这就略了吧,应该谁都会的。

第二步:启动QUARTUS,新建工程。

File----new----newquartus Ⅱproject。

next下图中,在1处填入工程文件夹(路径中不要使用中文),2处填写工程名,3处填写该工程的顶层模块名(默认情况下工程名和顶层模块名相同),然后NEXT。

下一个对话框是添加已有文件的,没有的话就next。

再下一个对话框是设备设置,可next。

再下一个对话框是仿真设置,这个会在下面详细设置,这里直接next。

然后finish。

第三步:新建Verilog文件。

file---new---verilog HDL file。

然后先保存为adder.v。

第四步:编写程序。

第五步:仿真的设置(重要)。

1.Tools----options----EDA Tool Options,在modelsim后的路径里填入modelsim程序的路径。

2.assignments----setting----EDA Tools Settings----simulation。

在tool name里选择modelsim,format for output netlist里选择verilog HDL,time scale 里根据仿真程序选择。

设置好后勾选compile test bench,然后打开后面的test benches。

3.在TEST benches对话框里点击new。

4.在test bench name中填写仿真模块名,在top level module in test bench中填写仿真模块中的顶层模块名(默认与仿真模块名相同),然后点击下面的File name后文件添加按钮(3),找到你已经编写好的仿真程序,然后点击Add添加。

说明:Quartus中提供了自动生成testbench文件的功能,但内容不全,建议自己编写,保存格式为verilog文件(.v)。

5.一顿点OK,直到回到主界面。

Quartus-II使用教程-完整实例2(精编文档).doc

Quartus-II使用教程-完整实例2(精编文档).doc

【最新整理,下载后即可编辑】Quartus Ⅱ入门教程(一个Verilog 程序的编译和功能仿真)Quartus Ⅱ 是Altera 公司推出的专业EDA 工具,支持原理图输入、硬件描述语言的输入等多种输入方式。

硬件描述语言的输入方式是利用类似高级程序的设计方法来设计出数字系统。

接下来我们对这种智能的EDA 工具进行初步的学习。

使大家以后的数字系统设计更加容易上手。

第一步:打开软件● 快捷工具栏:提供设置(setting ),编译(compile )等快捷方式,方便用户使用,用户也可以在菜单栏的下拉菜单找到相应的选项。

● 菜单栏:软件所有功能的控制选项都可以在其下拉菜单中找到。

● 信息栏:编译或者综合整个过程的详细信息显示窗口,包括编译通过信息和报错信息。

快捷工具栏菜单栏工作区资源管理窗口任务管理窗口第二步:新建工程(file>new Project Wizard )1 工程名称:2添加已有文件(没有已有文件的直接跳过next )所建工程的保存路径 工程名称顶层模块名(芯片级设计为实体名),要求与工程名称相同如果有已经存在的文件就在该过程中添加,软件将直接将用户所添加的文件添加到工程中。

3 选择芯片型号(我们选择cylone II系列下的EP2C70F896C6芯片)(注:如果不下载到开发板上进行测试,这一步可以不用设置)所选的芯片的系列型号快速搜索所需的芯片选择芯片4 选择仿真,综合工具(第一次实验全部利用quartus做,三项都选None,然后next)5 工程建立完成(点finish)选择第三方综合工具,如果使用Quartus内部综合工具则选择none选择第三方仿真工具,如果使用Quartus内部仿真工具则选择none选择时序分析仪工程建立完成,该窗口显示所建立工程所有的芯片,其他第三方EDA工具选择情况,以及模块名等等信息。

第三步:添加文件(file>new> VHDL file),新建完成之后要先保存。

VERILOG & QUARTUS II

VERILOG & QUARTUS II
範例一搭配其邏輯電路圖,應該可清楚了解接線間的關係

VERILOG 範例二 - REGISTER (BEHAVORAL MODELING)
module Register( D, clock, enable, Q );
// 需和 input , output 相符 output input reg Q; // 宣告 output 埠 D, clock, enable; // 宣告 input 埠 Q; // 表示 out 除了是輸出, 也是可暫存值的變數(註)
Rbar Qbar

module SR_latch(Q, Qbar, Sbar, Rbar); SR_latch 為 自訂模組名稱, 括號內的為input或output接腳名稱(和順序位置)

當別的module需要使用到這個module時,就需使用 module名稱來描述與該module的連接方式 nand n1(Q,Sbar,Qbar); (nand為QuartusII內建的module) 表示module名稱為nand,n1則是自訂的別名 同一個module可宣告多次 (即同架構module,不同實體) 所以別名間不能相同,以方便區別階同的module實體 建議是取有意義的名稱,方便設計者辨視


VERILOG 範例一 - SR LATCH (GATE-LEVEL MODELING)
module SR_latch(Q, Qbar, Sbar, Rbar);
// 需和 input , output 相符 output input Q, Qbar; Sbar, Rbar; // 宣告 output 埠 // 宣告 input 埠
reset 1 0 0 0 enable x 0 1 1 c/ld x x 1 0 Q 0 Q Q+1 D

数字系统设计QuartusⅡ的VerilogHDL建模与仿真-精品文档

数字系统设计QuartusⅡ的VerilogHDL建模与仿真-精品文档
支持多家公 司的PLD
EDA Tool
FPGA Advantage
Provider
Mentor Graphics
Description
包括 HDL Designer Series (可视化的 设计输入工具), ModelSim(仿真工 具),Precision RTL Synthesis (最 新的逻辑综合器)。
1 门级描述(程序如下) 顶层实体名称 //Gate-level description of a 3-to-8line decoder (Figure 1) • module _3to8decode(A1,A2,A3,E,Y); • input A1,A2,A3,E; //定义输入信号 • output[7:0] Y; //定义输出信号 • wire A1not,A2not,A3not,Enot; //定义电路内部节点信号 • not n1(A1not,A1), //非门调用 • n2(A2not,A2), • n3(A3not,A3), • n4(Enot,E); • and n5(Y[0],A3not,A2not,A1not,Enot), //与门调用 • n6(Y[1],A3not,A2not,A1,Enot), • n7(Y[2],A3not,A2,A1not,Enot),
设计输入文件
设计实例1
设计要求
设计一个3线-8线译码器,真值表如表1所示:(1)设置使能控制 端,低电平有效。(2)输出高电平有效。 (3)采用Verilog语 言的文本输入方式。(4) 进行功能仿真与验证。 *说明:本例采用门级描述和行为描述两种方式。两种方式描述均能 完成设计要求。
设计实例1
此处为安装的默认路径 此处为_3to8decode 此处为_3to8decode

基于Quartus II + ModelSim SE的后仿真Verilog版

基于Quartus II + ModelSim SE的后仿真Verilog版

基于Quartus II + ModelSim SE的后仿真(Verilog版)——我的方法可能是比较笨的,请高手指正!By chenhongyi 2007.04.09 EDACN首先大家必须把Quartus II和ModelSim SE都安装好,并成功破解,这个就不说了。

下面我以一个简单的计数器作为例子(文件名:counter.v和test_counter.v)!一、Quartus中的相关设置1. 在Quartus中建立名为counter的工程,设置仿真工具为ModelSim(Verilog),这一步您可以在New Project Wizard中指定(如图1所示),也可以在后面的Assignments->EDA Tool Settings中设置(如图2所示)。

图1 指定仿真工具图2 在Setting中指定仿真工具2.设置完以后,在Quartus中进行全编译counter.v,这样在工程目录下会生成simulation文件夹,内部ModelSim文件夹中有三个文件分别是counter.vo(布局布线后的仿真模型文件),counter_modelsim.xrf(好像是实例化的元件),counter_v.sdo(标准延时输出文件)。

到这里可以关闭Quartus II了!二、ModelSim中手工添加Altera的仿真库在您的ModelSim安装目录中建立二个文件夹,一个是用于存放公用的库我给它取名altera_base_v;另一个是用于存放您要用到的特定的器件库,我用到的是cyclone系列所以命名为cyclone_v。

我是这样建的:<ModelSim安装目录>:\Modeltech_6.2b\win32\altera_lib\altera_base_v<ModelSim安装目录>:\Modeltech_6.2b\win32\altera_lib\cyclone_v1.现在可以启动您的ModelSim SE了。

Verilog HDL数字系统的设计——原理实例及仿真第12章 Quartus Ⅱ功能及应用

Verilog HDL数字系统的设计——原理实例及仿真第12章 Quartus Ⅱ功能及应用

第12章 QuartusⅡ功能及应用
3
在设计流程的每一步,QuartusⅡ软件均能够引导设计者 将注意力放在设计上,而不是软件的使用上。同时能够自动
完成错误定位、错误和警告信息提示,使设计过程变得更加
简单和快捷。
第12章 QuartusⅡ功能及应用
4
QuartusⅡ软件主要具有以下特点: (1) 支持多种输入方式,如原理图、模块图、HDL等。 (2) 易于引脚分配和时序约束。 (3) 内嵌SignalTapⅡ(逻辑分析仪)、功率估计器等高级工 具。
做的设计进行整体或局部模块的调试。QuartusⅡ软件中主要 的调试工具是SingnalTapⅡ Logic Analyzer(嵌入式逻辑分析仪) 和SignalProbe(信号探针)。
第12章 QuartusⅡ功能及应用
16
12.2.7 系统级设计
系统级设计是指QuartusⅡ软件支持SOPC Builder和DSP Builder系统级设计流程。QuartusⅡ与SOPC Builder一起为建 立的SOPC提供标准化的设计环境,其中SOPC由CPU、存储 器接口、标准外围设备和用户自定义的外围设备等组成。
口中显示了工程的全部设置。
第12章 QuartusⅡ功能及应用
33
图12.11 工程设置信息
第12章 QuartusⅡ功能及应用
34
12.3.2 设计输入 1.基于原理图的设计输入 与以半加器为例,介绍基于原理图输入方式的QuartusⅡ
软件开发的具体流程。 (1) 建立Block Diagram/Schematic File。执行主窗口的
第12章 QuartusⅡ功能及应用
21
图12.4 QuartuⅡ主界面

QuartusII介绍用Verilog设计

QuartusII介绍用Verilog设计

QuartusII介绍⽤Verilog设计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软件的基本特征。

通过一个简单的例子来讲解quartus_II的使用方法1、FPGACAD的设计

通过一个简单的例子来讲解quartus_II的使用方法1、FPGACAD的设计

通过一个简单的例子来讲解quartus_II的使用方法一、FPGA CAD的设计流程设计实体(此处使用Verilog语言设计)综合(将Verilog语言综合成电路元件)功能仿真(验证设计电路的逻辑功能是否正确,此处不考虑任何时序问题)判断设计是否正确配置(CDA工具将综合出来的元件放到实际的FPGA中来考虑、考虑布线等)时序分析与仿真(将配置后的电路,考虑布线等延时,进行时序分析,验证电路的功能和时序的正确性)判断时序要求是否满足下载与实现(在FPGA中实现)二、quartus_II的使用1.建立工程点击菜单项File->New Project Wizard(新工程向导)帮助新建工程。

打开Wizard 之后,点击Next出现下图(展示建立工程的向导):备注:(在help菜单中可以找到quartus_II的使用教程,如下图)2.输入工程工作路径、工程文件名以及顶层实体名。

第一栏为所建立工程的工作路径,和工程所放文件夹的名字(以下文件夹的名最好全使用英文)第二栏为工程名(建好工程后再quartus_II软件中可以看到此名,注意:第二栏和第三栏的名字最好一样)第三栏设计实体的顶层module名点击Next此处是因为D盘中没有工作路径中的文件夹,问是否建立。

点yes就建立了3.添加设计文件。

建立好了文件夹里面没有文件,可以通过以下来添加文件。

通过浏览来选择文件,选好所有文件后,点Add All就可以见之前在文件夹外面的文件(如用代码编辑器编写的代码)添加进来如果没有要添加的文件点next4.选择设计所用器件此处我们用的开发板是cyclone IV相应下面选选好后点next5.设置EDA工具。

如果用到第三方工具我们这里就要选择相应的功能第一栏设计实体/综合工具第二栏仿真工具第三栏时序分析工具选好工具后再执行相关操作是会调用相关工具进行(在这之前应该要先用quartus_II关联上相关工具)6.查看新建工程总结。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

begin
if(!reset) begin Q<=0; Qn<=1; end //异步清 0, 低电平有效
else if(!set) begin Q<=1; Qn<=0;end //异步置 1, 低电平有效
else
begin Q<=d; Qn<=~d;end
end
endmodule
(3) 带有同步清 0、同步置 1 的 D 触发器
下面是带异步清 0、异步置 1(低电平有效)功能 D 触发器的描述 。
module dff(Q,Qn,d,clk,set,reset);
input d,clk,set,reset;
output Q,Qn;
reg Q,Qn;
always @(posedge clk)
begin
if(!reset) begin Q<=0; Qn<=1; end //同步清 0, 低电平有效
else if(!set) begin Q<=1; Qn<=0;end //同步置 1, 低电平有效
下面是带异步清 0、异步置 1(低电平有效)功能 D 触发器的描述 。
module dff(Q,Qn,d,clk,set,reset);
input d,clk,set,reset;
output Q,Qn;
reg Q,Qn;
always @(posedge clk or negedge set or negedge reset)
4’b1011: data_out=7’b0000011; //b 4’b1100: data_out=7’b0100111; //c 4’b1101: data_out=7’b0100001; //d 4’b1110: data_out=7’b0000110; //e 4’b1111: data_out=7’b0001110; //f default: data_out=7’b1111111; endcase end endmodule 注意:该实验箱上的数码管段码和一般的不一样,以上为准。 其中数码管的段码所对应的管脚由低到高依次为:75,76,77, 78,83,84,85,96;为控所对应管脚由低到高依次为:108,107, 106,105,103,99,98,97。
开始下载
下载进程 打上对号
下载完成后我们就可以进行硬件实验了,我们给 EP1C3 的 26、27 脚全部置低,28、31 脚也全为低;将 26、27 脚其中一个置高,另一 个置低,28 脚为低,31 脚为高;将 26、27 脚全部置高,28、31 脚 全部为高。如果是这样的话说明实验成功,我们的第一个实验就到此 结束。
1、 七段显示译码器的 VerilogHDL 描述
(1) 下面介绍的是显示 0—9 十个数字的显示译码电路的描述。
module decode4_7(a,b,c,d,e,f,g,D3,D2,D1,D0); input D3,D2,D1,D0; output a,b,c,d,e,f,g; reg a,b,c,d,e,f,g; always @( D3,D2,D1,D0) begin
图形文件编辑区
双击图形文件编辑区会弹出如下图所示的对话框。 在原理图中调入与门(and2)、异或门( xor)、输入端口(input)、 输
出端口(output)等元件,可在“Name”的文本框中直接输入元件的名字 , 也可以在元件库中直接寻找,调入元件。
元件库 元件名称
元件显示区
将鼠标指到要连接的一端将会有一个“十字形”的图标,然后将两端
连接即可,按照此方法参照下图进行电路连接……
电路连接好以后我们为了方便自己阅读可以改变一下输入输出引脚的名称, 鼠标双击输入输出引脚会弹出下面的窗口……
输入管脚名称 确定完成
Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.
管脚分配
完全编译
鼠标单击管脚分配快捷键……
下载快捷键 选中进行管脚分配
选中显示所有管脚
输入管脚号
管脚按照下图进行分配
管脚分配完成单击 …… 然后单击完全编译快捷键再进行一次完全编译,编译完成后单击下载 快捷键 ……点击“Hardware setup”设置如下:
将硬件连接好以后单击 Start 就可以下载了……
基于 Quartus2 的 Verilog 实例详解 说明:该例程分两部分:第一部分主要是通过一个半加器的实验来 演示 Quartus2 软件的基本用法,从而使入门者很快上手。第二部分主要 是 VerilogHDL 的实例,其中每个程序都是已经调试通过的,尤其是后边 的数字钟、频率计等都有已经建好的工程,若将其下到实验箱就可以直 接观察效果。由于水平有限,纰漏之处还请指正!
第二部分 VerilogHDL 设计实例
下面将给出几个 VerilogHDL 的实例,可以先试着去模仿,仔细 体会它与单片机 C 语言的不同之处,如果有不懂的地方可以查阅关 于 VerilogHDL 语言编程的语法部分,我想这样能更快的使新手入门 , 还有就是以下的程序有一部分是功能相同但却是用不同的方法来描 述的,要学会在对比中学习。
在此我们可以分析一下半加器的原理,a 和 b 为两个输入端 口,cout 为输出的高位,sout 为输出的低位,由此我们知道当 a 和 b 都为 0 时 cout 和 sout 都为 0;当 a 和 b 有一个为 1 时 cout 为 0、sout
为 1;当 a 和 b 都为 1 时 cout 和 sout 都为 1。仿真结果和我们分析结 果一致,说明我们制作的半加器是正确的。 到此我们的软件仿真就完成了,下一步我们进行硬件下载…… 首先我们先了解几个快捷图标的用途
2、 D 触发器的 VerilogHDL 描述
(1)基本 D 触发器 该触发器只有信号输入端、输出端和时钟,源程序如下: module dff(Q,D,CLK) ; output Q; input D,CLK; reg Q; always @(posedge CLK) begin
Q<=D;
end
endmodule (2) 带有异步清 0、异步置 1 的 D 触发器
选 择“Node Finder”
1:选择 “Pins:all”
2:选 择“Lis t” 4:选择“OK”
3:选择“>t Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.
endcase end endmodule (2) 下面介绍的是显示 0—9 十个数字和几个字母的显示译码电路的
描述。 module yima(data_in,EN,data_out); input[3:0] data_in; input EN; output[6:0] data_out; reg[6:0] data_out; always @( data_in or EN)
信息显示窗:显示软件综合、布局布线过程中的信息。 下面我们通过一个半加器的实验来进一步学习:
我们首先要新建一个工程,按下图进行操作
单击后会出现下列的窗口,按照下图继续进行……
鼠标单击,下一步
工程名称
保存文件路径
鼠标单击,下一步
鼠标单击,下一步
元件系列选择
具体元件 选 择( 我们采 用实 验箱 上 的 Cyclone 系列的 EP1C3T144C8)
第一部分 半加器的实现
1、打开 Quartus2 软件如下图所示:
标题栏
菜单栏
资源管理窗
工程栏
编译状 态 显示 窗
信息显示窗
图 1—1 Quartus II 软件图形用户界面
我们首先简单了解一下各部分的作用:
标题栏:显示当前工程的路径和程序的名称。 菜单栏:主要包括文件( File )、编辑(Edit)、视图( View)、工 程 (Project)、资 源 分 配( Assignments)、操 作( Processing)、工 具( Tools)、 窗口(Window)、和帮助(Help)、 9 个下拉菜单组成。 工具栏:包含常用命令的快捷图标。 资源管理窗:显示当前工程中所有相关的文件。 工程工作区:对不同的工程文件进行各种操作。 编译状态显示窗:显示模块综合、布局布线过程和时间。
最后单击下一步
最后, 单 击 “Fin is h”
工程建好后新建一个图形文件,File
New(如下图所示)
用鼠标选中,单击 OK 确定后弹出如下图所示的窗口
Edited by Foxit Reader Copyright(C) by Foxit Software Company,2005-2008 For Evaluation Only.
按照上面的步骤将所有引脚都修改完成后将文件进行保存。
注意:保存时文件名要和工程名保持一致。 保存以后就要进行编译了,单击图标 对文件进行编译……
编译完成后我们首先用软件进行波形仿真,新建波形仿真文件,File New -� Other Flies
波形仿真文件
新建波形仿真文件后输入信号节点,方法是单击鼠标右键会出现如 下图所示的窗口,然后选择“Insert Node or Bus…”
设置每格仿真时间
然后我们对输入引脚进行波形赋值,如下图所示,用鼠标选中某一部 分(变蓝)然后赋 0 或 1
按照上面的方法将两输入引脚赋成下图的样子 赋值完成后对波形仿真文件进行保存,名字和工程名保持一致
保存完成就可以进行仿真了,鼠标单击 ……
单击完成
仿真完成和我们可以看一下仿真结果,通过输出波形我们可以分析我 们制作的半加器是否正确……
仿真参数设置:单击按钮“Edit”选择“End Time”出现如下图所示的窗口 , 可以在按钮“Time”对话框中设置仿真时间。
相关文档
最新文档