文档库 最新最全的文档下载
当前位置:文档库 › 第六章 dc_shell综合脚本

第六章 dc_shell综合脚本

第六章 dc_shell综合脚本
第六章 dc_shell综合脚本

第六章dc_shell命令解释程序

第一节设计目标

6-1-1背景介绍

dc_shell 是Synopsys Design Compiler的shell(命令解释程序),与unix的shell 类似。Unix的C shell 和Bourne-shell作为命令解释程序,在用户和unix 核之间实现了功能极强的接口程序。相同地,Dc_shell最为Synopsys Design Compiler的功能极强的命令解释程序。象unix shell 提供程序设计语言在unix 文件系统中操作一样,dc_shell 提供script(脚本)语言在Design Compiler 的设计中操作,且仿造unix shell 的相同的结构。

用dc_shell 脚本综合设计有许多优点:首先,脚本执行速度比象design analyzer 交互式的界面快得多,脚本也用来证明综合设计的过程。更重要的是,脚本提供一个重复编译的机制,这不仅对设计的再利用重要,而且对于当要求一项函数改变时,再次产生设计文件的所要求的时间最小化也很重要。

所有的这些优点源于使用脚本自动走完综合流程。但是,dc_shell 脚本能够做的远不只这些,它能扩展Design Analyzer和Design Compiler的功能。一些Design compiler命令的顺序由脚本得出。大多数经验丰富的Synopsys的用户将脚本和Design analyzer结合使用来分析和优化设计。

6-1-2 目标程序类型的审阅

dc_shell脚本生成设计目标程序和编译属性来引导综合流程。当编写dc_shell脚本时,考虑正在运行的目标程序/信息的类型是很重要的。这一节从“Design Compiler Family Reference Manual”的章节中总结了“design compiler”的概念。

6-1-2-1 实例、网络、端口

原理图由三个基础的构件组成:实例、网点、端口。实例是代表逻辑子程序或层次的符号,网络是代表在实例之间有电气连续性的导线,端口是用来代表层次连续性的线路终结器。这些都是标准的术语。使设计者感到新颖的是reference 的概念。

6-1-2-2 单元、引用、设计

如果一实例代表一逻辑子程序,则它能代表什么类型的子程序呢?一实例能代表一库元件或一设计。用许多术语描述设计是必须的因为一设计可能包含同一库元件(或子设计)的多重实例。

举例说,一典型设计包含与非门,设计中的每一门实例都被赋予唯一的单元名用来在非唯一的实例中彼此区分。同样的,一设计可能包含多个加法器,与与非门不同,加法器一般来说不是库元件,加法器是一个可逐步分解成库元件和网络且相互连接后执行加法器功能的完全设计。与库元件相同,每一子设计的实例都被赋予唯一的单元名。

库元件是无形的设计子程序且在设计中常被做为节点单元引用。设计是逻辑块,它们可作为独立的设计或作为更大设计的子设计。作为其它设计中连接上下关系的子模块,设计中每一个唯一的实例被作为一个分层次的单元引用。在一个单独设计的上下关系中,每一个实例具有唯一的单元名,这些单元引用库元件或设计。设计者可以对每个单元单独地进行优化,也可以通过布置属性或约束(在以下定义)对每个库元件或设计进行优化。但是,属性被直接加至库元件或设计中,这可能影响包含引用这些库元件或设计的每一个设计。

图6.1 单元、引用、设计之间的关系

假设你想要影响一个单独设计中的每一个与非门的优化而没有影响其它设计中的与非门则将会如何呢?引用的概念使这成为可能,设计中的每一个单元不仅是库元件中或设计中唯一命名的实例,而且是引用库元件或设计的一系列单元中的一员。

参考以下图6.2的设计:

图6.2脉动计数器:count_16

这个分层次设计的顶层是一个16位的计数器,顶层设计由与非门、或非门、8位计数器组成。在这层次设计的关系

中,有6个单元、3个引用、2个设计。这些单元是u1、u2、u3、u4、u5、u6,引用是一个三输入与非门、一个三输入或非门和一个count8的设计。设计包含count6和count8的设计。

第二节收集和控制信息

一些dc_shell的构件是用来收集和控制信息。变量和属性是特殊方法、指定设计信息的主要知识宝库。别名提供创建自定义的命令或改变一个命令的行为的技巧。如find、filter、list命令对提取变量或设计目标程序中的信息有相当大的作用。

6-2-1 变量:储存信息

变量在dc_shell的章节中用来存储信息。一些变量被事先定义了,它们对于desing compiler 有特殊的意义。比如search_path这一变量,告诉design compiler 到哪里去找Unix文件系统下的用户的设计文件及库。事先定义的变量分为11组。

组是组织变量履行相似功能的便捷方法。比如说,系统组的变量包含design compiler 用来和Unix交互的信息。由于变量可被任意分配给哪个组,所以可用group_variable命令创建或改变组。

表6.1列出11个事先定义好的组以及组包含的变量举例。

的单词一个值时,变量则自动产生了。选择一个没有保存过的名字代表呢想要保存的值,然后使它与值相等,创建变量的句法与改变变量值的句法相同,给variable_name=value。

6-2-1-1变量介绍

所有的dc_shell变量都是全局的dc_shell变量。变量不和设计数据库一起保存,一旦一段dc_shell结束了,所有在这段赋值的变量都不存在了。所有的变量都是全局变量,没有局部变量(对当前脚本或当前设计使关系独立的)。

变量是严格分类的,也就是说,当一个变量创建后,它将保存某一类型的值。变量能保存字符串、数字(整型或浮点型)、设计目标程序或列表。设计目标程序包括设计、库、端口、总线、管脚、单元、引用、网络、时钟、根目录(也称为DB文件)。

列表是一组字符串、数字,设计目标程序可能在列表中被混淆。一旦变量被创建后用来保存某一类型的值时,它只能被赋予那种类型的值。

如果两个脚本用相同的变量名来引用不同类型的信息,那么两个脚本是不相容的。在这种情况下脚本是不相容的,而且在相同的dc_shell端不能共存。

当脚本赋予一个已存在的变量一个错误类型的值,将会报错且脚本会退出。然而这种情况是容易避免和改正的。首先,选择有代表性的要保存的值的类型以及要保存的值的含义来创建变量。比如说,如果你想要保存当前驻留在内存中的设计列表时,你会键入:active_design_list=find(design,”*”),这命令搜寻所有驻留在内存中的设计并保存列表到active_design_list变量中(此例中的find命令将在以后做详细解释)。其次,若你想用存储错误类型的变量,则删除此变量,然后保存需要的类型。Remove_variable variable_name;variable_name=value.变量能维持设计具有唯一的性能。如果在变量中存储的设计从内存中被删除了,那么也将从变量中被删除。无论变量维持一设计还是包括设计的列表,这都是正确的。以下的例子帮助阐明这种特性的原因。启动dc_shell(或从design analyzer的命令窗口启动),读入设计,键入以上命令来初始化active_design_list变量。List新变量查看它的内容,即list active_design_list。active_design_list变量保存内存中所有变量的列表。要从内存中删除一个设计,利用你刚才创建的变量来删除内存中所有的设计,即remove_design active_design_list。发出以下的命令来验证当一个设计从内存中删除时,它们将从所有的变量中删除:

find design“*”

list active_design_list

为什么会发生这种情况?当设计从内存中删除时design compiler 删除了所有的引用,这保证未来的命令对不存在的设计目标程序不产生操作(一项实践操作可能对当前的dc_shell产生致命的牵连)。

6-2-1-2 事先定义的变量

这节描述一些重要的事先定义的变量。

1、dc_shell_status

每次dc_shell命令执行时,一个值返回到命令窗口(在命令提示之前立即返回)。对于大多数命令来说,这值是整型的。如果命令成功地完成了,则返回1,否则返回0。返回值不只返回到命令窗口,它也赋予变量dc_shell_status。这使调节后来命令的执行结果与前面命令执行结果一致成为可能。这种特性的流程控制含意详细地描述如下。

不是所有地命令都返回一个整型值,举例说,find命令返回一个值地列表。为了适应象这样的命令,dc_shell_status变量没有严格分类。这种特性非常功能非常强大,但它要求设计者在利用dc_shell_status写脚本时清楚要返回dc_shell_status变量的类型。

2、current_design

大多数命令、约束、属性不像变量,它们没有全局的含义。大多数命令对current_design是指定环境的。基本说来,设计是可独立编译的单元,current_design变量告诉design compiler编译哪个设计。象compile命令,大多数命令在current_design变量的环境中操作。这对于design compiler的初学者来说是容易混淆的地方因为所有设计都彼此独立存在。从技术上来说,一个设计可能包含另一个设计的引用,但它不会全部包含那个设计。对于高层设计来说,引用的设计是独立存在的。考虑前面介绍过的16位的计数器。发出命令current_design count8,则接下来的所有的命令应用于8位的计数器而不是16位的计数器。

8位计数器可能在几个可能包含或不包含16位计数器的设计中被用到,在这种情况下,16位计数器是32位计数器的子设计吗?它能作为一个32位设计的实例,但它一直都作为一个16位的计数器而独立存在的(除非设计取消组)。

有两个原因希望指定设计的引用和独立设计之间存在差异。首先,它促进了设计的重复利用;其次,它提供了有细密纹理的优化的机制。在大型设计中,一些子模块可能对时间有严格的要求而另一些子模块可能对面积有严格的要求,通过定义每一子模块为一个设计,那么子设计能够单独地优化从而满足它们单独的设计目标。

3、current_instance和current_reference

设计者通常希望在current_design层次中进入一实例从而应用约束条件或观察层次路径的时序。current_instance 命令允许设计者在不改变current_design的情况下改变特定实例命令的层次重点。

考虑图6-2中16位计数器。在Design Compiler和Design Analyzer的以前版本中,进入U1即改变current_design 至count_8,对于16位计数器设计中U1这一实例8位计数器的时间信息和属性是不可见的(除非对count_8设计用characterize命令)。Design Analyzer和Design Compiler使在不改变current_design的情况下改变层次重点。考虑以下的命令顺序:

current_design count_16

current_instance U1

set_don't_touch U15

current_instance

这段代码将don't_touch加至16位计数器设计中的层次实例U1/U15中,它不影响16位计数器或8位计数器设计中的U6。用set_don't_touch U1/U15命令将产生同样的效果。

在开发脚本时使用current_instance命令没有严格的必要。在使用Design Analyzer观看实例时current_instance 命令的实际值使能够进入和操作实例。如果你想用Design Analyzer交互式地开发脚本,current_instance命令会在你的许多脚本中起作用。

current_instance以与unix中的cd命令横穿文件层次相似的方式横跨设计的各层次,考虑以下的命令:

1 current_instance U1

2 current_instance .

3 list current_instance

4 current_instance

5 current_instance U6/U15

6 current_instance ..

7 current_design current_reference

这些命令说明了current_instance命令的句法的灵活性。命令1将设计的重点转到U1,命令2列出current_instance (没有改变)。与current_design相似,current_instance既是变量又是命令。命令3完成与命令2相似的功能,即列出current_instance变量的值,命令4式current_instance复位,将设计重点转回到current_design,命令5将current_instance设置到比current_design低两级的实例中来,命令6将current_design移到高一层次的设计,命令7介绍current_design变量。这变量一直包含current_design的引用。命令7将current_design改变到通过current_instance引用的设计中来。

如果你进入到16位计数器的U6并想在所有的8位计数器的实例中将don't_touch属性应用到U15中来,你可能要使用以下顺序的命令:

current_design current_reference

set_don't_touch U15

current_design count_16

如果你打算在dc_shell中规则地使用current_instance命令,你可能要改变dc_shell的命令提示符来反射current_instance的值。这能用shell_prompt= “dc_shell$CI>”命令实现。

6-2-1-3 初始化变量

由于变量是严格分类的,大多数在使用之前应该被初始化成想要的类型。

考虑以下的赋值:

new_var=my_design

假设new_var是以前不存在的新变量,那么new_var是什么类型的呢?它

依据my_design的类型。如果my_design是一变量,则new_var采用my_design变量的类型和值。如果my_design既不是一变量又不是一目标程序,new_var将是包含“my_design”的一字符串。

一般说来,在赋予一目标程序类型一个值之前没有必要初始化它们,但初始化别的变量是个好主意。表6-2说明各

6-2-2 属性:储存目标程序的信息

属性在dc_shell段中提供另一种储存信息的机制。与变量相似,一些属性是事先定义的并对design compiler具有特殊的意义。

属性储存特别的设计目标程序的信息。考虑事先定义好的don't_touch属性,这属性能够加至单元、引用、设计或网络。大多数synopsys用户熟悉don't_touch属性。它表示“不要对此目标程序编译和优化”。

Design compiler识别几种不同类型的属性。举例说,有事先定义的和用户定义的属性。在事先定义的属性中,它们都是提供信息的,“read only”性不能被改变,标准属性能被用户设置。一些事先定义的属性显示出“目标方向的继承性”。

这些事先定义的属性在Synopsys的attributes手册中列出。表在Design Compiler Family Reference Manual中的第三章,给属性和操作者提供了很好的参考。要寻求在线帮助,用help attributes命令,可列出每一个属性及它的含义。Design Compiler Family Reference Manual中的第五章有事先定义属性的介绍,这对于Synopsys Design Compiler 的高级用户来说是必须遵循的阅读材料。

6-2-2-1检索属性

get_attributes命令返回指定目标程序上的特定属性的值,如果属性存在,get_attributes的句法为:

get_attributes object_list attribut_name[-quiet]

如果对于任意目标程序的指定属性不存在,则会发出错误并且dc_shell_status变量包含空格,{ }。如果属性为一个或多个目标程序而存在,则属性列表的值将返回到dc_shell_status变量中。

属性既容易设置也容易获得。许多命令如set_don't_touch命令被特定定义来设置一目标程序的属性。为了设计被

current_design变量识别命令set_don't_touch current_design设置don't_touch属性为真。除了所有的特殊属性的命令之外,大多数属性可用set_attribute命令设置,set_attribute的句法为:

set_attribute object_list attribute_name \attribute_value [-type data_type] [-quiet] 有效的data_type有浮点型、整型、字符串、布尔型。不能用set_attribute命令代替set_don't_touch命令给当前设计加don't_touch属性(注意,don't_touch是不能被设置成假值的特殊的属性。要解除目标程序的don't_touch属性,则要用remove_attribute命令)。Set_attribute命令用来定义新属性。

假设一个工程技术队中的每一员给一项工程提供设计,这些工程师们都用高层次设计模式并产生了三种设计形式:行为级(软件模型)、RTL级(寄存器传输级描述)、结构级(可综合门级设计)。

