子程序和程序包
vhdl简答

1、简述信号与变量的区别。
a.信号延时赋值,变量立即赋值b.信号的代入使用<=,变量的代入使用:=;c.信号在实际的硬件当中有对应的连线,变量没有2、简述可编程逻辑器件的优点。
a.集成度高,可以替代多至几千块通用IC芯片.极大减小电路的面积,降低功耗,提高可靠性b.具有完善先进的开发工具.提供语言、图形等设计方法,十分灵活.通过仿真工具来验证设计的正确性c.可以反复地擦除、编程,方便设计的修改和升级d.灵活地定义管脚功能,减轻设计工作量,缩短系统开发时间f.保密性好3、试比较moore状态机与mealy状态机的异同。
Moore输出只是状态机当前状态的函数. Mealy输出为有限状态机当前值和输入值的函数3、简述VHDL语言与计算机语言的差别。
a. 运行的基础。
计算机语言是在CPU+RAM构建的平台上运行。
VHDL设计的结果是由具体的逻辑、触发器组成的数字电路b.执行方式.计算机语言基本上以串行的方式执行.VHDL在总体上是以并行方式工作c.验证方式.计算机语言主要关注于变量值的变化.VHDL要实现严格的时序逻辑关系6、VHDL与计算机语言的区别?VHDL语言可以并行执行,计算机语言只能顺序执行。
3.1比较常用硬件描述语言VHDL、Verilog和ABEL语言的优劣。
1.VHDL:描述语言层次较高,不易控制底层电路,因而对综合器的性能要求较高。
有多种EDA工具选择,已成为IEEE标准。
应用VHDL进行工程设计的优点是多方面的,具体如下:(1) 与其他的硬件描述语言相比,VHDL具有更强的行为描述能力。
(2) VHDL具有丰富的仿真语句和库函数,使得在任何大系统的设计早期,就能查验设计系统的功能可行性,随时可对系统进行仿真模拟,使设计者对整个工程的结构和功能可行性做出判断。
(3) VHDL语句的行为描述能力和程序结构,决定了它具有支持大规模设计的分解和已有设计的再利用功能。
(4) 用VHDL完成一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动把VHDL描述设计转变成门级网表(根据不同的实现芯片)。
EDA - 副本

图4-2 结构体的一般构造图
VHDL语言 第4章 VH中,实体、结构体、端口、元件 和对象等用户的定义项,都必须用标识符来命名。 VHDL的标识符是符合以下规则的字符序列: 1.英文字母(‘a’-‘z’,‘A’-‘Z’)、数字(‘0’-‘9’) 和下划线(‘_’); 2.起始字符必须为英文字母; 3.下划线(‘_’)的前后必须有英文字母或者数字; 4.标识符不区分大小写。 例如MUX、mux和Mux,是同一标识符的不同形式。
•
•
VHDL是最具推广前景的HDL。 VHDL(Very High Speed Integrated Circuits Hardware Description Language,超高速集成 电路硬件描述语言)是美国国防部于20世纪80年 代后期出于军事工业的需要开发的。1984年, VHDL被IEEE(Institute of Electrical and Electorincs Engineers)确定为标准化的硬件描 述语言。1994年,IEEE对VHDL进行了修订, 增加了部分新的VHDL命令与属性,增强了系统 的描述能力,并公布了新版本的VHDL,即 IEEE标准版本1046-1994版本。VHDL已经成为 系统描述的国际公认标准,得到众多EDA公司 的支持,越来越多的硬件设计者使用VHDL描述 系统的行为。
用in1、in2、in4代替了函数在程序包内定义时的参 数s1、s2、s4。函数的返回值tmp被赋予result。同时, 由上面的例子可以看出,函数只能返回一个函数值。
VHDL语言 第4章 VHDL语言
(2) 过程(Procedure)。在VHDL语言中,过程语句的书写 格式如下: PROCEDURE 过程名(参数表) --过程首部分
VHDL语言 第4章 VHDL语言
复习

