第一篇:EDA(解答题)EDA期末总结8大全
1章
ENTITY AD574 IS STD_LOGIC;并行信号赋值语句;进程语句;块语句;条件信号赋值语句;元件例化语
PORT(D :IN STD_LOGIC_VECTOR(11
Q : OUT
1、常用的硬件描述语言有VHDL、Verilog、ABEL 句;生成语句;并行过程调用语句。DOWNTO 0);
STD_LOGIC_VECTOR(4 DOWNTO 0));
2、VHDL自顶向下的设计流程:
4、什么叫并行语句?
CLK ,STATUS : IN STD_LOGIC;--状END MEALY1;1.设计说明书2.建立VHDL行为模型3.VHDL行为仿真4.VHDL-RTL在结构体的执行是同步进行的,或者说是并行运行的,其执行方式
ARCHITECTURE behav OF MEALY1 IS 态机时钟CLK,AD574状态信号STATUS 级建模 与书写的顺序无关。
TYPE states IS(st0, st1, st2, st3,st4);
LOCK0
: OUT STD_LOGIC;5.前端功能仿真6.逻辑综合7.测试向量生成8.功能仿真9.结
5、VHDL中具有属性的项目:
SIGNAL STX : states;
--内部锁存信号LOCK的测试信号 构综合10.门级时序仿真11.硬件测试12.设计完成 类型、子类型、过程、函数、信号、变量、常量、实体、结构体、BEGIN
CS,A0,RC,K12X8 : OUT STD_LOGIC;2章 配置、程序包、元件和语句标号等。
COMREG : PROCESS(CLK,RESET)--AD574控制信号
BEGIN--决定转换状态的进程 1.一般ASIC设计的流程:
6、综合器支持的属性有:
Q : OUT STD_LOGIC_VECTOR(11
IF RESET ='1' THEN 系统规格说明:系统划分:逻辑设计与综合:综合后仿真:版图设LEFT、RIGHT、HIGH、LOW、RANGE、REVERS RANGE、LENGTH、DOWNTO 0));--锁存数据输出
STX <= ST0;计:版图验证:参数提取与后仿真:制版、流片:芯片测试 EVENT及STABLE。END AD574;
ELSIF CLK'EVENT AND CLK = '1'
2、常用EDA工具: ARCHITECTURE behav OF AD574 IS
THEN 设计输入编辑器:HDL综合器:仿真器:适配器(或布局布线器):TYPE states IS(st0, st1, st2, st3,st4);
CASE STX IS
SIGNAL current_state, next_state: 下载器
WHEN st0 => IF DATAIN = '1' states :=st0;
3、IP核:软IP硬IP固IP THEN STX <= st1;END IF;
SIGNAL REGL : 3章
WHEN st1 => IF DATAIN = '0' STD_LOGIC_VECTOR(11 DOWNTO 0);
1、CPLD和FPGA的主要区别: THEN STX <= st2;END IF;
SIGNAL LOCK : STD_LOGIC;
WHEN st2 => IF DATAIN = '1' 结构上的不同:集成度的不同:CPLD:500~50000门;FPGA:1K~10M门:应用范围不同:CPLD逻辑能力强而寄存器少(1K左右),适用于控制密集型系统;FPGA逻辑能力较弱但寄存器多(100多K),适用于数据密集型系统。使用方法不同
2、FPGA和CPLD的选用(1)CPLD的选用: 逻辑密集型:中小规模(1000~50000):免费软件支持;编程数据不丢失,电路简单;ISP特性,编程加密;布线延迟固定,时序特性稳定;(2)FPGA选用: 数据密集型;大规模设计(5000~数百万门);SOC设计:ASIC的设计仿真:布线灵活,但时序特性不稳定;需用专用的ROM进行数据配置 4章
1、EDA综合工具提供的数据类型为布尔型(Boolean)、位型(Bit)、位矢量型(Bit-Vector)和整数型(Interger)。
2、VHDL语言描述结构体功能有3种方法:行为描述法:数据流描述法;结构描述法
3、VHDL的库:STD库和WORK库:IEEE库
4、clock’EVENT and clock=‘1检测上升沿;clock’EVENT and clock=‘0’检测下降沿。
5、简述实体、端口概念,端口种类及INPUT与BUFFER的异同。以关键词ENTITY引导,END ENTITY....结束的语句部分成为实体。端口种类4种:IN、OUT、INOUT、BUFFER。INOUT定义的通道确定为输入输出双向端口;、BUFFER在需要输入数据是时,只允许内不回读输出的信号。
6、结构体 以关键词ARCHITECTURE引导,END 结束的语句部分成为结构体。
7、端口: INOUT定义的通道为输入输出双向端口,可以由外向内或由内向外传输数据,而BUFFER定义的通道虽然也是输入输出端口,但它回读的信号不能从外部输入,而是由内部产生,向外输出的信号。IN定义的通道为单向只读模式,规定数据只能通过此端口被读入实体中 OUT定义的通道为单向输出模式,规定数据只能通过此端口从实体向外流出,或者说可以将实体中的数据向此端口赋值。INOUT定义的通道确定为输入输出双向端口,可以由外向内或由内向外传输数据。6章
1、说明用原理图输入方法设计电路的详细流程 1.为一项工程设计建立文件夹 2.输入设计项目和存盘 3.将设计项目设置成工程文件 4.选择目标器件并编译 5时序仿真和包装入库 6.设计顶层文件 7章
1、为什么要使用状态机 有限状态机克服了纯硬件数字系统顺序方式控制不灵活的缺点。状态机的结构模式相对简单。状态机容易构成性能良好的同步时序逻辑模块。状态机的VHDL表述丰富多样。在高速运算和控制方面,状态机更有其巨大的优势。就可靠性而言,状态机的优势也是十分明显的。
2、时序进程将次态信号送到现态信号
3、Moore型输出仅与当前状态有关,Mealy型输出是当前状态与所有输入信号
FSM:s_machine current_state clkPROCESSPROCESSREGCOMreset next_statecomb_outputsstate_inputs
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY s_machine IS
PORT(clk,reset
: IN STD_LOGIC;
state_inputs : IN STD_LOGIC_VECTOR(0 TO 1);
comb_outputs : OUT INTEGER RANGE 0 TO 15);END s_machine;ARCHITECTURE behv OF s_machine IS
TYPE FSM_ST IS(s0, s1, s2, s3);
SIGNAL current_state, next_state: FSM_ST;BEGIN REG: PROCESS(reset,clk)
BEGIN
IF reset = '1' THEN
current_state <= s0;
ELSIF clk='1' AND clk'EVENT THEN
current_state <= next_state;
END IF;
END PROCESS;
COM:PROCESS(current_state, state_Inputs)BEGIN
CASE current_state IS
WHEN s0 => comb_outputs<= 5;
IF state_inputs = “00” THEN next_state<=s0;
ELSE next_state<=s1;
END IF;
WHEN s1 => comb_outputs<= 8;
IF state_inputs = “00” THEN next_state<=s1;
ELSE next_state<=s2;
END IF;
WHEN s2 =>
comb_outputs<= 12;
IF state_inputs = “11” THEN next_state <= s0;
ELSE next_state <= s3;
END IF;
WHEN s3 => comb_outputs <= 14;
IF state_inputs = “11” THEN next_state <= s3;
ELSE next_state <= s0;
END IF;
END case;
END PROCESS;
END behv;
3、三进程有限状态机 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;BEGIN
K12X8 <= '1';
LOCK0 <= LOCK;
COM1: PROCESS(current_state,STATUS)--决定转换状态的进程 BEGIN
CASE current_state IS
WHEN st0 => next_state <= st1;
WHEN st1 => next_state <= st2;
WHEN st2 => IF(STATUS='1')THEN next_state <= st2;
ELSE
next_state <= st3;
END IF;
WHEN st3=>
next_state <= st4;
WHEN st4=>
next_state <= st0;
WHEN OTHERS => next_state <= st0;
END CASE;
END PROCESS COM1;COM2: PROCESS(current_state)--输出控制信号的进程
BEGIN
CASE current_state IS
WHEN st0=> CS<='1';A0<='1';RC<='1';LOCK<='0';--初始化
WHEN st1=> CS<='0';A0<='0';RC<='0';LOCK<='0';--启动12位转换
WHEN st2=> CS<='0';A0<='0';RC<='0';LOCK<='0';--等待转换 WHEN st3=> CS<='0';A0<='0';RC<='1';LOCK<='0';--12位并行输出有效
WHEN st4=> CS<='0';A0<='0';RC<='1';LOCK<='1';--锁存数据
WHEN OTHERS=>CS<='1';A0<='1';RC<='1';LOCK<='0';--其它情况返回初始态
END CASE;
END PROCESS COM2;
REG: PROCESS(CLK)--时序进程
BEGIN
IF(CLK'EVENT AND CLK='1')THEN current_state <= next_state;
END IF;
END PROCESS REG;
LATCH1 : PROCESS(LOCK)--数据锁存器进程
BEGIN
IF LOCK='1' AND LOCK'EVENT THEN
REGL <= D;
END IF;
END PROCESS;
Q <= REGL;END behav;
5、单进程有限状态机 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MOORE1 IS
PORT(DATAIN :IN STD_LOGIC_VECTOR(1 DOWNTO 0);
CLK,RST : IN STD_LOGIC;
Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END MOORE1;ARCHITECTURE behav OF MOORE1 IS
TYPE ST_TYPE IS(ST0, ST1, ST2, ST3,ST4);
SIGNAL C_ST : ST_TYPE;
BEGIN
PROCESS(CLK,RST)
BEGIN
IF RST ='1' THEN C_ST <= ST0;Q<= “0000”;
ELSIF CLK'EVENT AND CLK='1' THEN
CASE C_ST IS
WHEN ST0 => IF DATAIN =“10” THEN C_ST <= ST1;
ELSE C_ST <= ST0;END IF;
Q <= “1001”;
WHEN ST1 => IF DATAIN =“11” THEN C_ST <= ST2;
ELSE C_ST <= ST1;END IF;
Q <= “0101”;
WHEN ST2 => IF DATAIN =“01” THEN C_ST <= ST3;
ELSE C_ST <= ST0;END IF;
Q <= “1100”;
WHEN ST3 => IF DATAIN =“00” THEN C_ST <= ST4;
ELSE C_ST <= ST2;END IF;
Q <= “0010”;
WHEN ST4 => IF DATAIN =“11” THEN C_ST <= ST0;
ELSE C_ST <= ST3;END IF;
Q <= “1001”;
WHEN OTHERS => C_ST <= ST0;
END CASE;
END IF;
END PROCESS;END behav;
6、Mealy型有限状态机的设计
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;ENTITY MEALY1 IS PORT(CLK ,DATAIN,RESET : IN THEN STX <= st3;END IF;
WHEN st3=> IF DATAIN = '0' THEN STX <= st4;END IF;
WHEN st4=> IF DATAIN = '1'
THEN STX <= st0;END IF;
WHEN OTHERS => STX <= st0;
END CASE;
END IF;
END PROCESS COMREG;COM1: PROCESS(STX,DATAIN)BEGIN--输出控制信号的进程
CASE STX IS
WHEN st0 => IF DATAIN = '1' THEN
Q <= “10000”;
ELSE Q<=“01010”;
END IF;
WHEN st1 => IF DATAIN = '0' THEN Q <= “10111”;
ELSE Q<=“10100”;
END IF;
WHEN st2 => IF DATAIN = '1' THEN Q <= “10101”;
ELSE Q<=“10011”;
END IF;
WHEN st3=> IF DATAIN = '0' THEN Q <= “11011”;
ELSE Q<=“01001”;
END IF;
WHEN st4=> IF DATAIN = '1' THEN Q <= “11101”;
ELSE Q<=“01101”;
END IF;
WHEN OTHERS => Q<=“00000”;
END CASE;
END PROCESS COM1;
END behav;
7、状态编码
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY AD574A IS
PORT(D : IN
STD_LOGIC_VECTOR(11 DOWNTO 0);
CLK ,STATUS : IN STD_LOGIC;
OUT4 : OUT
STD_LOGIC_VECTOR(3 DOWNTO 0);
Q : OUT STD_LOGIC_VECTOR(11 DOWNTO 0));END AD574A;ARCHITECTURE behav OF AD574A IS SIGNAL current_state, next_state: STD_LOGIC_VECTOR(4 DOWNTO 0);
CONSTANT st0 : STD_LOGIC_VECTOR(4 DOWNTO 0):= “11100”;
CONSTANT st1 : STD_LOGIC_VECTOR(4 DOWNTO 0):= “00001”;
CONSTANT st2 : STD_LOGIC_VECTOR(4 DOWNTO 0):= “00000”;
CONSTANT st3 : STD_LOGIC_VECTOR(4 DOWNTO 0):= “00100”;
CONSTANT st4 : STD_LOGIC_VECTOR(4 DOWNTO 0):= “00110”;
SIGNAL REGL
: STD_LOGIC_VECTOR(11 DOWNTO 0);
SIGNAL LK
: STD_LOGIC;
BEGIN
COM1: PROCESS(current_state,STATUS)
--决定转换状态的进程 BEGIN
CASE current_state IS
WHEN st0 => next_state <= st1;
WHEN st1 => next_state <= st2;
WHEN st2 => IF(STATUS='1')THEN next_state <= st2;
ELSE
next_state <= st3;
END IF;
WHEN st3=> next_state <= st4;
WHEN st4=> next_state <= st0;
WHEN OTHERS => next_state <= st0;
END CASE;
OUT4 <= current_state(4 DOWNTO 1);END PROCESS COM1;
REG: PROCESS(CLK)--时序进程
BEGIN
IF(CLK'EVENT AND CLK='1')THEN
current_state <= next_state;
END IF;
END PROCESS REG;
LK <= current_state(1);
LATCH1 : PROCESS(LK)--数据锁存器进程
BEGIN
IF LK='1' AND LK'EVENT THEN
REGL <= D;
END IF;
END PROCESS;
Q <= REGL;
END behav;9章
1、VHDL有那几种基本的顺序语句? 赋值语句;流程控制语句;等待语句;子程序调用语句;返回语句;空操作语句。
2、什么叫顺序语句,它的适用范围是什么? 执行顺序与它们的书写顺序基本一致的语句叫顺序语句,顺序语句只能出现在进程和子程序中,子程序包括函数和过程。3、VHDL并行语句几种?
第二篇:EDA期末总结7
1章 PORT DOWNTO 0);(D:INSTD_LOGIC_VECTOR(11DOWNTO 0);
Q : OUT STD_LOGIC_VECTOR(11 DOWNTO 0));
1、常用的硬件描述语言有VHDL、Verilog、ABEL
CLK ,STATUS : IN STD_LOGIC;END AD574A;
2、VHDL自顶向下的设计流程:
LOCK0 : OUT STD_LOGIC;ARCHITECTURE behav OF AD574A IS 1.设计说明书2.建立VHDL行为模型3.VHDL行为仿真4.VHDL-RTL
CS,A0,RC,K12X8 : OUT STD_LOGIC;SIGNAL current_state, next_state: STD_LOGIC_VECTOR(4 DOWNTO 0);级建模 Q:OUTSTD_LOGIC_VECTOR(11DOWNTO 0));
CONSTANT st0 : STD_LOGIC_VECTOR(4 DOWNTO 0):= “11100”;5.前端功能仿真6.逻辑综合7.测试向量生成8.功能仿真9.结END AD574;
CONSTANT st1 : STD_LOGIC_VECTOR(4 DOWNTO 0):= “00001”;构综合10.门级时序仿真11.硬件测试12.设计完成 ARCHITECTURE behav OF AD574 IS
CONSTANT st2 : STD_LOGIC_VECTOR(4 DOWNTO 0):= “00000”;2章 TYPE states IS(st0, st1, st2, st3,st4);
CONSTANT st3 : STD_LOGIC_VECTOR(4 DOWNTO 0):= “00100”;SIGNALcurrent_state,next_state:states :=st0;
CONSTANT st4 : STD_LOGIC_VECTOR(4 DOWNTO 0):= “00110”;1.一般ASIC设计的流程: SIGNAL REGL:STD_LOGIC_VECTOR(11DOWNTO 0);
SIGNAL REGL : STD_LOGIC_VECTOR(11 DOWNTO 0);系统规格说明:系统划分:逻辑设计与综合:综合后仿真:版图设SIGNAL LOCK : STD_LOGIC;
SIGNAL LK
: STD_LOGIC;计:版图验证:参数提取与后仿真:制版、流片:芯片测试 BEGIN BEGIN
2、常用EDA工具:
K12X8 <= '1';
LOCK0 <= LOCK;
COM1: PROCESS(current_state,STATUS)设计输入编辑器:HDL综合器:仿真器:适配器(或布局布线器):COM1: PROCESS(current_state,STATUS)
BEGIN 下载器 BEGIN
CASE current_state IS
3、IP核:软IP硬IP固IP
CASE current_state IS
WHEN st0 => next_state <= st1;3章
WHEN st0 => next_state <= st1;
WHEN st1 => next_state <= st2;
WHEN st1 => next_state <= st2;
WHEN st2 => IF(STATUS='1')THEN next_state <= st2;
1、CPLD和FPGA的主要区别:
WHEN st2 =>IF(STATUS='1')THENnext state <= st2;
ELSE next_state <= st3;
结构上的不同:集成度的不同:CPLD:500~50000门;FPGA:1K~
ELSE next_state <= st3;
END IF;10M门:应用范围不同:CPLD逻辑能力强而寄存器少(1K左右),END IF;
WHEN st3=> next_state <= st4;
适用于控制密集型系统;FPGA逻辑能力较弱但寄存器多(100多K),WHEN st3 => next_state <= st4;
WHEN st4=> next_state <= st0;适用于数据密集型系统。
WHEN st4 => next_state <= st0;
WHEN OTHERS => next_state <= st0;
使用方法不同
2、FPGA和CPLD的选用(1)CPLD的选用: 逻辑密集型:中小规模(1000~50000):免费软件支持;编程数据不丢失,电路简单;ISP特性,编程加密;布线延迟固定,时序特性稳定;(2)FPGA选用: 数据密集型;大规模设计(5000~数百万门);SOC设计:ASIC的设计仿真:布线灵活,但时序特性不稳定;需用专用的ROM进行数据配置 4章
1、EDA综合工具提供的数据类型为布尔型(Boolean)、位型(Bit)、位矢量型(Bit-Vector)和整数型(Interger)。
2、VHDL语言描述结构体功能有3种方法:行为描述法:数据流描述法;结构描述法
3、VHDL的库:STD库和WORK库:IEEE库
4、clock’EVENT and clock=‘1检测上升沿;clock’EVENT and clock=‘0’检测下降沿。
5、简述实体、端口概念,端口种类及INPUT与BUFFER的异同。以关键词ENTITY引导,END ENTITY....结束的语句部分成为实体。端口种类4种:IN、OUT、INOUT、BUFFER。INOUT定义的通道确定为输入输出双向端口;、BUFFER在需要输入数据是时,只允许内不回读输出的信号。
6、结构体 以关键词ARCHITECTURE引导,END 结束的语句部分成为结构体。
7、端口: INOUT定义的通道为输入输出双向端口,可以由外向内或由内向外传输数据,而BUFFER定义的通道虽然也是输入输出端口,但它回读的信号不能从外部输入,而是由内部产生,向外输出的信号。IN定义的通道为单向只读模式,规定数据只能通过此端口被读入实体中 OUT定义的通道为单向输出模式,规定数据只能通过此端口从实体向外流出,或者说可以将实体中的数据向此端口赋值。INOUT定义的通道确定为输入输出双向端口,可以由外向内或由内向外传输数据。6章
1、说明用原理图输入方法设计电路的详细流程 1.为一项工程设计建立文件夹 2.输入设计项目和存盘 3.将设计项目设置成工程文件 4.选择目标器件并编译 5时序仿真和包装入库 6.设计顶层文件 7章
1、为什么要使用状态机 有限状态机克服了纯硬件数字系统顺序方式控制不灵活的缺点。状态机的结构模式相对简单。状态机容易构成性能良好的同步时序逻辑模块。状态机的VHDL表述丰富多样。在高速运算和控制方面,状态机更有其巨大的优势。就可靠性而言,状态机的优势也是十分明显的。
2、时序进程将次态信号送到现态信号
3、Moore型输出仅与当前状态有关,Mealy型输出是当前状态与所有输入信号 FSM:s_machine current_state clkPROCESSPROCESSREGCOMcomb_outputsreset next_statestate_inputs LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY s_machine IS
PORT(clk,reset
: IN STD_LOGIC;
state_inputs : IN STD_LOGIC_VECTOR(0 TO 1);
comb_outputs : OUT INTEGER RANGE 0 TO 15);END s_machine;ARCHITECTURE behv OF s_machine IS
TYPE FSM_ST IS(s0, s1, s2, s3);
SIGNAL current_state, next_state: FSM_ST;BEGIN REG: PROCESS(reset,clk)
BEGIN
IF reset = '1' THEN
current_state <= s0;
ELSIF clk='1' AND clk'EVENT THEN
current_state <= next_state;
END IF;
END PROCESS;
COM:PROCESS(current_state, state_Inputs)BEGIN
CASE current_state IS
WHEN s0 => comb_outputs<= 5;
IF state_inputs = “00” THEN next_state<=s0;
ELSE next_state<=s1;
END IF;
WHEN s1 => comb_outputs<= 8;
IF state_inputs = “00” THEN next_state<=s1;
ELSE next_state<=s2;
END IF;
WHEN s2 =>
comb_outputs<= 12;
IF state_inputs = “11” THEN next_state <= s0;
ELSE next_state <= s3;
END IF;
WHEN s3 => comb_outputs <= 14;
IF state_inputs = “11” THEN next_state <= s3;
ELSE next_state <= s0;
END IF;
END case;
END PROCESS;
END behv;三进程有限状态机 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY AD574 IS
WHEN OTHERS => next_state <= st0;
END CASE;END PROCESS COM1;COM2: PROCESS(current_state)BEGIN
CASE current_state IS
WHEN st0=>CS<='1';A0<='1';RC<='1';LOCK<='0';WHEN st1=>CS<='0';A0<='0';RC<='0';LOCK<='0';
WHEN st2=>CS<='0';A0<='0';RC<='0';LOCK<='0';WHEN st3=>CS<='0';A0<='0';RC<='1';LOCK<='0';
WHEN st4=>CS<='0';A0<='0';RC<='1';LOCK<='1';
WHEN OTHERS=>CS<='1';A0<='1';RC<='1';LOCK<='0';
END CASE;END PROCESS COM2;REG: PROCESS(CLK)
BEGIN IF(CLK'EVENT AND CLK='1')THEN current_state <= next_state;END IF;END PROCESS REG;LATCH1 : PROCESS(LOCK)BEGIN IF LOCK='1' AND LOCK'EVENT THEN REGL <= D;END IF;END PROCESS;
Q <= REGL;
END behav;单进程Moore型有限状态机 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MOORE1 IS PORT(DATAIN:INSTD_LOGIC_VECTOR(1 DOWNTO 0);
CLK,RST : IN STD_LOGIC;
Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END MOORE1;ARCHITECTURE behav OF MOORE1 IS
TYPE ST_TYPE IS(ST0, ST1, ST2, ST3,ST4);
SIGNAL C_ST : ST_TYPE;
BEGIN
PROCESS(CLK,RST)
BEGIN
IF RST ='1' THEN C_ST <= ST0;Q<= “0000”;
ELSIF CLK'EVENT AND CLK='1' THEN
CASE C_ST IS
WHEN ST0 => IF DATAIN =“10” THEN C_ST <= ST1;
ELSE C_ST <= ST0;END IF;
Q <= “1001”;WHEN ST1 => IF DATAIN =“11” THEN C_ST <= ST2;
ELSE C_ST <= ST1;END IF;
Q <= “0101”;WHEN ST2 => IF DATAIN =“01” THEN C_ST <= ST3;
ELSE C_ST <= ST0;END IF;
Q <= “1100”;WHEN ST3 => IF DATAIN =“00” THEN C_ST <= ST4;
ELSE C_ST <= ST2;END IF;
Q <= “0010”;WHEN ST4 => IF DATAIN =“11” THEN C_ST <= ST0;
ELSE C_ST <= ST3;END IF;
Q <= “1001”;WHEN OTHERS => C_ST <= ST0;
END CASE;
END IF;
END PROCESS;END behav;2进程Mealy型有限状态机的设计
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;ENTITY MEALY1 IS PORT(CLK,DATAIN,RESET:IN STD_LOGIC;
Q:OUTSTD_LOGIC_VECTOR(4DOWNTO 0));END MEALY1;ARCHITECTURE behav OF MEALY1 IS
TYPE states IS(st0, st1, st2, st3,st4);
SIGNAL STX : states;
BEGIN
COMREG : PROCESS(CLK,RESET)BEGIN
IF RESET ='1' THEN STX <= ST0;
ELSIF CLK'EVENT AND CLK = '1' THEN CASE STX IS
WHEN st0 => IF DATAIN = '1' THEN STX <= st1;END IF;
WHEN st1 => IF DATAIN = '0' THEN STX <= st2;END IF;
WHEN st2 => IF DATAIN = '1' THEN STX <= st3;END IF;
WHEN st3 => IF DATAIN = '0' THEN STX <= st4;END IF;
WHEN st4 => IF DATAIN = '1' THEN STX <= st0;END IF;
WHEN OTHERS => STX <= st0;
END CASE;
END IF;END PROCESS COMREG;COM1: PROCESS(STX,DATAIN)BEGIN
CASE STX IS
WHEN st0 => IF DATAIN = '1' THEN Q <= “10000”;
ELSE Q<=“01010”;END IF;
WHEN st1 => IF DATAIN = '0' THEN Q <= “10111”;
ELSE Q<=“10100”;END IF;
WHEN st2 => IF DATAIN = '1' THEN Q <= “10101”;
ELSE Q<=“10011”;END IF;
WHEN st3 => IF DATAIN = '0' THEN Q <= “11011”;
ELSE Q<=“01001”;END IF;
WHEN st4 => IF DATAIN = '1' THEN Q <= “11101”;
ELSE Q<=“01101”;END IF;
WHEN OTHERS => Q<=“00000”;
END CASE;END PROCESS COM1;END behav;状态编码
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY AD574A IS
PORT(D : IN STD_LOGIC_VECTOR(11 DOWNTO 0);
CLK ,STATUS : IN STD_LOGIC;
OUT4 : OUT STD_LOGIC_VECTOR(3
END CASE;
OUT4 <= current_state(4 DOWNTO 1);END PROCESS COM1;
REG: PROCESS(CLK)
BEGIN
IF(CLK'EVENT AND CLK='1')THEN current_state <= next_state;
END IF;
END PROCESS REG;
LK <= current_state(1);
LATCH1 : PROCESS(LK)
BEGIN
IF LK='1' AND LK'EVENT THEN
REGL <= D;
END IF;
END PROCESS;
Q <= REGL;
END behav;
9章
1、VHDL有那几种基本的顺序语句? 赋值语句;流程控制语句;等待语句;子程序调用语句;返回语句;空操作语句。
2、什么叫顺序语句,它的适用范围是什么?
执行顺序与它们的书写顺序基本一致的语句叫顺序语句,顺序语句只能出现在进程和子程序中,子程序包括函数和过程。3、VHDL并行语句几种? 并行信号赋值语句;进程语句;块语句;条件信号赋值语句;元件例化语句;生成语句;并行过程调用语句。
4、什么叫并行语句? 在结构体的执行是同步进行的,或者说是并行运行的,其执行方式与书写的顺序无关。
5、VHDL中具有属性的项目: 类型、子类型、过程、函数、信号、变量、常量、实体、结构体、配置、程序包、元件和语句标号等。
6、综合器支持的属性有: LEFT、RIGHT、HIGH、LOW、RANGE、REVERS RANGE、LENGTH、EVENT及STABLE。
端口模式:IN单向只读
OUT单向输出
INOUT输入输出双向
BUFFER内部回读输出信号,反馈 数据类型:INTEGER整数数据
BOOLEAN布尔数据
STD_LOGIC标准逻辑位数据
BIT位数据 逻辑操作符:AND与
OR或
NAND与非
NOR或非
XOR异或
XNOR同或
NOT非 数据对象:SIGNAL信号
VARIABLE变量
CONSTANT常量
7、for_loop语句实现一个16位的串行并出移位寄存器
Library IEEE;Use IEEE.std_logic_1164.all;Use IEEE.std_logic_unsigned.all;Use IEEE.std_logic_arith.all;Entity chuan_bing is port(load : in std_logic;
d_in : in std_logic;
d_out:buffer std_logic_vector(15 downto 0);clk :in std_logic);
end chuan_bing;architecture arch of chuan_bing is signal l: std_logic_vector(15 downto 0);
begin process(clk)begin
if(clk'event and clk='1')then
l(0)<=d_in;
if(load='0')then
for i in 14 downto 0 loop
l(i+1)<=l(i);
end loop;
else
d_out<=l;
end if;end if;end process;end arch;
第三篇:EDA总结
一、有关概念
1.ASIC全称:专用集成电路; 2.FPGA:现场可编程门阵列 3.CPLD:复杂可编程逻辑器件; 4.VHDL全称:硬件描述语言; 5.全定制; 6.半定制;
7.IP核;IP就是知识产权核或知识产权模块的意思
8.综合(器);综合就是将电路的高级语言(如行为描述)转换为低级的,可与FPGA/CPLD的基本结构相映射的网表文件或程序。
9.适配(器);适配器也称结构综合器,它的功能是将综合器产生的网表文件配置于指定的目标器件中,使之产生最终的下载文件。
10.功能仿真;是直接对VHDL、原理图描述或其他描述形式的逻辑功能进行测试模拟,以了解其实现的功能是否满足原设计的要求
11.时序仿真;就是接近真实器件运行特性的仿真,仿真文件中已包含了器件硬件特性参数,因而,仿真精度高。
12.编程下载;把适配后生成的下载或配置文件,通过编程器或编程电缆向FPGA或CPLD下载,以便进行硬件测试和验证 13.PROM;可编程只读存储器 14.PLA;可编程逻辑阵列 15.PAL;可编程阵列逻辑 16.查找表; 17.乘积项;
18.实体;VHDL实体作为一个设计实体(独立的电路功能结构)的组成部分,其功能是对这个设计实体与外部电路进行接口描述。
19.结构体;结构体是实体所定义实体中的一个组成部分。结构体描述设计实体的内部结构和外部设计实体端口间的逻辑关系。
20.元件例化;元件例化意味着在当前结构体内定义了一个新的设计层次,这个设计层次的总称叫元件,但它可以以不同的形式出现。?? 21.时钟进程; 22.三态; 23.线与; 24.数据对象;
25.变量;变量是一个局部量,只能在进程和子程序中使用,变量的赋值是立即发生的,不存在任何延时行为。
26.信号;信号是硬件系统的基本数据对象,它的性质类似于连接线。信号可以作为设计实体中并行语句模块间的信息交流通道
27.Moore型状态机;异步输出状态机,输出仅为当前状态的函数,在输入发生变化时还必须等待时钟的到来。
28.Mealy型状态机;同步输出状态机,输出是当前状态和所有输入信号的函数,它的输出是在输入变化后立即发生的。不依赖于时钟的同步。
注意:
1.<= 对信号SIGNAL的赋值 := 是对变量variable的赋值
2.程序的实体名必须和文件名一致,例1中二输入与门的文件名必须为yumen
一、有关概念
ASIC全称;FPGA和CPLD全称;VHDL全称;全定制;半定制; IP核;综合(器);适配(器);功能仿真;时序仿真;编程下载;PROM;PLA;PAL;查找表;乘积项;实体;结构体;元件例化;时钟进程;三态;线与; 数据对象;变量;信号; Moore型状态机;Mealy型状态机。
二、程序分析及设计
1、二输入与门的VHDL语言设计。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY yumen IS
PORT(a, b : IN BIT;
y : OUT BIT);END ENTITY yumen;ARCHITECTURE one OF yumen IS BEGIN y <= a AND b;END ARCHITECTURE one;
2、带有异步复位和同步时钟使能的6进制计数器VHDL语言设计。
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY jinzhi IS PORT(CLK,RST,EN : IN STD_LOGIC;CQ : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);COUT : OUT STD_LOGIC);END jinzhi;ARCHITECTURE behav OF jinzhi IS BEGIN PROCESS(CLK, RST, EN)VARIABLE CQI : STD_LOGIC_VECTOR(2 DOWNTO 0);BEGIN IF RST = '1' THEN CQI :=(OTHERS =>'0');--计数器复位 ELSIF CLK'EVENT AND CLK='1' THEN--检测时钟上升沿 IF EN = '1' THEN--检测是否允许计数 IF CQI < 5 THEN CQI := CQI + 1;--允许计数
ELSE CQI :=(OTHERS =>'0');--大于5,计数值清零 END IF;END IF;END IF;IF CQI = 5 THEN COUT <= '1';--计数大于5,输出进位信号 ELSE COUT <= '0';END IF;CQ <= CQI;--将计数值向端口输出 end PROCESS;END behav;
3、用VHDL语言设计2选1数据选择器。
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY erxuanyi IS PORT(a, b, s: IN BIT;y : OUT BIT);END erxuanyi;ARCHITECTURE one OF erxuanyi IS BEGIN PROCESS(a,b,s)BEGIN IF s = '0' THEN y <= a;ELSE y <= b;END IF;END PROCESS;END;
4、边沿型T、D触发器VHDL语言设计。--D触发器
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DFF IS PORT(CLK : IN STD_LOGIC;D : IN STD_LOGIC;Q : OUT STD_LOGIC);END;ARCHITECTURE bhv OF DFF IS SIGNAL Q1 : STD_LOGIC;BEGIN PROCESS(CLK)BEGIN IF CLK'EVENT AND CLK = '1' THEN Q1 <= D;END IF;END PROCESS;Q <= Q1;END bhv;
--T触发器
有clk且为1的时候,T与当前状态异或
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY tff IS PORT(CLK : IN STD_LOGIC;T : IN STD_LOGIC;Q : OUT STD_LOGIC);END;ARCHITECTURE bhv OF tff IS SIGNAL Q1 : STD_LOGIC;BEGIN PROCESS(CLK)BEGIN IF CLK'EVENT AND CLK = '1' THEN Q1 <= Q1 XOR T;END IF;END PROCESS;Q <= Q1;END bhv;
5、带并行置数的8位右移移位寄存器VHDL语言设计。
library ieee;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SHFRT IS PORT(CLK,LOAD: IN STD_LOGIC;
DIN: IN STD_LOGIC_VECTOR(7 DOWNTO 0);
QB:OUT STD_LOGIC);END SHFRT;
ARCHITECTURE BEHAV OF SHFRT IS BEGIN PROCESS(CLK,LOAD)
VARIABLE REG8: STD_LOGIC_VECTOR(7 TO 0);BEGIN
IF CLK'EVENT AND CLK='1' THEN
IF LOAD='1' THEN REG8:=DIN;
ELSE REG8(6 DOWNTO 0):=REG8(7 DOWNTO 1);
END IF;
END IF;
QB<=REG8(0);END PROCESS;END BEHAV;--说明:当clk有上升沿,而且load为1的时候把din的值赋给REG8,如果clk有上升沿,而且load为0的时候把REG8的高7为赋给低7位(注意此时最高位不变)6、1位半加器VHDL语言设计。(布尔逻辑描述)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY banjia IS PORT(a,b : IN STD_LOGIC;co,so : OUT STD_LOGIC);END ENTITY banjia;ARCHITECTURE fh1 OF banjia IS BEGIN so <= not(a xor(not b));co <= a and b;END ARCHITECTURE fh1;
7、用VHDL语言设计实现四选一数据选择器。
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY sixuan IS PORT(a, b, c , d: IN BIT;
s: IN STD_LOGIC_VECTOR(1 DOWNTO 0);y : OUT BIT);END sixuan;ARCHITECTURE one OF sixuan IS BEGIN PROCESS(a,b,c,d,s)BEGIN case s(1 DOWNTO 0)is when “00” => y <= a;when “01” => y <= b;when “10” => y <= c;when “11” => y <= d;when others => null;END case;END PROCESS;END;
8、用VHDL语言实现三态门设计。
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY santai IS port(enable : IN STD_LOGIC;datain : IN STD_LOGIC_VECTOR(7 DOWNTO 0);dataout : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END santai;ARCHITECTURE bhv OF santai IS BEGIN PROCESS(enable,datain)BEGIN IF enable = '1' THEN dataout <= datain;ELSE dataout <=“ZZZZZZZZ”;END IF;END PROCESS;END bhv;
9、设有VHDL描述的半加器h_adder和或门or2,试通过层次化设计思想设计由半加器和或门构成的一位二进制全加器的VHDL程序。全加器f_adder电路结构组成图如下所示。
半加器h_adder LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY h_adder IS PORT(a,b : IN STD_LOGIC;co,so : OUT STD_LOGIC);END ENTITY h_adder;ARCHITECTURE fh1 OF h_adder IS BEGIN so <=(a OR b)AND(a NAND b);co <= NOT(a NAND b);END ARCHITECTURE fh1;
或门 or2a LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY or2a IS PORT(a, b :IN STD_LOGIC;c : OUT STD_LOGIC);END ENTITY or2a;ARCHITECTURE one OF or2a IS BEGIN c <= a OR b;END ARCHITECTURE one;
元件例化adder library ieee;use ieee.std_logic_1164.all;entity adder is port(ain,bin,cin:in std_logic;
cout,sum :out std_logic);end entity adder;architecture fd1 of adder is component h_adder
port(a,b:in std_logic;
co,so:out std_logic);end component;component or2a
port(a,b:in std_logic;
c:out std_logic);end component;signal d,e,f:std_logic;begin u1 : h_adder port map(a=>ain,b=>bin,co=>d,so=>e);u2 : h_adder port map(a=>e,b=>cin,co=>f,so=>sum);u3 : or2a port map(a=>d,b=>f,c=>cout);end architecture fd1;
第四篇:EDA期末复习总结1
面向FPGA的开发流程
综合:由高层次描述自动转换为低层次描述的过程。是EDA技术的核心。
综合器:能够自动将一种设计表示形式向另一种设计表示形式转换的计算机程序。Xilinx公司推出FPGA;Altera公司推出EPLD,Lattice公司提出CPLD和ISP。
VHDL程序的基本结构:库、程序包,实体,结构体,进程,配置。VHDL的本质:并行语句。
不完整IF语句形成时序逻辑电路,完整IF语句形成组合逻辑电路。
常用逻辑门符号与现有国标符号的对照:
第三章VHDL的基础
3.1 VHDL基本语法
实体:描述器件的端口构成及信号端口的基本性质。表达式:entity e_name is port(p_name:port_m data_type;
„„
p_namei:port_mi data_type); end entity e_name;
结构体:描述电路器件的内部逻辑功能和电路结构。
表达式:architecture arch_name of e_name is [说明语句] „„定义或说明数据对象、数据类型、元件调用声明 begin(功能表述语句)end architecture arch_name;
一个可综合的、完整的VHDL程序结构必须包含实体和结构体两个最基本的语言结构。把一个完整的可综合的VHDL程序设计称为设计实体,而其程序代码常被称为VHDL的RTL描述。
4种端口模式:IN,OUT,INOUT,BUFFER。
4种数据类型:integer(整数),boolean(逻辑),std_logic,bit。bit的取值范围是‘1’和‘0’,可以参与逻辑运算或算术运算,其结果仍是位的数据类型。
赋值符号“<=”:
例如y<=a,表示输入端口a的数据向输出端口y传输,或信号a向信号y赋值。赋值操作并非立即发生,而要经历一个模拟器的最小分辨时间δ,δ可以看作实际电路存在的固有延时量。“<=”两边的信号的数据类型必须一致。
数据比较符号“=”:
例如s=‘0’,“=”没有赋值的含义,只是一种数据比较符号。S=‘0’输出结果的数据类型是布尔数据类型BOOLEAN,BOOLEAN数据类型取值是TRUE(真)和FALSE(伪),VHDL仿真器和综合器分别用‘1’和‘0’表达TRUE和FALSE,布尔数据不是数值,只能用于逻辑操作或条件判断。
7种逻辑操作符:and与、or或、not非、nand与非、nor或非、xor异或、xnor同或。
逻辑操作符所要求的操作数的数据类型有3种,即bit、boolean和std_logic。
条件语句:用IF_THEN_ELSE表示VHDL顺序语句。
IF语句表达式:if 条件句 then 顺序语句 else 顺序语句 end if
WHEN_ELSE 条件信号赋值语句:一种并行赋值语句
表达式:赋值目标<=表达式 WHEN 赋值条件 ELSE 例:z<= a when p1=’1’ else
表达式 WHEN 赋值条件 ELSE b when p2=’1’ else
„ c;
表达式; 条件信号赋值语句的第一句具有最高赋值优先。
进程语句:由Process引导的语句: 表达式:Process(a,b,s)
在VHDL中,所有合法的顺序语句都必须放入进程语句中。在结构体中,可以有很多进程语句,所有的进程语句都是并行语句,而由任一进程Process引导的语句结构属于顺序语句。进程语句定义的是变量。描述数字电路时,推荐使用Process语句。
文件取名和存盘
文件名可以由设计者任意给定,但文件后缀扩展名必须是“.vhd”,建议程序的文件名尽可能与该程序的实体名一致,文件名原则上不分大小写,但推荐用小写。
3.2 时序电路描述
VHDL主要通过对时序器件功能和逻辑行为的描述,而非结构上的描述使得计算机综合出符合要求的时序电路。
标准逻辑位数据类型STD_LOGIC:
STD_LOGIC定义:TYPE STD_LOGIC IS(‘U’,‘X’,‘0’,‘1’,‘Z’,‘W’,‘L’,‘H’,‘-’)
使用库和程序包的一般定义表达式: LIBRARY <设计库名>;
USE <设计库名>.<程序包名>.ALL;
信号定义:signal q1:std_logic 数据对象:信号(signal)、变量(variable)、常量(constant)
信号属性函数:EVENT。所谓信号属性函数是用来获得信号行为信息的函数。测定信号的跳变情况:<信号名>’EVENT 上升沿检测表式为:<信号名>’EVENT AND <信号名>=’1’ 时钟上升沿检测表式为:clk’event and clk=‘1’ 确保clk的变化是一次上升沿的变化:
if clk'event and(clk='1')and(clk'last_value='0')if clk='1' and clk'last_value='0' 3.3
※CASE语句:
case语句属于顺序语句,因此必须放在进程语句中使用。
一般表达式:case <表达式> is when <选择值或标识符>=><顺序语句>;„;<顺序语句>;when <选择值或标识符>=><顺序语句>;„;<顺序语句>;„
when others=><顺序语句>;--一般用null,表示不作任何操作。end case;
并置操作符&:表示将操作数或是数组合并起来形成新的数组。如abc<=a&b。
例化语句:
第一部分是对一个现成的设计实体定义为一个元件,语句的功能是对待调用的元件作出调用声明,其表达式为:component 元件名
port(端口名表);
end component 第二部分则是此元件与当前设计实体中元件间及端口的连接说明,语句的表达式为:
例化名:元件名port map([端口名=>]连接端口名,„);
相关语法说明:
1、变量
variable cqi:std_logic_vector(3 downto 0);变量与信号的区别: 信号:全局量
用于architecture、package、entity中 赋值符号为<= 变量:局部量
用于process、function、procedure中 赋值符号为:=
2、省略赋值操作符(others=>x)
全加器的VHDL描述(书P55)
3.6 数据对象
数据对象: 常量(constant):代表数字电路中电源、地和恒定的逻辑值。
常数定义语句:
变量(variable):代表暂存某些值的载体,常用于描述算法。
变量定义语句:
信号(signal):代表物理设计中的某硬件连接线,包括输入输出端口。
信号定义语句:
信号赋值语句:
变量与信号的差异(总结): 1)赋值方式的不同:
变量:= 表达式;
信号 < = 表达式;
2)硬件实现的功能不同:
信号代表电路单元、功能模块间的互联,代表实际的硬件连线;
变量代表电路单元内部的操作,代表暂存的临时数据。
3)有效范围的不同:
信号:程序包、实体、结构体;全局量。
变量:进程、子程序;局部量。4)赋值行为的不同:
信号赋值延迟更新数值、时序电路;
变量赋值立即更新数值、组合电路。
3.7 IF语句概述
※IF语句:
3.8 进程语句归纳
Process语句结构的一般表达格式如下:
[进程标号:] process [(敏感信号参数表)] [is] [进程说明部分](定义该进程所需的局部数据环境)begin 顺序描述语句(描述该进程的行为)end process [进程标号];
第四章QuartusⅡ的使用
建立工作库文件夹和编辑设计文件,创建工程,编译前设置,全程编译,时序仿真,应用RTL电路图观察器,引脚锁定,配置文件下载,编程配置器件,Signal TapⅡ实时测试。(文本编辑,功能仿真,逻辑综合,布局布线,时序仿真,编程下载)
第五章VHDL状态机
用户自定义数据类型是用类型定义语句TYPE和子类型定义语句SUBTYOPE实现的
5.1 状态机设计相关语句
TYPE类型定义语句:
VHDL中的枚举数据类型是一种特殊的数据类型,它们是用文字符号来表示一组实际的二进制数。设计者在状态机的设计中,为了利于阅读、编译和VHDL综合器的优化,往往将表征状态的二进制数组用文字符号来代替,即所谓的状态符号化。
枚举类型也可以直接用数值来定义,但必须使用单引号。枚举数据,在综合过程中,都将转化为二进制代码。编码顺序是默认的。编码数值:一般将第一个枚举量编码为‘0’或“0000”,以后依次加1。编码的位矢量长度根据实际情况决定。
子类型subtype是由type所定义的原数据类型的一个子集,它满足原数据类型的所有约束条件,原数据类型称为基本数据类型。子类型并没有定义新的数据类型。
子类型subtype的语句格式:
5.1.3
状态机的结构
最一般最常用的状态机通常包括:说明部分,主控时序进程,主控组合进程,辅助进程。
现态信号current_state,次态信号next_state。
真值表:
5.2 Moore状态机设计
从状态机的信号输出方式上分,有Moore型和Mealy型两类状态机。
Moore型状态机的输出仅为当前状态的函数,这类状态机在输入发生变化时还必须等待时钟的到来,时钟使状态变化时才导致输出的变化,所以比Mealy机要多等待一个时钟周期。
Mealy型状态机的输出是当前状态和所有输入信号的函数,它的输出是在输入变化后立即发生的,不依赖时钟的同步。
从输出时序上看,Moore属于同步输出状态机,而Mealy属于异步输出状态机。
摩尔(Moore)型状态机的输出仅与当前状态有关:
异步复位:目的在加电时建立一个初始状态,并避免非法状态;
摩尔(Moore)型状态机真值表:
多进程Moore状态机的输出信号是由组合电路发出的,所以在一些特定情况下难免出现毛刺现象。如果这些输出信号用作时钟信号,极易产生错误的操作,需尽力避免。单进程Moore状态机较容易构成能避免出现毛刺现象的状态机。
5.3 Mealy 状态机
Mealy状态机的输出不仅是当前状态的函数,也是输入信号的函数。
Mealy 状态机真值表:
第七章VHDL语句
7.1 VHDL顺序语句(Sequential)
硬件执行:并行执行(VHDL本质)仿真执行:顺序执行、并行执行
分为两大类:顺序(Sequential)描述语句、并行(Concurrent)描述语句
顺序语句只能用在进程与子程序中。可描述组合逻辑、时序逻辑。常用的顺序描述语句:赋值语句; if语句;case语句;loop语句; next语句;exit语句;子程序调用语句; return语句;wait语句;null语句。
7.1.4 LOOP语句
LOOP语句就是循环语句,它可以使所包含的一组顺序语句被循环执行,其执行次数可由设定的循环参数决定。
LOOP语句的常用表达方式有两种。
(1)单个LOOP语句,其语法格式如下:
[LOOP标号:] LOOP
顺序语句
END LOOP [LOOP标号:];
该语句形式的循环方式需引入其它控制语句(如EXIT语句)才能确定。
(2)FOR_LOOP语句,其语法格式如下:
[LOOP标号:] FOR 循环变量,IN 循环次数范围 LOOP 顺序语句
END LOOP [LOOP标号:];
7.1.5 NEXT 语句
NEXT语句主要用在LOOP语句执行中进 行有条件的或无条件的转向控制,它的语句格式有3种。
(1)第一种语句格式:NEXT;
当LOOP内的顺序语句执行到NEXT语句时,即刻无条件终止当前的循环,跳回到本次循环LOOP语句处,开始下一次循环。
(2)第二种语句格式:NEXT LOOP标号;
在当有多重LOOP语句嵌套时,可以跳转到指定标号的LOOP语句处,重新开始执行循环操作。
(3)第三种语句格式:NEXT LOOP标号 WHEN 条件表达式 ;
分句“WHEN 条件表达式”是执行NEXT语句的条件,如果条件表达式的值为TRUE,则执行NEXT语句,进入跳转操作,否则继续向下执行。但当只有单层LOOP循环语句时,关键词NEXT和WHEN之间的“LOOP标号”可以省去。
7.1.6 EXIT语句
EXIT 语句为LOOP语句的内部循环控制语句,将结束循环状态。
EXIT;--第一种语句格式 EXIT LOOP标号;--第二种语句格式
EXIT LOOP标号 WHEN 条件表达式 ;--第三种语句格式
NEXT语句与EXIT语句的格式与操作功能非常相似,区别是: NEXT语句是跳向LOOP语句的起始点,而EXIT语句则是跳向LOOP语句的终点。
7.1.7 WAIT语句
在进程中,当执行到WAIT(等待)语句时,运行程序将被挂起,直到满足此语句设置的结束挂起条件之后,才重新开始执行进程中的程序。
wait--无限等待
wait on 信号表--敏感信号等待语句 wait until 条件表达式--条件满足(可综合)wait for 时间表达式--时间到,超时等待语句
1、wait on 语句
格式:wait on 信号[,信号];
2、wait until 语句(可综合)
格式:wait until 表达式;
当表达式的值为“真”时,进程被启动,否则进程被挂起。
三种表达方式:
wait until 信号 = value;wait until 信号’event and 信号 = value;wait until not(信号’stable)and 信号 = value;时钟信号 clk 的上升沿的描述:
wait until clk = ‘1’;
wait until rising_edge(clk);wait until clk’event and clk = ‘1’;
wait until not(clk’stable)and clk = ‘1’;
7.1.9
return 语句
return 语句只能用于子程序中,并用来终止一个子程序的执行。
格式:return [表达式];
分为:1)return ;
用于过程,只是结束过程,不返回任何值。2)return 表达式;
用于函数,并且必须返回一个值。
7.1.9
空操作语句
空操作语句不完成任何操作,它唯一的功能就是使逻辑运行流程跨入下一步语句的执行。NULL常用于CASE语句中,为满足所有可能的条件,利用NULL来表示剩余条件下的操作行为。
格式: NULL;
7.2
并行语句(Concurrent Statements)
结构体中可综合的并行描述语句有:
并行信号赋值语句,条件信号赋值语句,选择信号赋值语句,进程语句,块语句,元件例化语句,生成语句,参数传递映射语句,过程调用语句,端口说明语句。
使用格式: ARCHITECTURE 结构体名 OF 实体名 IS 说明语句
BEGIN 并行语句
END ARCHITECTURE 结构体名
名词解释
EDA--------电子设计自动化(Electronic Design Automation)VHDL------超高速集成电路硬件描述语言
(Very-High-Speed Integrated Circuit HardwareDescription Language)CPLD------复杂可编程逻辑器件(Complex Programmable Logic Device)EPLD--------电可编程逻辑器件(Electrically Programmable Logic Device)FPGA------现场可编程门阵列(Field-Programmable Gate Array)
ASIC-------专用集成电路(Application Specific Integrated Circuit)LUT---------显示查找表(Look-Up-Table)ISP----------在系统可编程技术(In_System Programmability Programming)
第五篇:EDA基础总结
EDA基础总结
综述部分
1.EDA的中文全称为电子设计自动化,英文全名为Electronic Design Automation。2.EDA平台常用的两种输入电路的方法是:电路原理图输入法、HDL输入法。3.EDA平台工作流程:电路输入、综合优化、功能仿真、布局布线、门级仿真。
数字电路部分
1.EDA中常用的仿真语言为Verilog和VHDL。
2.VHDL其英文全名为VHSIC Hardware Description Language,而VHSIC则是Very High Speed Intergeraterd Circuit的缩写词,意为甚高速集成电路,故VHDL其准确的中文译名为甚高速集成电路的硬件描述语言。
3.Verilog HDL其英文全名为Verilog Hardware Decription Language,HDL中文译名为硬件描述语言。
4.Verilog和VHDL的比较
共同点:能形式化地抽象表示电路的行为和结构;支持逻辑设计中层次与范围的描述;可借用高级语言的精巧结构来简化电路行为的描述;具有电路仿真与验证机制以保证设计的正确性;支持电路描述由高层到低层的综合转换;硬件描述与实现工艺无关;便于文档管理;易于理解和设计重用。
不同点:Verilog在系统级抽象方面略差,VHDL在门级开关电路方面略差。
5.软核、固核和硬核
软核:功能经过验证的、可综合的、实现后电路结构总门数在5000门以上的Verilog模型。
固核:在某一种现场可编程门列器件上实现的经验证是正确的,且总门数在5000门以上的电路结构编码文件。
在某一种专用集成电路工艺的器件上实现的,经验证是正确的,且总门数在5000门以上的电路结构版图掩膜。6.自顶向下(Top Down)设计
7.自底向上(Down Top)设计
8.名词解释:
ASIC:Application Specific Integrated Circuit,专用集成电路。
FPGA:Field Programmable Gate Array,现场可编程门阵列。PLD:Programmable Logic Device,可编程逻辑器件。
Verilog编程题: 数据比较器(2位)//数据比较器
module compare(equal, a, b);input a,b;output equal;reg equal;always @(a or b)if(a == b)equal = 1;else equal = 0;endmodule
//数据比较器测试代码 `timescale 1ns/1ns `include “./1-1.v” module t;reg a,b;wire equal;initial begin a=0;b=0;#100 a=0;b=1;#100 a=1;b=1;#100 a=1;b=0;#100 a=0;b=0;#100 $stop;end
compare m(.equal(equal),.a(a),.b(b));endmodule
数据比较器(8位)
module compare8(equal, a, b);input [7:0]a, b;output equal;reg equal;always @(a or b)if(a > b)begin equal = 1;end else begin equal = 0;end endmodule 分频器
module half_clk(reset, clk_in, clk_out);input clk_in, reset;output clk_out;reg clk_out;
always @(posedge clk_in)begin if(!reset)clk_out = 0;else clk_out = ~clk_out;end endmodule
10M时钟分频为500K module fdivision(RESET, MB, KB);input MB, RESET;output KB;reg KB;reg [7:0] j;
always @(posedge MB)if(!RESET)begin KB <= 0;j <= 0;end else begin if(j == 19)begin j <= 0;KB <= ~KB;end else j <= j+1;end endmodule
译码电路
`define plus 3'd0 `define minus 3'd1 `define band 3'd2 `define bor 3'd3 `define unegate 3'd4
module alu(out, opcode, a, b);output[7:0] out;reg[7:0] out;input[2:0] opcode;input[7:0] a,b;
always @(opcode or a or b)begin case(opcode)`plus: out = a + b;`minus: out = a-b;`band: out = a & b;`bor: out = a | b;`unegate: out = ~a;default: out = 8'hx;endcase end endmodule
八路数据选择器
module selecting8(addr, in1, in2, in3, in4, in5, in6, in7, in8, dataout, reset);input [2:0] addr;input [3:0] in1,in2,in3,in4,in5,in6,in7,in8;input reset;output [3:0] dataout;reg [3:0] dataout;
always @(addr or in1 or in2 or in3 or in4 or in5 or in6 or in7 or in8 or reset)begin if(!reset)case(addr)3'b000: dataout = in1;3'b001: dataout = in2;3'b010: dataout = in3;3'b011: dataout = in4;3'b100: dataout = in5;3'b101: dataout = in6;3'b110: dataout = in7;3'b111: dataout = in8;endcase else dataout = 0;end endmodule
逻辑运算电路
module tryfunct(clk, n, result, reset);output[31:0] result;input[3:0] n;input reset, clk;reg[31:0] result;
always @(posedge clk)begin if(!reset)result <=0;else begin result <= n*factorial(n)/((n*2)+1);end end
function [31:0] factorial;input [3:0] operand;reg [3:0] index;begin factorial = operand ? 1:0;for(index = 2;index <= operand;index = index + 1)factorial = index *factorial;end endfunction endmodule
module tryfunct(clk, n, result, reset);output[31:0] result;input[3:0] n;input reset, clk;reg[31:0] result;
always @(posedge clk)begin if(!reset)result <=0;else begin result <= n*factorial(n)/((n*2)+1);end end
function [31:0] factorial;input [3:0] operand;reg [3:0] index;begin factorial = operand ? 1:0;for(index = 2;index <= operand;index = index + 1)factorial = index *factorial;end endfunction endmodule
高速排序组合逻辑
module sort4(ra, rb, rc, rd, a, b, c, d);output[3:0] ra, rb, rc, rd;input[3:0] a, b, c, d;reg[3:0] ra, rb, rc, rd;reg[3:0] va, vb, vc, vd;
always @(a or b or c or d)begin {va, vb, vc, vd} = {a, b, c, d};sort2(va, vc);sort2(vb, vd);sort2(va, vb);sort2(vc, vd);sort2(vb, vc);{ra, rb, rc, rd} = {va, vb, vc, vd};end
task sort2;input[3:0]x, y;reg[3:0] tmp;if(x > y)begin tmp = x;x = y;y = tmp;end endtask endmodule
检测5位二进制序列10010 module seqdet(x, z, clk, rst, state);input x, clk, rst;output z;output[2:0] state;reg[2:0] state;wire z;
parameter IDLE = 'd0, A = 'd1, B = 'd2, C = 'd3, D = 'd4, E = 'd5, F = 'd6, G = 'd7;
assign z =(state == E && x == 0)? 1:0;
always @(posedge clk)if(!rst)begin state <= IDLE;end else case(state)IDLE: if(x == 1)begin state <= A;end A: if(x == 0)begin state <= B;end B: if(x == 0)begin state <= C;end else begin state <= F;end C: if(x == 1)begin state <= D;end else begin state <= G;end D: if(x == 0)begin state <= E;end else begin state <= A;end E: if(x == 0)begin state <= C;end else begin state = A;end F: if(x == 1)begin state <= A;end else begin state <= B;end G: if(x == 1)begin state <= F;end default: state = IDLE;endcase endmodule
模拟电路部分
1.目前,集成电路最常用的材料是单晶硅。
2.集成电路的生产由设计、制造、封装三部分组成。
3.集成电路中基片主要制作工艺为:光刻、扩散、注入、刻蚀、键合。
4.集成电路中基片的制造步骤为:光刻、扩散、注入、刻蚀。
5.衡量集成电路产业水平的两个主要参数为:硅晶圆片直径和光刻精度(特征尺寸)。这两个参数在业界达到的水平为:硅晶圆片直径12英寸(300mm),光刻精度0.13um。主流水平为:硅晶圆片直径200mm,光刻精度0.18um。
6.模拟电路中常用的仿真算法是SPICE,英文全名为Simulation Program with Integrated Circuit Emphasis。
7.世界上设计EDA软件实力最强的两个公司为Cadence和Synopsys。其中,Cadence的优势为电路布局布线,Synopsys的优势为逻辑综合仿真。
8.WorkBench是加拿大IIT公司退出的电子线路仿真软件。它可以对模拟、数字和模拟/数字混合电路进行仿真,克服了传统电子产品的设计受实验室客观条件限制的局限性,用虚拟的元件搭接各种电路,用虚拟的仪表进行各种参数和性能指标的测试。特点如下:(1)系统集成度高,界面直观,操作方便。(2)具备模拟、数字及模拟/数字混合电路仿真。(3)提供较为丰富的元器件库。(4)电路分析手段完备。(5)输出方式灵活。(6)兼容性好。9.SPICE语言举例: EXAMPLE
VCC 8 0 12
**** 文件名 任意名都可以 但必须要有****
**** 电源正极接于节点8 负极接于0 电压为12V **** VEE 0 9 12
**** 电源正极接于节点0,负接接于节点9,电压为12V;**** VIN 1 0 AC 1 SIN(0 0.1 5MEG)
**** 信号源VIN 接于1 和接点0;交流1V 进行交流分析 同时加一个正弦信号 直流偏置为0,振幅为0.1V频率为5M的交流信号源,进行瞬态分析;**** RC1 8 4 10K
RC2 8 5 10K
RS 2 1 1K
RS1 8 7 20K
RS2 3 0 1K
**** 电阻RC1 分别接于节点8 节点4;阻值为10K;**** **** 电阻RC2 分别接于节点8 节点5;阻值为10K;**** **** 电阻RS 分别接于节点1 节点0;阻值为1K;**** **** 电阻RS1 分别接于节点8 节点7 阻值为20K;**** **** 电阻RS2 分别接于节点3 节点0 阻值为1K;**** Q1 4 2 6 MOD1
**** 三极管Q1 CBE 分别接于节点 4 2 6 模型为MOD1**** Q2 5 3 6 MOD1
**** 三极管Q2 CBE 分别接于节点 5 3 6 模型为MOD1**** Q3 6 7 9 MOD1
**** 三极管Q3 CBE 分别接于节点 6 7 9 模型为MOD1**** Q4 7 7 9 MOD1
**** 三极管Q4 CBE 分别接于节点 7 7 9 模型为MOD1****.OP
**** 求出直流工作点.本电路共有9个节点;温度值为27度;****.DC VIN-.15.15.01
**** DC为直流分析语句,分析输入电压从-0.15V到0.15V扫描特性,每0.1V作一次分析;****.PRINT DC V(4)V(5)
****.PRINT 为打印语句,其中DC是打印直流内容,这里规定打印节点4和5上的电位,既相对地参考点的电压随输入的变化关系;****.PLOT DC V(4)V(5)
****.PLOT为绘图语句,其中DC表示绘制直流分析的传输特性,说明是绘制V(4)V(5)的输出电压和VIN关系曲线;****.TF V(5)VIN
****.TF是转移函数分析语句,该句表示计算直流分析时,小信号输出电压V(5)和输入电压VIN的转移函数值,输入电阻和输出电阻;****.AC DEC 10 25K 250MEG
****.AC是交流分析语句,是在规定的频率范围内从25K到250M进行频域分析DEC表示按数量级变化,10表示每一数量级中取的分析点数目;****.PRINT AC VM(5)VP(5)
**** 打印AC分析VM(5)VP(5)的取点数;****.PLOT AC VM(5)VP(5)
**** 绘制AC分析VM(5)VP(5)的取点数;****.TRAN 4N 100N 1N
****.TRAN是瞬态分析语句,并规定了打印或绘图时间增量为4N秒,计算终止时间为100N秒,打印或绘图开始时间1NS*;****.PRINT TRAN V(5)V(4)
****.打印出4.5点的电压随时间变化;****.PLOT TRAN V(5)V(4)
****.绘图出节点4.5的电压随时间变化;****.END
**** 结束语句...一定要有;****