在此高层次设计模式中,设计者将行为级设计当作不可综合的,结构设计是完全的,RTL级设计是可综合的。设计者想将这些设计结合到一块芯片上分析,但他们想要一个在每一级抽象上很快识别设计的途径。Design compiler使这变得容易。设计者可以简单地将字符串型的属性叫“abstraction”加到每一个设计中。假设在RTL级chip_A被编码用来做综合。工程师执行以下命令对chip_A操作:

read –format vhdk chip_A.vhd

set_attribute chip_A abstraction “RTL”–type striong –quiet

write –hierarchy

这些命令为设计者创建Design Compiler的数据库文件(DB文件)以供使用。如果另一个工程师对chip_B操作,且chip_B和chip_A交互,则设计者发出以下的命令:

read –format vhdk WHOLE.vhd

link

get_attribute chip_A abstraction –quiet

第一个命令读入引用chip_A和chip_B的WHOLE设计,第二个命令为chip_A和chip_B在DB文件里连接,第三个命令返回RTL值。工程师知道他的合作伙伴的芯片准备做综合但还没有做综合。

在第五章开发了用户自定义的属性,此外的例子也很有用,不要局限于使用手册中提到的例子。用户自定义的属性使定制dc_shell脚本语言来满足设计者独特的需求成为可能。

6-2-3 别名:自定义Design Compiler命令

与unix的c-shell相似,dc_shell允许用户为自己喜爱的命令或命令次序取新的别名。发出以下命令创建别名: alias [alias_name [expandion]]

注意alias命令后所有的参数都是可选择的。只键入alias会列出存在的所有别名,键入带有无扩展名的别名的alias 命令则会列出别名的当前扩展名。重定义已存在的别名可更改别名。考虑以下的例子:

alias readv “read –format vhdl”

alias an “anlyze –f vhdl”

alias anw “an –w WORK”

alias initialize_ports “set_drive 1 all_inputs(); \

set_load 1 all_outputs()”

alias report_slack “report_timing –to all_outputs() + \

all_inputs(-data_pins) –path end”

如果你使用VHDL Compiler或厌恶敲字,你会喜欢第一个命令。它允许你替换read –format vhdl file_name命令成readv file_name命令。第二个命令为新的analyze命令创建简写别名。注意用第二个命令创建的别名在anw alias的定义中用到。这别名分解vhdl文件到work库中(必须用define_design_lib命令定义work库)。第四个命令是通常使用别名的例子,它创建在端口加更多的实际的默认drive和load属性的命令。最后一个命令为设计分析创建别名:report_slack输出timing slack到每一个寄存器和端口。

要删除别名,用unalias alias_name 命令

6-2-4 find 和filter:搜寻信息

在介绍设计目标程序和它们的属性之后,约束和生成综合是紧要的。但是,这方面的能力是使一个一般目的的综合工具切实可行的基础。幸运的是很少对优化过程细致操作。

Synopsys用很少的用户交互即可产生很高质量的不同类型的电路。即使再次保证这些,大多数设计者希望在综合过程中手工地控制一些步骤。这为部分设计层次自定义综合过程的能力保证关键的设计模块能被完全的优化以满足特定的要求。对高级综合群体来说有好主意,即用象find和filter命令只操作设计目标和属性相对容易:

Find [-hierarchy] object_type name_list

Find命令是dc_shell的函数的举例之一,它返回给dc_shell_status变量一个列表。Find命令对拥有指定名字的特殊类型的目标程序的定位很有用。有效的目标程序的类型有:设计、端口、引用、单元、时钟、网络、管脚、文件以及库。为什么这些有效?由于目标设计程序是严格分类的,find命令能被用来保证对指定目标程序操作的命令的有序。考虑前面讨论过的16位计数器。如果发出set_don't_touch count8命令,则don't_touch属性将加在count8设计中。在dc_shell中有一个隐含的搜索顺序。当一个命令对不同类型的目程序操作时,数据库按以下顺序搜索与指定名字相匹配的目标程序:design,cell,net,reference,library element。Find命令可明确地用来控制搜索地目标程序的类型,而不顾隐含的搜索顺序。如果以下的命令:

Find reference count8

Set_don't_touch dc_shell_status

依次执行,则don't_touch属性将加在当前设计中的count8引用中。它不影响在其它设计中的count8引用。

当Find命令和通配符“*”搭配使用时会更有用。考虑以下的命令:

find cell “*”

find reference “co*8”

第一个命令返回当前设计中所有单元的列表,第二个命令返回以“co”开始并以“8”结尾的所有引用。

作为一个dc_shell的函数,find命令可嵌套在其它的dc_shell命令中。为了在当前设计中将don't_touch加至所有的单元中,执行命令:set_don't_touch find(cell, “*”)。要在基于current_design根下的完全层次设计中加don't_touch到所有单元,执行命令:

set_don't_touch find(-hierarchy cell, “*”)

注意园括号用来隔开调用函数嵌套命令的参数。同时注意逗号用来在函数调用中分隔参数。当函数嵌套在其它的命令和函数中,嵌套的函数在包含函数之前执行。

考虑以上的命令,首先,函数调用执行了,find函数返回当前设计层次的所有单元列表。嵌套函数将它的结果返回到set_don't_touch命令中(代替dc_shell_status变量)。set_don't_touch命令将一个don't_touch属性加至返回到find命令的list中的所有元素中。

假设你想要将当前设计中已映射到工艺库中的单元加至don't_touch属性,这是一个必须的命令举例。工程师想要在设计中搜寻具有多数相同而不是一个名字的目标程序,filter命令满足这要求:

filter object_list “filter_expression”

filter_expression参数表明object_list的要返回的子集(或舍弃的)。filter_expression的句法为:

“@attributes_name relational_operator attribute_value”

将don't_touch加至设计中的已映射到工艺库中的所有单元中,发出命令:

set_don't_touch filter( find(cell, “*”), “@is_mapped == true”)

当执行这命令时,find函数返回设计中所有单元列表到filter函数,filter函数随后返回具有is_mappe识别在属性设置成真的单元列表到set_don't_touch命令中。注意@符号用来作为名字的属性以识别在filter_expression中的第一个参数。

相关的操作符(==)和attribute_value参数决定object_list的什么样的子集将被返回到filter命令中。合法的操作符有:==(相等),!=(不等),>(大于),>=(大等于),<(小于),以及<=(小等于)。注意操作符==和赋值等号=之间的差异,等号=用来赋值,不是相等操作符。

你想要多次使用混和的filter_expression,举例说,将don't_touch加至设计中除了引用低驱动的非门和缓冲器之外的所有单元(以致非门和缓冲器可被调整大小),用以下逻辑操作符使这成为可能:

set_don't_touch filter(find(cell, “*”), \

“@ref_name != inv && @ref_name != buf”

design compiler 识别&&(逻辑与)和||(逻辑或)两个逻辑操作符。

第三节控制流命令

dc_shell_status变量的介绍提到有条件地依次执行命令的能力,这能力依靠前面的命令的结果。以下的流程控制命令允许这种或更多的能力:

·if

·foreach

·while

·break

·continue

这些命令在以下的章节中被描述。

6-3-1 if命令

最简单的流程控制结构是if语句。它的句法为:

if (expression) {

then –statement –block

} else if (expression) {

else-if-statement-block

}else

else-statement-block

}

else if结构可能没有或有更多,else结构是任意的。在if…else中if分支依次被求值直到一个值为真。当一个值为真时,在{}中的语句块将被执行。然后,执行将顺着树继续下去。只有一个语句块被执行。如果没有条件表达式的值为真,而一个else语句块存在,则将执行else语句块。

考虑以下的例子:

readv new_block.vhd

if (dc_shell_status != {}) {

compile

write

quit

}else {

quit}

}

这脚本段使用在前面创建的readv别名来读入VHDL文件,if分支紧跟read命令,read命令返回成功读入的设计到dc_shell_status变量中。If句法决定设计的列表是否不空。如果new_block.vhd被成功地读入了,则then语句块将被执行,并且设计在退出之前被编译、写入DB文件。如果设计没有被成功地读入,else语句块将被执行并且dc_shell退出。

在此例中,条件表达将一变量和空格比较。条件表达式不一定要包含相关的操作符,它可包含简单的变量因为design compiler为非布尔型的变量类型定义了布尔型值。整型和浮点型变量的值如0(或0.0)的值时则所求值为假。用{}列出变量(空表),其所求值为假。其它所求值为真。这样,此例中的条件表达式可以改写为:

if (dc_shell_status)

6-3-2 foreach命令

if语句在dc_shell中只有一个流程控制结构可用,foreach语句是在unix相等物后之后的模块,它是另一种形式。当你想单独地对列表中的元素操作而不是对列表整体地操作时,Foreach语句会很有用。许多设计团队喜欢将默认的dc_shell脚本文件共享。设计团队中的成员一般使用这default.scr文件来将默认的约束应用到他们总体设计中的一部分。

Set_operating_condition “WCCOM”

Set_wire_load “10k”

Clock_list ={clk1 clk2 clk3 clk4}

Set_attribute all_inputs() is_clock false \

-type boolean –quiet

Set_attribute clock_list trut –type boolean –quiet

Create_clodk –name “CLK”–period 20 \

-wavefoem {0,10} clock_list

set_input_delay 5 –clock “CLK” \

filter(all_inputs(), “@is_clock !=true”)

set_driving_cell –cell “FD1” \

filter(all_inputs(), “@is_clock !=true”)

set_drive 0 clock_list

set_output_delay 15 –clock “CLK” all_outputs()

group_path –name “CLK”–critical_range 2

group_path –default “CLK”–critical_range 2

set_load 1 all_outputs()

这个简明的脚本创建了时钟网络的四个主枝干并且设置了与时钟相关的默认的输入输出延时,它还定义了线宽和操作环境,创建了默认的负载和驱动约束,并设置了时钟的critical_range 为2ns和默认的组。这好像是一流的脚本,它甚至定义了is_clock属性来保证时钟输入和函数输入不延时。

但是这脚本有一个缺点,如果此脚本运行在不包含所有的四个时钟输入时会发生什么情况呢?如果此脚本应用到一个不包含任何主时钟的设计中又会发生什么情况呢?脚本会产生错误并失去约束设计的作用。幸运的是,foreach命令能够克服此脚本的局限性。

Set_operating_condition “WCCOM”

Set_wire_load “10k”

Clock_list ={}

Foreach (possible_clock, { clk1 clk2 clk3 clk4})

{

find(port, possible_clock)

if (dc_shell_status)

{

clock_list =clock_list +possible_clock

}

}

Set_attribute all_inputs() is_clock false \

-type boolean –quiet

if (clock_list)

{

Set_attribute clock_list true –type boolean –quiet

Create_clodk –name “CLK”–period 20 \

-wavefoem {0,10} clock_list

} else {

Create_clodk –name “CLK”–period 20 -wavefoem {0,10}

}

set_input_delay 5 –clock “CLK” \

filter(all_inputs(), “@is_clock !=true”)

set_driving_cell –cell “FD1” \

filter(all_inputs(), “@is_clock !=true”)

set_drive 0 clock_list

set_output_delay 15 –clock “CLK” all_outputs()

group_path –name “CLK”–critical_range 2

group_path –default “CLK”–critical_range 2

set_load 1 all_outputs()

这个改进的脚本没有假设所有时钟都存在每一个设计中。相反地,它将clock_list初始化成空的并且使用foreach 循环来将存在在current_design中的时钟加至时钟列表中。Foreach语句的第一个参数是变量名。在此情况下,变量名是possible_clock,Foreach语句的第二个参数是列表。

在执行的过程中,Foreach语句分配列表中的每个元素的参数给变量参数,然后执行Foreach语句块。注意默认脚本推迟时钟的产生直到if…else分支遵循foreach循环。if…else分支保证即使在current_design中没有时钟也能产生一个虚拟时钟。这是关键的因为后来的set_input_delay命令和set_output_delay命令依据虚拟时钟clk的存在。

Foreach循环的句法为:

Foreach (varible_name, list_expression) {

Loop-statement-block

}

其中, list_expression被明确地包括在内因为它在以上默认的默认的约束脚本中,但使用嵌套的函数调用来导出list_expression往往更方便。

Root_design = current_design

Echo “Hierarchical Reference Report” > ref.rpt

Design_list =root_design +find(-hierarchy design, “*”)

Foreach (subdesign,list)

{

echo ““ >>ref.rpt

current_design subdesign

report_reference >>ref.rpt

}

current_design root_design

这个简短的脚本使用层次的find命令来返回当前设计中所有子设计的列表。它将current_design预先挂起导设计列表中并使用一个foreach循环来产生层次设计中的所有设计的引用报告。这输出报告重定向到unix的ref.rpt文件中。当循环结束后,current_design被复位为root_design。

6-3-3 while命令

dc_shell中最后一个有用的控制流程语句为while循环。While循环的句法为:

while (expression) {

while-statement-block

}

while循环中最重要的部分是表达式,如果表达式的值从不为假那么while循环将不会结束,这可能会造成while语句的无限循环。考虑以下的例子:

count = 0

wild_string = “*”

cell_list =()