一、填空15二、判断10三、简答20 分别5分,4分,3分四、根据程序画出对应电路图15 一个5分,一个10分。
五、改错并简述理由20 一个2分六、填补程序20 一个10分1:填补一个程序包并且打开2: 填补实体1.FPGA CPLD VHDL 中文意思,FPGA 和CPLD 分别基于什么结构2.vhdl数据对象:有哪几种(填空),分别可以放在哪些位置(判断),以及信号与变量的异同(简答)类属参量与常量的区别(简答)常量、变量和信号变量赋值语句格式为:目标变量名:= 表达式;变量说明的语法格式是:V ARIABLE 变量名{,变量名}:数据类型[:=初始值];变量只用于进程和子程序信号说明的语法格式为:SIGNAL 信号名{,信号名} :数据类型[:=初始值];位置:程序包,实体,结构体,块。
赋值语句中的表达式必须与目标信号具有相同的数据类型信号赋值语句表达式为:目标信号名<=表达式;信号和变量的主要区别:1.变量是一个局部量,只能用于进程或子程序中;信号是一个全局量,它可以用来进行进程之间的通信。
2. 变量的赋值立即生效,不存在延时行为;信号赋值至少要有δ延时信号赋值具有非立即性,信号之间的传递具有延时性。
3. 信号除当前值外有许多相关的信息,如历史信息和投影波形;而变量只有当前值。
4. 信号是硬件中连线的抽象描述,他们的功能是保存变化的数据值和连接子元件,信号在元件的端口连接元件。
变量在硬件中没有类似的对应关系,他们用于硬件特性的高层次建模所需要的计算中。
5. 信号赋值可以出现在进程中,也可以直接出现在结构体中,但它们的运行含义不同:前者属顺序信号赋值,此时的赋值操作要视进程是否已被启动,后者属并行信号赋值,其赋值操作是各自独立并行发生的。
6. 在进程中变量和信号的赋值形式与操作过程不同:进程对信号敏感而不对变量敏感。
信号可以是多个进程的全局信号;而变量只在定义他们的顺序域可见(共享变量除外)。
VHDL语言复习

1. VHDL语言程序的基本结构
1.2 构造体(Architecture)
❖ 功能:指明该设计单元的行为、元件及内部的连 接关系,定义设计单元的具体功能。
❖ 描述方式:行为描述(基本设计单元的数据模型 描述);寄存器描述(数据流描述);结构描述 (逻辑元件连接描述)。
7
1. VHDL语言程序的基本结构
由UNSIGNED、SIGNED转换为 INTEGER
由STD_LOGIC_VECTORR转换为 INTEGER
32
2. VHDL语言要素
2.5 VHDL属性(Attribute) (1)数值类属性
’left(左边界), ’right(右边界), ’low(下边 界), ’high(上边界), ’length(数组长度)
——为变量赋值时,变量值的改变立即发生。
25
2. VHDL语言要素
2.4 数据类型
(1)最常见的标准定义数据类型
VHDL最常用的数据类型包括以下几种: ——INTEGER:可用作循环的指针或常数,通常不用于 I/O信号; Signal typei: INTEGER range 0 to 15; ——BIT:可取值‘0’或‘1’;
sdown :IN std_logic_vector(8 DOWNTO 0); sup :IN std_logic_vector(0 TO 8);
这两个信号的各属性值如下: sdown’left=8;sdown’ right =0;sdown’low =0; sdown’high =8;sdown’length =9; sup’left=0;sup’ right =8;sup’low =0;sup’high =8; sup’length =9;
加工中心常用代码

加工中心常用代码加工中心是一种高精度、高效率的数控机床,广泛应用于机械制造业中。
下面将介绍几种加工中心常用的代码,包括常见的程序结构、指令和功能。
一、常见的程序结构在加工中心的编程中,常见的程序结构包括程序头、主程序、子程序和程序尾。
1. 程序头:通常包括文件声明、单位系统设置、刀具补偿等信息。
例如:```% O0001(程序名)G21(设置单位为毫米)G40(取消刀具半径补偿)```2. 主程序:主要包括切削加工的指令和参数设置。
例如:```G90(绝对坐标)G54(选择工件坐标系)T1 M6(选择刀具1)S1000 M3(主轴转速1000转/分钟,正转)G0 X100 Y100 Z20(快速定位到起始点)G1 X50 F500(以500毫米/分钟的速度沿X轴切削至50毫米处)```3. 子程序:用于编写重复使用的程序段。
例如:```M98 P1000 L2(调用子程序1000,循环2次)```4. 程序尾:通常包括程序结束标志和其他附加信息。
例如:```M30(程序结束)```二、常见的指令和功能1. G指令:用于控制加工中心的运动方式和功能,如直线插补、圆弧插补、坐标系选择等。
例如:```G0(快速定位)G1(线性插补)G2(顺时针圆弧插补)G3(逆时针圆弧插补)G40(取消刀具半径补偿)G41(左刀具半径补偿)G42(右刀具半径补偿)2. M指令:用于控制加工中心的辅助功能,如主轴启停、冷却液开关等。
例如:```M3(主轴正转)M4(主轴反转)M5(主轴停止)M7(冷却液开)M8(冷却液关)```3. T指令:用于选择刀具。
例如:```T1(选择刀具1)T2(选择刀具2)```4. F指令:用于设置进给速度。
例如:```F500(进给速度为500毫米/分钟)```5. S指令:用于设置主轴转速。
例如:S1000(主轴转速为1000转/分钟)```加工中心常用代码的应用场景包括:铣削、钻孔、镗削、攻丝等。
EDA复习资料大全

