语言FPGA–(verilog)行为级描述和结构级描述

熟悉Objective-C#

1、在用verilog描述电路时,既好开展行为级的叙说,也足以展开结构级的描述。

第一条:Objective-C的起源

OC用”消息结构”而休”函数调用”,Objective-C语言由Smalltalk演化而来,消息以及函数调用之间的分看上去就如这样:

//消息结构(Objective-C)
Object *obj = [Object new];
[obj performWith:parameter1 and:parameter1];

//函数调用(C++)
Object *obj = new Object;
obj->perform(parameter1,parameter2);

要害区别在:使用信息结构的语言,其运作时所应尽之代码由运行环境来控制;而采取函数调用的语言,则由于编译器决定。

      ①行为级描述:侧重针对模块行为功能的抽象描述。

要点

  • Objective-C也C语言的增补加了面向对象特性,是那最佳。Objective—C使用动态绑定的音结构,也就是说,在运转时才见面检讨对象类型。接收一久消息随后,究竟应执行何种代码,由运行环境一旦休编译器来控制。
  • 亮C语言的主导概念有助于勾勒好Objective-C程序。尤其要掌握内存模型和指针。

      ②结束构级描述:侧重针对模块内部结构实现的切实可行讲述。

亚长:在类的峰文件被尽量少引入其他头文件

乃恐怕创造了名为也EOCPerson和EOCEMPloyer这片单近乎,想给每个EOCPerson实例都发一个EOCEMPloyer常见的点子是以EOCPerson.h中进入下面这行:

#import "EOCEMPloyer.h"

这种艺术中,但是不够优雅。在编译一个以了EOCPerson类的文书时,不欲懂得EOCEmplyer类的全方位细节,只需要明白有一个类名为EOCEmplyer就好。所幸有只法子能拿及时同一场面告诉编译器:

@class EOCEmployer;

立即名叫”向前声明”该类。而EOCPerson类的兑现公文则需引入EOCEployer类的峰文件,因为若要使用后者,则须掌握那个持有接口细节。
用引入头文件的机尽量延后,只有真正有需要经常才引入,这样就可以削减类似的使用者所用引入的头文件数量。假设本例把EOCEmployer.h引入到EOCPerson.h,那么要引入EOCPerson.h,就会见一如既往连引入EOCEployer.h的备情节。此过程要连下去,则只要引入博向用不至的内容,这自然会多编制时。向前声明也化解了零星单近乎互相引用的问题。

一旦如声明你勾勒的类遵从某协议(protocol),那么该谋要有总体定义,且不能够应用上声明。向前声明只能告诉编译器有有协议,而这时候编译器却如明白该谋中定义的点子。此时在.h中#import是免不了的。鉴于此,最好拿共商单独在一个匹文件被。要是把协议在有大的峰文件中,那么要引入这协议,就肯定会引入那个头文件被的全部内容,就会见出互动依赖性的问题,而且还见面加编译时间。

可是稍微协议,比如代理协议,就无须单独写一个条文件了。在这种情况下协议只有与受协议委托的近乎位居一块儿定义才有含义。

2、行为级描述

要点

  • 除非实在有要,否则不要引入头文件。一般的话,应该以有类的头文件被采用上声明来提及别的类,并当落实文件中引入那些看似的头文件。这样做可以尽量降低类之间的耦合。
  • 有时无法以上声明,比如声明某个类以某起协议。应竭尽将“该类遵循某协商”的当下漫漫声明移至”class-continuation
    分类”中。如果大的话,就将协商放到一个峰文件被,然后将该引入。

     ①画述体的组合

老三长条:多为此配面量语法,少用同的对等价格的办法

动用字面量语法可以减少代码长度,使其更加易读。例如:

NSNumber *intNumber = @1;
NSArray *animals = @[@"cat",@"dog",@"mouse",@"badger"];
NSDictionary *personData = @{@"firstName":@"Matt",@"lastName":@"Galloway"};

频繁组取某个下标所对应的靶子,例如:

NSString *dog = animals[1];

字典按照特定键访问该价,例如:

NSString *lastName = personData[@"lastName"];

修改只是变数组与字典内容之正规化做法是:

mutableArray[1] = @"dog";
mutableDictionary[@"lastName"] = @"Galloway";

只是,用配面量语法创建数组时一旦留意,若数组元素对象中发生nil,则会弃来很,抛来底怪会是这样:

***Terminating app due to uncaught exception
'NSInvalidArgumentException,'reason:'***
- [__NSPlaceholderArray initWithObjects:count:]: attempt to
insert nil object from objects[0]'

之所以数组一样,用配面量语法创建字典时为发出此题目,那就是若出价也nil,便会扔来老。但当下为是个好事。例如创建字典时不小心用了空值对象,那么“dictionaryWithObjectAndKeys:”方法就是见面以首个nil之前住,并丢掉来十分,这样有助于差错。

      ※由多个互相运行的进程块组成。

要点

  • 当采取字面量语法来创造字符串,数值,数组,字典。与健康办法相比,这样做进一步简洁。
  • 应通过去下标操作来访问数组下标或字典中的键所对应的素。
  • 就此配面量语法创建数组或字典时,若值中产生nil,则会丢来特别。因此,务必确保值里无含有nil。

      ※过程块由过程语句(initial和always)和片语句(串行块begin-end和相块fork-join)组成。

      ※块语句由过程赋值语句和高级程序报句构成。

            ◇过程赋值语句:阻塞与非阻塞式赋值。

            ◇高级程序报句:C语言如if-else、case、while、wait等组合。

     ②行为级描述模块的咬合图

    语言 1

 Verilog Code 

//例:全加器行为级描述
module fadder(sum,a,b,cin);//模块定义
output sum,cout;//端口声明
input a,b,cin;//端口声明
reg sum,cout;//数据类型声明

always @(a or b or cin)//过程语句
   
    begin//高级程序报句
      sum=a^b^cin;//过程赋值语句
      cout=(a&b)|(b&cin)|(a&cin);//过程赋值语句
    end
endmodule//结束行

 

3、结构级描述

    ①写述体的结合

        ※门级描述:对由基本逻辑门(and、or、not、xor等)互连而变成的具有自然作用的电路模块的描述。

        ※结构级描述:将上述逻辑门用一个个功能模块替换,就展开及一般意义的结构级描述。

    ②完构级描述模块

      例:全加器门级

      语言 2

 Verilog Code 

//例:全加器结构级描述
module fadder(sum,a,b,cin);//模块定义
    output sum,cout;//端口声明
    input a,b,cin;//端口声明
    /*******门级互连*****/
    xor U0(sum,a,b,cin);
    and U1(net1,a,b);
    and U2(net2,a,cin);
    and U3(net3,b,cin);
    or U4(cout,net1,net2,net3);
endmodule//结束行

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图