while (count <10) {

cell_list = cell_list +find(cell,wild_string)

wild_string = wild_string + “/*”

count = count +1

}

list cell_list

这些依次的命令与find(-hierarchy cell, “*”)相当。前三个命令将在while语句块中用到的变量初始化(其中第一个是整型的,第二个是字符串,第三个是列表)。While语句块附加了cell列表(那些在层次级上被wild_string指出的)到单元的列表中,然后它更新wild_string来考虑下一级层次并使计数器加一。如果While语句块没有使计数器加一,则While语句块会导致无限循环。

当while循环结束后,cell_list变量包含层次设计中的每个单元的列表,计数器变量等于10,变量wild_string 等于“*/*/*/*/* /*/*/*/*/*/*/*/*”。

注意此脚本假定在当前层次设计中没有超过10级的子设计。由于在层次设计的每一级上必须有单元,当超过层次深度后,此脚本可通过改条件表达式

为一值为假的变量列表来改善。

wild_string = “*”

cell_list = {}

new_cell_list = find(cell, wild_string)

while (new_cell_list) {

cell_list = cell_list + new_cell_list

wild_string = wild_string + “/”

new_cell_list = find(cell, wild_string)

}

list cell_list

这个例子非常重要,为什么用这些依次的命令代替一个简单的层次的find命令呢?如果你只想要层次设计中的所有单元的列表,你将不会这样,但你想控制搜索顺序,搜索层次设计中所有的引用,或当你跨越设计层时有条件地执行命令,则while命令被证明是及其有用的。与filter命令的表达式相似,while命令的表达式可以是混和的表达式。

6-3-4 break和continue命令

break和continue命令只能用在while和foreach命令的语句块中。break命令立即退出最里面的循环结构,continue 跳到最里面的循环结构的结尾而并不退出循环,并且启动下一个循环的重复操作。

注意break命令使改写以上的例子为没有表达式成为可能:

wild_string = “*”

cell_list = {}

new_cell_list = find(cell, wild_string)

while (true) {

if (new_cell_list == {}) {

break

}

cell_list = cell_list + new_cell_list

wild_string = wild_string + “/”

new_cell_list = find(cell, wild_string)

}

list cell_list

重新考虑将set_output_delay约束加至所有的输出上的foreach例子,如果所选择的输出不需要约束会怎么样?没有必要的设计约束可能对设计质量产生负面的影响,所以改写此脚本以解决这个问题是十分有用的。假定一个命令为trivial的布尔属性已经加到不应该受约束的所有输出上(在VHDL/HDL源代码可用嵌套的脚本实现)。以下的脚本约束了所有的non_trivial的输出:

foreach (output_object, all_outputs()) {

if (get_attribute(-quiet output_object,trivial)) {

continue

}

set_output_delay 15 –clock “CLK” output_object

}

第四节在dc_shell使用unix命令

dc_shell的许多方面都是仿照UNIX的shell,在前面讨论的构造和UNIX命令之间存在着许多相似之处(如alias,foreach,if).甚至变量的构造对UNIX用户来说都是熟悉的。但是dc_shell存在更多类UNIX的特征。这一节简要地介绍输出重定向,历史记载,命令替换和shell命令。

6-4-1 输出重定向

如果你在运行一个编译一晚上的设计的脚本,你可能不要到处跑去看警告和错误信息,这些信息在你的脚本运行的时候反馈到命令窗口。Dc_shell允许将标准的输出重定向到一个文件中去,用UNIX的常规符号>创建一文件,用>>附加在一文件后。比如说,命令:

check_design >>error.log

将check_design返回的所有信息附加到名为error.log的文件后。这是及其有用的,因为重要的可能被丢失的run-time信息能被存档以供以后查阅。

6-4-2 历史记载和命令替换

在dc_shell命令行中键入“!!”则再执行最后一次执行的命令。UNIX命令替换dc_shell中的函数。!-n命令执行从最后一行数的第n条命令。!n在当前design compiler节中再次执行第n条命令。!text再次执行以text开头的最后的命令,!?text再次执行在命令字符串中的任意位置包含text的最后的命令。历史记载命令在命令窗口中打印寻呼前面执行过的命令的有序的列表。这对于决定你想要再次执行一个命令的所在行数有用(用!n),而且在结合输出重定向之后,history命令可被用来建立dc_shell脚本。history命令的句法为:

history [n] [-r] [-h]

可选参数n列出最后的n条命令,参数-r指定按年月顺序排的且是反向的命令,参数-h指明命令的索引号码不会被和命令一起列出。命令:

history –h > script.file

实际上构建了自动操作从前面执行过的命令中创建命令脚本的任务。

6-4-3 shell 命令

虽然dc_shell脚本编程语言功能强大,它永远不如UNIX灵活。要在dc_shell中访问UNIX,Design Compiler提供了pwd,cd,ls,get_unix_varible,set_unix_varible命令:

·pwd:列出Design Compiler的工作目录

·cd directory:改变Design Compiler的工作目录到指定目录

·ls directory:列出指定目录的文件

·get_unix_varible(varible):返回UNIX环境变量varible的值

·set_unix_varible(varible,value):设置UNIX环境变量varible的值为value

·sh command:调用UNIX来执行command(从bourne shell)

在这些命令中sh command是最不熟悉的但是功能最强大。Sh命令是UNIX命令被执行。,为了从UNIX文件中执行命令,get_unix_varible命令、set_unix_varible命令以及include命令和输出重定向配合使用,shell命令提供从dc_shell 输出信息到UNIX的机制,在一个UNIX编程语言中操作而返回到dc_shell。总之,这五个dc_shell命令使dc_shell脚本变成可完全扩展的。

虽然此引用手册的重点是写dc_shell脚本而不是扩展dc_shell脚本,考虑一段样本代码段:

dc_shell脚本:

home = get_unix_varible(“HOME”)

temp = home + “/temp”

set_unix_varible(“TEMP_DIR”,temp)

sh mkdir $TEMP_DIR

all_bussed_nets =find(net, “*[* “]

foreach(net_member,all_bussed_nets)

{

list net_member >> temp + “nets“

}

sh “sed –f busses.sed \

$TEMP_DIR/nets |uniq >$TEMP_DIR/bussed_nets”

sh “awk –f nets.awk \

$TEMP_DIR/bussed_nets > $TEMP_DIR/create_nets”

include temp + “/create_nets”

sh rm –R $TEMP_DIR

sed script, “busses.sed”:

s/.* “\(.*\)\[.*/\1/

awk script, “nets.awk”:

{

print“create_bus find(net,\ ““$1”[*\] “$1”–reverse_sort”

}

总之,脚本将总线上的独立索引的网络分组成总线型的网络(它们不影响总线端口)。当一个指定的应用要求扩展dc_shell命令时 Sh命令十分有用。Sh命令实际上扩展了dc_shell的脚本的能力。

6-4-4 创建自定义的命令

脚本是将默认约束应用到你经常使用的设计中吗?如果是这样,为什么不创建一个命令来执行脚本?你已经知道怎样做了,就像使用alias命令一样。将此脚本输入到UNIX文件中去,取名为default.scr,然后在你的.synopsys_dc.setup 文件加一行:

alias def_con “include defaut.scr”

那么无论何时你想要将默认的约束应用到你的设计中,只要键入命令def_con(假定defaut.scr脚本在搜索路径下)。6-4-5 excute命令

dc_shell的excute命令执行带有指定参数的命令:

excute [-s] command [argument …]

其中-s(开关)指定通过执行的命令输出的字符串必须被返回来代替命令状态。当使用别名和sh命令时,excute命令给予设计者定义复杂新命令的能力。

考虑以下命令:

alias rdv execute –s sh rdv.csh

alias run execute dc_shell_status

rdv my_design;run

第一个命令用来创建执行rdv.csh的UNIX命令解释程序的脚本的别名,并且通过此脚本返回字符串的输出。注意当rdv别名被执行时参数被传到rdv.csh脚本中。第二个命令创建执行dc_shell_status值的别名。第三个行说明了怎样使用这些别名,它将my_design参数传到UNIX的rdv.csh程序中,然后执行rdv.csh返回的字符串。

#!/bin/csh

# USAGE:rdv.csh

# return a command sequence to dc_shel what will :

# analyze

# elabrate

# and reeinquish the VHDL_Compiler license

set design=$1

set file = “${design}.vhd”

echo “anayze –f vhdl $file;elaborate

$design;remove_license VHDL_Compiler”

unset design,file

exit

这个csh程序使dc_shell的一系列命令格式化后用来在放弃VHDL_Compiler的许可证之前分析和加工指定设计。Excute命令传递任意参数给一个命令并返回这个命令产生的字符串到dc_shell,在那它被赋值给一个变量和被执行。

Excute命令可和sh命令一起使用来执行UNIX字符串,这些字符串在dc_shell中是无效的。以下的举例将显示UNIX 的tr命令可被用来将字符串列表翻译成以上的情况:

/* set list1 to a list of lowercase string */

dc_shell> list1 ={aa bb cc dd ee ff gg}

{ “aa”, “bb”, “cc”, “dd”, “ee”, “ff”, “gg”}

dc_shell> list2={}

{}

/* convert the strings to upper case,and parse the result

back into a string */

dc_shell> list2=excute( -s “sh echo list1 | tr a-z A-Z”)

{ “AA”, “BB”, “CC”, “DD”, “EE”, “FF”, “GG”}

UNIX命令解释程序给一些字符以指定含义,比如说“*”。这些字符可能会作为sh命令的参数出现,这要注意。有一种办法避免这种情况,就是用一个文件作为储存的中介。

dc_shell>echo list1 >tmp_file

1

dc_shell>list2=execute ( -s “sh cat tmp_file | tr a-z A-Z”)

{ “AA”, “BB”, “CC”, “DD”, “EE”, “FF”, “GG”}

第五节编译大型的层次化设计

在介绍编写dc_shell脚本必需的全部结构后,下面的任务是创建阐释层次编译的dc_shell 脚本。目的为有效编译任意的设计层次高效地编写脚本文件。

6-5-1 一般脚本的编写

客户化定位性能的设计思想最能满足这个目标,为此脚本应密切遵循charactrize/write_script/compile的方法。这种方法认为许多设计太大不能作为整体编译,需要提供一种机理来编译树状的子设计,从而满足设计层次环境和时序的要求。这种方法基本的六个步骤如下:

1:把整个设计层次读进设计编译器。

2:在顶层设计应用层次设计约束。

3:对每一个设计用charactrize命令获得模块级的约束(从层次约束中)。在低层设计前描绘高层设计的特征。

4:用write_script命令给一个文件写衍生的约束。

5:编译每一个子设计满足包含在write_script文件中衍生的约束。在高层设计前编译低层设计,放置低层设计一个don't_touch属性以阻止低层设计被再次编译。

6:把子设计连一块产生层次时序报告。

这种方法必需改进,确保脚本可在广阔种类的设计产生高质量的结果。对任何依赖于衍生约束的方法,其缺点是衍生的约束可能与设计目标的目的不一致。为说明这种缺点的限制,许多设计者用时序预算替代衍生的约束,用来约束他们的设计。

一个时序预算是在设计模块的接口之间通过在个体模块之中分派可利用时间的方式,实现基本约束的逻辑。

简单的情况,所有的模块都登记输出(或输出)。合适的时间预算给登记的接口和非登记得接口(可利用的时间的剩余部分)分配寄存器延迟(时钟周期少于一个寄存器延迟)。此时,时序预算和衍生的约束可以很好一起工作。

在模块接口之间组合逻辑进行分割时,可利用的时间依据设计者分割的目的进行划分。由于未优化的设计不可能反映在设计的分割目标中,时序预算对衍生的约束是合适的。另外,优化成规范的设计接口,应使用时序预算替代衍生的约束。为支持时序预算以及层次编译方法中衍生的约束提供一种机理,在write_script程序中加进revise_script的步骤。Write_script命令列出设计的约束,不管它们是否为衍生的约束。因此,在描述设计的特征后,增强的方法可寻找一个revise_script脚本的存在性。若revise_script存在,revise_script将会覆盖有关指定在revise_script文件的任何约束衍生的约束。

新的约束覆写任何前面加在设计中有冲突的约束。由于Revise_script文件只涉及预算而不是衍生的约束,它需要补充衍生约束。在write_script产生前,write_script文件反映衍生约束的统一性。为同原来的方法相比较,反映这种改进,这种开发的方法遵照characterize/revise_script/write_script/compile方法(或简写成CRWC)。为使CRWC编译方法尽可能有弹性,脚本的设置中有两个深层次的改进。许多设计组共享脚本文件以便建立缺省约束(如wire_load,operating_condintions)及为项目预先做好时序预算。

为支持这种脚本,在层次编译时,在write_script和revise_script文件中CRWC会用到一个default.scr文件。另外,由于不同的设计模块有不同的设计目标,在每一个模块编译前将会按照脚本的方式置入一个策略脚本(strategy script)。这个策略脚本的目的是允许在编译前及时产生set_flatten set_structure命令,但脚本的使用不限于这些命令。设计者想运行的任何命令在编译前必需包含在设计的策略脚本中。Strategy_script脚本中的命令位于revise_script中,strategy_script结构为组织结构的弹性而简单存在。

CRWC层次编译法是一个七个步骤的方法:

1:读进设计编译器整个设计体系,移开设计体系存储器中不相关部分的任何设计。

2:在顶层设计中应用体系设计约束。

3:对每个设计,使用characterize命令得出模块级约束(从层次约束中)。在低层设计前描述高层设计的特征。

4:revise_script覆盖应用时序预算的衍生的约束。

5:用write_script写出约束的结果文件。

6:在策略脚本对每一个编译设置结构化和展平的选项后,编译每一个子设计以便满足在default_script write_script revise_script 文件约束。在高层设计前编译低层设计,加上低层设计的don't_touch属性(阻止低层设计被再次编译)。7:把子程序连结一起产生体系层次时序的报告。

随着这种脚本的开发,提出理解脚本的背景的材料是必要的。实现CRWC的方法是开始讨论设计树、修建树、搜寻树、宽度首先(breadth-first)搜寻、深度首先(depth-first)搜寻、描述设计体系层次特征的概念,接着编译设计体系层次会聚一起实现这种方法。这儿介绍的脚本是CRWC方法的最小实现,因而在应用前,用一节提出可能扩展这些脚本的方法。

6-5-2 设计树

设计层次可以看作一棵树。如以下的设计层次:

在计算机科学术语中,设计的top和foo是两个独立设计树的根(roots)。多数设计有子(children),通过设计树

贯穿一个层次抵达(孙grandchildren在设计树向下有两层次,依次类推)。上图中foo的子有C、4、A。

类似,不是根(root)设计的所有设计都有父母(parents)。设计3 的父母是C(其祖父是foo)。最后没有子的设计叫树的叶(leaves)。在foo中树的叶是3、4、1、2 。

这些计算机科学术语在描述设计的层次是有用的。借来讨论层次处理的技术,这同计算机科学是平行的。按照搜寻

设计树非常容易考虑搜寻设计层次。

6-5-2-1 修剪树(pruning trees)

假设你在运行Design Analyzer,且已装进top和foo设计。你已在综合这些设计,决定重新编译设计B以改进性能。你可能设置当前的设计为B(用命令current_design B),改变或增加约束来鉴别新的设计目标,发出compile命令。那个编译不需要慢,但在存储器中仍有许多不在B设计树下的设计。为其它用途的自由存储器对修剪树是一个推动。

如果有较少的集合理论用在分析设计树种,修剪树的概念是容易理解的。Top和foo树设计的集合为{top,A,B,1,2,foo,4,3,C}。在B树中设计的集合{B,A,1,2}.如果你打算搜寻其中之一的集合,以便找到B设计中的一个单元,你搜寻哪一个集合?当然,你应该搜寻较小的集合。

修剪树是减少操作判定空间的过程。除了考虑那些同操作相关的子树下的设计,删去其它的所有的目标。不需删去存储器中的目标以便在处理时修剪,但由此释放的存储有它有利的副作用。

使用dc_shell有有多种方式修剪存储的设计。最简单的程序是利用设计编译器的层次寻找能力。思考以一下prune.scr,它可以修剪不在树根current_design层次中的存储的目标。Prune.scr执行3个任务:1.它初始化一个in_tree 属性给存储中所有的设计的false;2.它用一个层次寻找这种加在current_design的true属性,以及在current_design 层次中所有的设计;3.它删去不在current_design树下存储的所有的设计。一旦树被修剪,脚本删去设计的in_tree属性,这种属性不再是必需的。如:

1 set_attribute find(design,”*”)\

in_tree false –type boolean –quiet

2 set_attribute current_design\

in_tree true –type boolean –quiet

3 set_attribute find(design,”*”)\

in_tree true –type boolean –quiet

4 removable_designs =filter(find(design,”*”),\

“@in_tree !=true”

5 if (removable_designs)

{

6 remove_design removable_designs

}

7 current_design current_reference

6-5-2-2 搜寻树 (searching trees)

前面介绍的find命令对于搜寻设计树有完美的用途。这个命令有强的限制不能单独作为处理设计树的搜寻用途。然而,find 命令可以在存储所有的设计中返回。对于其它的目标类型,find命令仅在current_design目标返回一个列表。在整个设计树,编写的脚本当然能找到目标的列表(仅对一些目标类型,层次切换可以进行)。

扩展层次的find的能力是执行有用的搜寻设计树所必需的吗?考虑到层次编译方法的需要。第一步在设计树的根目录下应用约束,接着通过整个设计树向下特征化,一直到约束衍生到叶的层次。这需要设计树从顶向下的贯串。一个有序的搜寻能力当然能简化这个过程。遗憾是,命令find(design,”*”)返回一个存储设计的列表没有明显的顺序(事实上,它们按顺序装进存储器)。一个编写的脚本能返回树中一个有序的设计列表吗?答案是肯定的。

以上top的树做过再次安排。这份新的top层次替代图形的格式更准确反映设计设计编译存储器设计的组织结构。原先的图包含许多名字的复本。事实上,对每一个多层设计的关系照应,它包含一个设计名。这种新图包含每个设计名的拷贝。

这图安排清楚表明每一个设计与其他设计地关系如父亲关系。举例,设计A有直接的和有父辈关系的(包含在同A 有关系的每个设计中):top 和B。设计A也向下连结每一个子(包含在同A有关系的每个设计中):1和2。

这图也演示在每个设计子图(或子树)存在多少代或层次的设计。叶层或层次0设计位于图形的最低端。有层次0作为子设计的设计叫做层次1。这个设计仅包含层次1的设计为A。

当图形按照下面的规则贴上标签时,设计也按照它们的层次作上标志。规则:N层次设计不包含比N-1层更高的设计,至少包含N-1层次和任何更低层的设计。

如果你发现这个新提出的设计树的概念感到困惑,参照返回原始树。从叶层到根层的设计都贴上标志,按规则贴上的设计标志独立代表设计的层次。

只有当所有子设计贴上标志时,设计才算贴上标志。分辨设计的层次同增加一个子层一样简单。回头看原先的树或新图,注意到top设计含有层次1树,A和层次2树,B。由于top最高层次的子为层次2设计,top是3层的设计。

为什么这层标志重要呢?开发一个有序搜寻脚本的途径是在current_design树下给每一个设计定义一个level层属性,然后使用filter命令按顺序有选择返回设计。辨别每一个设计层次关键是有一个有序搜寻的算法。

下面的脚本在current_design层次中每个设计放置一个level层次属性。象多数脚本一样,它需要初始化:

1 find design "*" –hierarchy

2 unlabeled_designs =dc_shell_status+current_design

3 set_attribute unlabeled_designs\

level –1 –type integer –quiet

4 current_level=0

5 design_name=""

6 reference_name=""

行1-2 初始化变量unlabeled_designs,在current_design层次下给所有设计一个列表。current_design清晰含在列表中。行3在unlabeled_designs列表中对每一个设计创建整型的层次level属性,初始化这种属性的值为1。行4初始化一个计数变量:current_level=0。行5-6 初始化字符串变量design_name reference_name,它们需要从设计目标中提取名字。

7while (unlabeled_designs !={ })

{

8foreach(active_design,unlabeled_designs)

{

9current_design active_design

10set_attribute active_design level\

current_level –type integer –quiet

11filter (find(reference,”*”),”@is_hierarchical==true”)

12local_refs=dc_shell_status

13foreach(design_element, local_refs)

{

14reference_name=reference_element

15foreach(design_element, unlabeled_designs)

{

16design_name=design_element

17if(design_name==reference_name)

{

18set_attribute active_design \

level-1 –type integer –quiet

19break

}

}

20if (get_attribute(-quiet active_design,level)==-1)

{

21break

}

}

}

22filter unlabeled_designs “@level==-1”

23 unlabeled_designs=dc_shell_status

24 current_level=current_level+1

}

第7行说明只要unlabeled_designs非空,就初始化运行一个while循环。第8-24行是while循环的主体。第8行初始化一个嵌套的foreach循环。把unlabeled_designs每个设计按顺序列表给active_design 。第9-21行是foreach 循环的主体,第9行把变量current_design变成active_design参数化的设计。第7-9行揭示了许多关于这个脚本的根本的算法。这个脚本重复操作未作标志设计中的每一个设计直到所有的设计都贴上标志。

第10行改变了active_design的层次level的属性,从初始值-1变为包含在current_level变量的值。第11-12行把在active_design所有层次reference的列表赋给变量local_refs。第13行启动一个foreach循环,把在local_refs 中的每个reference赋给reference_element变量。第14行把reference_element赋给变量reference_name.第13-14行和第15-16行类似。但第15-16行把在unlabeled_designs中的每个设计名字赋给design_name变量。

第17行比较当前的reference_name和design_name。如果匹配,就执行if循环体(第18-19行)。第18行改变active_design层次level属性的值,原来current_level为-1。第19-21行退出两个内部的foreach循环(如果在17找到未作标志的设计的reference)。第10-19行揭示基本算法的实质。这个脚本简单地体现了以上所提的层次规则。当且仅当当前设计的reference都做标志时,对于每一个unlabeled_design,才给current_level设置层次level的属性。第17-18 行保证在更高层设计之前,更低层的设计要做层次level属性的标志。

第22-24 行更新unlabeled_designs和current_level变量,这两变量提供作while循环控制参数服务。第22行返回设计表,其层次属性设置为-1(表示未作标志)。第23行赋值此表给unlabeled_designs属性。注意没有22-23 行,while 循环是无限的循环,但它们做了更多的while循环的约束。它们也修剪了设计的集合(按顺序通过循环)。第24行current_level的增量为1。这行和第10行和第18行一起工作保证设计的下一层也做层次的标志。

考虑一下当这个脚本运行在前面的top设计树,会发生什么。首先通过循环current_level为0,unlabeled_designs 为{top,A,1,2,B},及这些设计都有层次属性值为-1。Top会把active_design和top’level的属性设置为0。接着local_refs的集合为{A,B},在unlabeled_designs列表的每一个design_name和在local_refs中的每个reference_name 作比较。由于unlabeled_designs和 local_refs非空交集。Top设计层次level属性设置为-1。

在19 和21 行的break 命令提高脚本的执行速度。只要unlabeled_designs和 local_refs非空交集,层次level 属性恢复设置为-1和嵌套的foreach循环要被打破(正在执行交集的分析)。并不必要判定reference B是否为unlabeled_design。事实上,reference A是unlabeled_design足以判定top不应贴上0层的设计标志。

在top设计被解析之后,设计A有类似的结果。接着设计1被解析。Active_design变量设置为1,其层次属性设为0。第11行的find(reference “*”)命令返回一个reference 地集合(单元)与unlabeled_designs无交集。在通过while循环后,仅设计1和2层次属性从-1变为0。unlabeled_designs会更新为{top,A,B}. current_level的增量为1。

在第二次通过循环时,设计A被贴层次1的标志。在第三次通过循环时,设计B被贴层次2 的标志。在第四次通过循环体时,设计top要贴层次3的设计标签。在第四次通过循环体后,unlabeled_designs为空集,current_level为4。循环终止,脚本完成任务。

6-5-3 有序搜寻:根首先(root-first)和叶首先(leaf-first)

已经做了层次属性的标签,有可能控制设计搜寻的顺序。开发的方法可以作任何层次的编译,约束可以加在设计的根树下,然后沿着树向下特征化的贯穿,直到衍生的约束贯穿到叶设计的部分。

一旦约束存在设计树的最低层,每个设计都可被编译。编译的过程开始于最低层,返回于最高层。脚本贯穿设计的层次从顶至下的方式叫根首先搜寻(root-first-search,RFS),从低向上的方式叫叶首先搜寻(leaf-first-search,LFS)。典型的计算机科学算法叫按宽度首先(breadth-first)和深度首先(depth-first)顺序的搜寻树。脚本是类似的,因此仅根首先(root-first)详细分析阐述。

1 max_level=-1

2 foreach(design_element,find(design,”*”))

{

3 get_attribute design_element level-quiet

4 current_level=dc_shell_status

5 if(current_level>max_level)

{

6 max_level=current_level

7 root_design=design_element

}

}

8 current_level=max_level

第1-7行循环通过树中每一个设计,决定根设计的名字和根设计层次属性的值。不同于label_hierarchy脚本,这个脚本没有假定current_design为层次的根(如做了这个假设,max_level是current_design的简单层次)。当变量max_level用来初始化current_level变量时,根设计的层次被保存。变量current_level用来控制在每一个层次while 循环寻找设计。

9 while(current_level>=0)

{

10 filter find(design,”*”) “@level==current_level”

11 design_list=dc_shell_status

12 foreach(active_design,design_list)

{

13 echo active_design

14 RFS_operation

}

15 current_level=current-1

}

16 current_design root_design

当current_level的值为正时,层次的current_level设计的列表赋值给变量design_list。第12行启动一个循环,把design_list地每一个元素赋值给变量active_design 。第13行用echo命令列举active_design.第14行执行了RFS_operation命令。在跳到15行之前,在循环结束前current_level在减少,以便RFS_operation准确按树中宽度首先(breadth-first)的顺序执行脚本。第16行简单地把current_design的状态恢复到root_design。

RFS_operation是什么?它不是预先的定义的设计编译器命令,而是一个别名。这个脚本的功能有用户定义。这个脚本执行一个操作,针对做好标签的设计树的每个设计,按照宽度首先(breath-first)的顺序进行执行。执行设计的具体的操作,可通过简单改变RFS_operation的别名进行变化。对CRWC方法,运行的脚本描述了有关当前设计的单元的特征。这个设计的特征的任务非琐碎的,因而RFS_operation调用另一个脚本发出必须命令的顺序:

alias RFS_operation “characterize_active_design”

alias characterize_active_design\

“include characterize_active.scr”

在你分析characterize_active_design脚本之前,回头看宽度首先的搜寻脚本。要把这个脚本变成深度首先(depth-first)的脚本,需作那些变化呢?仅有4行需要改变:

8 current_level=0

9 while(current_level<=max_level)

14 LFS_operation

15 current_level= current_level+1

取代开始于max_level和current_level减少为0,深度首先(depth-first)脚本开始于0,current_level 增加为max_level。第14行变化仅保证有脚本反映其意义的脚本执行操作的名字。

6-5-4 描述active_design的特征

根首先(root-first)搜寻的脚本控制设计层次的特征化的顺序,有一个重要的课题需要阐明,CRWC方法可以合适

地描述任意设计层次的特征。回头看一下top设计的特征。

根首先(root-first)搜寻的脚本设计按一定的顺序特征化:top,B,A,1和2(1和2可能保留)。但设计A哪一个应该特征化?设计A有两个父top和B。对这个问题有三个可能的答案。这个脚本能描述有关设计A的top设计单元特征。或者,脚本使用uniquify命令复制设计A变成设计A_1和A_2以及特征化。

一般而言,假设设计在这次没有被特征化是安全的。在层次被修剪和做标签前,设计应该特征化。(特征化的设计有效的深度和层次属性)。哪一个设计应该特征化,没有唯一的答案。CRWC方法必须具有构造能力来保证方法的一般使用。这个问题最好的解决方案允许两种具体设计的结构。

首先,一般的方法决定characterize_me的属性是否存在树中非独特设计的示例。这允许按照示例具体的基础回答“哪个设计”的问题。

其二,这种方法应该提供一种机理覆盖characterize命令衍生的设计属性。正如上面所讨论一样,revise_script 用作这个目的。Characterize脚本采用下面的惯例:

1:如果在设计层次中有多个示例,仅有一个示例将被特征化。为决定要被特征化的示例,脚本选择单个示例(单元),把characterize_me的属性设置为真。如果有多个示例把characterize_me的属性设置为真,要随机选择一个示例特征化。设计应该特征化,或者单个设计示例要被赋予characterize_me的属性。这种随机选择的机理不应该用在实践中。

2:这个脚本衍生的约束,是有active_design变量鉴别的设计的示例的一种约束。这种衍生的约束将被来写一个脚本文件,其名字为design_name.wscr。design_name是active_design的名字,.wscr后缀代表write_script。对于任意给定的设计衍生的约束可能不反映真实的设计目标,这个脚本文件名为design_name.wscr,若它已存在在写出write_script 之前修改衍生的约束。.wscr后缀缚在设计的名字后用来创建revise_script,其文件名代表revise_script。正如上面所解释的,revise_script提供一种在CRWC方法中包进时序预算的机理。

为记住这个脚本的目的,考虑随后的实现:

1 if (current_level

{

2 active_name= “”

3 active_name=active_design

4 reference_name=“”

5 possible_cell_list={ }

6 selected_cell_count=0

7 selected_cell_list={ }

8 filter find(design,“*”) “@level>current_level”

9 higher_levels =dc_shell_status

这个脚本假定它是被上面编写的宽度首先(breadth-first)的脚本所调用。在执行单命令前,比较脚本的其中两个变量。如果active_design是设计树的根,就无需特征化active_design。第一行确保在这种情况下脚本立即返回。第2-9行初始化命令。第8-9行值得特别注意,它们按照下面规则修剪设计的空间。

层次属性的定义保证n层不能包含任意层次属性高于n-1的设计。当在设计树中搜寻active_design示例时必须寻找更高层次的设计的示例。第8-9行利用这个事实,通过修剪搜寻空间减少脚本的运行时间。

10 foreach (design_element,higher_levels)

{

11 current_design design_element

12 cell_list={ }

13 filter (find(reference," *"),"@is_hierarchical==true"

14 local_refs=dc_shell_status

15 foreach(reference_element,local_refs)

{

16 reference_name=reference_element

17 if (active_name==reference_name)

{

18 filter find(cell,“ *”) “@ref_name==active_name”

19cell_list=dc_shell_status

20break

}

}

21if (cell_list!={ } )

{

22 parent_design=current_design

23filter cell_list “@characterize_me==true”

24possible_cell_list=dc_shell_status

25if (possible_cell_list !={ })

{

26selected_cell_count=1

27selected_cell_list= possible_cell_list

28break

29} else {

30selected_cell_list= selected_cell_list+cell_list

31foreach instance,cell_list)

{

32 selected_cell_count= selected_cell_count+1

}

}

}

}

第10-32 行在设计层次中寻找和计算active_design所有的示例。第18行使用这个事实,单元的ref_name属性与设计的名字相同。第13-17行和20行可以从脚本中删除,不会影响它的功能。它们仅提供一个目的。

在多数设计中有远比单元少的多的参量。第18-19行可由第13-20行代替,但在higher_level设计的每个单元可以用来过滤寻找active_design中少的示例。同第13-17行和20行相关,在每个层次的参考量过滤判定包含在active_design设计的位置。这个过程确保第18-19行运行设计,仅是同active_design相关的设计。

第22行存储了含在active_design的名字。在特征化之前把current_design变成active_design的parent_design 是必须的。如果发现active_design的示例不止一个,用来特征化active_design的parent_design是最后一个被找到的。(对parent_design随后的任务还会复写前面的任务)。

第23-25行决定active_design的示例是否要把characterize_me属性设置为真。如果是的,第26-28行就会被执行。第26行把selected_cell_count变为1。第27行覆写要把characterize_me属性设置为真的单元,这些单元的列表同子集有关。

第28行立即退出搜寻的路径。如果找到有characterize_me属性active_design的示例,不必再找设计层次的其他示例。注意:脚本可作这样的假设,在设计的层次中,active_design仅有一个示例把characterize_me属性设置为真。如果不是这种情况,脚本会用其中一个characterize_me的示例,但它不会警告用户――鉴别的多个示例需被特征化。这个脚本可以改进给出那样一个警告,但它折中运行时间(当发现一个characterize_me的示例它预先退出搜寻的循环)。

如果active_design无示例标有characterize_me属性,active_design的所有的示例按第30-32行计算。搜寻继续进行或找到标有characterize_me属性的示例。

33 foreach (selected_cell, selected_cell_list) { }

34 if (selected_cell_count>1)

{

35 echo “”

36 echo “Multiple cells were found for the \

following design : ”

37 echo active_name

38 echo “An arbitrary instance will be characterized.”

39 echo “Consider placing the Boolean attribute:”

40 echo “characterize_me”

41 echo “on a cell to force which cell is \

characterized,or”

42 echo “uniquify the hierarchy so that all cells will\

be characterized.”

43 echo “”

}

第33行是一个空的foreach循环。这个循环的目的是在设计树找到的active_design 最后的示例的值赋给变量selected_cell。最后设计的选择是任意的(空循环容易选择的)。若示例标有characterize_me属性,selected_cell_list 仅包含有这个属性的示例。第33行成功选择适当地示例,不管它是否标有characterize_me属性。

第34-43行没有增加这个脚本的任何功能。他们仅警告用户如果找到非特殊化的设计,其示例也不包有

characterize_me属性。好的脚本执行错误检查保证他们不被错误使用。

44 current_design parent_design

45 characterize –constraints find(cell,selected_cell)

46 current_design active_design

47 script_file=“”

48 revise_file=“”

49 script_file=active_name

50 revise_file= active_name

51 script_file= script_file+“.wscr”

52 revise_file= revise_file+“.rscr”

53 which revise_file

54 if (dc_shell_status !={ })

{

55 include revise_file

}

56 active_design > script_file

}

第44-45行为active_design执行characterize命令。第47-52行为revise_file和write_script文件决定适当地文件名。第53-54行判定revise_file是否存在。如果结果非空集,第55行就执行在revise_file的读操作,以便覆盖部分或全部衍生的约束。最后,第56行对于active_design,把衍生的修改的约束写进active_design文件中。

6-5-5 编译active_design

在描述了设计层次的特征后,其中包过对于每一个设计做了一个revise_script和写了一个write_script,CRWC方法最后的步骤是读设计的策略脚本和编译设计层次。叶首先搜寻(leaf-first-search)脚本控制编译的顺序,调用一个compile_active_design脚本来读策略脚本,执行编译active_design的每一设计层次。

1 active_name =“”

2 active_name =active_design

3 script_file= active_design “”

4 revise_file=“”

5 strategy_file=“”

6 script_file= active_name

7 revise_file= active_name

8 strategy_file= active_name

9 script_file= script_file+“.wscr”

10 revise_file= revise_file+“.rscr”

11 strategy_file=strategy_file

12 default_script =“default.scr”

脚本开始执行初始化必需的变量。四个脚本的文件:default_script、script_file(write_script)、revise_file (revise_script)、strategy_file (strategy_script)都在编译的脚本之中。如果编译脚本的顺序是按照特征化脚本的顺序执行,revise_script不起作用。

既然在characterize脚本生成write_script之前已包进revise_script,在revise_script中的所有的信息存在于write_script。但是,运行编译的脚本紧跟write_script是不必要的。为使得编译和特征化的脚本单位化,独立化,脚本加进revise_script可以保证最新的时序预算应用在active_design。

13 current_design active_design

14 which default_script

15 if (dc_shell_status !={ })

{

16 include default_script

}

17 which script_file

18 if (dc_shell_status)

{

19 include script_file

}

20 which revise_file

21 if (dc_shell_status)

{

22include revise_file

}

23which strategy_file

24if (dc_shell_status)

{

25include strategy_file

}

26compile

27 set_don't_touch active_design

第13-25行简单地检查四个脚本文件的存在性。第26行是CRWC方法的最高点,它编译active_design。第27行在active_design设置don't_touch属性,避免在更高层子设计中被再次编译。

6-5-6 编译设计体系:整体编译

以上编写的脚本折衷了CRWC方法的条款。最后两个脚本帮助聚在一块。第一使用别名的命令创建了用户定义的命令,可以执行上面编写的脚本。第二按顺序执行执行这些命令,编译在current_design地设计体系。图 6.3演示了在compile_hierarchy脚本中CRWC脚本如何聚在一起。

图6.3 编译脚本层次

make_alias脚本mk_alias.scr给每一个CRWC脚本取一个命令名字的别名:

1 alias prune_designs include prune.scr

2 alias label_hierarchy include label_hir.scr

3 alias RFS include RFS.scr

4 alias LFS include LFS.scr

5 alias characterize_active_design include char_act.scr

6 alias compile_active_design include comp_hir.scr

7 alias compile_hierarchy include comp_hir.scr

compile_hierarchy脚本comp_hir.scr执行CRWC方法的七个步骤。在设计体系做了修剪和标签后,可以判定设计体系的根设计下default_scriptwrite_script,revise_script,strategy_script的文件是否存在。如果存在,脚本文件就会建立根层次的约束。如果不存在,compile_hierarchy脚本会简单假设已存的根层次的约束是合适的,开始执行charactrize/write_script/compile顺序(第15-18行)。一旦体系被编译,第19-21行就会以DB的格式写出新的编译设计体系信息。

1prune_designs

2label_hierarchy

3script_file =“”

4revise_file=“”

5script_file =root_name

6revise_file= root_name

7script_file = script_file +“.wscr”

8revise_file= revise_file+“.rscr”

9default_script = “default.scr”

10which default_script

11if (dc_shell_status)

{

12include default_script

}

13which script_file

14if (dc_shell_status)

{

15include script_file

}

16which revise_file

17if (dc_shell_status)

{

18 include revise_file

}

19alias RFS_operation include characterize_active_design

20 include RFS

21 alias LFS_operation include compile_active_design

22 include LFS

23 current_design root_design

24 link

25 write –f db –hierarchy

6-5-7 增强和扩展CRWC脚本

以上编写的脚本有实际的限制。多数设计有许多层次体系,不需独立编译。当编译体系层次的接口时,高层的编译有个优点。设计编译器能反复定义接口两边的逻辑,它不受don't_touch的限制。

BSDO方法说明了较高层的编译也能产生高质量的结果。这种现象依赖于设计。通过隔离关键的路径,低层编译可能进行较快的设计。或通过屏蔽交叉体系边界的关键路径,它们也可能进行较慢地设计。正如在BSDO中AM2910所演示的例子一样,当同等价的低层编译比较时,高层的编译也可能进行较小规模的设计。认识到这个效果,许多设计者想在CRWC 脚本中限制树贯串的深度,以便在体系结构中仅高层的设计特征化(编译)。

遗憾是,层次level的属性不能特别借来很好地改进这种算法。低层设计可能在设计体系的高层独占存在。为增强CRWC脚本,限制体系结构的贯穿深度,需要一种属性表明每个设计的层次深度(从顶至下计算),弥补层次的属性。Top 体系结构的属性标志如下:

作设计深度标志的规则必需同设计层次的赋值规则相反。设计的深度是同设计相关体系结构的最高层的深度(或等价,有设计实例存在的最高体系级别)。在这个体系结构中设计A的深度为1,尽管它存在于深度为1和2的设计体系中。Top深度为0,A和B的深度为1,1和2的深度为2。

一个增强的 label_hierarchy脚本,它可以在设计树中设置层次和深度属性。由于定义了深度属性,“深度首先”

(depth-first)和“宽度首先”(breadth-first)脚本仅需作细小的修改就可在具体的深度“到底”(bottom out)-停止层次贯串。

上面虽然介绍了计算机科学术语深度首先(depth-first)和宽度首先(breadth-first),执行搜寻的脚本还是命名为根首先(root-first)和叶首先(leaf-first)。深度首先(depth-first)和宽度首先(breadth-first)保留用作增强的脚本,它是按深度而不是层次贯串,因增强的算法和典型的计算机科学的定义深度首先(depth-first)和宽度首先(breadth-first)更加一致。

两套脚本对于不同的应用是有用途的。增强的搜寻脚本继承原来脚本的优点而不是荒废它。在这些脚本中,变量depth_limit用来辨别搜寻的深度。对于不同的设计有不同的depth_limit是合适的,设计中设置limit属性表明每个设计有适当的depth_limit。深度首先(depth-first)和宽度首先(breadth-first)的脚本分别命名为DFS.scr和BFS.scr。

一般而言,每次一个子设计变化就要重新编译整个设计体系是不令人满意的。使用CRWC容易进行重新编译单个的设计。简单地把修改的设计读进设计编译器,其中设计的write_script文件采用前面修改的约束,它是由CRWC脚本的设计体系所衍生的。接着发出一个编译命令。可以编写文件自动执行这个过程。虽然提出这个方法,许多设计者从来没有使用过compile_hierarchy脚本。

通过删除最后的5行命令,compile_hierarchy脚本可以变成charactrize_hierarchy脚本。许多设计者发现使用这种方法是有益的,它可以解耦原来compile_hierarchy脚本的特征化和编译的步骤。这些脚本可以工作在设计体系的所有的层次,,去耦使得执行必要的特征化、编译的步骤很容易。

在应用说明的结尾增强的脚本似乎有价值,但它们不是实现CRWC最高效的方法。对于规模大的设计而言,特征化一个设计要求的时间限制了CRWC方法的优点。幸运的是,特征化单个设计的时间同特征化一系列设计所需的时间差的不多。

为改进CRWC方法的运行时间,重写characterize_active_design路线,以便特征化仅按每层去做而不是按每个设计去做。发展一种新的机理(如用户定义的属性),处理非特化的设计,或者在体系结构中发出uniquify的命令。用单个命令特征化整个设计体系如:

characterize –constraints filter(find(-hierarchy cell,“*”),\“is_hierarchical==true”)减少特征化时间数并不是改进CRWC方法的性能的唯一的途径。原先charactrize/write_script/compile方法的用户将会记得,这个技术超过charactrize/compile的优势是在编译低层设计前具有移开高层设计的能力。

改进存储器的利用总是好的主意。由于当今的工作战中I/O操作明显慢于CPU,当设计进出存储器交换时,特征化和编译的时间显著增加。修剪设计,有几种方法解决这个问题。设计应该是否,何时,怎么样从存储器中移开/装载,这种决定由用在项目的设计管理程序引导。对于CRWC方法,从存储器中移开高层的设计是不必要的。这种提高对读者而言是一个练习。

如果你一这种方式选择增强脚本,记住当设计从存储单元移开时,设计从变量移开。用一个目标类型变量存储设计,对于未来的参量用字符串变量存储其名字。

6-5-8 结论

这个应用说明介绍了一些dc_shell命令,可以帮助Synopsys用户认识设计编译器的功能和灵活性。详细阐述了设计目标,变量,属性,别名,控制流命令。

在介绍了dc_shell的基本特性后,使用dc_shell脚本发展了一种体系编译的方法。这种characterize/revise_script/write_script/compile(CRWC)方法建立在由Mikael Hakansson和David Gregory介绍的思想之上。

CRWC脚本解决了体系编译的难题,对于宽广范围的设计,任意设计的体系都可客户化,可操作化。在CRWC脚本介绍后,几个可能的脚本的增强和扩展的方法强调简单的事实,即没有一个通用的编译脚本适合所有的应用。这就是为什么dc_shell脚本有如此强的能力。

脚本允许设计者自动进行他们自己指定的设计或者指定方法的dc_shell的程序。创造性,你可能发现更简单,不一般的更适合你自己的设计方法。

在这个应用说明中解释了几个常见的错误,没有适当地警告就排除掉是不负责任的。使用dc_shell脚本你可能陷入麻烦。无限的while循环是一个好的例子。在等待无限脚本的完成,设计者浪费了宝贵的时间。

这儿常见的陷阱不完全。还有许多其它的陷阱可以避免。当写脚本时,遵循着合理的软件设计实践。文件化你的编码。用list和echo表明你的改进。若你在特定的结构上遇到困难,再尝试一次。发现每个命令的细微的差别可能要花一段时间。

波谱解析试题及答案

波普解析试题 一、名词解释(5*4分=20分) 1.波谱学 2.屏蔽效应 3.电池辐射区域 4.重排反应 5.驰骋过程 二、选择题。( 10*2分=20分) 1.化合物中只有一个羰基,却在1773cm-1和1736cm-1处出现两个吸收峰 这是因为:() A、诱导效应 B、共轭效应 C、费米共振 D、空间位阻 2. 一种能作为色散型红外光谱仪的色散元件材料为:() A、玻璃 B、石英 C、红宝石 D、卤化物晶体 3.预测H2S分子的基频峰数为:() A、4 B、3 C、2 D、1 4.若外加磁场的强度H0逐渐加大时,则使原子核自旋能级的低能态跃迁到高能态所需的能量是如何变化的:() A、不变 B、逐渐变大 C、逐渐变小 D、随原核而变 5.下列哪种核不适宜核磁共振测定:() A、12C B、15N C、19F D、31P 6.在丁酮质谱中,质荷比质为29的碎片离子是发生了() A、α-裂解 B、I-裂解 C、重排裂解 D、γ-H迁移 7.在四谱综合解析过程中,确定苯环取代基的位置,最有效的方法是() A、紫外和核磁 B、质谱和红外 C、红外和核磁 D、质谱和核磁 8.下列化合物按1H化学位移值从大到小排列 ( ) a.CH2=CH2 b.CH CH c.HCHO d. A、a、b、c、d B、a、c、b、d C、c、d、a、b D、d、c、b、a 9.在碱性条件下,苯酚的最大吸波长将发生何种变化? ( ) A.红移 B. 蓝移 C. 不变 D. 不能确定

10.芳烃(M=134), 质谱图上于m/e91处显一强峰,试问其可能的结构是:( ) A. B. C. D. 三、问答题(5*5分=25分) 1.红外光谱产生必须具备的两个条件是什么? 2.影响物质红外光谱中峰位的因素有哪些? 3. 色散型光谱仪主要有哪些部分组成? 4. 核磁共振谱是物质内部什么运动在外部的一种表现形式? 5. 紫外光谱在有机化合物结构鉴定中的主要贡献是什么? 四、计算和推断题(9+9+17=35分) 1.某化合物(不含N元素)分子离子区质谱数据为M(72),相对丰度100%; M+1(73),相对丰度3.5%;M+2(74),相对丰度0.5%。 (1)分子中是否含有Br Cl? 。 (2) 分子中是否含有S? 。 (3)试确定其分子式为。 2. 分子式为C8H8O的化合物,IR(cm-1):3050,2950,1695,1600,1590,1460,1370,1260,760,690等处有吸收, (1)分子中有没有羟基(—O H)?。 (2)有没有苯环。 (3)其结构为。 3. 某未知物的分子式为C3H6O,质谱数据和核磁共振谱如图1、2所示,试推断其结构。 图1 、C3H6O的质谱

2018年版第六章遵法学法守法用法练

第六章尊法学法守法用法 一、单项选择题 1、法律区别于道德规范、宗教规范、风俗习惯等其他社会规范首要在于(B )。 A、法律是统治阶级意志的体现 B、法律是由国家创制和实施的行为规范 C、法律由社会物质生活条件决定 D、法律是历史发展规律和自然规律的反映 2、法律由一定社会的物质生活条件所决定,其中决定法律本质、内容和发展方向的根本因素是( C ) A、人口的素质和密度 B、生产关系 C、物质资料的生产方式 D、地理环境 3、法律发展史上最早出现的法律为( C )。 A、原始社会法律 B、封建制法律 C、奴隶制法律 D、资本主义法律 4、以下不属于奴隶制法律的基本特征的是( D )。 A、具有明显的原始习惯残留痕迹 B、否认奴隶的法律人格 C、存在严格的等级划分 D、法律面前人人平等 5、以下不属于封建制法律的基本特征的是( D )。 A、确立农民对封建地主的人身依附关系 B、实行封建等级制度

C、维护专制皇权 D、确认自由民之间的等级划分 6、( C )是一个从创制、实施、到实现的过程。 A、法律的制度 B、法律的执行 C、法律的运行 D、法律的适用 7、根据我国宪法、立法法等法律的规定,全国人民代表大会及其常务委员会行使国家立法权。( B )有权根据宪法和法律制定行政法规。 A、全国人大及其常委会 B 、国务院 C、中央及地方各级的立法机关 D 、中央军委 8、法律运行的起始性和关键性环节( C ) A、法律执行 B、法律适用 C、法律制定 D、法律遵守 9、国务院各部门可以根据宪法、法律和行政法规,在本部门的权限范围内,制定( B )。 A、行政法规 B、部门规章 C、地方性法规 D、地方政府规章 10、省、自治区、直辖市的人民代表大会及其常委会根据本行政区域的具体情况和实际需要,在不与宪法、法律和行政法规相抵触的前提下,可以制定( C )。 A、行政法规 B、部门规章 C、地方性法规 D、地方政府规章

波谱分析习题库答案

波谱分析复习题库答案 一、名词解释 1、化学位移:将待测氢核共振峰所在位置与某基准氢核共振峰所在位置进行比较,求其相对距离,称之为化学位移。 2、屏蔽效应:核外电子在与外加磁场垂直的平面上绕核旋转同时将产生一个与外加磁场相对抗的第二磁场,对于氢核来讲,等于增加了一个免受外磁场影响的防御措施,这种作用叫做电子的屏蔽效应。 3、相对丰度:首先选择一个强度最大的离子峰,把它的强度作为100%,并把这个峰作为基峰。将其它离子峰的强度与基峰作比较,求出它们的相对强度,称为相对丰度。 4、氮律:分子中含偶数个氮原子,或不含氮原子,则它的分子量就一定是偶数。如分子中含奇数个氮原子,则分子量就一定是奇数。 5、分子离子:分子失去一个电子而生成带正电荷的自由基为分子离子。 6、助色团:含有非成键n电子的杂原子饱和基团,本身在紫外可见光范围内不产生吸收,但当与生色团相连时,可使其吸收峰向长波方向移动,并使吸收强度增加的基团。 7、特征峰:红外光谱中4000-1333cm-1区域为特征谱带区,该区的吸收峰为特征峰。 8、质荷比:质量与电荷的比值为质荷比。 9、磁等同氢核化学环境相同、化学位移相同、对组外氢核表现相同偶合作用强度的氢核。 10、发色团:分子结构中含有π电子的基团称为发色团。 11、磁等同H核:化学环境相同,化学位移相同,且对组外氢核表现出相同耦合作用强度,想互之间虽有自旋耦合却不裂分的氢核。 12、质谱:就是把化合物分子用一定方式裂解后生成的各种离子,按其质量大小排列而成的图谱。 13、i-裂解:正电荷引发的裂解过程,涉及两个电子的转移,从而导致正电荷位置的迁移。 14、α-裂解:自由基引发的裂解过程,由自由基重新组成新键而在α位断裂,正电荷保持在原位。 15、红移吸收峰向长波方向移动 16. 能级跃迁分子由较低的能级状态(基态)跃迁到较高的能级状态(激发态)称为能级跃迁。 17. 摩尔吸光系数浓度为1mol/L,光程为1cm时的吸光度 二、选择题 1、波长为670.7nm的辐射,其频率(MHz)数值为(A) A、4.47×108 B、4.47×107 C、1.49×106 D、1.49×1010 2、紫外光谱的产生是由电子能级跃迁所致,能级差的大小决定了(C) A、吸收峰的强度 B、吸收峰的数目 C、吸收峰的位置 D、吸收峰的形状 3、紫外光谱是带状光谱的原因是由于(C )

有机波谱综合谱图解析

综合谱图解析 1.某未知物分子式为C5H12O,它的质谱、红外光谱以及核磁共振谱如图,它的紫外吸收光谱在200 nm以上没有吸收,试确定该化合物结构。并解释质谱中m/z 57和31的来源。

2?待鉴定的化合物(I )和(II )它们的分子式均为C 8H 12O 4。它们的质谱、红外 光谱和核磁共振谱见图。也测定了它们的紫外吸收光谱数据:(I )入max 223nm , S 4100; (II )入max 219nm 2300,试确定这两个化合物。 未之物(I )的谱图 127 100-1 - 10 10 曲 凹 M 亠亲) ? 册 -J P 科 J S W

未之物(II)的谱图

3、某未知物的分子式为C 9H 10O 2,紫外光谱数据表明:该物入max 在26 4、262 I? 257、252nm (&maxIOI 、158、147、194、153);红外、核磁数据如图所示,试 0 LOtMio. sopoiggg 翌g 嚴效 却31卿]卿丄电00 uyo iw mo 推断其结构,并说明理 由。 ! \ \ 「 1 CCh 1 I J —' 1 1 _■ ____ __ _ ,B . _ ,- T J.亠」亠亠」亠 | * --------------- U 5>0 4. 0 d/ppm

4.某未知物C ii H i6的UV 、IR 、中NMR 、MS 谱图及13C NMR 数据如下,推导 未知物结构。 序号 S c ( ppm ) 碳原子个数 序号 S c ( ppm ) 碳原子个数 1 143.0 1 6 32.0 1 2 128.5 2 7 31.5 1 3 128.0 2 8 22.5 1 4 125.5 1 9 10.0 1 5 36.0 1 MS(E[] 100 so 30D A/tnn 350 血 >0624*68<)2 4 內 OS n 2 2 98765^43211 0SU 'H bMRfCDCI^

波谱分析习题解析

核磁共振波谱分析法习题 二、选择题 1.自旋核7Li、11B、75As, 它们有相同的自旋量子数Ι=3/2, 磁矩μ单位为核磁子,μLi=3.2560, μB=2.6880, μAs =1.4349 相同频率射频照射,所需的磁场强度H大小顺序为 ( ) A B Li>B B>B As B B As>B B>B Li C B B>B Li>B As D B Li>B As>B Li 2.在 O-H 体系中,质子受氧核自旋-自旋偶合产生多少个峰 ? ( ) A 2 B 1 C 4 D 3 3.下列化合物的1H NMR谱,各组峰全是单峰的是 ( ) A CH3-OOC-CH2CH3 B (CH3)2CH-O-CH(CH3)2 C CH3-OOC-CH2-COO-CH3 D CH3CH2-OOC-CH2CH2-COO-CH2CH3 4.一种纯净的硝基甲苯的NMR图谱中出现了3组峰, 其中一个是单峰, 一组是二重峰,一组是三重峰。该化合物是下列结构中的 ( ) 5.自旋核7Li、11B、75As, 它们有相同的自旋量子数Ι=3/2, 磁矩μ单位为核磁子,μLi=3.2560, μB=2.6880, μAs =1.4349 相同频率射频照射, 所需的磁场强度H大小顺序为( )

A B Li>B B>B As B B As>B B>B Li C B B>B Li>B As D B Li>B As>B Li 6.化合物CH3COCH2COOCH2CH3的1H NMR谱的特点是 ( ) A 4个单峰 B 3个单峰,1个三重峰 C 2个单峰 D 2个单峰,1个三重峰和1 个四重峰 7.核磁共振波谱法中乙烯、乙炔、苯分子中质子化学位移值序是 ( ) A 苯 > 乙烯 > 乙炔 B 乙炔 > 乙烯 > 苯 C 乙烯 > 苯 > 乙炔 D 三者相等 8.在下列因素中,不会使NMR谱线变宽的因素是 ( ) A 磁场不均匀 B 增大射频辐射的功率 C 试样的粘度增大 D 种种原因使自旋-自旋弛豫(横向弛豫)的速率显著增大 9.将(其自旋量子数I=3/2)放在外磁场中,它有几个能态 ( ) A 2 B 4 C 6 D 8 10.在下面四个结构式中 哪个画有圈的质子有最大的屏蔽常 数?() 11.下图四种分子中,带圈质子受的屏蔽作用最大的是( )

同等学力申硕《法学学科综合水平考试大纲及指南》(第5版)笔记和课后习题详解-宪法第一章至第六章【圣才

第三部分宪法 第一章宪法基本理论 3.1.1复习笔记 一、宪法概念与分类 1.宪法的概念 (1)宪法是法的表现形式之一 宪法作为法的表现形式之一,在性质、反映的阶级意志、调整目的和社会效果等方面同法的其他形式具有共同的特征。宪法是法,具有法的属性,宪法规范是法规范的一种。 (2)宪法是国家根本法 ①内容具有根本性 宪法与法律相比,在内容上具有根本性、宏观性和全面性;法律具有派生性、微观性和具体性。 ②制定和修改程序最严格 宪法的制定和修改程序比法律更为严格,一般设立专门机关按特定程序制定宪法;在修改内容、时间、提议修改主体、修改权主体、修改程序等方面较之法律更为严格。 ③具有最高效力 宪法效力最高,在国家法律体系中处于最高法律地位。法律效力的最高性是宪法发挥根本法功能的重要保障。 (3)是民主制度法律化的基本形式

宪法与民主密不可分。宪法是确认人民管理国家的方式和程序的法。宪法产生与存在的前提之一是民主事实与民主制度的产生。 (4)本质 宪法本质上同一般法律一样反映统治阶级意志,并依国家强制力保障实施。宪法是确认一国民主制度、通过规范和控制国家权力以保障公民权利、具有最高效力的国家根本法。 2.宪法的分类 (1)传统分类 ①按表现形式,分为成文宪法和不成文宪法。具有统一宪法典表现形式的称为成文宪法,没有统一宪法典表现形式的称为不成文宪法。 ②按效力和修改程序,分为刚性宪法和柔性宪法。 ③按制定主体不同,分为钦定宪法、协定宪法和民定宪法。钦定宪法和协定宪法反映了宪法早期阶段的特点,现代多数国家宪法是民定宪法,由议会或制宪会议制定。 (2)现代分类 ①宪法的实质分类是马克思主义宪法学者从宪法阶级本质和经济基础出发进行的分类,主要揭示宪法的阶级本质和不同的政治功能。 ②根据宪法产生的社会基础和不同的表现形式,现代宪法还可分为原始宪法和派生宪法,规范宪法、名义宪法和语义宪法,联邦制宪法和单一制宪法等。 二、宪法结构与宪法规范 1.宪法结构 (1)宪法结构的概念

《波谱分析》期末考试例题

《波谱分析》期末考试题B 一、判断题正确填‘R’,错误的填‘F’(每小题2分,共12分) 1. 紫外吸收光谱、红外吸收光谱、核磁共振波谱和质谱是有机结构分析的四种主要的有机光谱分析方法,合称四大谱。() 2. 电磁辐射的波长越长,能量越大。() 3. 根据N规律,由C,H,O,N组成的有机化合物,N为奇数,M一定是奇数;N为偶数,M也为偶数。() 4. 核磁共振波谱法与红外光谱法一样,都是基于吸收电磁辐射的分析法。() 5. 当分子受到红外激发,其振动能级发生跃迁时,化学键越强吸收的光子数目越多。() 6.(CH3)4Si 分子中1H核共振频率处于高场,比所有有机化合物中的1H核都高。() 二、选择题(每小题2分,共30分). 1. 光或电磁辐射的二象性是指() A电磁辐射是由电矢量和磁矢量组成。 B电磁辐射具有波动性和电磁性 C电磁辐射具有微粒性和光电效应 D 电磁辐射具有波动性和微粒性 2. 光量子的能量与电磁辐射的的哪一个物理量成正比() A 频率 B 波长 C 周期 D 强度 3. 可见光区、紫外光区、红外光区和无线电波四个电磁波区域中,能量最大和最小的区域分别为() A紫外光区和无线电波 B紫外光区和红外光区 C可见光区和无线电波 D可见光区和红外光区 4. 在质谱图中,CH2Cl2中M:(M+2):(M+4)的比值约为:() A 1:2:1 B 1:3:1 C 9:6:1 D 1:1:1

5. 下列化合物中,分子离子峰的质核比为偶数的是() A C8H10N2O B C8H12N3 C C9H12NO D C4H4N 6. CI-MS表示() A电子轰击质谱 B化学电离质谱 C 电喷雾质谱 D 激光解析质谱 7. 红外光可引起物质的能级跃迁是() A 分子的电子能级的跃迁,振动能级的跃迁,转动能级的跃迁 B 分子内层电子能级的跃迁 C 分子振动能级及转动能级的跃迁 D 分子转动能级的跃迁 8. 红外光谱解析分子结构的主要参数是() A 质核比 B 波数 C 偶合常数 D 保留值 9. 某化合物在1500~2800cm-1无吸收,该化合物可能是() A 烷烃 B 烯烃 C 芳烃 D炔烃 10. 在偏共振去偶谱中,RCHO的偏共振多重性为() A 四重峰 B 三重峰 C 二重峰 D 单峰 11. 化合物CH3-CH=CH-CH=O的紫外光谱中,λmax=320nm(εmax=30)的一个吸收带是() A K带 B R带 C B带 D E2带 12. 质谱图中强度最大的峰,规定其相对强度为100%,称为() A 分子离子峰 B 基峰 C亚稳离子峰 D准分子离子峰 13. 化合物CH3CH2CH3的1HNMR中CH2的质子信号受CH3偶合裂分为() A 四重峰 B 五重峰 C 六重峰 D 七重峰 14. 分子式为C5H10O的化合物,其NMR谱上只出现两个单峰,最有可能的结构式为() A (CH3)2CHCOCH3 B (CH3)3C-CHO C CH3CH2CH2COCH3 D CH3CH2COCH2CH3 15. 在偏共振去偶谱中,R-CN的偏共振多重性为()

波谱分析期末试卷

波谱解析法期末综合试卷 班级:姓名:学号:得分: 一、判断题(1*10=10分) 1、分子离子可以是奇电子离子,也可以是偶电子离子。………………………(F ) 2、在紫外光谱分析谱图中,溶剂效应会影响谱带位置,增加溶剂极性将导致K带紫移,R带红 移。... ……. …………………………………………………………….............(R) 3、苯环中有三个吸收带,都是由σ→σ*跃迁引起的。…………………….......…( F ) 4、指纹区吸收峰多而复杂,没有强的特征峰,分子结构的微小变化不会引起这一区域吸收峰的变 化。..........................................................................................................….. (F) 5、离子带有的正电荷或不成对电子是它发生碎裂的原因和动力之一。..................(R ) 6、在紫外光谱中,π→π*跃迁是四种跃迁中所需能量最小的。…………………..(F) 7、当物质分子中某个基团的振动频率和红外光的频率一样时,分子就要释放能量,从原来的基态振动能级跃迁到 能量较高的振动能级。………………………….…(F) 8、红外吸收光谱的条件之一是红外光与分子之间有偶合作用,即分子振动时,其偶极矩必须发生变 化。……………………………………..………………………….(R) 9、在核磁共振中,凡是自旋量子数不为零的原子核都没有核磁共振现象。..........(F) 10、核的旋磁比越大,核的磁性越强,在核磁共振中越容易被发现。……….......(R ) 二、选择题(2*14=28分) 1、含O、N、S、卤素等杂原子的饱和有机物,其杂原子均含有未成键的(B )电子。由于其所占据的非键轨道能级较高,所以其到σ*跃迁能(A )。 1 . A. π B. n C. σ 2. A.小 B. 大C.100nm左右 D. 300nm左右 2、在下列化合物中,分子离子峰的质荷比为偶数的是…………………………(A ) A.C9H12N2 B.C9H12NO C.C9H10O2 D.C10H12O 3、质谱中分子离子能被进一步裂解成多种碎片离子,其原因是……………………..(D ) A.加速电场的作用。 B.电子流的能量大。 C.分子之间相 互碰撞。 D.碎片离子均比分子离子稳定。 4、在化合物的紫外吸收光谱中,哪些情况可以使化合物的π→π*跃迁吸收波长蓝移。..................................................................................................................................(B ) A.苯环上有助色团 B. 苯环上有生色团 C.助色团与共轭体系中的芳环相连 D. 助色团与共轭体系中的烯相连 5、用紫外可见光谱法可用来测定化合物构型,在几何构型中,顺式异构体的波长一般都比反式的对应值短,并且强度也较小,造成此现象最主要的原因是............…................( B ) A.溶剂效应 B.立体障碍C.共轭效应 D. 都不对

波谱解析试题

波谱解析试题A 一、名词解释(5*4分=20分) 1.波谱学:波谱学是涉及电池辐射与物质量子化的能态间的相互作用,其理论基础是量子化的能量从辐射场向物质转移。 2.屏蔽效应:感生磁场对外磁场的屏蔽作用称为电子屏蔽效应 3.电池辐射区域:γ射线区,X射线区,远紫外,紫外,可见光区,近红外,红外,远红外区,微波区和射频区 4.重排反应;在质谱裂解反应中,生成的某些离子的原子排列并不保持原来分子结构的关系,发生了原子或基团重排,产生这些重排离子的反应叫做重排反应 5.驰骋过程:要想维持NMR信号的检测,必须要有某种过程,这个过程就是驰骋过程,即高能态的核以非辐射的形式放出能量回到低能态,重建Boltzmann分布的过程。 二、选择题。( 10*2分=20分) 1. 化合物中只有一个羰基,却在1773cm-1和1736cm-1处出现两个吸收峰 这是因为:( C ) A、诱导效应 B、共轭效应 C、费米共振 D、空间位阻 2. 一种能作为色散型红外光谱仪的色散元件材料为:(D ) A、玻璃 B、石英 C、红宝石 D、卤化物晶体 3. 预测H2S分子的基频峰数为:( B) A、4 B、3 C、2 D、1 4. 若外加磁场的强度H0逐渐加大时,则使原子核自旋能级的低能态跃迁到高能态所需的能量是如何变化的:( B )

A、不变 B、逐渐变大 C、逐渐变小 D、随原核而变 5. 下列哪种核不适宜核磁共振测定:( A ) A、12C B、15N C、19F D、31P 6.在丁酮质谱中,质荷比质为29的碎片离子是发生了( B ) A、α-裂解 B、I-裂解 C、重排裂解 D、γ-H迁移 7. 在四谱综合解析过程中,确定苯环取代基的位置,最有效的方法是(C ) A、紫外和核磁 B、质谱和红外 C、红外和核磁 D、质谱和核磁 8. 下列化合物按1H化学位移值从大到小排列( C) a.CH2=CH2 b. CH CH c.HCHO d. A、a、b、c、d B、a、c、b、d C、c、d、a、b D、d、c、b、a 9.在碱性条件下,苯酚的最大吸波长将发生何种变化? ( A) A.红移 B. 蓝移 C. 不变 D. 不能确定 10.芳烃(M=134), 质谱图上于m/e91处显一强峰,试问其可能的结构是: ( B ) A. B. C. D. 三、问答题(5*5分=25分) 1.红外光谱产生必须具备的两个条件是什么? 答:一是红外辐射的能量应与振动能级差相匹配,即E光=△Eν,二是分子在振动过程中偶极矩的变化必须不为零 2.影响物质红外光谱中峰位的因素有哪些? 答:(1)诱导效应,(2)共轭效应,(3)氢键效应,4)振动偶合效应,(5)空间效应,(6)外部因素。 3.色散型光谱仪主要有哪些部分组成?

宪法规范

第六章宪法规范 1、宪法规范的定义: ○1宪法规范是指由民主制国家制定或认可的、调整宪法主体参与下的国家最基本、最重要的社会关系的各种规范的各种行为规范的总和。 ○2宪法规范是以根本规范为指导的价值体系和规范体系,既表现为实定法意义上的规范活动,有表现为超实定法的价值与原理,甚至表现为超合法性的规范; ○3内容:宪法规范由宪法制定规范、宪法核、宪法修改规范与宪法律组成。 ○4性质:宪法规范首先是一种法律规范;宪法的根本法地位决定宪法的规范为根本性的法律规范; ○4作用:宪法核是一种根本规范,他提供实定法客观合理性的依据,表明实定法创始的出发点; 2、★简述宪法规范的特征 宪法规范是一种根本性的法律规范,与其他法律规范相比具有自身的特点: 1)政治性:规范性和政治性有机的统一体 宪法是调整国家权力运行与人权保障的法律规范,在制宪及其行宪的过程中不可避免地表现其政治性。宪法规范中主要规定政治权力运行规律、权力主题的地位与职权、国家与公民之间的相互关系等内容。表现在: ○1制宪过程是一种政治选择过程; ○2宪法根据具体内容的确定反映了一种政治选择; ○3宪法规范的调整方式与调整过程受一定政治利益的约束; 2)组织性与限制性 宪法规范是一种组织国家权力的规范。国家权力通过宪法规范的作用得到合理的组织和分配。宪法规范的组织性的主要功能是合理地确定国家机关的组成与体系,为权力运行提供合宪性基础。为了保证权力运行的合宪性,宪法规范不仅要发挥组织的功能,同时要发挥其限制的功能。限制性:表现为限制性规范和人权保障规范; 组织性:表现为授权规范,构成确定国家机构活动的宪法基础。合理确定国家机关的组成与体系,为权力运行提供合法性基础; 限制性:表现为限制性规范和人权保障规范; 关系:为了保障权力运行的合宪性,宪法规范不仅要发挥组织功能,而且要发挥限制功能。 3)宪法规范的最高性 ○1宪法规范是社会生活中具有最高价值的准则,它构成一切政治社会的基础; ○2宪法效力的最高性,一切法律法规等规范性文件不得与宪法相抵触; ○3宪法规范的最高性意味着宪法是调整社会生活的最高依据,是判断政治行为是否合法、合理的标准,是民意的最高体现; ○4在有关法律的规范体系中,违宪审查制度、违宪诉讼制度等的建立与运行根据,源于宪法规范的最高性;为保障宪法的最高性地位,应采取下列措施: ○1实行严格而复杂的宪法修改程序; ○2建立权力分离与监督机制; ○3健全违宪审查机制; ○4加强社会只怪让宪法意识的培养;