1.一般把EDA技术的发展分为MOS时代、c MOS时代和ASIC三个阶段。
2.EDA设计流程包括设计输入、设计实现、实际设计检验和下载编程四个步骤。
3.EDA设计输入主要包括图形输入、HDL文本输入和状态机输入。
4.时序仿真是在设计输入完成之后,选择具体器件并完成布局、布线之后进行的时序关系仿真,因此又称为功能仿真。
5.VHDL的数据对象包括变量、常量和信号,它们是用来存放各种类型数据的容器。
6.图形文件设计结束后一定要通过仿真,检查设计文件是否正确。
7.以EDA方式设计实现的电路设计文件,最终可以编程下到FPGA和CPLD芯片中,完成硬件设计和验证。
8.MAX+PLUS的文本文件类型是(后缀名).VHD。
9.在PC上利用VHDL进行项目设计,不允许在根目录下进行,必须在根目录为设计建立一个工程目录。
10.VHDL源程序的文件名应与实体名相同,否则无法通过编译二、名词解释,写出下列缩写的中文(或者英文)含义:1. FPGA Field-Programmable Gate Array 现场可编程门阵列2VHDL Very-High-Speed Integrated Circuit Hardware Description Language)甚高速集成电路硬件描述语言3 HDL Hardware Description Language硬件描述语言5 CPLD Complex Programmable Logic Device复杂可编程逻辑器件6PLD Programmable Logic Device 可编程逻辑器件7GAL generic array logic通用阵列逻辑B Logic Array Block逻辑阵列块9. CLB Configurable Logic Block 可配置逻辑模块10 EAB Embedded Array Block 嵌入式阵列块11SOPC System-on-a-Programmable-Chip 可编程片上系统12. LUT Look-Up Table 查找表13. JTAG Joint Test Action Group 联合测试行为组织14.IP Intellectual Property 知识产15ASIC Application Specific Integrated Circuits 专用集成电路16 ISP In System Programmable 在系统可编程17 ICR In Circuit Re-config 在电路可重构18 RTL Register Transfer Level 寄存器传输19EDA Electronic Design Automation 电子设计自动化1、 FPGA结构一般分为三部分:可编程逻辑块(CLB)、可编程I/O模块和可编程内部连线。
子程序的调用和返回指令

子程序的调用和返回指令
子程序是指在一个程序中定义的可以被其他程序调用的一段代码。
通过使用子程序,
程序员可以将重复的代码封装起来,减少代码的复制粘贴,提高代码的复用率和可维护性。
在编程语言中,子程序也被称为函数、过程或方法。
子程序的调用指令和返回指令是用于在程序中调用和退出子程序的指令。
在大多数编
程语言中,这些指令可以通过程序的控制流语句实现,在汇编语言中,这些指令是由特定
的汇编语句生成的机器指令。
子程序的调用指令通常包括以下步骤:
1. 保存当前程序计数器(PC)的值,以便返回时恢复执行点。
3. 将栈指针向下移动一定的偏移量,为子程序分配新的栈空间。
4. 将传入子程序的参数压入栈中,以便被子程序使用。
1. 弹出子程序的返回值,如果有的话。
4. 使用跳转指令将程序计数器更新为保存的返回地址,以便返回到调用者的程序
流。
子程序的调用和返回指令是编程中常用的技巧,可以优化程序的结构和代码重用。
在
高级编程语言中,编译器通常会自动为程序员处理子程序的调用和返回指令。
然而,在底
层编程和系统级编程中,程序员需要手动处理这些指令,以便更好地控制程序的执行流和
资源管理。
第四讲VHDL语言基础知识