第六章题库

《思想道德修养与法律基础》第六章题库 (阮李全编制) 一、单项选择题 1.在当今中国,作为党和政府治国理政的基本方式是 A.人治 B.法制 C.德治 D.法治 2.社会主义法治的核心内容是 A.依法治国 B.执政为民 C.公平正义 D.党的领导 3.社会主义法治的本质要求是 A.依法治国 B.执政为民 C.公平正义 D.党的领导 4.社会主义法治的价值追求是 A.依法治国 B.执政为民 C.公平正义 D.党的领导 5.社会主义法治的重要使命是 A.服务大局 B.执政为民 C.公平正义 D.党的领导 6.社会主义法治的根本保证是 A.依法治国 B.执政为民 C.公平正义 D.党的领导 7.以下不属于法律的至上性具体表现的是 A.普遍适用性 B.民主监督性 C.优先适用性 D.不可违抗性 8.在法治思维方式中,人权保障的最后防线是 A.宪法保护 B.行政保护 C.司法救济 D.立法保护 9.在法治思维方式中,正当程序的核心要素是 A.中立性 B.参与性 C.公开性 D.时限性 10.社会主义民主政治的本质和核心是 A.依法治国 B.人民当家做主 C.自由平等 D.党的领导 11.以下关于权力与权利的关系,说法不正确的是 A.权力来源于权利 B.权力服务于权利 C.权力决定权利 D.权力须受权利的制约12.根据法治思维的内涵,法律问题的核心是法律的 A.权利义务问题 B.责权统一问题 C.权力制约问题 D.调整对象问题 13.按照法治思维的内在要求,法律上的自由观念最为核心的内容是A.依法享有和行使自由的观念 B.法律面前人人平等的观念

C.权利义务一致的观念 D.社会主义民主法治的观念14.按照法治思维的内在要求,法律上的平等观念最为核心的内容是A.依法享有和行使自由的观念 B.权利义务一致的观念C.尊重和保障人权的观念 D.法律面前人人平等的观念15.以下关于实体与程序的关系说法正确的是 A.重实体,轻程序 B.轻实体,重程序 C.实体与程序两者可有可无 D.实体与程序两者不可偏废16.下列选项中不属于实体法的是 A.民法 B.行政诉讼法 C.刑法 D.行政法 17.以下不属于培养法治思维方式的正确途径的是 A.学习法律知识 B.掌握法律方法 C.尝试违法活动 D.参与法律实践 18.以下关于法律权威说法正确的是 A.法律在众多社会规范中居于主导地位 B.不得以政策、道德和习俗等社会规范代替法律 C.社会主体的一切行为都要以法律为最高权威 D.法律权威的树立主要依靠法律的内在强制力和外在的说服力19.建设社会主义民主政治和法治国家的前提条件是 A.树立个人权威、推行个人崇 B.树立和维护法律权威C.提高党和国家领导人的威信 D.维护人民当家做主的地位20.大学生同违法犯罪行为作斗争的方式不正确的是 A.采取有效措施预防违法犯罪行为的发生 B.制止违法犯罪行为 C.申诉、检举、揭发违法犯罪行为 D.加入犯罪集团充当卧底 21.指导人们进行法治实践的思想基础、基本原则和价值追求的是 A.法治思维 B.法律权威 C.法治理念 D.法制观念 22.法治思维方式的特征正当程序的内在要求是 A.中立性 B.参与性 C.公开性 D.时限性 23.法治思维方式的特征正当程序的底线标准是 A.中立性 B.参与性 C.公开性 D.时限性 24.法治思维方式的特征正当程序的核心要素是 A.中立性 B.参与性 C.公开性 D.时限性 25.法治思维方式的特征正当程序的重要特征是 A.中立性 B.参与性 C.公开性 D.时限性 26.社会主义民主政治的本质和核心是 A.坚持四项基本原则 B.坚持改革开放 C.人民当家作主 D.依法治国