对象说明的一般格式是: <gt; <信号种类>: =<表达式>; 说明 标识符 <子类型说明>是类型名或类型名加限制条件 <信号种类>为BUS或REGISTER,该项为任选项 :=<表达式>为对象赋初值
3、配置
格式
CONFIGURATION END 配置名;
配置名 OF 实体名 [说明语句];
IS
说明
这种配置用于选择不包含块(BLOCK)和元 件(COMPONENTS)的构造体。在配置语句中只包 含有实体所选配的构造体名,其他什么也没有。
4、包集合
格式
PACKAGE
说明
包集合名 IS [说明语句]; END 包集合名; PACKAGE BODY 包集合名 [说明语句]; END BODY;
VHDL源文件基本格式
LIBRARY 库名; USE 库名.程序包名.; ENTITY 实体名 IS PORT(……); END 实体名; --库(声明库) --程序包(引用库) --实体
ARCHITECTURE 结构体名 OF 实体名--结构体 (………) END 结构体名;
VHDL源程序基本格式举例:
端口模式
IN OUT INOUT BUFFER 输入,信号只能自端口到实体 输出,信号只能自实体到端口 双向,信号既可输入又可输出 缓冲,信号自实体输出,又有 内部反馈
Entity
Out与Buffer的区别
Entity test1 is port(a: in std_logic; b,c: out std_logic ); end test1; Entity test2 is port(a: in std_logic; b : buffer std_logic; c: out std_logic ); end test2; architecture a of test2 is begin b <= not(a); c <= b; end a;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
in number )begin selecten ameintoemp name from scott.empwhere第5章 子程序和程序包子程序是已命名的 PL/SQL 块,它们存储和在数据库中,可以为它们指定参数,可以从任何 数据库客户端和应用程序中调用它们。
命名的PL/SQL 程序包括存储过程和函数, 程序包是存储过程和函数的集合。
一、子程序子程序具有声明部分、 可执行部分和可选的异常处理部分。
声明部分包含类型、 游标、常量、 变量、嵌套子程序的声明。
可执行部分包含赋值、 控制执行过程和操纵数据库的语句。
异常 处理部分包含异常处理程序。
子程序的优点。
(1 )模块化;(2)可重用性;(3)可维护性;(4)安全性; 子程序有两种类型: (1)过程;(2)函数;一般使用过程来完成某种操作,使用函数完成操作并返回值。
1、过程。
Oracle 的过程很类似sql server 中的存储过程。
他可以被赋予参数,存储在数据库中,由其 他应用程序或PL/SQL 调用。
创建过程的格式如下:SQL> create or replace procedurefin d_emp_2(emp_ no isempname varchar ( 10);emp no=emp_ no;dbms_output.put_line( excepti onwhe n no _data_fo unddbms_output.put_li ne('雇员姓名’||emp name);the n'未找到雇员姓名’);(dept_ no i max_sal oustate outisrow_co untbeginselectselect count (*) into row_countfromfrom dept no=dept_ no; dbms_output.put_li ne( dbms_output.put_li ne( state:= 'true' ; 共访问了 ’ ||row_count|| 其中最大值是’||max_sal);scott.empscott.emp'条记录’);wherewhere2、执行过程在sql 提示符下,使用execute 语句来执行过程。
语法如下。
3、调用程序是通过参数向被调用的过程传递值的。
参数传递的模式有 3种。
In 、out 、in out ,分别对应输入、输出、输入输出。
默认是输入参数。
如例一。
例二.演示如何创建带 in 和out 参数的过程。
SQL>create or replace procedure max_sal_empexcepti onwhen no_data_found thenstate:= 'false' ;可以在一个匿名的 PL/SQL 程序中执行max_sal_emp 过程,以显示输出参数的结果。
当过程 返回值时,只能通过另一个程序查看该值。
因此需要编写一个程序,显示 out 参数的值。
以下代码用于显示 max_sal_emp 过程的返回值。
max_saldept no=dept_ no;再看一个例子,也是带in和out参数,用了游标。
例三。
演示如何创建带in out参数的过程。
调用过程swap,并查看结果,可以使用匿名的pl/sql语句来执行,如下。
SQL> DECLARENum1 Num2 number := 100 ; number := 200 ;BeginSwap( nu m1, nu m2);Dbms_output.put_li ne( 'nu m仁' || nu m1);Dbms_output.put_li ne( 'nu m2=' || nu m2);End ;4、过程创建之后,只有创建该过程的用户或管理员才能调用它。
其他用户如果要调用该过程,需要得到过程的execute权限。
下面代码将权限赋给某个用户或角色。
格式:drop procedure 过程名;二、函数函数与过程相似,也是数据库中存储的已命名的PL/SQL程序块。
函数的主要特性是必须返回一个值。
用return语句指定函数返回值的数据类型。
在函数体的任何地方都可以通过return 语句从函数返回一个值。
1定义函数的格式。
/*注意*/(1)函数只能带有in参数,不能带有in out参数和out参数。
(2)形式参数只能使用数据库类型,不能使用PL/SQL类型。
(3)函数的返回语句中返回表达式的值的类型必须与定义的类型一致。
例四•下列语句创建了一个简单函数。
与过程不同,函数不能单独执行,只能通过SQL语句或PL/SQL程序块来调用。
比如:例五。
下面的例子说明了如何使用参数及定义返回类型。
select要调用上述函数,我们还得写出一个 PL/SQL 块,如下。
当然,具体到上述函数 item_price_range ,用PL/SQL 块完成了调用,也可以直接写item_price_ra nge(3000) from dual; 效果一样。
2、函数的授权。
与过程相同,用户要调用其他用户的函数也需要得到授权。
权限的名称也是 execute 。
语句将fun hello 函数的调用权限授予用户martin 。
SQL>gra nt execute on fun _hello to mart in;3、删除函数 SQL>Dropfun ctionfun _hello;4、使用函数的限制。
(1 )从select 语句调用的任何函数均不能修改数据库表; (2)函数调用执行update 的存储过程,则该函数不能在sql 语句内使用。
updateemp set ename= 'st'where empno= 7788 ;select en ame into dbms_output.put_li ne( p2();select en ame intodbms_output.put_li ne( end ;5、函数和过程的比较。
三、自主事务处理 见如下例子。
例六.创建一个过程 P2再创建一个过程P1SQL> create or replace procedure p1 asb varchar2 ( 10);c varchar2 ( 10);beginb from emp where empno= 7788 ; '更新后调用p2前'||b);c from emp where empno= 7788 ; '更新后调用p2后'||c);执行。
begi n p1(); end ;上述例子中,过程 p1调用了过程 P2,但由于过程 P2中有回滚事务rollback 的操作,使得 过程P1的更新操作也失败。
如果在过程p2中加入PRAGMA AUTONOMOUS_TRANSACTION,如下所示,就不会出过程B 定义私有过程过程A 共有过程 定义局部变量现上述现象了。
我们称 P2使用了自主提交事务。
SQL>CREATE OR REPLACE PROCEDURE P2 AS a VARCHAR2(50);PRAGMA AUTONOMOUS_TRANSACTION; BEGINSelect venadd1 into aFrom ven dor_master where ven code= '002 Dbms_output.put_li ne(a); Rollback; En d;自主事务处理的特点有:1) 自主事务处理结果的变化不依赖于主事务处理的状态。
2) 自主事务处理提交或回退时,不影响主事务处理的结果。
3) 自主事务处理还可以启动其他自主事务处理。
4) 自主事务处理的提交,对主事务处理是不可见的。
四、程序包程序包是一种规范,它是对相关PL/SQL 类型、子程序、游标、异常、变量和常量的封装。
它包含程序包规范和程序包主体。
在程序包规范中,可以声明变量、常量、异常、游标、子 程序。
程序包主体用于实现在程序包规范中定义的游标、子程序。
程序包的组成部分如下所示。
过程A 公用变量—程序包 声明公用过程规范1、程序包规范 创建程序包规范的格式CREATE [ OR REPLACE ] /* 指程序包名 */Is | as[public type and item declarati on s] /*在这里声明类型、常量、变量、异常、游标等*/[subprogram specifications] /*声明 PL/SQL 子程序 */en d;SQL>Create or replace package pack_me is例七。
创建了一个程序包,声明了子程序order_proc 和order_fun 。
私有声明也可以包括 where order no=orno;2、程序包主体程序包主体包含在程序包规范中声明的每个游标和子程序的具体实现。
在程序包主体中。
创建程序包主体的格式如下。
例八。
演示如何创建 pack_meSQL> CREATE OR REPLACE PACKAGE BODY pack_me asProcedure order_proc (orno varchar2) isStat char(1); Beg inSelect ostatus in to stat from order_master If stat='P ' thenDbms_output.put_line(暂挂的订单'); ElseDbms_output.put_line(已完成的订单 End if; End;Function order_fu n (ornos varchar2) Retur n varchar2接下面代码”IsIcode varchar2(5);Ocode varchar2(5);Qtyord nu mber;Qtydeld nu mber;BeginSelect qty_ord,qty_deld,itemcode,order noInto qtyord,qtydeld,icode,ocodeFrom order no=ornos;If qtyord<qtydeld the nRetur n ocode;ElseRetur n icode;End if;End order_fu n;End pack_me;/要引用在程序包中声明的类型、对象和子程序,请使用以下语法。
Package. name.type_ name;Package. name.object_ name;Package _n ame.subprogram _n ame;也可以从数据库触发器、匿名的PL/SQL块、存储子程序和oracle工具中引用程序包的内容。