波谱解析试题、答案(完整终极版)

波谱解析试题、答案(完整终极版) 一、名词解释:(每题4分,共40分) 1、发色团 2、非红外活性振动 3、费米共振 4、相关锋 5、饱和 6、屏蔽效应 7、磁等同核 8、化学位移 9、相对丰度10、麦氏重排 二、单选题(每题1分,共20分) 1、光量子的能量与电磁辐射的的哪一个物理量成正比() A频率 B波长 C周期 D强度 2、可见光区、紫外光区、红外光区和无线电波四个电磁波区域中,能量最大和最小的区域 分别为() A紫外光区和无线电波B紫外光区和红外光区

C可见光区和无线电波D可见光区和红外光区 3、紫外光谱的产生是由电子能级跃迁所致,能级差的大小决定了() A、吸收峰的强度 B、吸收峰的数目 C、吸收峰的位置 D、吸收峰的形状 4、紫外光谱是带状光谱的原因是由于() A、紫外光能量大 B、波长短 C、电子能级跃迁的同时伴随有振动及转动能级跃迁的原因 D、电子能级差大 5、化合物中,下面哪一种跃迁所需的能量最高?() A、ζ→ζ﹡ B、π→π﹡ C、n→ζ﹡ D、n→π﹡ 6、n→π﹡跃迁的吸收峰在下列哪种溶剂中测量,其最大吸收波长最大() A、水 B、甲醇 C、乙醇

D、正已烷 7.下列化合物,紫外吸收λmax值最大的是() A、B、C、D、 8、CH3-CH3的哪种振动形式是非红外活性的() A、νC-C B、νC-H C、δas CH D、δs CH 9、化合物中只有一个羰基,却在1773cm-1和1736cm-1处出现两个吸收峰这是因为:() A、诱导效应 B、共轭效应 C、费米共振 D、空间位阻 10、某化合物在1500~2800cm-1无吸收,该化合物可能是()A烷烃 B烯烃 C芳烃D炔烃 11、化合物CH3-CH=CH-CH=O的紫外光谱中,λmax=320nm(εmax=30)的一个吸收带是() A K带 B R带

波谱解析试题及答案

波普解析模拟题(三) 一、名词解释(5*4分=20分) 1.化学位移 2.助色团 3.扫频法 4.摩尔吸光系数 5.麦氏重排 二、选择题。( 10*2分=20分) 1.可分别用作红外光谱和质谱检测器的是:() A. 相板、光电倍增管; B. 光电管、Faraday杯; C. 热电偶、光电倍增管; D. 光电管、热电偶 2. 乙醇高分辨1HNMR谱图中,由低场到高场排列的质子种类及相应峰数(括号内数字为偶合分裂峰数)为:() A. CH3 (3)—CH2 (4)—OH(1); B. CH3 (4)—CH2( 3)—OH(1); C. OH(1)—CH2(4)—CH3(3); D. OH(3)—CH2(3)—CH3(4) 3. 红外光可引起物质的能级跃迁。() A、分子的电子能级的跃迁,振动能级的跃迁,转动能级的跃迁; B、分子内层电子能级的跃迁; C、分子振动能级及转动能级的跃迁; D、分子转动能级的跃迁。 4. 指出下列四种化合物中,哪一种化合物的分子离子峰为奇数() A、C6H6 B、 C6H5NO2 C、 C4H2N6O D、C9H10O2 5.下列羰基化合物中C=O伸缩振动频率最高的是:() A. RCOR’ B. RCOCl C. RCOF D. RCOBr 6. 下面化合物在核磁共振波谱(氢谱)中出现单峰的是:() A. CH3CH2Cl B. CH3CH2OH C. CH3CH3 D. CH3CH(CH3)2 7.某化合物在220-400范围内没有紫外吸收,该化合物可能属于哪一类()

A、芳香族化合物 B、含共轭双键的化合物 C、含羰基的化合物 D、烷烃 8. 一种能作为色散型红外光谱仪的色散元件材料为:() A、玻璃 B、石英 C、红宝石 D、卤化物晶体 9. 紫外-可见分光光度计法合适的检测波长范围为() A、400-800 nm B、200-800 nm C、200-400 nm D、10-1000nm 10. 在红外光谱中,羰基(O )的伸缩振动吸收峰出现的波数(cm-1)范围 是() A、1900-1650 B、 2400-2100 C、1600-1500 D、1000-650 三、简答题(5*5分=25分) 1.在NMR测量时,要求将样品高速旋转,为什么? 2.自旋偶合的条件? 3.红外吸收峰的数目理论上取决于分子振动自由度,而实际分数少于振动自由度,为什么? 4.核磁共振谱是物质内部什么运动在外部的一种表现形式? 5. 简述质谱碎裂的一般规律和影响因素。 四、推断题(15分+20分=35分) 1.某酮的分子式为C8H14O,其紫外光谱的λmax(248 nm(ε>104),试推出可能的结构式。 ) 2.根据图4-1~图4-4推断分子式为C11H20O4未知物结构

法律 第六章

《基础第六章》 一、单选题,以下各题有多个选项,其中只有一个选项是正确的,请选择正确答案 1.()是中国特色社会主义的最本质特征,是社会主义法治的最根本保证。 A.党的领导 B.人民当家做主 C.法律面前人人平等 D.法治与德治相结合 2.中国特色社会主义法律体系是以我国全部现行法律规范按照一定的标准和原则划分 为不同的法律部门,并由这些法律部门所构成的具有内在联系的统一整体。下列选 项中属于独立法律部门的是()。 A.民法商法 B.公司法 C.商法 D.知识产权法 3.修改宪法的权力,只能由( )行使。 A.中华人民共和国主席 B.全国人民代表大会常务委员会 C.全国人民代表大会 D.国务院 4.我国立法法明文规定,限制公民人身和财产权利的法律必须由()制定,行政 机关即政府不得制定限制公民人身或财产权利的法规。 A.国家立法机关 B.人民法院 C.省人民政府 D.国务院 5.中国特色社会主义法律体系是由多个法律部门、多个层次的法律规范构成的有机统 一的整体,其中作为中国特色社会主义法律体系主干的是( )。 A.行政法规 B.地方性法规 C.法律 D.宪法 6.( )规定国家的根本制度和根本任务,具有最高法律效力,是其他法律的立法依据, 其他任何法律都不得与其相抵触。 A.宪法 B.行政法规 C.地方性法规 D.行政规章

7."法律不但由国家制定或认可,而且由国家保证实施",这句话说明了法律具有 ()。 A.有阶级性 B.上层建筑的特点 C.反映统治阶级意志的特质 D.国家强制性 8.下列程序法中,体现了"民告官"的法律救济制度的是( )。 A.行政诉讼 B.仲裁调解 C.刑事诉讼 D.民事诉讼 9.关于"依法治国",下列哪一选项是错误的?() A.依法治国以国家法律体系的健全、完善、规范、系统、协调为必要条件 B.依法治国的实现,必须以规范和制约公权力为前提,做到职权法定、有权 必有责、用权受监督、违法受追究 C.依法治国应当树立宪法法律的权威 D.依法治国依赖于法制完备,法律健全完备了,法治就实现了 10.国家的最高监督权由( )行使。 A.最高人民检察院 B.全国人民代表大会 C.最高人民法院 D.全国人民代表大会常务委员会 11.法律发展经历了不同的阶段,在下列社会形态的法律中,首次强调实质上的自由与 平等的是( )。 A.封建制法律 B.社会主义法律 C.奴隶制法律 D.资本主义法律 12.中国特色社会主义法律体系是由多个法律部门组成的有机统一整体,其中居于统帅 地位的法律部门是( )。 A.刑法 B.宪法 C.行政法 D.民法商法 13.作为我国社会主义政治文明的重要制度载体和我国的根本政治制度的是()。 A.社会主义制度 B.社会主义公有制 C.人民代表大会制度

波谱分析考试题库答案

第二章:紫外吸收光谱法 一、选择题1—7 (1)、(3)、(4)、(1)、(1)、(2)、(2) 二、解答及解析题 20.1.2×1015Hz,40×103cm-1,4.96eV,114.6kcal·mol-1; 0.75×1015Hz,25×103cm-1,3.10eV,71.6kcal·mol-1 21. 827nm,12.1×103cm-1;200nm,50×103cm-1 22.(1)152kcal·mol-1;(2)102.3 kcal·mol-1 24. π→π*, n→π* 25. (a)(b) 26. B,K,R,苯环及含杂原子的不饱和基团,π→π*, n→π* 29. (1)K,R;(2)K,B,R;(3)K,B;(4)K,B,R 30. (A)CH =CH-COR;(B)RCOR' 2 31. (1)267nm;(2)225nm;(3)349nm;(4)237nm 32. (1)270nm(2)238nm(3)299nm 34. 36. T=0.244,A=0.613 37. 1.836×10-5mol·L-1 39. ε=1.08×104,3.26% 40. 乙酰水杨酸83.5%,咖啡因6.7%

第三章红外吸收光谱法 一、选择题 1—5 (1)、(3)、(4)、(2)、(4) 二、解答及解析题 20. C2H5OOC-CH2-CN 21. 22. A:(CH3)3C-C(C2H5)=CH2B: C:(CH3)3C-CBr(C2H5)CH3D:(CH3)3C-C(CH3)=CHCH3E:(CH3)3CCOCH3 23. 是;C2H6;两个甲基 24. A;B:C: D:E: 25. CH3CH2CH2NO2 26. 27. CH3COOC2H5 28. A:B: 29.A:B: C:D: E: 30. CH3COOCH=CH2

波谱解析试题(打印)

波谱解析试题A 二、选择题。( 10*2分=20分) 1.化合物中只有一个羰基,却在1773cm-1和1736cm-1处出现两个吸收峰 这是因为:(C) A、诱导效应 B、共轭效应 C、费米共振 D、空间位阻 2. 一种能作为色散型红外光谱仪的色散元件材料为:(D ) A、玻璃 B、石英 C、红宝石 D、卤化物晶体 3.预测H2S分子的基频峰数为:( B) A、4 B、3 C、2 D、1 4.若外加磁场的强度H0逐渐加大时,则使原子核自旋能级的低能态跃迁到高能态所需的能量是如何变化的:( B ) A、不变 B、逐渐变大 C、逐渐变小 D、随原核而变 5.下列哪种核不适宜核磁共振测定:(A) A、12C B、15N C、19F D、31P 6.在丁酮质谱中,质荷比质为29的碎片离子是发生了(B) A、α-裂解 B、I-裂解 C、重排裂解 D、γ-H迁移 7.在四谱综合解析过程中,确定苯环取代基的位置,最有效的方法是(C) A、紫外和核磁 B、质谱和红外 C、红外和核磁 D、质谱和核磁 8.下列化合物按1H化学位移值从大到小排列 ( C ) a.CH2=CH2 b.CH CH c.HCHO d. A、a、b、c、d B、a、c、b、d C、c、d、a、b D、d、c、b、a 9.在碱性条件下,苯酚的最大吸波长将发生何种变化? ( A ) A.红移 B. 蓝移 C. 不变 D. 不能确定 10.芳烃(M=134), 质谱图上于m/e91处显一强峰,试问其可能的结构是: ( B ) A. B. C. D. 三、问答题(5*5分=25分) 1.红外光谱产生必须具备的两个条件是什么?

第六章:宪法(选举制度)

宪法练习题(第六章) 一、名词解释 选举制度 直接选举 间接选举 预选 二、选择题 (一)单选题 1.根据选举法,省、自治区、直辖市,设区的市、自治州的人民代表大会的代表,由_____产生。 A.上级任命B.下级委派C.直接选举D.间接选举 2.我国现行选举法颁布于()年。 A. 1953 B.1979 C.1982 D.1995 3.根据我国现行选举法规定:全国人大代表名额不超过()。 A.3000人B.2000人C.1500人D.1000人 4. 根据《选举法》的规定,关于选举机构,下列哪一选项是不正确的? A.特别行政区全国人大代表的选举由全国人大常委会主持 B.省、自治区、直辖市、设区的市、自治州的人大常委会领导本行政区域内县级以下人大代表的选举工作 C.乡、民族乡、镇的选举委员会受不设区的市、市辖区、县、自治县人大常委会的领导 D.选举委员会对依法提出的有关选民名单的申诉意见,应在3日内作出处理决定 5. 关于全国人大代表和省、自治区人大代表的名额,按照农村每一代表所代表的人口数四倍于城市每一代表所代表的人口数的原则分配的规定,下列哪一说法是错误的?() A.我国选举权的平等原则既着重于机会平等,也重视实质平等 B.我国选举法自颁布以来进行了四次修改,每一次都依据当时城乡人口变化情况对城乡代表名额的分配比例进行了调整 C.“实行城乡按相同人口比例选举人大代表”是我国选举制度发展的方向 D.我国选举法的修改反映了城镇化发展的客观趋势 6. 根据《宪法》和《选举法》规定,下列哪一选项是正确的?() A.选民登记按选区进行,每次选举前选民资格都要进行重新登记

B.选民名单应在选举日的十五日以前公布 C.对于公布的选民名单有不同意见的,可以向选举委员会申诉或者直接向法院起诉 D.法院对于选民名单意见的起诉应在选举日以前作出判决 7. 乡、民族乡、镇设立选举委员会主持本级人民代表大会的选举。根据选举法,该委员会受下列哪一机构的领导? A.乡、民族乡、镇的人民代表大会 B.不设区的市、市辖区、县、自治县的人大常委会 C.乡、民族乡、镇的人民代表大会主席团 D.不设区的市、市辖区、县、自治县的选举委员会 8. 某选区选举地方人民代表,代表名额2人,第一次投票结果,候选人按得票多少排序为甲、乙、丙、丁,其中仅甲获得过半数选票。对此情况的下列处理意见哪一项符合法律的规定? A.宣布甲、乙当选 B.宣布甲当选,同时以乙为候选人另行选举 C.宣布甲当选,同时以乙、丙为候选人另行选举 D.宣布无人当选,以甲、乙、丙为候选人另行选举 9.某选区共有选民13679人,高先生是数位候选人之一。请问根据现行宪法和选举法律,在下列何种情况下,高先生可以当选? A.参加投票的人数为6835人,高获得选票6831张 B.参加投票的人数为6841人,高获得选票3421张 C.参加投票的人数为13643人,高获得选票6749张 D.参加投票的人数为13685人,高获得选票13073张 (二) 多选题 1、我国选举法规定,由选民直接选举的人大代表候选人,可以由哪些方式提名推荐()? A、选民5人以上联名推荐 B、人民代表10人以上联名推荐 C、各政党、各人民团体单独提名推荐 D、各政党、各人民团体联合提名推荐 2、下列选项中,有关精神病患者选举权的论述,哪些是正确的()? A、根据我国宪法规定,年满18岁的精神病患者是选举权和被选举权的主体

相关文档